Keterampilan berpikir untuk menjadi programmer yang baik [ditutup]

10

Saya telah pemrograman selama 15 tahun terakhir dengan gelar non-CS. Alasan utama saya memasuki pemrograman adalah karena saya suka mempelajari hal-hal baru dan menerapkannya pada pekerjaan saya. Dan saya dapat menemukan dan memperbaiki kesalahan pemrograman dan penyebabnya lebih cepat daripada yang lain. Tapi saya tidak pernah menemukan diri saya seorang guru atau ahli, mungkin karena jurusan non-CS saya. Dan ketika saya melihat programmer yang hebat, saya mengamati mereka sangat bagus, tentu saja jauh lebih baik daripada saya, dalam memecahkan masalah.

Salah satu keterampilan yang saya temukan baik di pertengahan karir saya adalah memikirkan persyaratan dan tugas dalam urutan terbalik dan abstrak. Dengan cara itu, saya dapat melihat apa yang benar-benar diperlukan untuk saya lakukan tanpa detail dan dapat dengan cepat menemukan bagian dari solusi yang sudah ada.

Jadi saya bertanya-tanya apakah ada keterampilan berpikir lain untuk menjadi programmer yang baik. Saya telah mengikuti Tanya Jawab di bawah dan benar-benar membaca beberapa buku yang direkomendasikan di sana. Tetapi saya tidak bisa benar-benar mengambil metode yang baik yang langsung dapat diterapkan untuk pekerjaan pemrograman saya.

Buku non-pemrograman apa yang harus dibaca oleh seorang programmer untuk membantu mengembangkan keterampilan pemrograman / berpikir?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
sumber

Jawaban:

10

Terima kasih atas petunjuk untuk pertanyaan yang ada. Jawabannya agak berbeda dengan yang saya mengerti yang Anda inginkan. Saya akan memberi Anda beberapa saran dari pengalaman saya sendiri. Gelar saya sendiri dalam bidang fisika, apakah saya datang ke lapangan dengan kesenjangan seputar formalitas, kebenaran / verifikasi, analisis algoritma, pemrograman dinamis, sistem database, dan sebagian besar di awal, pemilihan struktur data dan algoritma. Kesenjangan yang paling jelas (misalnya struktur data dan algoritma) saya tutup lebih awal tetapi saya masih membaca buku di daerah itu, untuk memperdalam pemahaman saya, melihat presentasi alternatif, dan menyegarkan ingatan saya. (Saya sekitar 40, jadi buku bekerja untuk saya :)

Berikut adalah daftar bacaan (tanpa urutan tertentu selain urutan yang mereka pikirkan).

  1. Pemrograman Mutiara (Jon Bentley)
  2. Mutiara Pemrograman Lainnya (Jon Bentley)
  3. Seni Pemrograman Komputer (Donald Knuth)
  4. Algoritma Dalam C ++ (Robert Sedgewick)
  5. Manual Desain Algoritma (Steven Skiena)
  6. Praktek Pemrograman (Kernighan dan Pike)
  7. Elemen-elemen Pemrograman (Stepanov)
  8. Cara Mengatasinya (Polya)
  9. Struktur dan Interpretasi Program Komputer (Abelson dan Sussman)

Saya juga banyak keluar dari Writing Solid Code ketika saya membacanya di pertengahan tahun 90-an. Tapi itu tidak ada dalam daftar karena itu tidak benar-benar berhubungan kuat dengan keterampilan berpikir seperti itu (lebih berkaitan dengan merancang API untuk meminimalkan kemungkinan kesalahan penggunaan yang tidak disengaja - atau setidaknya itu adalah alasan utama saya mengambilnya).

Saya juga mendapat banyak hal dari Gödel, Escher, Bach (Hofstadter) sebagai seorang remaja, tetapi sudah disebutkan dalam jawaban atas pertanyaan yang sudah Anda tunjukkan. Ini buku untuk dibaca untuk kesenangan, bukan secara langsung untuk mengembangkan keterampilan ilmu komputer seseorang.

Saya bekerja dengan sejumlah besar programmer yang berbakat, dan hampir secara universal mereka adalah penggemar Mutiara Pemrograman . Tentu saja saya berharap lebih banyak dari kandidat yang saya wawancarai telah membaca bab 4 buku itu.

James Youngman
sumber
4

Pertama; untuk disiplin apa pun, selalu ada seseorang yang jauh lebih baik dalam hal itu. Jangan khawatir tentang bagian itu.

Kemudian; gelar CS bagus dan semua itu, dan pengetahuan teoretis yang diberikannya kepada Anda tentu berguna, tetapi sama sekali bukan indikasi bahwa seseorang adalah programmer yang baik. Beberapa programmer terbaik belajar sendiri, dan percayalah, dunia ini penuh dengan lulusan CS yang tidak bisa memprogram jalan keluar dari kantong kertas basah. Jadi jangan khawatir tentang bagian itu juga.

