Apa yang Anda lakukan ketika Anda tampaknya tidak mengerti bagian tertentu dari pemrograman? [Tutup]

11

Saya belajar bahasa baru saat saya mulai, saya menulis kode untuk program yang sangat dasar dalam berbagai bahasa, dan saya pergi ke kelas. Saya sudah membaca buku, artikel, pelajaran, video, apa saja, tapi sepertinya saya tidak bisa memahami hal-hal tertentu.

Misalnya saya tidak pernah mengerti petunjuk - apa yang mereka kuasai. (BUKAN BAGIAN DARI PERTANYAAN - retagging dengan "Pointer" tidak diperlukan ...)


Namun pertanyaan saya, bukan apa yang pointer lakukan, tetapi bagaimana saya bisa memahami hal-hal seperti itu? Jika, setelah membaca buku atau artikel tentang bagian pemrograman tertentu, dan saya tidak mengerti, apa yang harus saya lakukan? Menulis kode dalam fitur pemrograman tertentu pasti membantu, namun itu sebenarnya tidak banyak membantu. Bagian teoretis penting dalam pemahaman.

Bugster
sumber
11
Saya berharap saya bisa mengerti mengapa orang-orang kesulitan memahami petunjuk. Nama memberikan semua klarifikasi yang saya butuhkan.
ChaosPandion
1
Beberapa Computer Architecture 101kursus akan sangat membantu dalam memahami petunjuk. ... dan yang lainnya.
ZJR
6
Pertanyaannya bukan tentang petunjuk, ini pertanyaan umum, tapi terima kasih.
Bugster
2
Saya tidak berpikir mengingatkan orang tentang satu contoh yang dia akui mempunyai masalah dengan akan membantunya sedikit pun menuju pencerahan ... Meskipun cukup sering dilakukan, itu akan mencegahnya meminta bantuan karena takut dipukul membeli sebuah serangkaian panjang jawaban pelit dan pedantic dan menurunkan komentar.
haylem
4
@FrustratedWithFormsDesigner: "Bagaimana saya belajar belajar", saya pikir. Yang merupakan pertanyaan yang valid dan berharga.
haylem

Jawaban:

22

Jika Anda kesulitan memahami konsep abstrak, turun satu tingkat saja. Jika Anda tidak bisa mendapatkan pointer di C - turun ke level perakitan. Masih mengalami masalah? Pelajari lebih lanjut tentang perangkat keras, sampai ke gerbang logika.

Logika SK
sumber
2
+1: Bekerja untuk saya. Saya mengalami masalah dengan pointer dalam ALGOL sampai saya mulai menulis bahasa assembly PDP-10.
kevin cline
2
Ide yang menarik. Meskipun saya akan menunjukkan bahwa menulis dan menjalankan program dalam perakitan terlalu jauh. Menurut pendapat saya, melampaui titik pemahaman dasar tidak perlu pada tingkat ini. Tapi hei, jika itu yang ingin Anda lakukan, lebih banyak kekuatan untuk Anda!
Lapangan Bryan
1
@ George Bailey, ya, mungkin agak berlebihan untuk perakitan nyata dan perangkat keras nyata. Itu sebabnya ada MIXdan arsitektur mainan serupa lainnya di sekitar. Untuk bagian perangkat kerasnya sama - ada banyak inti CPU mainan sederhana untuk dipelajari.
SK-logic
+1: Gagasan yang menarik dan kemungkinan besar akan berhasil, tetapi (untuk menggunakan kembali contoh kasus OP) turun dari tingkat entri C ke tingkat entri ASM mungkin merupakan jalan yang panjang, keras dan berliku untuk pemula, mungkin akan mengambil lebih banyak waktu daripada yang diantisipasi oleh kursus / proyek / lainnya. Ini juga dapat mengasingkan orang-orang yang kurang termotivasi (yang mungkin bukan kasus OP, tetapi dari perspektif tingkat yang lebih tinggi, ini akan menghalangi banyak siswa yang mengambil kelas CS dan perlu memahami ini tetapi tidak peduli tentang CS itu sendiri) . Tapi pastinya ide yang bagus untuk jangka panjang.
haylem
Ya, gelar CS saya membahas hal ini dalam Arsitektur Komputer. Kami belajar tentang gerbang logika, menggabungkannya dalam simulator logika untuk membangun adders, ALU, dan akhirnya CPU RISC yang sangat sederhana. Kami juga menulis program sederhana dalam perakitan MIPS. Ini semua diperlukan untuk gelar BS dalam ilmu komputer, dan tidak benar-benar dianggap sebagai salah satu kursus "weeder", jadi saya tidak berpikir itu di atas atau terlalu jauh.
Adam Jaskiewicz
17

