Kosakata yang cocok saat membantu programmer pemula

9

Saya menemukan diri saya membantu programmer pemula relatif sering; menjelaskan mengapa kode mereka tidak berfungsi ketika mereka bertanya, menyarankan solusi dan sejenisnya. Orang-orang yang saya bantu memiliki pendidikan formal dalam pemrograman dari modul tingkat sarjana tahun pertama, di Jawa, tetapi saya merasa seperti saya tidak dapat berkomunikasi dengan mereka dengan baik.

Sebagai contoh: seseorang mungkin menulis fungsi tetapi tidak mengerti mengapa itu tidak dijalankan, tidak menyadari bahwa mereka lupa menyebutnya. Jika saya menggunakan frase seperti "(make a) call (to) the function/it"dan "pass it the.."saya mendapatkan tampilan kosong.

Maka proses normal saya adalah menemukan beberapa tempat dalam kode mereka di mana mereka memanggil fungsi dari bahasa, dan memberi tahu mereka bahwa mereka dapat memanggil fungsi mereka sendiri dengan cara yang sama seperti mereka memanggil fungsi lain ini. Kadang-kadang bahkan yang terlihat kosong.

Apakah ada potongan kosakata lain yang lebih cocok untuk (lebih baik?) Membantu programmer pemula? Atau ini bukan masalah komunikasi?

Andy Hunt
sumber
5
Pengguna spreadsheet tahu cara memanggil suatu fungsi. Banyak yang bisa menulis sendiri. Ada sesuatu yang salah secara mendasar di sini.
JeffO
@ Jeffe Aku merasa ada sesuatu yang salah, tetapi ingin memberikan modul itu dan orang-orang itu manfaat dari keraguan
Andy Hunt
7
Tunggu apa? Pemrogram yang bekerja dengan Anda tidak tahu apa artinya 'memanggil fungsi' dan menyampaikan argumen? Itu adalah dasar yang Anda bisa pergi tanpa menggambar mereka dan menggunakan metafora yang melibatkan kucing dan anjing. Ini melampaui masalah komunikasi dan sayangnya mungkin masalah dengan kurangnya pengetahuan. Saya membaca ulang pertanyaan Anda dan sepertinya mereka pada dasarnya mengambil kursus tingkat pengantar dan hanya itu?
wkl
3
@AndyBursh: bagaimana siswa seperti itu bisa sampai ke tahun kedua? Berharap mereka tidak lulus ujian dan memilih pekerjaan di luar pengembangan perangkat lunak.
Doc Brown
3
Mungkin boneka kaus kaki akan membantu
MattDavey

Jawaban:

15

Mereka harus mempelajari istilah yang tepat pada akhirnya, semakin cepat semakin baik.

Gunakan dengan benar, dan jelaskan setiap kali Anda mendapat tatapan kosong. Cobalah mengirim sinyal yang tepat, bahwa boleh saja bertanya tentang apa pun yang tidak mereka pahami - satu-satunya pertanyaan bodoh adalah yang tidak Anda tanyakan.

tammmer
sumber
2
Saya akan memposting tanggapan yang hampir persis sama dengan yang Anda muat. :) +1
Tom Squires
Jangan membawa penjelasan ke level mereka, naikkan level mereka.
Bent
2

Secara umum

Ketika seseorang tidak memahami Anda, Anda memiliki dua alternatif:

  1. Adaptasikan kosakata sesuai dengan apa yang diketahui atau tidak,

  2. Jelaskan pada orang itu istilah yang tidak dia mengerti.

Kasus pertama bekerja dengan baik ketika orang tersebut sudah tahu kosa kata teknis dengan cukup baik, tetapi tidak cukup, atau tidak dalam domain Anda.

Misalnya, Anda dapat menggunakan metode istilah dalam C # atau Java, dan orang yang sebagian besar bekerja dengan bahasa lain tidak akan memahami istilah ini. Anda kemudian akan menjelaskan bahwa dalam C # atau Java, metode merujuk ke apa yang biasanya kita sebut fungsi (misalnya dalam C), dan bahwa tidak ada yang namanya fungsi di C # atau Java . Dalam PHP , misalnya, baik metode dan fungsi ada, dan memiliki arti yang berbeda . Jika perbedaannya terlalu menyakitkan bagi orang tersebut, Anda akan berbicara tentang fungsi demi kesederhanaan.

