Asli diterbitkan di blog saya pada 07/11/2020. Jika saya mengerti dengan benar, ini bukan masalah.
Saya percaya bahwa pengembangan perangkat lunak sangat banyak tentang pemrograman dalam pseudocode. Jika Anda telah memberikan pseudocode, kemudian menerjemahkannya ke Python, C, apa pun tidak menjadi masalah. Kesulitan utama terletak pada aktivitas konseptual ini, bukan pada pengkodean. Anda perlu tahu bagaimana mendekati masalah tertentu. Modularitas, abstraksi. Fleksibilitas, keandalan, kesederhanaan. Pola desain. Pengujian unit. Yu tahu.
Di dunia ada kursus "Struktur dan Interpretasi Program Komputer" (selanjutnya disebut SICP), yang diposisikan sebagai pengantar Ilmu Komputer dan sebelumnya digunakan di MIT untuk mengajar mahasiswa baru. Dua tahun lalu, saya dengan senang hati menguasai kursus tentang itu. dan mengambil bukunya. Pertama, saya akan memberi tahu Anda tentang kebaikan.
Teks ini bercerita tentang hal-hal yang sangat jauh dari pekerjaan saya sehari-hari dan memungkinkan saya untuk melihat pemrograman secara segar. Fungsionalitas adalah seluruh dunia yang hidup dengan hukumnya sendiri. Bahasa Lisp sangat berbeda dari bahasa C yang biasa saya gunakan karena fleksibilitasnya yang luar biasa karena pengetikan dinamis, manajemen memori otomatis, kemampuan untuk menimpa apa pun saat runtime. Saya telah mengembangkan gagasan yang lebih fleksibel tentang bagaimana, pada prinsipnya, Anda dapat memecahkan masalah yang berbeda. Berbicara dalam bahasa catur, saya telah memperluas repertoar pekerjaan rumah saya yang berguna dalam pekerjaan (meskipun tidak setiap hari). Latihan membuat otak saya bekerja (terkadang sangat intens), memikirkan kembali dan mensistematisasikan pengetahuan sebelumnya. Secara umum, mempelajari SIKP membuat saya menjadi developer yang lebih baik, memperluas wawasan saya. saya yakinSaya mulai melihat berbagai hal dengan pandangan yang lebih sistematis dan dewasa.
Buku itu terus-menerus mendorong saya untuk berpikir, untuk itu saya tunduk padanya. Saya sangat menyadari hal-hal yang tampaknya diketahui semua orang, tetapi yang, oleh karena itu, semua orang terlalu malas untuk menyebutkannya. Misalnya, semua perangkat lunak dibuat sederhana pada awalnya, dan kemudian menjadi lebih kompleks untuk meningkatkan kinerja. Pengguna tidak peduli berapa banyak baris kode sumber di dalamnya, tetapi kecepatan itu penting.
Bagaimana dengan efek spesifik untuk dikerjakan? Saya menjadi lebih baik dalam melihat kekurangan selama peninjauan kode (pertama-tama, kode saya sendiri). Menyukai fungsi-fungsi kecil, lebih disukai seumum mungkin. Saya mulai mempraktikkan penggunaan makro yang cermat dan tepat - terkadang di C Anda dapat dengan hati-hati melakukan sesuatu yang tidak sesuai dengan aturan, dan semua orang hanya akan menang dari ini. Pengalaman yang saya peroleh dari melakukan latihan di buku membantu saya dengan beberapa masalah pekerjaan saya.
Tapi ini satu sisi mata uang. Lain adalah bahwa pendekatan kursus ini untuk belajar dapat diekspresikan dalam unit fraseologis bahasa Inggris "tenggelam atau berenang". Ada palang di depan Anda, di sebelahnya ada tugas: menarik 10 kali. Pada prinsipnya, ini cukup untuk tugas tersebut, tetapi pendekatan ini tidak dapat dikatakan menyenangkan. Saya akan mengatakan dia cukup melelahkan! Anda dilemparkan ke pertempuran setengah siap, dan Anda mempelajari sebagian materi bukan dari penjelasan, tetapi dari kesalahan Anda. Mungkin ini cara yang dapat diterima untuk mengajar orang-orang yang bermotivasi tinggi, tetapi dia memaksa saya sebagai orang yang malas. Saya hampir tidak bisa menahannya selama 3 dari 5 bab (kadang-kadang saya berhenti selama beberapa bulan!), Melakukan latihan di dalamnya dari awal hingga akhir, tetapi tampaknya kesabaran saya habis.
Misalnya, buku tidak menyebutkan sepatah kata pun tentang cara mengatur alur kerja Anda. Bahkan tidak ada pertimbangan kasar tentang konsep seperti "debugging" (khusus di sini), "IDE" (di sini spesifik), "pengujian unit", "membagi file untuk digunakan kembali". Ada fragmen di mana sistem kompleks tertentu sedang dikembangkan, yang akan benar-benar siap hanya pada akhir bab, dan tugas muncul setelah setiap paragraf teks. Itu. tegasnya, setelah membaca hingga halaman N, dalam beberapa kasus Anda tidak dapat menyelesaikan masalah dari halaman ini tanpa menarik kode dari halaman berikutnya. Kode harus diseret dengan hati-hati, karena catatan mungkin membahas kehalusan yang tidak jelas, dan terkadang beberapa kode diberikan sebagai contoh ide yang rusak. Ini menyebalkan! Ya, ini seperti dalam kehidupan nyata - Anda perlu menentukan sendiri tugasnya, mencari sesuatu di Internet,tapi sial ... ini tutorial! Saya penuh dengan tugas-tugas sulit di tempat kerja, dan mungkinkah penulis seharusnya lebih pandai dalam membaca teks? Oke, saya pogromis profesional dengan akses internet cepat, tapi bagaimana dengan mahasiswa baru MIT di tahun delapan puluhan? Saya yakin itu tidak manis ...
Izinkan saya menekankan keuntungan utama buku ini: buku ini memungkinkan Anda memperoleh pengalaman pribadi, memahami pikiran Anda sendiri, dan memikirkan masalah yang kompleks secara umum. Kerugiannya terkait langsung dengan mereka: kompleks dan sering memberi Anda sedikit petunjuk untuk memahami sesuatu. Misalnya, jika Anda memiliki pengalaman bertempur, Anda tahu bahwa kode tanpa tes unit tidak dapat disebut solusi, tetapi buku tidak akan memberi tahu Anda tentang hal itu. Anda harus melakukannya sendiri! Apa yang kamu pikirkan? Yah, atau aku bohong, buku akan menceritakannya, tapi dengan cara yang paling sadis. Anda akan mendapatkan tugas berikutnya berdasarkan tugas sebelumnya (ini sering kali ada). Jika sebelumnya Anda telah mendapatkan satu kasus uji dan Anda memutuskan "Bagus, mari melangkah lebih jauh!" Mungkin, jika ini terjadi beberapa kali, Anda akan menyadari bahwa Anda melakukan sesuatu yang salah. Hal utama,agar pada saat-saat seperti itu Anda tidak menyerah saja, tetapi mengerti, maka semuanya akan baik-baik saja!
Fitur lain yang mengganggu dari teks: tugas (sekali lagi, seperti dalam kehidupan nyata) terkadang tidak didefinisikan dengan baik. Saya sedang melakukan latihan beberapa hari yang lalu, dalam setengah jam saya membuat sketsa solusi, mulai membaca kembali pernyataan masalah. Ternyata jika Anda berpikir secara pedantis, maka saya memenuhinya 95%, menghabiskan sekitar 40% usaha. Sebagian besar pria yang saya periksa melakukan hal yang sama. Seseorang melakukannya sepenuhnya, tetapi menggunakan retasan dari penerjemah Lisp lain. Saya kesal dan meludah, kehilangan motivasi untuk melanjutkan dalam waktu dekat. Sekali lagi saya akan memberi tahu Anda inti dari masalahnya: ada tugas di mana semuanya diselesaikan dengan sederhana dan logis, tetapi hanya jika Anda tidak ketat dengan diri sendiri. Jadi dalam kehidupan nyata, saya mengerti, tetapi saya memiliki ekspektasi yang berbeda dari buku teks. Ketika Anda melakukan latihan di waktu luang dan memeriksa diri sendiri, Anda ingin menyelesaikan masalah 100%,tidak "cukup baik untuk iterasi saat ini."
Masalah dengan unit test sebenarnya jenis yang sama. Terkadang Anda perlu sedikit berkeringat dan berpikir untuk menerapkannya ke dalam sistem. Saya tahu bahwa tidak ada tempat tanpa mereka, tetapi orang-orang yang lebih sederhana hanya membuat sketsa solusi tanpa memeriksa dan melanjutkan! Semakin Anda ketat, lebih perhatian, dan lebih berpengalaman, semakin sulit tugas Anda. Terkadang hanya pada saat-saat tertentu! Ini mendemotivasi, karena di sini, berbeda dengan bekerja, mereka tidak memuji atau membayar untuk itu, dan pendekatan berulang tidak dapat diterapkan dengan baik. Pengetahuan dan keterampilan, berguna dalam kehidupan nyata, melukai tangan saat memecahkan masalah siswa!
Patut dikatakan bahwa buku itu berisi banyak matematika. Memecahkan latihan, saya memahami keindahan dan kekuatan sains ini, tetapi terkadang sulit bagi saya justru karena masalah khusus ini, hanya secara tidak langsung terkait dengan masalah yang sedang dipecahkan. Hanya saja penulis memutuskan untuk menunjukkan sesuatu dengan contoh integrasi, jadi ingat dan botay!
Secara umum, saya tidak menyesal bahwa saya cocok dengan petualangan ini, itu berguna bagi saya. Namun, saya menyarankan orang lain untuk mencari sesuatu yang lebih baik. Misalnya, atas dasar SIKP, dengan mempertimbangkan kesalahannya (seperti yang mereka katakan, saya tidak memeriksa), baru-baru ini dibuat kursus "Bagaimana Merancang Program". Saya kira saya seharusnya mengidamkan dia juga, tetapi Anda tidak akan menghabiskan waktu.
PS Peter Norvig menulis ulasan yang bagus tentang SIKP .