Siklus Hidup Pembelajaran Incremental Pendek

  1. Coba dan gagal memahami konsepnya.
  2. Cobalah untuk mengimplementasikan sesuatu yang menggambarkan konsep tersebut.
  3. Cobalah untuk menggambarkan konsep di papan tulis (jika ada)
  4. Cobalah membicarakannya dengan seseorang yang mengerti konsep itu.
  5. Cobalah untuk menjelaskan bagian-bagian yang Anda pahami kepada orang ini (kadang-kadang membantu melihat cahaya).
  6. Mulai kembali dari 1 hingga Anda akhirnya dapat menjelaskannya kepada seseorang yang berada dalam kondisi 1 dan membuatnya mendapatkannya.

Langkah tambahan

Untuk digunakan dengan hati-hati.

  • Cari bahan bacaan dan pelajaran tambahan :
    • online (mesin pencari populer dan Wikipedia adalah teman baik),
    • di perpustakaan (jangan meremehkan buku, dan orang-orang yang pergi ke sana untuk membacanya),
    • pada sistem Anda (dokumentasi dibundel dan doc alat sering mengasingkan pada awalnya, tetapi Anda terbaik goto-teman setelah beberapa saat. belajar untuk menemukan apa yang Anda cari dalam mereka misalnya man -k, apropos, dll ...)
  • Coba baca beberapa kode menggunakan konsep ...
  • ... dan melangkahi kode dengan debugger.

Ini adalah sneakier karena Anda perlu mengevaluasi kembali diri Anda untuk memastikan Anda melakukannya dengan benar. Pendampingan langsung oleh orang yang berpengetahuan luas biasanya lebih baik, diikuti tentu saja dengan validasi Anda sendiri atas pengetahuan yang diperoleh dengan menerapkan kembali apa yang baru saja Anda pelajari (dan kemudian mencoba mendorongnya selangkah lebih maju dan mempelajari konsep tingkat tinggi yang dibangun di atas dari yang itu, misalnya daftar tertaut untuk pointer Anda).

Kredit: Nupul (untuk diagram)

haylem
sumber
2
+1! Bolehkah saya menambahkan - sebelum berbicara, coba Papan Tulis untuk 'membuat sketsa' (atau cukup gunakan papan tulis saat berbicara dengan seseorang :)
PhD
1
+1 untuk "melangkah melalui kode dengan debugger". Saya telah belajar tentang banyak konsep dengan alat debugging sederhana ...
funkymushroom
@Nupul: saran bagus, ditambahkan.
haylem
@funkymushroom: Memang, meskipun saya akan mengatakan bahwa biasanya Anda tidak benar-benar mempelajari konsepnya dengan cara ini. Namun itu membantu untuk "mengangkat kabut" ketika itu tepat di depan Anda dan Anda hanya tidak bisa melihat potongan-potongan itu bersatu, karena Anda terlalu fokus pada sesuatu atau pikiran Anda digoreng. Saya merasa lebih membantu untuk memahami masalah algoritma umum daripada konsep umum.
haylem
Berbicara dengan papan tulis melakukannya untuk saya.
Peter
5

Dalam pengalaman saya, ini semua tentang input dan umpan balik. Anda ingin mendapatkan input dalam bentuk sebanyak yang Anda bisa, dan umpan balik atas kesalahan Anda secepat mungkin.

