Setelah membaca pertanyaan tentang buku yang harus dibaca setiap programmer , saya bertanya-tanya apakah yang berikut ini dianggap usang:
- Kode lengkap : edisi pertama tahun 1993; Edisi ke-2 pada bulan Mei 2004
- Pengantar algoritma (Cormen, Leiserson, Rivest, Stein) : edisi pertama tahun 1990; Edisi ke-2 pada bulan September 2001; Edisi ke-3 tahun 2009
- Programmer Pragmatis : Oktober, 1999
- Struktur dan Interpretasi Program Komputer : edisi pertama pada tahun 1984; Edisi ke-2 pada bulan September 1996
- Bahasa Pemrograman C : edisi pertama tahun 1978; Edisi ke-2 pada bulan April 1988
Semua buku ini tampak sangat tua. Apakah tidak ada perbedaan antara komputasi modern dan apa yang saat ini ketika buku itu ditulis?
Sebagai contoh, guru saya yang berusia 61 tahun menjelaskan hal-hal dengan sangat baik tetapi lupa untuk memperhitungkan semua yang telah dilakukan antara ketika dia mulai mengajar 25 tahun yang lalu dan sekarang.
Bukankah hal yang sama berlaku untuk buku-buku itu? Tidak ada lagi buku modern yang mengajarkan prinsip dan teknologi yang lebih dekat dengan praktik saat ini? Atau apakah Anda menganggapnya berguna dan relevan bahkan hingga hari ini?
books
software-obsolescence
Olivier Pons
sumber
sumber
Jawaban:
Buku ini tentang prinsip-prinsip pembangunan. Prinsip-prinsip ini, secara alami, agnostik-bahasa, dan untuk beberapa paradigma-agnostik (OOP, pemrograman fungsional, bahasa imperatif).
Mereka menjelaskan teori dan cara pengembangan yang baik karena, pada akhirnya, perangkat lunak selalu tentang mendapatkan data, memprosesnya, kemudian mengeluarkannya kembali. Facebook, Twitter, 3D, proses batch akuntansi, manajemen lalu lintas kereta api, meluncurkan roket, dll.
Buku-buku tentang bahasa, seperti
"How to learn XXXXX in YY days"
, di mana XXXXX adalah bahasa dan YY adalah angka yang pada akhirnya (dan kadang-kadang sebenarnya sangat cepat) menjadi usang, karena, pada dasarnya, ini adalah tentang hal-hal yang berkembang, atau diganti dan menjadi ketinggalan jaman.Code Complete , oleh Steve McConnell yang luar biasa, mungkin adalah buku yang membuat saya menyadari hal ini. Dan Pragmatic Programmer benar-benar mengubah visi yang saya miliki tentang pengembangan perangkat lunak. Dengan membaca buku-buku seperti itu, Anda menyadari bahwa 95% masalah yang Anda hadapi sehari-hari telah diselesaikan, dan bahwa 95% dari kita masih menemukan kembali roda.
Yang disebut "Cloud" bukan masa depan pengembangan perangkat lunak, ini adalah cara untuk menggunakan perangkat lunak yang dikembangkan.
Jangan jatuh ke dalam jebakan buzzword omong kosong, fokus pada bagaimana Anda dapat meningkatkan keterampilan pengrajin perangkat lunak Anda.
Berfokuslah pada pembelajaran dari apa yang telah diciptakan dan dipelajari oleh roh-roh cemerlang lain di hadapan kita, karena itulah satu-satunya cara untuk menjadi pengembang yang ulung.
sumber
"Learn Javascript in 15 seconds"
dan hanya setengah bazillion dari"Learn PHP on 17 secsonds"
Psikologi-Komputer-Pemrograman (1971) - Dengan sejuta kali lebih banyak programmer daripada pada tahun 1970 psikologi tentang bagaimana mereka merancang program dan kesalahan apa yang mereka buat dan bagaimana cara menghindarinya lebih penting daripada sebelumnya.
Perangkat Lunak Alat (1976) - Dengan web menjadi kumpulan karya frame, utilitas, skrip dan plugin - ide-ide dalam Perangkat Lunak tidak pernah lebih relevan.
EDIT: Untuk menjawab pertanyaan umum - apakah buku pemrograman lama relevan?
Prinsip umum rekayasa perangkat lunak tidak banyak berubah, ada teknologi baru OO, TDD, dll. Tetapi secara umum pengguna dan masalahnya tidak berubah - dan berpikir tentang bagaimana membagi masalah adalah sama seperti sekarang. selalu begitu.
Buku-buku yang lebih tua ini umumnya ditulis oleh para ahli di lapangan. Banyak buku pemrograman modern ditujukan untuk mendapatkan doorstop 2000 halaman untuk kata kunci terbaru saat ini masih berlaku.
Buku tentang bahasa dan teknologi yang tidak lagi digunakan mungkin tidak relevan - tidak ada manual assembler Vax dalam daftar. Tetapi 'C' masih sangat banyak digunakan dan 'Bahasa pemrograman C' tidak hanya buku terbaik tentang 'C' itu adalah model bagaimana menulis tutorial ringkas dan referensi ke bahasa Anda.
Apakah ada algoritma baru? Iya. Tetapi semua algoritma lama masih relevan dan sebagian besar yang baru berada di area yang tidak mungkin Anda temui. Tidak ada yang datang dengan jenis yang lebih baik atau FFT baru-baru ini. Meskipun orang lain telah mencoba menjelaskannya dengan lebih baik, tidak ada alasan bahwa buku-buku Algoritma tahun ini lebih baik daripada CLRS.
ps. IWhatsit baru Anda yang keren menjalankan BSD, dikembangkan pada tahun 1977. Sekarang Anda semua turun dari halaman saya!
sumber
IMHO, tidak mengherankan bahwa buku-buku yang sangat bagus tetap populer selama beberapa dekade - yang menunjukkan betapa baiknya buku-buku itu. Tetapi saya pikir saya dapat memberi tahu Anda sesuatu untuk setiap kandidat yang Anda daftarkan:
Sebenarnya edisi pertama "Kode selesai" berasal dari tahun 1993, jadi ini benar-benar "klasik". Ini adalah tentang gaya pengkodean dasar, menggunakan contoh-contoh yang berlaku untuk hampir setiap bahasa pemrograman keluarga C, yang berisi bahasa paling populer saat ini (C / C ++ / Java / C # / Objective-C / D / ...). Jadi ya, buku ini terbaru.
Yah, saya sebenarnya tidak membaca buku itu (buku teks algoritma saya berasal dari "Sedgewick"), tetapi mempelajari algoritma dan konstruksi algoritma adalah bahasa agnostik. Tentu saja, kerajinan ini semakin diremehkan beberapa tahun terakhir karena Anda menemukan banyak algoritma dasar saat ini di perpustakaan standar, tetapi IMHO setiap programmer profesional harus memiliki pengetahuan dasar dalam bidang ini.
Ini adalah buku yang sangat bagus tentang pemrograman sebagai keahlian. Bahasa agnostik dan sangat, sangat terkini, selama pemrograman dilakukan oleh programmer sebagai tugas manual, menggunakan editor teks, IDE, kontrol versi dll.
Ini adalah favorit pribadi saya, walaupun (atau mungkin karena) buku ini menggunakan Skema untuk mengajarkan Anda perbedaan antara paradigma pemrograman yang berbeda. Saya tidak tahu buku apa pun yang memiliki fokus kuat untuk membangun abstraksi. Dan membangun abstraksi adalah kemampuan utama yang membuat perbedaan antara seorang programmer yang biasa-biasa saja dan seorang programmer top - yang tidak berubah dalam dekade terakhir, jadi sungguh, buku ini abadi. Selain itu, bahasa fungsional dan elemen bahasa menjadi lebih populer baru-baru ini, jadi IMHO ide-ide yang disajikan dalam buku ini mendapat kebangkitan.
Yah, buku ini mungkin tidak begitu abadi seperti empat lainnya. Tetapi karena C adalah sesuatu seperti "ibu" dari semua bahasa populer yang saya sebutkan di atas, mungkin ide yang baik untuk membaca buku ini juga - saya tidak berpikir ada beberapa buku "C" modern yang benar-benar lebih baik. Dan jika Anda harus melakukan pemrograman pemeliharaan kode C ++ yang ditulis oleh seseorang yang tahu C lebih baik daripada C ++, maka buku ini adalah suatu keharusan.
Akhirnya, Anda meminta buku yang memperhitungkan lebih dari "realitas saat ini", tanpa terlalu spesifik teknologi. Jadi apa "realitas saat ini" dan apa yang telah berubah di sisi "non-teknologi"? Berikut adalah beberapa poin dari dekade terakhir, tanpa mengatakan bahwa daftar ini lengkap atau memiliki prioritas yang tepat.
(Saya tidak mencantumkan apa pun di sini tentang pengembangan Web atau Aplikasi, karena menurut saya teknologi ini spesifik).
Ada buku bagus untuk topik 1 dan 2, terutama "Kode Bersih" , yang berasal dari 2008, dan "Bekerja secara efektif dengan kode warisan" dari 2004. Mungkin itu beberapa buku "baru" yang Anda cari?
sumber
Dari yang Anda sebutkan "Kode selesai", "Programmer pragmatis" dan "SICP" telah ada di daftar bacaan yang saya rekomendasikan untuk semua pengembang baru yang mulai di sini di perusahaan saya dan ingin naik ke level yang lebih tinggi.
Mereka tidak ketinggalan zaman karena ilmu dasar dalam Ilmu Komputer belum berubah.
sumber
Saya belum membaca semua buku-buku itu, tetapi saya memiliki Code Complete dan The Pragmatic Programmer. Buku-buku ini jauh dari usang. Mereka mungkin memiliki beberapa paragraf yang sedikit berkarat tetapi sebagian besar konten masih relevan hingga saat ini.
Kemajuan dalam Ilmu dan Pemrograman Komputer adalah proses evolusi . Abstraksi baru sedang diperkenalkan di atas yang lama tetapi hal-hal baru ini tidak perlu membuat yang lama menjadi usang.
Sebuah analogi ... Apakah Anda belajar untuk menjadi ahli bedah trauma atau ahli bedah yang berspesialisasi dalam transplantasi jantung, Anda masih perlu tahu bagaimana tubuh manusia bekerja, kimia sel, sistem organ, cara membuka dada dan cara cepat hentikan pendarahan jika itu terjadi, dll ... Hanya karena mereka menemukan peralatan endoskopi dan teknik yang kurang invasif, itu tidak berarti Anda bebas untuk mempelajari dasar-dasarnya. Itu hanya berarti Anda harus belajar lebih banyak.
sumber
"Awan" bukan merupakan faktor. "Cloud" sebenarnya jauh lebih tua daripada sebagian besar buku yang Anda daftarkan. sebagian besar dari buku-buku itu tentang prinsip-prinsip inti, mereka tidak benar-benar berubah sering. Kerangka kerja dan pustaka berubah sepanjang waktu, tetapi bagaimana Anda harus menyusun kode Anda tidak banyak berubah. Demikian pula pointer masih pointer tidak mulai melakukan hal yang berbeda hanya karena. Satu-satunya buku khusus bahasa yang Anda daftarkan adalah tentang C, dalam hal ini buku lama itu jauh lebih berguna daripada yang baru, karena buku itu kemungkinan ditulis lebih dekat dengan periode waktu dimana kode C yang akan Anda kerjakan dikembangkan.
sumber
Daftar yang Anda kutip, tidak ada yang usang. Sebuah buku hanya menjadi usang ketika subjek telah berubah cukup banyak sehingga tidak berguna. Sifat pemrograman dan bahasa C telah berubah sedikit sejak publikasi
sumber
Salah satu hal yang perlu Anda sadari adalah bahwa ada prinsip-prinsip dasar yang pada dasarnya abadi, dan implementasi yang cenderung datang dan pergi.
Prinsip-prinsip yang mendasari pada dasarnya semua teori membosankan yang cenderung menghabiskan banyak waktu di Ilmu Komputer, dan itu tetap berlaku bahkan jika dunia berubah di sekitarnya. Ini bertentangan dengan hal-hal seperti "Cara menggunakan Win32s di bawah Windows 3.11" yang sudah sangat tua dan ketinggalan zaman.
Untuk meletakkan segala sesuatu dalam perspektif - teks kanonik pada geometri berumur dua ribu tahun. Sebagian besar matematika yang diajarkan hingga tingkat perguruan tinggi setidaknya berusia 300 tahun. Hanya alasan buku CS tidak lebih tua, adalah karena bidangnya masih baru.
sumber
Beberapa buku abadi karena mereka membahas ide-ide yang sangat mendasar bagi praktik pengembangan perangkat lunak, mereka akan selalu berlaku.
Ambil contoh Mythical Man Month , ketika saya membaca buku ini, saya terus lupa bahwa itu ditulis pada tahun 1975. Ketika ia menaburkan sesekali dalam referensi sesekali tentang IBM System 360, itu selalu membuat guci saya karena itu adalah satu-satunya konten yang bertanggal buku. Segala sesuatu yang lain berlaku di sini dan sekarang. Saya masih menyimpan salinan Pola Arsitektur Aplikasi Perusahaan Martin Fowler , sekarang berusia 9 tahun tetapi sekali lagi abadi dan masih berlaku untuk pekerjaan yang saya lakukan hari ini.
Buku favorit saya saat ini adalah Java Modeling in Colouring dari Peter Coad dengan UML (1999) meskipun saya adalah seorang pengembang C # dan menghindari UML, karena teknik dan konsepnya menjadikan saya pembuat kode yang lebih baik.
Kami sebaiknya belajar dari generasi pertama pengembang karena mereka telah menginjak tanah yang sedang kami jalani sekarang dan kebijaksanaan mereka yang diperoleh dengan susah payah dapat membantu kami memulai apa yang kami lakukan / pelajari hari ini.
sumber
Prinsip-prinsip inti dari perangkat lunak tidak berubah dalam 20 tahun terakhir. Tumpukan, pohon dan daftar tertaut masih berfungsi sama seperti yang mereka lakukan saat itu. "XOR" masih berarti hal yang sama. Satu byte masih memiliki 8 bit.
Apakah Anda serius menyarankan bahwa "pengembangan multi platform" adalah ide baru? Menurut Anda mengapa C ditemukan?
"Cloud" adalah kata kunci pemasaran. Dulu berarti sesuatu yang spesifik, tetapi telah direndahkan melalui penggunaan yang berlebihan. Saat ini, kapan saja Anda memiliki sesuatu yang berbicara ke server jauh melalui jaringan, pemasar menempelkan label "cloud" di atasnya. Jadi benar-benar tidak ada gunanya membicarakannya, karena itu adalah kata yang tidak berarti.
Saya tidak tahu profesor Anda yang berusia 61 tahun, jadi saya tidak bisa menjaminnya. Anda, di sisi lain, jelas tidak sepintar yang Anda kira. Dengarkan profesor, mungkin Anda akan belajar sesuatu.
"Kamu tidak bisa menjadi tua dengan menjadi orang bodoh. Banyak pemuda bijak, mereka mati sebagai bajingan." - Richard Pryor
sumber
Berikut ini beberapa buku yang sangat lama dan kedaluwarsa:
Seni Pemrograman Komputer, vol. 1-3 dari D. Knuth. Ini diterbitkan antara 1968 dan 1981! Kami tidak menggunakan tabung vakum lagi, orang-orang! Segala sesuatu dalam buku-buku ini lumpuh. Di mana diskusi tentang Python dan Ruby?
Komputer dan Daya Tarik: Panduan untuk Teori Kelengkapan NP oleh MR Garey dan DS Johnson, 1979. Super timpang! Semua masalah ini telah diselesaikan sekarang, mungkin.
Jika sebuah buku tidak ditulis dalam tiga tahun terakhir dengan fokus pada Python, maka itu tidak layak dibaca.
sumber
Buku-buku itu tidak usang, buku-buku itu klasik.
Mengutip Kaplansky , " luangkan waktu setiap hari untuk mempelajari sesuatu yang baru yang terlepas dari masalah yang sedang Anda kerjakan (ingat bahwa perpecahan mungkin bersifat sementara), dan bacalah masternya . "
sumber
Saya tahu apa yang Anda maksud, ketika kami memiliki kemajuan (LINQ datang ke pikiran) yang mengubah pembacaan dan penggunaan kode, tetapi hanya karena buku-buku ini sudah tua, tidak berarti bahwa mereka tidak menawarkan pelajaran yang bagus untuk pembaca.
Sementara bahasa pemrograman yang mereka gunakan mungkin sudah ketinggalan zaman , teori di balik bahasa pemrograman masih berdering hari ini. Sebagian besar buku-buku ini menjadikannya pokok untuk membahas dasar dengan sangat baik, dan dasar-dasarnya belum banyak berubah.
sumber
Industri ilmu komputer masih sangat muda. Buku-buku yang ditulis 30 tahun yang lalu saya anggap masih berharga dan dibutuhkan untuk pemahaman yang lengkap. Konsep abstrak terkadang membutuhkan waktu untuk dicerna.
sumber
Beberapa bagian kecil sudah usang dalam semua buku itu, tetapi 99% masih bagus.
Buku-buku algoritma akan bertambah umur dengan lambat. Algoritma adalah matematika, dan matematika tidak berubah dengan cepat. Tentu, masih ada penelitian dalam algoritma baru yang lebih unggul dalam keadaan tertentu (misalnya, algoritma Furer 's (2007) Schonhage-Strassen untuk mengalikan 40000+ angka panjang digit bersama-sama), tetapi pengantar Anda perlu mempelajari dasar-dasarnya (membagi dan menaklukkan / Pemrograman Dinamis / Pemrograman linier / dll) sehingga Anda dapat belajar berpikir secara logis tentang algoritma.
Mempelajari standar C dari K&R masih merupakan sumber terbaik; meskipun saya tidak yakin apakah saya akan mempercayai bagian mereka tentang cara mengatur lingkungan Anda.
SICP adalah buku yang luar biasa dan mengajarkan dasar-dasar CS modern melalui pengajaran bahasa yang merupakan bahasa yang indah. Namun, lisp bisa dibilang bukan bahasa yang paling berguna saat ini; meskipun orang lain akan berpendapat bahwa cisp adalah senjata rahasia mereka dan bahwa bahasa pembelajaran seperti java atau python pertama-tama membuat programmer yang sangat buruk yang tidak pernah perlu belajar bagaimana menerapkan sort atau linked-list atau array atau notasi O besar dan akhirnya melakukan hal-hal yang sangat tidak efisien.
Beberapa Code Complete atau Pragmatic Programmer kurang relevan, terutama jika Anda memprogram dalam bahasa yang lebih baru (misalnya, python / ruby / C ++ 11), karena sering berfokus pada bagaimana melakukan sesuatu dalam C atau memberikan solusi yang disarankan menggunakan yang terbaik alat yang tersedia saat itu (seperti CVS / RCS untuk kontrol versi daripada alat modern seperti git / bzr / hg / svn). Tetapi masih bagus untuk berpikir tentang bagaimana kontrol versi adalah suatu keharusan dan bagaimana itu perlu mulus dan mendokumentasikan diri dan pergi melalui logika mengapa itu adalah mutlak harus.
Atau rekomendasi PP terhadap IDE untuk editor unix dasar + alat unix - tidak untuk mengatakan Anda tidak seharusnya belajar bagaimana menggunakan find / awk / temukan / grep / sed, tetapi IDE yang baik sering kali dapat menghemat banyak waktu. Misalnya, emacs dapat melakukan penyorotan sintaksis atau penyelesaian kode sederhana; tetapi katakanlah IDE yang bagus akan mengatakan berikan tool-tips dengan deklarasi fungsi ketika Anda mengetiknya, atau menganalisis kode dan menandai variabel yang tidak digunakan, membuatnya mudah untuk menutup bagian-bagian kode, dll.
sumber
Ya, ya, dan ya.
Itu tidak membuat buku-buku itu usang. "Komputasi modern" adalah istilah yang sangat luas. Namun, ini termasuk pemrograman C, jadi "Bahasa Pemrograman C" masih merupakan buku yang relevan. Ini termasuk algoritma, jadi "Pengantar Algoritma" masih merupakan buku yang relevan. Begitu seterusnya dan seterusnya.
Sebagian besar aplikasi di App Store (untuk menggunakan platform seluler paling populer sebagai contoh) ditulis dalam Objective C, bahasa dari awal 80-an yang merupakan superset dari C. Jadi, sekali lagi, C masih relevan.
Ini hadiah kita.
Tapi apa artinya itu?
Ada terlalu banyak bahasa, API, kerangka kerja, platform, alat, strategi kolaborasi, dll. Bagi sekolah untuk mempersiapkan Anda untuk pekerjaan tertentu . Sekolah hanya dapat meletakkan fondasi, memberi Anda model kerja dasar tentang bagaimana mesin bekerja, tentang algoritma, struktur data, konstruksi kode, strategi dekomposisi, beberapa alat, dll.
"Pengembang nyata" bukanlah seseorang yang mengetahui segalanya, ia adalah seseorang dengan kapasitas untuk jenis pekerjaan ini, yang memiliki dasar dalam teori dan praktik, dan siapa yang tahu cara belajar , karena pendidikan Anda tidak pernah berakhir.
sumber
Ok, jadi saya akan menawarkan jawaban yang jauh lebih teoretis. Saya setuju dengan kalian semua yang menjawab, cukup jelas menurut saya, buku-buku ini adalah dasar dari apa yang kita sebagai programmer lakukan dan semua kerangka kerja baru ini dibangun di atas garis pilar lama yang sama.
Ini dua sen saya - bukan milik saya, saya mempelajarinya dari St. Aquinas dan dari Aristoteles sebelum dia.
Mekanika komputer tidak berubah sejak von-neumann. Demikian pula, rincian yang Anda butuhkan untuk menjadi seorang programmer yang hebat akan sama sampai model von-neumann menjadi usang. Majelis, adalah bahasa komputer ... mempelajarinya, tidak ada alasan.
C adalah bahasa asli untuk Windows dan Unix. Pelajari atau temukan perdagangan baru. Jika Anda salah satu dari orang-orang yang langsung ke JAVA atau C #, Anda mungkin seorang programmer yang baik, tetapi Anda akan menjadi programmer yang jauh lebih baik jika Anda akan belajar periode C--.
Algoritma dan Struktur Data adalah dasar dari program komputer, mempelajarinya.
Yang lainnya adalah abstraksi dari disiplin inti ini. Abstraksi luar biasa ketika digunakan dengan benar - serius, saya menggunakan C # untuk 75% dari semua proyek saya. Namun, mereka membuat Anda bodoh jika Anda tidak meluangkan waktu untuk memahami bagaimana mereka bekerja dan bagaimana berfungsi tanpa mereka. Anda akan menghabiskan waktu tanpa henti membuat perangkat lunak agar sesuai dengan lubang persegi pepatah ketika ada pendekatan yang jauh lebih baik dan akan memiliki bug yang bisa dihindari. Pengembangan Perangkat Lunak adalah kerajinan yang harus dikuasai, dan pada akhirnya, alat jarang berubah. Itulah sebabnya buku-buku ini sangat penting.
Semua programmer JAVA dan C # ini saja, tsk, saya berani bertaruh kebanyakan dari mereka belum pernah melihat episode Star Trek!
sumber
Saya mendengar pepatah dari seorang mentor:
"Nasihat yang bagus disertai dengan alasan mengapa supaya kamu tahu kapan itu bukan nasihat yang baik lagi." Jadi, dalam istilah buku, sebuah buku yang menjelaskan mengapa melakukan X lebih dari Y akan memberi tahu Anda ketika nasihat itu tidak lagi berlaku. Buku "selalu lakukan ini, lakukan saja" seperti beberapa kursus kilat dalam bahasa X tidak begitu baik.
Saya melihat satu yang disebut "belajar unix dalam 24 jam", well buku itu sekitar 8cm tebal, saya ragu banyak orang bahkan bisa membaca setiap halaman dalam 24 jam :)
Ingatlah bahwa apa yang sedang populer hari ini mungkin akan diejek besok. Semua yang berikut ini pernah dianggap sebagai arus utama (kemarin) tetapi sekarang tidak:
Dan ada beberapa hal yang dulunya sepenuhnya laknat tetapi sekarang diterima:
Ketahui alasannya, dan Anda akan tahu kapan asumsi lama telah diganti dengan kenyataan baru, dan begitu pula sarannya.
sumber