Bagaimana saya bisa mengajar orang yang cerdas, tanpa pengalaman pemrograman, bagaimana memprogram? [Tutup]

100

Saya telah diminta untuk mengambil seseorang di departemen TI kami yang tidak memiliki pengalaman pemrograman tetapi adalah orang yang cerdas dan mampu dan membantunya pindah ke pemrograman di katakanlah pengembang tingkat pemula yang mendukung aplikasi .Net yang ada. Saya yakin orang ini bisa melakukannya tetapi saya mencari cara tercepat untuk membuatnya cepat. Saya punya banyak ide tetapi ingin melihat apa yang dipikirkan orang lain. Saya tahu ini juga akan sangat tergantung pada bagaimana dia belajar, tetapi saya berbicara secara umum.

Jadi pertanyaannya: Menurut Anda apa cara terbaik untuk mempercepat pengembangan non-pengembang (.Net dalam kasus ini)?

Richard Fantozzi
sumber
1
Mungkin pertanyaan terkait: programmers.stackexchange.com/questions/10930/… : D
jmservera
Saya pernah mendengar bahwa Learn Python The Hard Way baik untuk yang bukan pemrogram memulai.
john2x
Lihatlah Small Basic . Ini sederhana, tetapi bermanfaat untuk pemula.
3
Saya pikir menjelaskan pemrograman kepada seseorang yang tidak memiliki model mental apa pun yang Anda bicarakan tidak berguna. Cari tahu bahasa apa yang akan Anda bicarakan dan minta mereka melakukan tutorial dan jadikan tangan mereka kotor lalu jelaskan. Mereka akan berjuang dan Anda akan masuk dan mempercepat proses belajar.
The Muffin Man
1
Saya akan memintanya untuk membaca Edgser Dijkstra | Tentang kekejaman yang benar-benar mengajar ilmu komputasi |, buat dia belajar tentang alasan artikel itu, jadi dia bisa waspada tentang kemungkinan kerusakan otak yang dapat ditimbulkan padanya oleh orang yang diterima secara umum. cara mengajar pemrograman
vfclists

Jawaban:

125

Saya biasanya meresepkan urutan yang sama untuk siapa saja yang ingin belajar pemrograman. Ini sangat teoritis, tetapi meletakkan dasar yang bagus. Perlu waktu tiga atau empat bulan belajar penuh waktu, tetapi pemrograman bukanlah sesuatu yang Anda pelajari dalam semalam.

Jika Anda tidak bisa melewati urutan ini, Anda tidak akan bisa memprogram, jadi sebaiknya Anda menyerah sekarang.

  1. Kode, oleh Charles Petzold.
  2. Bahasa Pemrograman C, K&R
  3. Struktur dan Interpretasi Program Komputer, Abelson dan Sussman.

Aturan saya adalah: kerjakan jalan Anda melalui tiga buku dengan kekuatan semata, jika perlu. Ajukan pertanyaan yang Anda miliki, tetapi hanya setelah berjuang untuk mencari tahu sendiri. Jika Anda bisa melewati ketiga buku itu, selamat, Anda seorang programmer, sekarang saya bisa melempar Anda PERL DALAM 15 MENIT atau sampah apa pun yang ada di toko buku di Rak Buku Besar Jawa dan Anda akan berhasil dengan baik. Jika Anda tidak bisa melewati ketiga buku itu, menyerah, pulang, Anda tidak akan pernah mendapatkannya.

Saya pikir Anda tidak perlu belajar C dan Skema, jujur ​​saja. Itu hanya fondasi untuk pembelajaran di masa depan. Kedua buku yang cukup sederhana ini keduanya sangat sederhana di permukaan (C dan Skema adalah bahasa super-mudah) tetapi mereka menjadi sangat mendalam pada seni pemrograman nyata tanpa membuang waktu pada sintaks yang membingungkan, sehingga mereka sangat baik untuk mulai memasang kembali kawat Otak Anda menjadi programmer yang baik.