Mengenai apa yang diperlukan untuk menjadi programmer yang baik: Saya pikir ada dua hal yang penting. Pertama adalah bahwa Anda harus dapat mendekati masalah dengan cara yang benar-benar formal, dan berpikir pada tingkat abstraksi tertentu. Jika Anda memahami petunjuk dan rekursi, kemungkinan besar Anda bagus dalam hal ini. Yang lainnya adalah dedikasi dan ketekunan. Sama seperti kerajinan lainnya, pemrograman membutuhkan puluhan ribu jam latihan khusus dan fokus untuk dikuasai, itu tidak terjadi dalam semalam. Diperlukan setidaknya sepuluh tahun untuk mencapai penguasaan, dengan satu atau lain cara. Jika Anda bersemangat, meluangkan waktu, fokus, dan menemukan tantangan baru akan mudah; jika tidak, saya kira itu masih mungkin, tetapi itu tidak akan menjadi perjalanan yang menyenangkan.

tammmer
sumber
2

Ingatlah setiap kali Anda mulai mempelajari bahasa pemrograman. Pertama-tama pelajari Konsep dan sekaligus ujilah artinya lakukan secara praktis begitu Anda melakukan latihan ini, Anda tidak akan melupakan konsep dan penggunaannya.

Selanjutnya "latihan buat yang sempurna" dan itu juga berlaku di sini dalam pemrograman. Semakin banyak Anda bermain dengan kode, menjalankan kode, membaca kode yang ada untuk memperbaikinya, Anda akan menjadi tidak baik tetapi programmer gr8.

Chitrank Dixit
sumber
0

Ada dua buku non-pemrograman yang menurut saya sangat penting.

Yang pertama adalah "Lady or the Tiger", oleh Raymond Smullyan. Ini adalah seperangkat teka-teki logika yang secara diam-diam mencakup semacam tur teori automata. Barang bagus.

Yang kedua adalah "Godel, Escher, Bach: An Eternal Golden Braid" oleh Douglas Hofstadter, yang membuat Anda berpikir tentang rekursi dan teori bahasa.

Jika Anda ingin kebiasaan yang baik untuk seorang pemula, baca "Pola Magang" oleh Hoover dan "The New Programmers Survival Manual" oleh Carter. Kedua buku ini berbicara tentang bagaimana mengembangkan keterampilan Anda dan bagaimana mengembangkan karier Anda. Mereka mengambil pendekatan yang berbeda, tetapi mereka bekerja bersama dengan baik.

philosodad
sumber
0

Saya tertarik pada bagaimana Anda mengevaluasi keterampilan programmer lain.

Saya pikir bahwa pengetahuan spesifik dan aplikatif menciptakan hasil yang jauh lebih mengesankan daripada keterampilan umum. Jika Anda sudah memiliki banyak konteks, dan mungkin pernah melihat masalah serupa sebelumnya, Anda mungkin dapat menemukan penyebab masalah dengan sangat cepat. Jika Anda sudah tahu cara menggunakan seperangkat alat yang berlaku, Anda mungkin dapat membangun solusi dengan sangat cepat. Jika Anda belum memiliki pengetahuan itu, tetapi Anda memang memiliki keterampilan yang diperlukan, itu akan membawa Anda lebih banyak waktu untuk memperoleh pengetahuan yang Anda butuhkan. Jika itu masalahnya, Anda membutuhkan waktu lebih lama untuk menempuh jarak yang lebih jauh, yang tidak berarti Anda lebih lambat.

Tentu saja, jika Anda dapat membangun pengetahuan dan belajar menggunakan alat yang akan membantu Anda nanti, ini akan memberi Anda keuntungan. Saya menemukan bahwa belajar sedikit tentang berbagai topik membantu di sini, karena akhirnya tumpang tindih lebih dari yang saya harapkan, dan hanya mengetahui di mana mencari informasi yang Anda butuhkan dapat menghemat banyak waktu. Tapi mungkin itu hanya aku.

Vincent Povirk
sumber
0

Anda suka mempelajari hal-hal baru dan dapat memperbaiki kesalahan dengan cepat. Ini berarti Anda memiliki dua elemen kunci untuk menjadi seorang guru: antusiasme dan kemampuan. Tetapi Anda pikir Anda tidak pernah menemukan diri Anda seorang ahli, mungkin Anda membutuhkan dua hal lagi: fokus dan waktu. Misalnya, ketika Linus Torvalds pertama kali merilis Linux pada tahun 1991, tidak ada yang menganggapnya sebagai guru. Dia masih bekerja di Linux setiap hari dan Anda dapat melihat log penggabungannya dari repositori kernel Linux Git saat ini. Fokusnya menjadikannya guru paling terkenal di bidang Linux. Waktu adalah konsep abstrak, itu berarti menjaga diri Anda tetap mutakhir, mendapatkan pengalaman melalui latihan terus-menerus, membagikan pengetahuan Anda kepada orang lain dan meningkatkan dengan retrospeksi.

Saya memiliki situasi yang sama dengan Anda. Saya telah pemrograman selama 15 tahun dengan gelar non-CS (EE degree), dan saya selalu bingung dengan kesenjangan besar saya dengan guru di bidang saya. Tetapi saya memiliki impian untuk menjadi seorang guru dan mulai menghadiri proyek sumber terbuka. Keterampilan berpikir berasal dari latihan dan pengalaman. Beberapa buku mungkin membantu, tetapi signifikansinya terutama bersifat instruksional. Keterampilan berpikir milik Anda berasal dari pengalaman Anda sendiri. Ayo mulai dari sekarang!

Belajar setiap hari
sumber