Dalam kasus tepat Anda, Anda hampir tidak dapat memilih yang pertama: "melakukan panggilan ke fungsi" tidak dapat diformulasikan ulang dengan cara yang lebih sederhana. Panggilan adalah panggilan. Anda tidak dapat menyederhanakan ini lebih lanjut.

Ini berarti Anda harus memilih cara kedua: jelaskan kepada orang tersebut setiap istilah teknis.

  1. Baik mengarahkan orang ke kamus atau Wikipedia, yang bekerja dengan sangat baik untuk konsep dasar dan terminologi.

    Saya akan memilih ini untuk istilah yang umum digunakan . Sebagai contoh, saya lebih suka mengundang orang itu untuk membaca Wikipedia untuk memahami apa itu polimorfisme, atau apa itu kovarian dan contravariance. Istilah-istilah itu sudah dijelaskan dengan sangat baik, jadi tidak perlu menemukan kembali kemudi di sini.

  2. Atau jelaskan dengan kata-kata Anda sendiri .

    Saya akan memilih ini untuk istilah yang spesifik untuk konteks dan / atau menerima berbagai definisi . Sebagai contoh, Wikipedia tidak terlalu membantu untuk memahami visi Microsoft tentang komputasi awan, dan saya lebih suka menjelaskan sendiri apa itu cloud kepada seseorang yang akan bekerja pada aplikasi Windows Azure.

Dalam kasus khusus Anda

Orang yang Anda ajak bicara kurang memiliki konsep dan istilah paling dasar yang digunakan dalam pemrograman. Mereka tidak dapat melanjutkan tanpa mempelajari kosa kata inti ini , karena mereka tidak dapat berkomunikasi sama sekali : mereka tidak dapat membaca buku tentang pemrograman atau blog, mereka tidak dapat mendengarkan kolega mereka, dan mereka bahkan tidak dapat benar-benar mengajukan pertanyaan tentang Stack Exchange situs web, karena tidak ada yang akan mengerti apa yang mereka tanyakan.

Dalam kasus Anda, daripada mencari kosa kata yang cocok, saya akan menghabiskan beberapa hari atau minggu mengajar mereka beberapa konsep pemrograman inti dan istilah yang umum digunakan . Setelah beberapa hari, Anda akan dapat berbicara dengan mereka tanpa harus terus "menggambar mereka dan menggunakan metafora yang melibatkan kucing dan anjing" .

Arseni Mourzenko
sumber
1

Alih-alih fungsi , mulailah dengan subrutin . Beri tahu mereka bahwa sebuah program hanyalah daftar instruksi, sebuah resep untuk memberi tahu komputer bagaimana melakukan sesuatu. Dan itu sedang dijalankan satu demi satu instruksi (dengan kemungkinan untuk membuat beberapa langkah secara paralel, tetapi lebih lanjut tentang itu nanti).

Beberapa tugas cukup umum dan berulang, jadi akan sangat buruk jika kita harus selalu menuliskannya lagi dan lagi, jadi kita menulisnya sekali saja dan membuat "program yang lebih kecil" darinya - sebuah subrutin , yang dapat digunakan kembali oleh bagian lain dari program. Agar dapat menjalankannya lebih dari satu kali, kami memberinya nama yang berarti dalam program kami. Dan kemudian kita dapat menggunakan nama itu ketika kita ingin menjalankan "program kecil" ini sebagai bagian dari yang lebih besar, dengan memanggilnya dengan nama itu.

Memanggil subrutin seperti memanggil iblis yang tahu bagaimana melakukan tugas itu, dengan nama iblis itu. Jadi ketika kita ingin melakukan tugas tertentu dalam program kita, kita menulis "panggil iblis bernama Argoth", dan iblis muncul dan melakukan tugas untuk kita seperti yang kita perintahkan kepadanya untuk dilakukan, dan kemudian pergi dan kita dapat melanjutkan pekerjaan.