Upaya untuk mengambil jalan pintas dan langsung belajar hal yang tepat yang ingin Anda pelajari sekarang (seperti memulai dengan C # dan ASP.NET) hancur.

Joel Spolsky
sumber
25
Sebagai seseorang yang harus membenturkan kepalanya ke meja di atas "programmer" yang datang sangat direkomendasikan untuk kemampuan C # mereka, tetapi tidak bisa melakukan hal-hal sederhana seperti menerapkan kelas dasar yang didokumentasikan dengan sangat baik, menemukan kebocoran memori dalam program c dan c ++, atau hanya mencari tahu masalah sendiri atau mempelajari ide baru bahkan dengan kecepatan sedang, saya setuju. Ini bukan elitisme; itu masuk akal. Jika Anda tidak dapat menguasai petunjuk dan rekursi, Anda tidak akan pernah sangat berguna bagi siapa pun yang membutuhkan pengembang yang dapat memecahkan masalah sendiri.
Jonathan Henson
53
Tidak, itu bukan satu-satunya cara untuk menjadi programmer yang baik. Tetapi jika tiga buku adalah "daftar yang menakutkan" daripada Anda mungkin meremehkan apa yang programmer lakukan.
Joel Spolsky
32
Terkadang Anda sangat tidak terhubung, Joel.
Robert S.
46
Maaf, surat kabar butuh beberapa hari untuk tiba di klub pribadi saya karena mereka perlu disetrika oleh pelayan sebelum kita bisa melihatnya.
Joel Spolsky
19
Sayangnya, jawaban ini gagal up to speed quickly.
rlb.usa
30

Cara terbaik untuk mempercepat non-pengembang dengan cepat adalah menginspirasi mereka !

Agar sukses, kandidat harus paling tidak ingin tahu, jika tidak bersemangat , tentang pemrograman (terlepas dari platform).

Sementara saya setuju dengan Joel dalam kasus kandidat ideal, saya akan berhati-hati untuk tidak menjejalkan terlalu banyak teori ke dalam pikiran yang lemah - itu hanya akan membuat mereka pergi. Jika mereka terinspirasi, ingin tahu, dan mudah-mudahan bersemangat, mereka akan ingin memahami teorinya setelah mereka melihat keajaiban.

Saya sepenuhnya setuju dengan @karudzo - pencapaian mandiri dan tinjauan konstruktif bisa sangat menginspirasi.

jkoreska
sumber
29
"Jika kamu ingin membangun sebuah kapal, jangan mengebor orang untuk mengumpulkan kayu dan tidak menugaskan mereka tugas dan pekerjaan, tetapi mengajar mereka untuk merindukan luasnya laut yang tak berujung." - Antoine de Saint-Exupery
Julien Chastang
Julien - bagus! Persis!
jkoreska
Saya sepenuhnya setuju dengan Anda tentang hal ini! Saya telah membimbing / mengajar banyak pengembang yang tidak memiliki pengalaman dan kadang-kadang tidak tahu mereka akan berakhir programmer. Saya melakukan ini hanya dengan membimbing mereka di sepanjang jalan ... keingintahuan dan hasrat mereka sendiri membawa mereka ke hasil akhir. Seandainya mereka tidak memiliki salah satu dari dua atribut itu, saya tidak percaya itu akan mungkin bagi mereka untuk mencapai apa yang mereka capai. Saya bekerja dengan terlalu banyak programmer yang tidak memiliki satu atau kedua atribut tersebut dan berada di dalamnya hanya karena ada banyak pekerjaan yang tersedia ... itu mengerikan!
Jeach
Saya setuju. Saya merasa pertanyaan belajar pemrograman dijawab dengan sangat harfiah. Orang belajar sesuatu karena suatu alasan. Orang belajar memprogram untuk memecahkan masalah, membantu orang, dan mengubah ide menjadi sesuatu yang nyata. Saya telah bertemu orang-orang yang melupakan ini di sepanjang jalan dan ketika mereka menemukan kembali mereka menemukan kembali cinta mereka untuk pemrograman. Ketika Anda benar-benar menikmati sesuatu yang akan Anda pelajari, Anda akan menemukan cara untuk belajar, dan Anda akan menjadi lebih baik.
Luis Perez
12

Saya mencari cara tercepat untuk membuatnya cepat.

Cara tercepat mungkin untuk memberinya waktu yang dibutuhkan , meskipun itu bisa dengan mudah satu atau dua tahun.

Tentu, tampaknya mudah untuk mengajarinya bahasa yang sederhana (C #, jika dia melakukan hal-hal .NET), tetapi belajar bahasa bukanlah belajar memprogram.

Jika dia tidak pernah memprogram, maka, selain sintaks dan pustaka dari setidaknya satu bahasa, dia harus belajar tentang array, daftar yang terhubung, model kompilasi dari bahasa apa pun yang dia pelajari, modularisasi, manajemen sumber daya, paradigma, pola, Big- O-notasi ... - seluruh enchilada. Itu banyak hal yang harus dibajak, dan kebanyakan dari kita membutuhkan beberapa tahun hanya untuk mempelajari dasar-dasar ini, dan bahkan lebih untuk menjadi programmer profesional sejati.

Ada materi di luar sana yang mencakup banyak hal ini (seperti buku terbaru Stroustrup yang mengajarkan pemrograman menggunakan C ++, daripada mengajarkan bahasa C ++), tetapi tidak banyak dan tidak ada yang membahas semuanya. Jadi lelaki itu harus mau belajar, dan membaca banyak buku dan artikel.

Mengenai cara melakukan ini: Saya tidak memiliki kurikulum lengkap untuk ditempel di sini. (Maaf.) Namun,
apa yang saya sarankan adalah memulai dengan mengajarinya satu bahasa pemrograman, sehingga ia memiliki kesempatan untuk membuat beberapa kemajuan awal yang cepat dan mendapatkan beberapa hasil yang menggembirakan. Ada beberapa buku di luar sana untuk mengajarkan bahasa seperti itu, pilihlah yang sudah Anda kenal. Jika buku ini memiliki banyak latihan, dan ia bersedia melakukannya, bersiaplah untuk menghabiskan banyak waktu membantunya. Jika buku tidak memiliki (m), mulailah memikirkan yang Anda miliki jauh di depan, tetapi bersiaplah untuk menyesuaikannya dengan tingkat / kecepatan pemahamannya.
Jika bahasa pertama itu bukan C atau C ++, IMO ia harus belajar salah satu dari ini selanjutnya. K&R bagus untuk itu, seperti halnya TCPL Stroustrup atau, jika dia bisa (dengan bantuan Anda) menangani kurva pembelajaran yang curam, Koenig / Moo. Alasan saya akan merekomendasikan ini adalah, begitu Anda tahu C atau (lebih disukai IMO) C ++, relatif mudah untuk mengambil salah satu dari turunan C seperti C #, Java, ObjC ...

Selebihnya, sediakan buku dan artikel bagus untuknya. Saya tidak berpikir itu sangat membantu jika kami menyarankan terlalu banyak dari itu, karena 1) itu harus sesuai dengan budaya perusahaan Anda, dan 2) Anda harus merasa nyaman mengatakan kepadanya untuk mempelajari hal-hal itu.

