1 poin oleh GN⁺ 2024-06-14 | 1 komentar | Bagikan ke WhatsApp
  • 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 Chicago di 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

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

 
GN⁺ 2024-06-14
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”

    • Kemungkinan besar Anda juga akan menyukai ceramah ini: “Programming for the Expression of Ideas”
      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
    • Belajar biologi untuk memahami konsep sistem perangkat lunak itu kurang dihargai
      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
    • Saat kecil saya sering mengeksplorasi masalah dengan BASIC, dan itu benar-benar sangat kuat untuk belajar secara kreatif
      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
    • Saya teringat kutipan favorit dari 『Living Documentation』 karya Cyrille Martraire: pengembangan perangkat lunak adalah pengetahuan dan pengambilan keputusan berdasarkan pengetahuan itu, dan proses tersebut kembali menghasilkan pengetahuan tambahan
      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
    • Saya memakai pemrograman persis untuk tujuan itu. Untuk menghilangkan ambiguitas dari catatan dan membuatnya bisa dijalankan serta diverifikasi
      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

    • Jika memikirkan agile coach, penginjil clean code, dan segala industri sampingan yang menjual cara menyempurnakan kode dan tim, ini terasa cukup mengena
    • Saya menafsirkan ungkapan “kami para ilmuwan komputer” sebagai merujuk pada para peneliti
      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
    • Dari sudut pandang support engineer, rasanya seperti: “Pelanggan yang terhormat, jangan khawatir meski semua data Anda rusak atau Anda kehilangan akses disk. Ini berarti kita sedang bergerak ke arah baru, dan kami sedang membuat pekerjaan harian Anda menjadi ‘menyenangkan’”
      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

    • Saya penasaran apakah Anda pernah bekerja sebagai tukang las
      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

    • Suatu hari nanti akan saya tulis di blog, tetapi Sussman pernah mengundang saya ke kantornya untuk minum teh, jadi saya bergegas ke MIT co-op, tetapi tidak bisa menemukan SICP
      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

    • Itu tampaknya lebih dekat dengan sifat umum pekerjaan lepas dan konsultasi daripada esensi pemrograman itu sendiri
      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