Terkadang iblis membutuhkan beberapa informasi tambahan yang tanpanya dia tidak dapat memutuskan tugas mana yang harus dilakukan, atau apa yang sebenarnya kita inginkan darinya. Misalnya jika iblis itu seharusnya membangun sebuah kastil, ia mungkin perlu tahu di mana ia seharusnya membangunnya, atau seberapa besar , dll. Itu adalah argumen yang diberikan kepada iblis ... Maksudku, subrutin, yang sekarang menjadi parametrized .

Parameter adalah potongan-potongan informasi yang hilang, tetapi diperlukan, untuk melakukan tugas. Mereka mengubah apa yang bisa dilakukan subrutin sedikit. Itu seperti slot kosong dalam resep yang perlu diisi sebelum kita bisa menjalankannya.

Argumen , di sisi lain, adalah informasi aktual (nilai) yang kami berikan untuk parameter ini.

Adapun eksekusi paralel, kita bisa memikirkannya dengan cara ini: selalu ada seseorang (atau sesuatu ) yang menjalankan program (daftar instruksi). Entah itu manusia lain (tahukah Anda bahwa "komputer" pernah menjadi nama untuk seseorang yang melakukan perhitungan?), Atau sebuah mesin. Suatu program hanyalah daftar instruksi, tidak bekerja dengan sendirinya. Pasti ada seseorang atau sesuatu yang akan melakukan proses komputasi(lakukan tindakan ini dari daftar). Dan kadang-kadang tindakan ini dapat dilakukan secara paralel - kita dapat mendistribusikan salinan daftar ke beberapa orang dan membiarkan masing-masing dari mereka melakukan serangkaian tugas yang berbeda dari daftar, selama mereka tidak saling mengganggu, atau jangan Saya tidak harus menunggu hasil pekerjaan orang lain. Itu multithreading untuk Anda;)

Adapun perbedaan antara fungsi dan subrutin (juga disebut prosedur ), perbedaan yang biasa adalah bahwa fungsi dipanggil untuk menghitung nilai tertentu yang dikembalikan sebagai hasil dari pelaksanaannya, sementara prosedur dijalankan hanya untuk bersenang-senang;) AKA karena "efek samping" mereka - hanya demi operasi yang dilakukan dari daftar.

Tetapi jika memanggil suatu prosedur atau fungsi menyebabkan beberapa masalah pada awalnya, Anda dapat menggunakan istilah lain yang dulunya populer: melompat . Seseorang dapat melompat ke subrutin, yang berarti bahwa Anda berhenti mengeksekusi apa pun yang Anda lakukan sekarang, dan "melompat" ke tempat lain dalam daftar (atau daftar lain apa pun) - subrutin - untuk melakukan tugasnya. Kemudian, ketika Anda selesai, Anda "melompat kembali" - yaitu, Anda kembali ke tempat Anda telah terganggu, sehingga Anda bisa melanjutkan dengan tugas Anda sebelumnya. Perbedaan antara memanggil dan melompat adalah bahwa sekarang Anda adalah iblis.

Adapun metode yang disebutkan di sini oleh seseorang, atau fakta bahwa beberapa bahasa "tidak memiliki fungsi, hanya metode" - itu tidak sepenuhnya benar, karena metode adalah fungsi! - jenis khusus dari mereka: mereka adalah fungsi yang digunakan untuk mengambil beberapa informasi yang dikemas di dalam suatu objek, atau beroperasi pada mereka. Mereka adalah "metode operasi pada data itu". Nama ini berasal dari paradigma berorientasi objek di mana data tertutup dengan objek dan tidak dapat dioperasikan secara langsung, hanya dengan fungsi khusus yang disebut "metode".

Suatu metode khusus dalam cara lain tertentu: ia harus mengetahui objek tertentu mana yang seharusnya dioperasikan / dipanggil (objek "ini"). Itu sebabnya metode biasanya dihiasi dengan parameter tersembunyi tambahan yang menyimpan informasi tentang objek yang telah dipanggil (pointer "ini"). Ini menyulitkan cara fungsi dipanggil sedikit, tetapi ini merupakan "detail implementasi" yang tidak perlu dipusingkan oleh programmer, asalkan dia tahu apa yang dia lakukan.

BarbaraKwarc
sumber