sbi
sumber
1
"pengembang entry level yang mendukung aplikasi .Net yang ada" ... "dia harus belajar tentang array, daftar tertaut, model kompilasi dari bahasa apa pun yang dia pelajari, modularisasi, manajemen sumber daya, paradigma, pola, bit-O-notasi" Itu semuanya 'baik untuk dimiliki', tetapi saya bertaruh bahwa sebagian besar pengembang yang menulis kode tidak memiliki keterampilan tersebut.
Kirk Broadhurst
1
@KirkBroadhurst: Jika demikian, maka ada sesuatu yang salah di perusahaan Anda.
sbi
@ SBI Saya pikir Anda akan menemukan sesuatu yang salah di banyak perusahaan. Perusahaan OP menyarankan agar non-programmer (tapi dia 'orang pintar'!) Dipindahkan ke peran melakukan dukungan aplikasi. Saya tidak tahu di mana Anda bekerja ... tetapi dalam pengalaman saya itu adalah 'dunia nyata'. Benar-benar bagus, programmer yang kompeten adalah pengecualian - seperti di kebanyakan industri, kebanyakan orang hanya cukup baik untuk bertahan.
Kirk Broadhurst
1
@KirkBroadhurst: Di mana saya bekerja adalah keputusan saya. Saya telah meninggalkan perusahaan karena tidak kompeten, dan saya akan melarikan diri jika tidak ada pengembang yang tahu setidaknya sebagian besar dari hal-hal ini.
sbi
7

Saya tidak akan memulainya di .NET. Saya telah melakukan kesalahan ini terlalu sering. Jangan biarkan majikan menekan Anda untuk membuat programmer yang tidak kompeten karena waktu. .NET mungkin merupakan platform pengembangan cepat, tetapi tidak memaksa pengembang untuk belajar pemrograman. Dalam C # saja, Anda akan menemukan pengembang terjebak pada jenis referensi, objek seumur hidup, mereka akan meninggalkan kebocoran memori yang sangat besar (ya itu mungkin di .NET), dan akan memiliki desain yang buruk. Akan jauh lebih baik untuk memulai mereka pada C atau C ++ (mungkin c ++ karena mereka akan perlu menggunakan konsep OOP) dan kemudian mengatakan sesuatu seperti: "Sekarang bukankah lebih baik jika ingatan Anda dikelola untuk Anda, setiap hal adalah objek -berorientasi, dan Anda tidak harus berurusan dengan semua petunjuk jahat ini? " Ini adalah C # dan JAWA. Jika mereka telah menguasai c ++, mereka akan menaklukkan keduanya dalam satu atau dua minggu masing-masing. Saya merekomendasikan resimen Joel. Itu adalah daftar yang diberikan guru 101 CS saya, dan saya jauh lebih baik ketika saya menekan analisis numerik karena itu. Ini juga akan memungkinkan Anda untuk mengetahui lebih awal apakah kandidat akan memotong mustard atau tidak. Juga, setelah Anda mendapatkan c dan c ++, Anda akan secara otomatis memahami c # dan java setelah membaca pengantar buku. Anda tidak hanya akan memahaminya, tetapi Anda akan memahaminya lebih baik daripada seseorang yang tidak tahu c dan c ++.

