- Gerald Sussman mengatakan bahwa sejak 1962, melalui lingkungan komputasi awal seperti IBM 7094, PDP-6, Mac Hack 6, dan Maxima, ia terus mempertahankan kesenangan dari pemrograman itu sendiri
- Pemrograman bukan sekadar coding yang memindahkan spesifikasi ke kode secara mekanis, melainkan lebih dekat ke perancangan rekayasa abstrak yang, di bawah tujuan yang belum sempurna, bersama-sama mencari spesifikasi dan implementasi yang mungkin
- Dengan melihat struktur eval/apply di Lisp berdampingan dengan interaksi dalam persamaan Maxwell, ia memandang pemrograman sebagai aktivitas kreatif yang menangani persoalan konseptual mendalam seperti fisika, matematika, dan filsafat
- Bug bukan sekadar kegagalan, tetapi kesempatan belajar yang muncul ketika manusia yang terbatas memecahkan masalah dengan rencana yang disederhanakan, serta bagian dari “pemecahan masalah dengan men-debug rencana yang hampir benar”
- Pengalaman dengan diferensiasi otomatis, perluasan operasi generik di Scheme, dan representasi mekanika klasik sebagai program yang dapat dijalankan menunjukkan bahwa pemrograman dapat memperjelas disiplin ilmu lain; ia menekankan bahwa kesenangan itu menjadi lengkap ketika dibagikan sebagai free/libre software
Perancangan dan Eksplorasi yang Melampaui Coding
- Sussman telah menggunakan komputer sejak masih siswa SMA pada 1962, dan mengenal komputasi melalui Columbia Science Honors Program
- Komputer awal adalah mesin seperti seri IBM 7094 yang berharga jutaan dolar, hanya dapat mengalamatkan 2^15 word 36-bit, dan beroperasi dengan siklus sekitar 2 mikrodetik
- Setelah masuk MIT, ia mengenal komputer seperti DEC PDP-6, dan sistem itu dapat mengalamatkan 2^18 word 36-bit
- Memori besar diperlukan untuk sistem manipulasi simbolik awal seperti Maxima
- MIT memesan memori besar kepada Fabritek, pembuatannya memakan waktu 1 tahun, dan menurut catatan biayanya sekitar 380 ribu dolar
- Karena memori ini sangat besar pada masa itu, ia dinamai Moby, mengikuti nama paus
- Ia terlibat dalam kecerdasan buatan, desain komputer baru, penciptaan bahasa pemrograman, simulasi numerik mekanika langit, dan penulisan sistem simbolik besar, tetapi inti semuanya tetaplah kecintaannya pada pemrograman
- Pemrograman bukan pekerjaan mekanis yang mengubah spesifikasi yang terdefinisi baik menjadi kode yang dapat dijalankan
- Spesifikasi yang baik biasanya tidak turun dari atas
- Setelah mengeksplorasi apa yang dapat diimplementasikan, spesifikasi ditulis sesuai dengan apa yang benar-benar dapat dicapai
- Karena itu, pemrograman adalah eksplorasi bersama untuk mencari spesifikasi dan implementasi yang mungkin menuju tujuan yang baru terdefinisi sebagian
- Berbeda dari rekayasa fisik, pemrograman lebih dibatasi oleh kemampuan mengorganisasi pikiran daripada oleh batasan fisik seperti toleransi, kelengkungan pemotongan, atau galat resistansi
- Programmer menangani mesin virtual raksasa sambil memilih representasi, algoritme, dan tingkat abstraksi
Pemrograman sebagai Seni Kreatif
- Untuk menjelaskan sensasi pemrograman, Sussman mengutip tulisan Edgar Allan Poe yang menjelaskan bagaimana ia menulis “The Raven”
- Poe mengatakan karya itu diselesaikan secara bertahap seperti persoalan matematika, bukan melalui kebetulan atau intuisi, dan mengungkap proses kompleks berupa pemilihan, penghapusan, penyisipan, dan revisi
- Proses ini lebih dekat dengan rasa pemrograman yang sebenarnya daripada pekerjaan mengubah spesifikasi menjadi kode
- Pemrograman lebih mirip seni kreatif seperti arsitektur, musik, matematika, dan fisika teoretis
- Matematika adalah aktivitas untuk menciptakan teorema yang indah
- Fisika teoretis adalah aktivitas untuk menciptakan penjelasan tentang dunia fisik
- Pemrograman juga adalah aktivitas menciptakan dan menyempurnakan ide serta struktur
Struktur yang Ditunjukkan eval/apply dan Persamaan Maxwell
- Pengalaman mempelajari Lisp 1.5 dan interpreter eval/apply saat tahun pertama di MIT menjadi titik balik yang mengubah hidup Sussman
- eval menerima ekspresi dan lingkungan, mengevaluasi operator serta operand untuk menghasilkan prosedur dan argumen, sementara apply menerima prosedur dan argumen, mengikat argumen ke parameter formal, lalu kembali ke evaluasi body
- Sussman melihat struktur ini juga berlaku pada semua bahasa komputer dan cara kerja komputer itu sendiri
- Pada periode yang sama, saat mempelajari persamaan Maxwell di kelas elektromagnetisme, ia mendapatkan kesan kuat lainnya
- Maxwell menambahkan suku arus perpindahan untuk menyelesaikan ketidaksesuaian antara konservasi muatan dan persamaan yang ada
- Hasilnya adalah persamaan gelombang elektromagnetik, dan muncul hubungan bahwa cahaya adalah gelombang elektromagnetik
- Ada kemiripan mendalam antara interaksi eval/apply dan struktur dalam persamaan Maxwell, di mana medan listrik dan medan magnet saling menghasilkan perubahan
- Kemiripan seperti ini juga terhubung dengan hubungan variabel dual seperti posisi dan momentum, energi dan waktu
- Pemrograman sehari-hari bertemu dengan persoalan filosofis
- Tidak sederhana bagaimana nama
Chicagodi dalam program merujuk pada kota sebenarnya - Apakah dua objek identik terlihat dari apakah perubahan pada salah satunya juga mengubah yang lain, dan mutasi (mutation) terkait dengan persoalan identitas
- Karena program fungsional murni tidak memiliki mutasi, identitas harus dilihat dengan cara lain
- Di dalam ekspresi yang dikutip, prinsip “hal yang sama dapat diganti dengan hal yang sama” bisa runtuh
- Proposisi seperti “semua gagak berwarna hitam” membuat makna bukti menjadi sulit, seperti dalam Raven Paradox milik Hempel
- Tidak sederhana bagaimana nama
Cara Menangani Bug
- Sussman melihat bug bukan sebagai kegagalan yang memalukan, melainkan sebagai kesempatan belajar
- Ia mengatakan bahwa debugging dengan alat yang baik bisa menyenangkan seperti petualangan, dan bug perlu memiliki nama seperti fencepost error atau reader-writer bug
- Bug juga merupakan hasil dari strategi desain yang kuat
- Manusia tidak bisa memikirkan semuanya sekaligus, sehingga mereka membuat rencana
- Rencana menuntut penyederhanaan, dan penyederhanaan menciptakan bagian yang terlewat
- Akibatnya muncul bug, dan debugging menjadi proses memperbaiki rencana yang hampir benar ke arah yang diinginkan
- Sussman menyebut cara ini “pemecahan masalah dengan men-debug rencana yang hampir benar”
- Contoh desain filter listrik menunjukkan strategi ini
- Untuk membuat filter dengan respons antara 30Hz dan 3kHz, fungsi sistem difaktorkan
- Resistor dan kapasitor digabungkan untuk menyusun subrangkaian yang diperlukan
- Namun setiap subrangkaian memiliki asumsi bahwa “tidak ada arus yang keluar”, sehingga ketika dihubungkan bersama muncul loading bug
- Patch dengan amplifier dapat menyelesaikan masalah ini dalam sebagian situasi
- Tidak semua bug menyenangkan
- Sussman mengkritik C dan C++ sebagai bahasa yang penuh jebakan
- Ia juga mengaitkan situasi di mana kernel baru sering diperlukan karena bug manajemen memori dengan kode yang ditulis dalam C
- Di Python pun ia memberi contoh kurangnya konsistensi:
{}adalah dictionary tetapi{1}adalah set, dan tuple didefinisikan oleh koma, bukan oleh tanda kurung
Diferensiasi Otomatis dan Fisika yang Dapat Dijalankan
- Pada 1992, Sussman tinggal bersama kelompok Kip Thorne di Caltech dan mempelajari relativitas umum; ia mengatakan menggunakan program sebagai media untuk menyimpan pengetahuan
- Bersama Dan, seorang perancang chip floating-point di Hewlett-Packard, saat memikirkan turunan fungsi, ia secara independen menemukan kembali diferensiasi otomatis mode maju (forward-mode automatic differentiation)
- Tujuannya adalah cara yang bukan diferensiasi simbolik yang mengintip isi fungsi, dan bukan pula aproksimasi numerik
- Intinya adalah chain rule
- Jika bilangan diperluas menjadi differential object yang memiliki bagian berhingga dan bagian infinitesimal, chain rule bekerja otomatis dalam komposisi fungsi
- Karena menggunakan Scheme, operator aritmetika primitif dapat didefinisikan ulang agar sesuai dengan differential object, dan Sussman mengimplementasikannya semalaman sebagai “hack attack”
- Setelah itu, beberapa orang berkontribusi menyempurnakan turunan fungsi tingkat tinggi, turunan multipel, dan perluasan dinamis operasi primitif Scheme
- Abelson membantu merapikan teori yang benar untuk turunan multipel
- Jeff Siskind, Barak Pearlmutter, dan Alexey Radul men-debug bug halus pada turunan fungsi tingkat tinggi
- Hansen merancang cara memperluas operasi primitif Scheme secara dinamis dengan efisien
- Pekerjaan ini berlanjut menjadi sistem Scmutils yang digunakan bersama Jack Wisdom, dan dipakai untuk mengajar serta meneliti mekanika klasik dan geometri diferensial
- Buku Sussman dan Wisdom, 『Structure and Interpretation of Classical Mechanics』, bertujuan memperjelas pemahaman mekanika klasik dengan teknik komputasi
- Notasi tradisional persamaan Lagrange bersifat ambigu tanpa pengetahuan kultural, dan juga bermasalah dari sudut pandang tipe fungsi
- Jika ditulis dengan notasi fungsional dan kode Scheme, ide matematika menjadi program yang jelas dan dapat dijalankan
- Dalam contoh osilator harmonik, program menghitung persamaan gerak yang benar untuk massa, konstanta pegas, dan posisi, serta hubungan frekuensi sudut
Kesenangan yang Lengkap Saat Dibagikan
- Sussman merangkum kesenangan pemrograman dalam beberapa bentuk
- Kesenangan menemukan kemiripan mendalam di antara dunia yang berbeda
- Kesenangan menghadapi, dalam pekerjaan nyata, persoalan yang telah lama dipikirkan para filsuf
- Kesenangan berburu dengan melacak bug
- Kesenangan menemukan ide dan abstraksi yang baik
- Kesenangan memperjelas disiplin ilmu lain melalui program
- Kesenangan pemrograman menjadi lengkap saat pekerjaan dibagikan dengan orang lain, dan ia menganjurkan penggunaan serta penulisan free/libre software
- Sussman menyayangkan bahwa rekaman harus dilakukan melalui Zoom, dan mengatakan ia menginginkan software yang bisa dibaca, dimodifikasi, dan dibagikan kembali
- Untuk perangkat lunak bebas dan kebebasan perangkat lunak, ia menganjurkan membaca filosofi perangkat lunak bebas GNU, serta meminta partisipasi dan donasi kepada Free Software Foundation
1 komentar
Komentar Hacker News
Saya sangat menyukai bagian ini: “Menulis program sebagai cara mengingat sesuatu. Ingatan saya adalah program yang saya tulis. Kalau saya mempelajari hal seperti matematika, fisika, atau biologi lalu menulis program yang mengekspresikannya, ketika dibaca nanti pun tidak ambigu dan mudah dipahami; dengan begitu saya menyimpan pengetahuan”
https://www.infoq.com/presentations/Expression-of-Ideas/
Topiknya sangat dekat dengan kutipan di atas, dan membahas bagaimana pemrograman membantu memahami objek seperti matematika dan fisika secara lebih mendalam
Misalnya, cara kerja analgesik dapat membantu memahami keylogger atau serangan man-in-the-middle, dan melihat “pemeriksaan tata bahasa” DNA selama mitosis bisa mengajarkan banyak hal tentang kompilasi secara umum
Perilaku anak anjing yang menelan apa pun yang dilihatnya pada dasarnya memberi sistem imun cukup banyak data uji tentang lingkungan sekitar, mirip dengan machine learning; banyak konsep keamanan siber juga bisa dipahami melalui biologi
Karena saya cenderung berpikir dalam gambar, sulit bagi saya untuk benar-benar memahami matematika, tetapi coding memungkinkan saya membangun gambar dan relasi di dalam kepala
Saya beruntung mengetahuinya saat kecil; tanpa itu rasanya saya mungkin akan tersesat
Masalah, keputusan, alasan, fakta yang menjadi dasar, serta alternatif yang ditinjau semuanya adalah pengetahuan; setiap perintah yang diketik dalam bahasa pemrograman juga dipandang sebagai sebuah keputusan
Desain perangkat lunak bisa berlangsung cukup lama hingga keputusan dan konteks sebelumnya terlupakan, dan juga cukup lama hingga orang pergi sehingga pengetahuan hilang, sementara orang baru masuk dengan pengetahuan yang kurang
Membuat komputer memahami source code bukanlah bagian yang sulit; yang lebih sulit adalah membuat orang lain memahami apa yang telah dicapai dan memungkinkan mereka bekerja lebih baik dan lebih cepat
Ketika kepala dan ingatan saja tidak cukup, kita perlu bantuan teknologi seperti tulisan, percetakan, dan perangkat lunak untuk mengingat dan mengorganisasi kumpulan pengetahuan yang lebih besar
Masalah terbesar dalam matematika juga adalah saya tidak bisa percaya bahwa saya tidak akan membuat kesalahan, dan tidak bisa percaya bahwa saya akan menemukan kesalahan itu
Compiler atau interpreter membuat saya menyadarinya
Dulu saya pernah mendengarkan ceramah Sussman bersama sekitar 20 mahasiswa doktoral neurosains di ruang bawah tanah NYU
Ia sudah membicarakan topik interpretabilitas AI jauh sebelum itu menjadi tren
Ketika saya mengajukan satu pertanyaan, ia langsung menyadari ada orang berlatar teknik elektro di ruangan itu, lalu pergi ke papan tulis di samping dan menunjukkan bahwa cara kerja operational amplifier bisa diturunkan dari prinsip pertama
Orang itu memiliki energi dan kecerdasan yang luar biasa, dan jelas meninggalkan kesan mendalam
Saya belum menonton videonya, tetapi langsung teringat kutipan Alan J. Perlis yang digunakan Sussman dan Abelson dalam dedikasi SICP
Isinya bahwa dalam ilmu komputer, menjaga kesenangan komputasi itu sangat penting, dan pada masa-masa awal memang sangat menyenangkan
Pelanggan kadang mengalami kerugian, dan keluhan mereka mulai kita tanggapi dengan serius, tetapi sudut pandangnya adalah bahwa kita tidak melihat diri kita bertanggung jawab atas penggunaan mesin ini secara sukses, bebas galat, dan sempurna
Sebaliknya, inti pesannya adalah bahwa kita bertanggung jawab untuk mendorong mesin, mengirimnya ke arah baru, dan menjaga kesenangannya; ia berharap ilmu komputer tidak kehilangan rasa senangnya, dan agar kita tidak bertingkah seperti misionaris atau penjual Alkitab
Jangan merasa bahwa kunci komputasi yang sukses hanya ada di tangan kita; yang ada di tangan kita adalah kecerdasan, yaitu kemampuan untuk melihat mesin sebagai sesuatu yang lebih besar daripada saat pertama kali kita mengenalnya dan membuatnya menjadi lebih besar
Bagi sebagian besar orang lainnya yang membuat program penghitung kacang, dari sudut pandang pihak yang membayar gaji, tidak kehilangan satu kacang pun jauh lebih penting daripada seberapa besar kesenangan kita atau seberapa jauh kita memperluas kemungkinan
Jadi itu bukan bug, melainkan sebongkah kecil kesenangan /s
Judul yang lebih tepat mungkin mendekati “ilmu komputer akademis itu menyenangkan, atau seharusnya menyenangkan”
Intinya adalah menemukan analogi, berpikir secara filosofis, debugging, menghasilkan ide bagus, dan memperoleh kejelasan semuanya menyenangkan; tetapi itu lebih merupakan kemewahan profesor yang dibayar untuk melakukan aktivitas semacam itu, dan tampaknya kurang cocok dengan dunia “pelanggan menginginkan ini paling lambat akhir pekan ini”, selain kenikmatan debugging yang masih bisa diperdebatkan
Sebagian besar “pemrograman” mungkin sebaiknya dipandang lebih seperti pengelasan, sebagai mata pelajaran sekolah vokasi
Mengembangkan teknik pengelasan baru memang pantas menjadi proyek riset tingkat pascasarjana, tetapi sebagian besar tukang las dan programmer bekerja dengan alat yang sudah dikenal baik dan sistem yang relatif sederhana
Siswa sekolah vokasi mungkin tidak ingin membuang waktu mempelajari MIT/GNU Scheme lalu tidak pernah memakainya lagi dalam karier, tetapi bagi mahasiswa akademis itu bisa terasa bernilai seperti mahasiswa linguistik yang belajar membaca dan menulis Linear B
Pekerjaan apa pun bisa saja menyenangkan, tetapi pada akhirnya kondisi seperti kompetensi dan kestabilan emosional rekan kerja dan manajer, rancangan dan keselamatan ruang kerja, kompensasi yang layak untuk hidup, serta ada tidaknya budaya organisasi yang membiarkan pekerjaan asal-asalan, lebih banyak berpengaruh; profesi khusus lain seperti pemrograman sistem kontrol industri juga demikian
Anda akan tahu bahwa orang yang ingin tahu, penuh pertimbangan, dan terdidik—baik belajar sendiri maupun tidak—melakukan pekerjaan lebih baik daripada orang yang tidak demikian dalam profesi apa pun
Ketika dulu saya bekerja sebagai tukang las, orang-orang yang cerdas, termotivasi, dan ingin tahu juga bekerja lebih baik daripada mereka yang sekadar menghabiskan waktu
Jadi saya setuju bahwa pemrograman mirip dengan pengelasan, tetapi dengan cara yang berbeda dari maksud Anda
SICP benar-benar mengubah cara saya memikirkan kode, abstraksi, dan modularitas, saat berada di sebelah rekan-rekan yang mengutak-atik Pascal atau C
Dengan Lisp/Scheme saya bisa membangun model mental dari sebuah masalah, sementara rekan-rekan harus melakukan abstraksi di kepala mereka lalu mengimplementasikannya dalam bahasa yang menuntut fokus tingkat rendah
Karena itu saya selamanya bersyukur bisa mengenal SICP sejak awal
Bahasa yang dipakai untuk memprogram bisa membuatnya terasa lebih menyenangkan atau lebih nyaman
Saya rasa saya mungkin tidak akan pernah benar-benar nyaman dengan C++
Senang bisa mendengar sudut pandang tentang pemrograman dari salah satu penulis SICP, dan anekdot di beberapa menit awal juga bagus
Ketika saya mengatakan bahwa saya membutuhkannya karena akan bertemu Sussman keesokan harinya, staf menelepon Harvard co-op, dan karena katanya ada satu eksemplar tersisa di sana, saya naik Uber ke toko buku Harvard dan membeli SICP
Keesokan harinya, saat saya pergi ke kantor Sussman di MIT, kebetulan Abelson juga ada di sana dan baru hendak pergi, sehingga keduanya menandatangani SICP saya
Sussman menambahkan, “Kalau kamu datang 15 menit lebih awal, istriku juga bisa menandatanganinya!” dan sampai saat itu saya tidak tahu bahwa istrinya adalah korektor SICP
Saya juga punya foto keren bersama dua penyihir ini sambil memegang buku ungu yang baru saja mereka tanda tangani
Saya ingin segera menonton video ini
Saya belum benar-benar mengerjakan SICP dengan serius, tetapi bukunya sudah saya pinjam, dan saya mendengarkan kuliahnya sambil merenovasi rumah
Kutipan Sussman tentang memahami hal-hal kompleks dari kuliah SICP sering saya masukkan ke presentasi terkait arsitektur, dan itu adalah slide yang selalu membuat orang buru-buru mencatat
Jujur, selama bertahun-tahun saya mencintai pemrograman, dan pada suatu masa itu juga menjadi hobi utama saya
Saya biasa mencoba bahasa atau perangkat lunak baru, membaca buku pemrograman, dan ikut berbagai obrolan seperti libera/freenode
Namun setelah menjadi pekerja lepas dan lebih berfokus pada mengirimkan kode yang cukup baik dengan cepat dalam konteks yang lebih kecil, antusiasme itu berkurang
Secara keseluruhan mungkin itu hal yang baik bagi saya sebagai engineer, tetapi banyak kesenangan dan pembelajaran hilang dari pekerjaan sehari-hari
Pekerjaan lepas dan konsultasi biasanya adalah menyelesaikan masalah, bahkan seperti menembak masalah: menyingkirkan masalah secepat mungkin, dan keanggunan bukanlah keharusan
Jika yang kamu inginkan adalah menjadi builder yang membuat alat, saya rasa itu tidak sering terjadi dalam pekerjaan lepas, tetapi mungkin bisa terjadi jika beralih ke peran konsultan
Karena konsultan lebih menyerupai hubungan jangka panjang, itu layak dipertimbangkan sebagai langkah berikutnya