- Brian Kernighan mengenang The Practice of Programming, yang ia tulis bersama Rob Pike, sebagai buku yang pada 1999, ketika internet, Python, Perl, dan Java sedang menyebar cepat, berupaya membahas “cara menulis program dengan baik secara profesional”
- Sebagian contoh sudah usang seiring waktu, tetapi ia memandang prinsip seperti gaya, debugging, dan sikap dalam menulis kode tetap dapat diterapkan meski bahasa dan lingkungan berubah
- Parsing CSV masih tetap berantakan dan spesifikasinya pun tidak sepenuhnya jelas; pandas memang kuat, tetapi berat dan tingkat abstraksinya tinggi, sehingga kadang kode Python sederhana lebih baik
- Bell Labs adalah lingkungan riset yang memungkinkan pekerjaan seperti Unix, yacc, dan alat persiapan dokumen berkat pemikiran jangka panjang, rekan-rekan hebat, serta tekanan produk dan pendapatan yang rendah
- Model bahasa besar adalah teknologi yang tiba-tiba memberi dampak besar sejak November 2022; pengalaman Claude menghasilkan kode Python terkait spaCy yang hampir benar mengisyaratkan perubahan cara kerja programmer
Lingkungan pemrograman 1999 dan tujuan buku
- The Practice of Programming terbit sekitar 15 tahun setelah The Unix Programming Environment, buku yang sebelumnya ditulis Kernighan bersama Rob Pike
- Tujuan buku ini adalah membahas “bagaimana program benar-benar ditulis” dan “bagaimana menulisnya secara efektif dan profesional”
- Lingkungan komputasi sekitar 1999 sangat berbeda dari sekarang
- Internet masih relatif baru bagi publik, muncul sekitar 1995–1996
- Python adalah bahasa yang relatif baru, Perl masih kuat, dan Java juga populer
- Contoh-contoh spesifik mungkin kini kurang langsung relevan bagi pembaca, tetapi ia memandang prinsip umum tetap bisa dipindahkan ke lingkungan lain
- Para pembawa acara menilai bab tentang panduan gaya dan debugging khususnya masih sangat relevan, dan terkesan oleh fakta bahwa istilah “bug” sudah digunakan dalam konteks Thomas Edison dan phonograph bahkan sebelum anekdot Grace Hopper tentang komputer Mark
CSV, pandas, memori, dan abstraksi
- Mengenai contoh parser CSV dalam buku tersebut, Kernighan mengatakan bahwa sampai hari ini pun belum ada parser CSV yang benar-benar bagus
- Musim panas lalu, saat mencoba menambahkan fitur CSV ke awk, ia menghabiskan beberapa minggu hingga sekitar satu bulan untuk memakai “parser CSV yang benar”
- Spesifikasi CSV tidak sepenuhnya jelas, dan dalam arti tertentu ia memandangnya belum terstandardisasi
- pandas dinilai sebagai alat yang berat meski kuat
- Ia mengatakan bahwa dalam banyak kasus, menulis Python secara langsung lebih sederhana daripada memahami mekanisme iterasi dan seleksi implisit ala pandas
- Pembawa acara mengatakan pandas sering dipilih dalam pekerjaan machine learning dan data science, tetapi ketika performa eksekusi yang penting dibutuhkan, ia mempertimbangkan pendekatan yang lebih sederhana
- Manajemen memori kini dianggap sebagai area yang hampir tidak perlu terlalu dipikirkan dalam banyak pemrograman
- Di C, memori harus dikelola secara langsung dan itu sangat sulit
- Di C++ juga memungkinkan, tetapi teknik untuk menanganinya dengan benar sulit dipelajari
- Di Python, ia menggambarkannya sebagai sesuatu yang sebagian besar bekerja “seperti sulap”
- Abstraksi besar tidak selalu sepenuhnya menyembunyikan masalah
- Saat memproses teks seukuran satu buku dengan spaCy, ia mendapat pesan bahwa memori tidak cukup karena kuota kerja default adalah 1GB, lalu menyelesaikannya dengan menggandakan pengaturan
- Pada masa Kernighan tumbuh, kilobyte pun sudah merupakan memori yang besar
- Di komunitas embedded, memori dan performa masih diperlakukan sangat penting, dan selain C, bahasa seperti Rust atau Zig juga disebut dalam konteks itu
Go, Plan 9, dan lingkungan riset Bell Labs
- Pembawa acara mengatakan bahwa gagasan masalah dalam The Practice of Programming terasa seperti landasan bagi desain bahasa Go
- Kernighan mengatakan Rob Pike adalah salah satu dari tiga orang yang membuat Go, dan “sepenuhnya masuk akal” bahwa ketidaknyamanan yang dibahas dalam buku itu menjadi latar saat kemudian memikirkan bahasa baru
- Namun ia tidak memiliki ingatan spesifik bahwa Pike saat itu berpikir “akan memperbaiki dunia dengan bahasa baru”
- Ia memandang pekerjaan Plan 9 pada akhir 1990-an serta bahasa seperti Limbo dan Alef sebagai bagian dari garis keturunan menuju Go
- Pengalaman di Bell Labs bagi Kernighan hampir merupakan lingkungan ideal
- Saat menjadi mahasiswa pascasarjana Princeton pada 1960-an, ia dua kali magang musim panas di Bell Labs bersama grup terkait Multics
- Karena pengalaman itu menyenangkan, ketika mendapat tawaran untuk kembali, ia tidak melakukan wawancara di tempat lain
- Ia berada di Bell Labs dari awal 1969 hingga sekitar 2000
- Di Bell Labs saat itu, pemikiran jangka panjang dimungkinkan, dan tekanan untuk mengejar hasil kuartalan atau segera menghasilkan produk dan pendapatan relatif kecil
- Orang-orang dapat mengerjakan hal yang mereka anggap menarik dan penting dengan relatif mandiri
- Karena itu masa ketika AT&T menyediakan layanan telepon untuk sebagian besar Amerika Serikat, lingkungannya “penuh masalah”, dan ada banyak pekerjaan yang bisa berguna bagi sistem telepon
- Ia tidak pernah bertemu langsung dengan Claude Shannon
- Dalam ingatannya, Shannon sudah pindah ke MIT beberapa tahun sebelum Kernighan datang ke Bell Labs
- Kernighan mengatakan ia dekat dengan Richard Hamming, yang pernah berbagi kantor dengan Shannon
Belajar, menulis buku, dan cara berpikir pemrograman
- Pembelajaran awal Kernighan terjadi di Bell Labs, saat ia bertemu orang-orang hebat, alat-alat bagus, dan masalah-masalah menarik
- yacc adalah alat yang memudahkan pembuatan bahasa pemrograman baru, dan Kernighan memanfaatkannya tidak hanya untuk pembuatan bahasa tradisional, tetapi juga di bidang seperti persiapan dokumen dan bahasa deklaratif
- Dari proses ini ia belajar banyak tentang desain dan implementasi bahasa
- Ia juga lama tertarik pada alat persiapan dokumen
- Ia dipengaruhi oleh runoff, program awal MIT untuk persiapan teks interaktif
- Di Princeton, ia menulis program persiapan dokumen serupa dalam Fortran untuk membuat disertasinya sendiri
- Di Bell Labs, ia membuat alat agar buku lebih mudah diproduksi secara fisik dan agar contoh program tidak rusak dalam proses penerbitan
- Setelah pindah ke universitas, proses menjelaskan hal-hal yang sudah ia ketahui kepada mahasiswa non-jurusan menjadi pembelajaran penting
- Ia harus menjelaskan kepada mahasiswa yang kuat di sastra atau musik bagaimana bilangan biner bekerja
- Ia mengatakan dalam proses itu ia juga belajar bahwa Leibniz adalah penemu praktis bilangan biner pada akhir 1600-an, dan bahwa Leibniz membuat sesuatu yang mirip notasi heksadesimal dengan memakai not musik alih-alih huruf
- Motivasi menulis buku muncul ketika ada “sesuatu yang layak dikatakan” dan “rekan penulis yang ingin diajak mengatakannya bersama”
- Sebagian besar buku Kernighan adalah karya bersama
- Ia memandang kolaborasi jauh lebih mudah daripada menulis sendiri karena masing-masing dapat melengkapi dan menyempurnakan isi satu sama lain
Model bahasa besar, pendidikan, dan buku rekomendasi
- Kernighan menyebut sistem time-sharing, Unix, evolusi bahasa pemrograman, peningkatan sumber daya berkat Hukum Moore, dan PC sebagai perkembangan penting dalam kariernya
- Time-sharing adalah perubahan besar yang memungkinkan orang bekerja sesuai jadwal sendiri tanpa harus berada secara fisik di depan komputer atau menunggu diproses operator
- Ia memandang cloud computing sebagai bentuk yang kembali mirip time-sharing, karena komputasi tersentralisasi dan pengguna memiliki perangkat periferal canggih yang berkomunikasi dengan sistem jauh
- Sebagai teknologi yang paling menarik saat ini, ia memilih model bahasa besar
- Ia menganggap unik bahwa teknologi ini tiba-tiba muncul sekitar November 2022 dan dalam waktu singkat memberi dampak besar
- Ketika ia meminta Claude dalam dua atau tiga kalimat untuk tugas terkait spaCy, Claude menghasilkan kode Python yang sekitar 99,9% benar, dan ia mengatakan tingkat penggunaan Python-nya pun lebih canggih daripada dirinya
- Ia tidak berpikir programmer akan hilang, tetapi cara kerja mereka kemungkinan akan berubah
- LLM membuka pendekatan baru bagi mahasiswa
- Seorang mahasiswa melihat bahwa LLM dapat digunakan untuk meningkatkan terjemahan Greek kuno
- Hasil OCR dari dokumen cetak lama tahun 1700-an dapat diperbaiki dengan memanfaatkan pengetahuan bahasa yang dimiliki model bahasa
- Dalam kelas untuk non-jurusan, ia mencoba menghubungkan cara kerja komputer dengan isu-isu teknologi yang terjadi di dunia
- Pesertanya banyak mahasiswa humaniora dan ilmu sosial, dan banyak yang mengambilnya untuk memenuhi persyaratan penalaran kuantitatif
- Topik seperti hardware, software, komunikasi, net neutrality, privacy, security, dan Google antitrust dibahas bersama dasar teknisnya
- Cara berpikir pemrograman—membagi pekerjaan besar menjadi bagian kecil dan berpikir bertahap—dapat dipindahkan ke bidang lain seperti penulisan makalah atau analisis masalah hukum
- Bagi pemula, penting untuk menemukan hal yang ingin mereka kerjakan sendiri
- Jika mulai dari masalah yang menarik bagi mereka, seperti membuat game, memperbaiki keuangan pribadi, atau analisis teks, hambatan psikologis bisa diturunkan
- Dalam kelas non-jurusan, ia memakai tugas yang menganalisis Pride and Prejudice dengan NLTK, lalu meminta mahasiswa memilih buku lain yang mereka inginkan dan mengeksplorasinya dengan cara yang sama
- Buku yang direkomendasikan atau disebut serta selera bacaannya beragam
- Di antara buku teknis, ia sesekali kembali membaca The Mythical Man-Month; sebagian isinya menua dengan baik, tetapi sebagian ungkapan bahasanya kini tampak sangat seksis menurut standar sekarang
- Recoding America karya Jennifer Pahlka disebut sebagai buku menarik yang membahas mengapa software pemerintah tidak bekerja sebaik yang diharapkan dan mengapa sistem membuat perbaikan menjadi sulit
- Untuk bacaan nonteknis, ia menyebut sejarah, sejarah militer, novel detektif, novel Dick Francis bertema pacuan kuda, serta Chip War yang membahas semikonduktor
1 komentar
Komentar Hacker News
Buku ini adalah buku fundamental, jadi semua programmer, terutama pemula, sebaiknya membacanya.
Seperti buku Kernighan lainnya, kalimatnya sederhana, ringkas, dan tepat; tanpa basa-basi, hanya inti yang dimuat dalam sedikit di atas 200 halaman. Setelah memahami prinsipnya dari contoh, kita tinggal menerapkannya ke konteks sendiri.
Keunggulan buku K&P adalah tidak membanjiri pembaca dengan teori, melainkan menunjukkan penerapan praktis suatu teknik terlebih dahulu, sehingga belajar teorinya setelah itu terasa lebih mudah.
Misalnya, ketika saya membaca buku ini setelah punya pengalaman pemrograman jaringan dan implementasi protokol, bagian bab "Notations" yang menunjukkan rutin pack/unpack pesan jaringan dengan layout paket ditentukan memakai string format gaya
printf/scanfbenar-benar membuka mata. Saya belajar kekuatan notasi yang tepat dan bahasa kecil, dan ada juga potongan kode yang menunjukkan ide mesin virtual, code threading, dan kompilasi JIT.Buku Kernighan dan Pike yang lebih lama, "The Unix Programming Environment", juga layak dibaca bersama. Bab "Program Development" memuat seluruh proses membuat compiler untuk bahasa kalkulator kecil dengan memakai alat pengembangan compiler dalam sekitar 50 halaman; sejauh yang saya tahu, itu adalah tulisan paling kecil dan sederhana yang menjelaskan cara menulis compiler.
Kesimpulannya, semua buku Kernighan layak dibeli dan dipelajari.
Buku C sudah pernah saya baca dulu, dan saya ingat tulisannya sangat bagus. Saya pasti akan mendapat banyak kebijaksanaan pemrograman, tetapi dari sudut pandang penulisan teknis juga saya ingin menganalisis mengapa buku-buku Kernighan begitu bagus.
Sepertinya Kernighan banyak mempelajari penulisan, atau setidaknya banyak melakukan pemikiran prinsip pertama tentang penulisan. Judul "The Elements of Programming Style" juga merujuk pada buku penulisan terkenal Strunk dan White, "The Elements of Style".
Menurut standar sekarang memang agak usang, tetapi tetap buku yang mudah dibaca.
Ini bukan sindiran; saya ingin tahu mengapa buku ini wajib dibaca bahkan bagi orang yang sedang melaju nyaman dalam kariernya.
Saya sangat menyukai "The Practice of Programming".
Di antara buku pemrograman yang pernah saya baca, pelajaran dari buku ini paling kuat membekas. Saya memang tidak membacanya ulang selama beberapa tahun, tetapi saya merasa buku ini memengaruhi praktik saya sehari-hari.
Sebagian contoh pemrograman konkretnya memang cukup ketinggalan zaman, tetapi ide umumnya masih sangat solid.
Saya suka Kernighan. Ia benar-benar orang yang rendah hati.
Dalam salah satu video di YouTube, ia bercerita bahwa saat disertasi doktoralnya ia sedang memecahkan masalah sulit, yang belakangan ternyata merupakan masalah NP-complete sebelum teorinya dirapikan.
Saya mengirim email meminta disertasinya dan mendapat balasan cukup cepat; setelah membacanya, isinya benar-benar menarik.
Bagi saya dan banyak orang, pemikirannya tentang pemrograman termasuk yang paling menarik dan berguna, dan sebagian besar karena ia mampu menyampaikannya dengan sangat jelas.
Saya berharap wawancara kerja sekarang lebih menguji pemahaman konsep seperti yang ada di buku ini daripada LeetCode.
Di dunia baru yang absurd ini, Brian Kernighan pun mungkin tidak lolos wawancara LeetCode hard.
Semuanya masalah pemrograman yang cukup praktis. Di Stripe ada wawancara yang meminta kita mem-fork library Java Jackson, menanam bug di dalamnya, lalu menemukan dan memperbaikinya. Cukup unik, tetapi jauh lebih dekat dengan pekerjaan pemrograman nyata.
Saya juga teringat Katalin Karikó, peraih Nobel untuk mRNA, yang diturunkan jabatannya di UPenn karena tidak bisa mendatangkan dana riset.
Penulis lain yang masuk kategori sehebat Kernighan dan buku-bukunya adalah Jon Bentley, dengan bukunya Programming Pearls dan More Programming Pearls.
https://en.m.wikipedia.org/wiki/Jon_Bentley_(computer_scient...
Buku ini berguna untuk semua programmer karena mengajarkan cara berpikir dari atas tentang efisiensi dengan fokus pada algoritma dan bahasa.
Buku-buku efisiensi modern dari Agner Fog, Fedor Pikus, dan lainnya terutama membahas teknik performa di level compiler/sistem operasi/prosesor, jadi jika dibaca bersama, gambaran besarnya akan lengkap.
Teman-teman, g itu tidak dibunyikan.
Akan bagus kalau Rob Pike diundang. Sepertinya ia pasti akan menyinggung koreksi pelafalan. Rasanya saya sudah bisa mendengar suaranya.
Kami juga sangat ingin mengundang Rob Pike. Sedang diusahakan, tetapi menghubunginya agak lebih sulit.
Saya baru menonton sekitar sepertiga videonya, tetapi terlihat para pembawa acaranya cukup piawai mengajukan pertanyaan yang berwawasan
Saya Carter, salah satu pembawa acara di video itu. Senang kalian menikmatinya. Bisa berbincang dengan Brian Kernighan benar-benar sebuah kehormatan besar
Karena format ini membahas buku, sepertinya bagus kalau di deskripsi atau sebagian komentar disusun daftar buku yang dibahas, dan kalau memungkinkan daftar medianya
Saya sudah memasukkan "The Bit Player" (dokumenter Claude Shannon tahun 2018) ke daftar tontonan, serta "Recoding America", "Chip War", dan "Endurance: Shackleton's Incredible Voyage" ke daftar bacaan
Akan bagus juga kalau menambahkan Software Tools in Pascal karya Kernighan ke daftar buku yang akan dibahas di podcast
Saya punya buku itu dan menurut saya bagus
Kernighan dan Plaugher pertama-tama menulis "Software Tools" dalam RATFOR, lalu menulis "Software Tools in Pascal". Dan sebagai respons langsung atas pengalaman itu, Kernighan menulis makalah berjudul "Why Pascal Is Not My Favorite Programming Language"
Menulisnya dalam Pascal seharusnya jauh lebih mudah daripada menulisnya dalam RATFOR, tetapi ternyata tidak, dan Kernighan memikirkan mengapa demikian
Tulisannya masih menarik, dan misalnya bisa dibaca di sini: https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas...
Namun tulisan ini awalnya merujuk pada Pascal standar. Ekstensi seperti Turbo Pascal memperbaiki banyak masalah. Hanya saja, seperti yang ia katakan, tidak ada portabilitas di antara ekstensi-ekstensi itu. Meski begitu, ketika Turbo Pascal menjadi ekstensi "standar" de facto, sebagian masalah itu juga cukup teratasi
Saya terkesan oleh ide dan tulisannya, dan itu menjadi pijakan yang kemudian membuat saya mencari dan membaca karya-karya utama Kernighan lainnya
Kernighan juga merupakan salah satu penulis buku The Go Programming Language, setidaknya untuk edisi pertama