Jonathan Henson
sumber
4
"" Sekarang bukankah lebih baik jika ingatanmu diatur untukmu, semua hal berorientasi objek, dan kamu tidak harus berurusan dengan semua petunjuk jahat ini? "Maksudmu di sini adalah STL. Tunggu, apa Mengapa kamu tidak mengajari saya untuk menggunakan STL di C ++ sejak awal ?!
Raynos
STL itu manis. Saya merujuk lebih ke API Windows sejauh pemrograman Windows berjalan. API windows tidak dirancang dengan mempertimbangkan OOP. Saya merasa ini adalah latihan yang bagus untuk membuat beberapa orang miskin menulis aplikasi menggunakan API di c ++. Saya kemudian minta dia menulis kelas Window dan merangkum loop acara seterusnya ... Anda tahu, buatlah berorientasi objek. Kemudian setelah mereka akhirnya berfungsi saya menunjukkan kepada mereka Formulir Windows. Itu benar-benar memaksa mereka untuk berurusan dengan beberapa konsep dasar - yaitu bagaimana aplikasi Windows bekerja - bahwa seseorang tidak akan pernah mendapatkannya jika mereka hanya melompat ke .NET.
Jonathan Henson
4
mengapa ada orang yang menyentuh API windows dengan tongkat. Maksud saya berbicara tentang hWNDdari tahun 80an kan? Jelas Anda menggunakan abstraksi yang bagus sebagai gantinya (Yang abstraksi adalah perdebatan yang sama sekali berbeda). Tentu mengetahui cara kerjanya di bawah tenda itu bagus tetapi Anda tidak perlu C # .NET untuk abstraksi
Raynos
2
API Windows luar biasa. Bagaimanapun, saya hanya menggunakannya untuk alat pengajaran. Misalnya, orang biasanya tidak mengerti bagaimana peristiwa bisa dipecat secara ajaib di program windows. Akan sangat membantu bagi mereka untuk bermain-main dengan event loop. Juga, programmer setidaknya harus terbiasa dengan hWND terutama jika mereka akan berurusan dengan apis yang bermain-main dengan grafis - sama seperti Anda akan mengalami kesulitan melakukan apa pun di Unix tanpa mengetahui cara menggunakan XID. Bagaimanapun, itu memaksa mereka untuk belajar bagaimana program windows bekerja. Juga, begitu mereka selesai, mereka tahu cara kerja Windows.Forms.
Jonathan Henson
Itu tidak harus menjadi transisi ke C # btw, hanya untuk. NET secara umum. Saya pikir @ Joel memiliki artikel yang bagus tentang Hukum Abstraksi Leaky mengapa sering baik bagi programmer untuk mencari di bawah tenda sebelum menggunakan kerangka kerja.
Jonathan Henson
6