Dalam pengalaman saya, gelar CS saya sangat kering, sangat formal, dan sama sekali tidak berharga untuk mengajar pemrograman apa pun. Saya menghadiri dua-tiga kuliah seminggu dan jika Anda tidak mendapatkannya maka itu cukup banyak- dosen memiliki kelas lain untuk mengajar dan tidak bisa membantu Anda. Dan, anehnya, bahwa satu orang memahaminya dengan cara tertentu, dan dia akan mengajarkannya dengan cara tertentu dan hanya itu, jadi jika Anda tidak berpikir seperti dia, Anda tidak akan pernah mendapatkannya. Yang lebih buruk adalah bahwa karena dia mungkin memahami satu miliar konsep terkait lainnya, dia kemungkinan akan membingkainya dalam hal konsep-konsep lain, yang mungkin jauh di atas kepala Anda atau bahkan tidak dalam materi kursus.

Saya pergi ke Stack Overflow dan bertanya di saluran obrolan C ++ dan mendapat lima penjelasan berbeda dalam lima menit. Mereka semua dirancang khusus untuk saya dan masalah persis yang saya miliki, jadi tidak mengherankan bahwa salah satu dari mereka memukul saya dan saya mendapatkannya. Tingkat di mana Anda bisa belajar dari mendapatkan umpan balik langsung dari banyak ahli jauh melebihi apa yang bisa Anda dapatkan dari sumber kertas kering.

Jadi idealnya, istirahat, dan kemudian Anda akan menemukan sekelompok kecil orang yang berpikiran sama yang tidak ada yang lebih baik untuk dilakukan dan mengobrol dengan mereka secara langsung. Omong-omong, Stack Overflow adalah tempat yang sangat baik untuk mendapatkan umpan balik pribadi berkecepatan tinggi seperti ini.

DeadMG
sumber
3

Tanpa urutan, buku, teman, dan membaca kode yang terdokumentasi dengan baik adalah sumber yang baik. Latihan adalah satu-satunya cara untuk belajar: cobalah menulis tes unit kecil. Misalnya, untuk pointer menulis kode yang berhubungan dengan string: membalikkan sebuah string, membalikkan setiap kata dalam sebuah string, menguji palindrome, mengganti huruf dengan angka ...

Ajukan pertanyaan di stackexchange ...;>

Sardathrion - menentang penyalahgunaan SE
sumber
2

Latihan membuat sempurna! (lebih baik sih). Teruslah mencoba dan coba gunakan sebanyak mungkin sumber dan indera yang berbeda:

Sumber: Buku, Internet, UserGroup, teman, Pembelajaran Video, menggunakan situs yang memungkinkan Anda menguji sedikit 'kode' seperti jsfiddle (kebanyakan html),
Rubular (ekspresi Ruby),
SQlzoo untuk mencoba sql,
jslint untuk javascript,
kode pad untuk banyak bahasa.

Untuk mengingat hal-hal abstrak pertimbangkan mneomik - Dokter menggunakannya!

Anggap diri Anda seorang pembelajar seumur hidup dan tetap rendah hati dan Anda bisa melangkah jauh.

bermutu rendah
sumber
1
+1 untuk "latihan". Tapi mnemonik, ugh. Mereka adalah penopang yang sangat tidak mencukupi yang tidak pernah bisa menggantikan, dan seharusnya tidak pernah menggantikan, pengertian. Bahkan, mereka menandai tidak adanya pemahaman. "Dokter menggunakannya" karena mereka dipaksa untuk mempelajari terlalu banyak fakta yang tidak berhubungan dalam waktu yang terlalu singkat. Kami perlahan-lahan mulai menyadari kenyataan bahwa pendidikan kami untuk dokter medis payah, dan AS misalnya sedang dalam perjalanan untuk mengubah bentuk pendidikan sepenuhnya. Mnemonik bukan solusi, mereka bagian dari masalah. Jika Anda menemukan diri Anda menggunakannya, Anda gagal untuk mengerti.
Konrad Rudolph
1

Anda harus mengubah fokus Anda untuk sementara waktu, bukan 5 menit. atau 5 jam ... Maksud saya kira-kira 1 hari tanpa melihat kode itu .... cukup santai saja ... baca sesuatu yang berbeda ...

Jika Anda harus memahaminya sekarang ... minta bantuan dari teman atau di sini =)

Gerep
sumber
1

Apa yang dilakukan orang lain di TI.