Beri mereka sesuatu yang sederhana, tetapi berguna untuk dipecahkan. Biarkan mereka meraba-raba sedikit dan membantu mereka memolesnya. Tidak ada yang seperti prestasi kecil untuk membantu memacu mereka (meskipun seseorang tidak tertarik pada pemrograman w

Jschorr
sumber
6

Memasangkan pemrograman. Biarkan mereka membayangi Anda saat Anda menulis kode Anda sendiri - kode apa pun. Dalam beberapa jam, kemudian minta mereka memasukkan kode Anda untuk Anda, sementara Anda memberi tahu mereka apa yang harus dilakukan, keystroke demi keystroke bahkan jika perlu. Jawab beberapa pertanyaan mereka, tetapi jangan sampai Anda diperlambat - biarkan mereka menyerap semuanya. Mereka juga akan menemukan kesalahan ketik dan bug Anda lebih banyak daripada yang mungkin Anda pikirkan. Dalam beberapa hari, mereka akan dapat mulai 'menavigasi' dengan memberi tahu Anda kode apa yang harus dimasukkan untuk tugas yang mirip dengan yang pernah mereka lihat sebelumnya.

Saya belajar banyak dari apa yang saya ketahui sebagai pengembang dengan cara ini dalam waktu satu bulan, dan telah mengajar beberapa pengembang baru dengan cara ini, salah satunya mampu mengambil alih untuk saya sebagai pengembang utama pada startup setelah beberapa bulan. Ketika kami pertama kali mulai bekerja bersama, dia tidak pernah menulis satu baris kode pun.

jejak
sumber
1
Saya pikir pemrograman berpasangan adalah cara yang sangat bagus untuk mengajar programmer pemula, tapi saya pikir pemrograman berpasangan sepanjang waktu bisa bermasalah. Saya pikir programmer pemula perlu waktu bekerja sendirian untuk belajar bagaimana menyelesaikan masalah dan membangun kepercayaan pada kemampuan mereka.
Helephant
Yap, buat mereka bekerja dengan pemrograman pasangan & memberikan tugas-tugas sederhana - tugas nyata, pada perangkat lunak yang seharusnya mereka kerjakan, dalam bahasa yang seharusnya mereka kerjakan, dengan prestasi nyata. Tinjau & bimbing semua pekerjaan mereka dan mereka akan maju.
Thomas W
2

Beri dia ide yang bagus (studio visual, ekspres masih bagus). Ajari dia 60% sintaksis umum (biarkan hasil, LINQ, enum, atribut, dll, mengajar kelas, virtual dan menimpa). Habiskan waktu di debugger (terutama callstack). Kemudian katakan padanya ke google "msdn functionanme" setiap kali dia membutuhkan bantuan dan itu akan membuatnya memulai dengan cepat.

Juga ajari dia untuk tidak pernah menangkap dan menelan pengecualian. Katakan padanya dia harus menyusun kembali atau mencatatnya!

Bonus: ajari dia cara membuat serial data json sehingga dia dapat dengan mudah membaca / menulis ke file. Sebuah db berlebihan dan terlalu banyak untuk dipelajari dan Anda tidak ingin dia menulis format file khusus walaupun saya dapat membiarkan satu entri per baris jenis file lulus untuk menyimpan / memuat array string yang dapat diterima.


sumber
1

Saya tahu banyak orang telah berbicara tentang bahasa dan buku untuk bahasa-bahasa itu. Saya berbeda.

Pemrograman adalah tentang belajar berpikir secara analitis. Pertama dan terutama orang tersebut harus dapat berpikir dan membuat algo di selembar kertas untuk masalah apa yang terjadi. Anda harus membimbing mereka sehingga mereka mendapatkan teknik berpikir yang tepat.

Berikutnya adalah dasar-dasar bahasa. Mulai dengan bahasa pilihan. Berikan masalah pada program.

Setelah pemotongan pertama selesai, minta mereka untuk melakukan fundamental CS dan Pola Desain.

Sekarang minta mereka untuk memprogram ulang masalah sebelumnya dengan konsep-konsep baru ini.

Pengembara
sumber
1

Mulai dia di dasar-dasar: variabel, loop, sementara loop, untuk loop, array, ajarkan dasar-dasarnya, mencetak ke layar, melakukan beberapa matematika sederhana. Beralih ke metode dan OOP dasar, hal-hal seperti inilah cara membuat kelas, tunjukkan padanya mengapa tidak hanya caranya.

Bahasa tidak masalah, tetapi pilih sesuatu yang Anda tahu dan itu sangat abstrak (java, python dll ...) sehingga ia tidak perlu khawatir tentang hal-hal seperti manajemen memori, pointer dll ... Ajarkan dasar-dasar rekursi, menara hanio atau direktori pencarian rekursif.

Learn to program adalah sumber gratis yang bagus untuk pemrograman Ruby. Jadikan itu menyenangkan, mudah dan menghibur.

Snow_Mac
sumber
1

Beri dia beberapa tantangan dan minta dia belajar bagaimana menemukan sumber daya untuk menyelesaikan masalah sendiri.

Jika Anda bisa mengajarinya cara menemukan jawaban dan mandiri, ia secara alami akan belajar cara memprogram dengan baik. Berpikir kritis dan banyak akal adalah dua keterampilan utama bagi seorang programmer.

Pada akhirnya, gairah / minat pasti akan menjadi faktor kunci dalam seberapa sukses mereka dalam mempelajarinya dengan cepat. Jika dia tidak memiliki atau menangkap "bug", itu mungkin proses yang lambat dan / atau menyakitkan. Jika dia benar-benar menangkap bug, dia akan terlambat coding, tidak bekerja, memiliki waktu dalam hidupnya.

Andy Fleming
sumber