Saya menggunakan mesin pencari untuk mencari konsep-konsep terkait yang saya tidak mengerti sampai saya dapat meninjau kembali topik yang awalnya ingin saya pahami.

Kemungkinannya adalah Anda juga tidak sepenuhnya memahami tumpukan, tumpukan, variabel otomatis, proses kompilasi C ++, perakitan, memori yang dikelola vs memori yang tidak dikelola.

Kejelasan lebih lanjut tentang ini dan konsep-konsep terkait pointer lainnya mungkin akan membersihkan semuanya.

brian
sumber
1

Tidak ada cara cepat yang pasti untuk memahami suatu masalah. Keberhasilan Anda tergantung pada seberapa banyak konteks yang Anda bawa dalam studi Anda. Anda akan sangat beruntung menemukan seseorang yang akan menjelaskan berbagai hal dengan sudut pandang Anda. Seperti mesin Turing, siapa pun dapat mempelajari apa yang diketahui orang lain, dan hanya masalah kegigihan dan penerimaan bahwa frustrasi itu wajar.

Saya ingat kesulitan besar yang saya miliki dengan pointer. Tidak sampai seorang pria yang sangat sabar menjelaskannya kepada saya seolah saya benar-benar idiot sehingga saya memahaminya. Terkadang itulah yang dibutuhkan.

Kevin Hsu
sumber
1

Ini adalah masalah umum dalam belajar dan mengajar. Dan seperti yang orang lain katakan, tidak ada cara pasti untuk mengatasi ini. Ini adalah kebenaran mendasar yang kita semua pelajari secara berbeda karena otak kita terhubung secara berbeda dengan cara yang halus tetapi penting.

Belajar menghasilkan koneksi neuron baru. Tanpa terlalu banyak ke dalam ilmu saraf (yang saya tahu hampir tidak ada tentang), menghasilkan koneksi baru memerlukan berbagai jenis paparan konsep untuk orang yang berbeda. Coba berbagai sudut yang berbeda, baca / dengar / saksikan penjelasan yang berbeda. Praktek!

Jika itu tidak berhasil, kesampingkan masalahnya: Anda mungkin akan kehilangan bagian lain dari teka-teki yang, setelah diperoleh, membuat masalah aslinya tampak jelas.

Apakah Anda tahu aha ini ! momen? Inilah saat otak Anda baru saja membuat koneksi baru. Beginilah cara pembelajaran terjadi.

Kebetulan, setiap guru yang baik tahu ini. Pedoman untuk penulisan teknis sering menyatakan bahwa setiap konsep harus dijelaskan setidaknya dua kali, menggunakan kata-kata yang berbeda (dan mungkin dengan beberapa teks di antara mereka). Jika Anda memperhatikan, Anda akan dapat mengetahui bahwa semua penulis sains yang baik mengikuti aturan ini.

Sayangnya, terlalu banyak guru mengabaikannya, dan menjelaskan semuanya hanya sekali. Dan bahkan jika mereka berhasil menemukan penjelasan yang elegan dengan metafora yang hebat, ini tidak cukup.

Konrad Rudolph
sumber
0
  1. Baca dokumentasi yang relevan dan Google keraguan Anda.

  2. Cobalah menulis contoh kode, lihat apa yang mereka lakukan.

  3. Coba jalankan kode dalam debug, dan saksikan langkah demi langkah.

  4. Jika Anda masih tidak memahami perilaku tertentu, tanyakan pada seseorang, baik secara langsung atau di situs web seperti ini. Jika Anda mencoba semua hal di atas, Anda harus memiliki semua elemen untuk menyusun pertanyaan yang bagus. Jangan malu :)

Saya pikir cukup banyak apa yang orang lain lakukan.

jlemos
sumber
0

Teruslah mencari dan belajar. Saya memiliki masalah yang sama dengan berbagai aspek pemrograman lainnya. Tetapi berbicara dengan orang lain dan membaca artikel akhirnya mengarah ke momen "AHA". Secara umum, itu adalah beberapa posting Blog atau SO lainnya yang menyajikan informasi yang dapat saya ikuti.

Pada dasarnya, tetaplah mencari dan bersabarlah untuk pengertian yang akan datang.

Schleis
sumber