- Leslie Lamport adalah pengembang awal LaTeX dan pelopor di bidang sistem terdistribusi. Pemenang Penghargaan Turing 2013
- Dalam keynote SCaLE 22x, ia menekankan pentingnya abstraksi, dan menunjukkan bahwa kebanyakan programmer terlalu terfokus pada coding dan bahasa, padahal berpikir abstrak dan merancang sebelum coding adalah inti utamanya
Ringkasan presentasi
- Anda mungkin berharap saya berbicara tentang konkurensi (Concurrency), tetapi tidak ada hal baru yang bisa saya sampaikan tentang itu
- Namun, wawasan tentang "menulis program konkuren" juga berlaku pada pemrograman secara umum
- Presentasi ini membahas pemrograman secara keseluruhan
Algoritme vs. program
- Algoritme: ide abstrak yang tidak bergantung pada bahasa. Konsep yang lebih abstrak dan berada di tingkat lebih tinggi daripada program
- Program: bentuk konkret dari implementasi algoritme dalam bahasa tertentu. Bahasa pemrograman terlalu kompleks untuk mengekspresikan algoritme
- Algoritme tidak dijalankan, dan umumnya singkat serta sederhana
- Terutama pada kode terkait konkurensi, algoritme yang tepat harus didefinisikan dan baru kemudian diimplementasikan
Abstraksi melalui contoh nilai maksimum array
- Bahkan untuk masalah sederhana, kita harus mendefinisikan dengan jelas "apa yang akan dilakukan (What)"
- Contoh: "mengembalikan nilai maksimum dari array bilangan bulat" → "mengembalikan bilangan terkecil yang lebih besar dari atau sama dengan semua elemen"
- Penanganan array kosong juga perlu didefinisikan sejak awal (misalnya menggunakan
-∞)
- Dengan definisi yang jelas seperti ini, kita bisa menurunkan algoritme (How) yang lebih sederhana dan lebih tangguh
Eksekusi program adalah aliran state
- Eksekusi program bukan sekadar urutan perintah, melainkan rangkaian state
- Setiap transisi state berarti eksekusi suatu bagian kode
- Sudut pandang ini penting saat membuktikan kebenaran algoritme (misalnya dengan invariant)
Alat untuk sistem kompleks: TLA+
- Untuk mengekspresikan abstraksi secara presisi, dibutuhkan bahasa yang akurat
- TLA+ adalah alat yang dirancang untuk tujuan tersebut
- Amazon Web Services menggunakan TLA+ untuk menemukan cacat desain serius lebih awal
- Virtuoso, OS dari wahana Rosetta, juga dirancang berbasis TLA+, dan kodenya ringkas serta stabil
Peran abstraksi bahkan dalam spesifikasi yang tidak lengkap
- Contoh: pretty printer dapat memiliki kriteria perataan yang subjektif
- Meski begitu, menetapkan sekumpulan aturan abstrak tetap penting untuk debugging dan pemeliharaan
Hubungan antara menulis dan berpikir
- Menuliskan pemikiran membantu memperjelas cara berpikir
- Abstraksi bukan sesuatu yang efektif jika hanya dilakukan di kepala, tetapi harus diekspresikan dalam tulisan
- Lamport menyebut bahwa pelatihan matematikanya membantu mengembangkan kemampuan abstraksi
- Para matematikawan dapat mengajarkan abstraksi kepada programmer
Cara pandang terhadap library dan bug
- Pada bagian kedua presentasi, "mengapa program harus memiliki bug", ia membahas masalah kompleksitas
- Perangkat lunak modern bergantung pada banyak library, tetapi library-library ini kurang memiliki penjelasan yang tepat dan independen dari bahasa
- Akibatnya, dalam proses integrasi muncul bug yang tidak terduga
- Contoh: pengalaman debugging JavaScript di situs kuliah TLA+ miliknya
- Sudut pandang berbasis state berguna untuk memahami kompleksitas semacam ini
Topik yang dibahas dalam sesi tanya jawab
- Dampak AI terhadap abstraksi
- Keterputusan antara open source dan dunia akademik
- Kenyataan bahwa para developer sering mengabaikan definisi formal (formal definition)
- Hal yang tetap paling penting adalah "berpikir sebelum coding"
Kesimpulan: esensi pemrograman adalah berpikir
- Lamport berargumen bahwa pemikiran abstrak dan spesifikasi formal harus diprioritaskan dibanding sekadar coding
- Upaya di awal memang besar, tetapi pada akhirnya menghasilkan perangkat lunak yang lebih tangguh dan lebih mudah dipelihara
- Coding hanyalah bagian dari pemrograman, dan pemrograman yang sesungguhnya dimulai dari algoritme yang tepat dan abstraksi
- Di era modern ketika kompleksitas sistem dan konkurensi terus meningkat, abstraksi adalah kemampuan yang esensial, dan latihan berpikir serta berabstraksi diperlukan bagi programmer
5 komentar
Saya juga setuju dengan tulisan ini
Saya melihat bahwa mendefinisikan masalah dengan nilai-nilai keadaan yang sudah diabstraksikan itu berguna untuk menemukan masalah, dan saya sedang mencoba membuat alat manajemen keadaan yang jelas secara visual dan eksplisit, seperti visualisasi keadaan dengan diagram, Unreal Blueprint, atau workflow.
Sepertinya saya perlu melihat bahasanya terlebih dahulu
Ini mengingatkan saya pada kelas mata kuliah teori komputasi! Saya merekomendasikan orang-orang yang melakukan pemrograman untuk mempelajarinya.
Saya penasaran apa itu TLA
Sepertinya saya harus mencarinya
Saya juga penasaran, jadi saya mencarinya.
TLA+ - Bahasa tingkat tinggi untuk memodelkan program serta sistem konkurensi/terdistribusi
Opini Hacker News
Para 'coder' di demoscene menyebut diri mereka demikian dan bangga akan hal itu, dan mereka juga sering kali merupakan 'programmer' dan 'software engineer' yang hebat. Apa pun istilah yang digunakan—coder, programmer, software engineer—yang penting adalah membuat komputer bekerja sesuai keinginan kita
Keynote tahun depan sepertinya akan berjudul 'vibing bukan coding, juga bukan programming...; kadang hanya piramida sampah yang sedikit berjalan'. Untung Dijkstra tidak melihat ini. Dia sudah marah di ruang keluarga orang tuaku pada tahun 80-an. Aku bahkan tidak bisa membayangkan reaksinya saat melihat 'vibe coding'
Keynote Leslie Lamport di SCaLE 22x: berpikir, membuat abstraksi, lalu baru coding. Lamport mendorong perubahan mendasar dalam pendekatan pemrograman dengan menekankan pemikiran dan abstraksi sebelum menulis kode, dan ini berlaku untuk semua kode yang tidak sepele
Pemrograman seharusnya menjadi proses yang disengaja: desain yang matang (abstraksi) diikuti implementasi (coding), dengan penekanan pada spesifikasi yang jelas dan pemahaman perilaku program melalui rangkaian state serta invariant. Berpikir selalu lebih baik
Profesor matematika menyebut semua tindakan yang mengubah konsep menjadi bentuk yang lebih presisi dan bisa dibaca mesin sebagai coding. Ini mencakup bukan hanya menulis dalam bahasa pemrograman apa yang kita ingin komputer lakukan, tetapi juga mengenkode data. Kata "encode" menjelaskan hal ini dengan baik. Dia pernah memberi tugas untuk mendefinisikan skema coding yang mengubah binary tree menjadi bilangan asli. Kata coding terlalu ambigu, jadi tidak terlalu sering digunakan
Lamport berpendapat bahwa "apa" dan "bagaimana" harus dipisahkan. Namun, saya bertanya-tanya apakah dalam kebanyakan masalah, "apa" dan "bagaimana" dari sebuah program memang tidak menyatu sampai tingkat tertentu. Misalnya, apakah pertimbangan performa adalah bagian dari "apa", atau bagian dari "bagaimana"?
Ringkasan yang menarik: algoritma bukan program, tidak seharusnya ditulis dalam bahasa pemrograman, dan harus sederhana. Sebaliknya, program harus kompleks karena harus berjalan cepat pada dataset yang berpotensi besar. Ini terutama dibahas karena urutan eksekusi program konkuren yang berjalan di beberapa CPU bisa berbeda-beda
Program didefinisikan sebagai kode yang perlu dipikirkan sebelum ditulis, dan sebagai kode yang akan digunakan oleh orang yang tidak ingin membaca kodenya. Ceramah ini sudah dibawakan sejak lama. Contoh yang menyederhanakan pencarian item terkecil persis sama dengan "Define Errors Out of Existence" dari buku John Ousterhout
Saya menikmati ironi bahwa bagian komentar kebanyakan dipenuhi orang-orang yang tidak memahami pesannya. Inti dari Leslie Lamport adalah bahwa mengembangkan kemampuan berpikir abstrak menghasilkan program yang lebih baik. Abstraksi dalam makna matematis dan logis memungkinkan kita menyingkirkan semua detail yang tidak relevan. Pengembangan perangkat lunak yang dipandu AI juga sama
Seperti yang bisa diduga dari segala sesuatu yang melibatkan ketelitian, banyak orang bereaksi negatif hanya setelah membaca judulnya. Seorang hacker di Hacker News bisa berarti programmer terampil yang mampu memecahkan masalah. Sekarang juga bisa berarti "You're a Hack", yakni orang yang tidak kompeten dan menghasilkan kualitas rendah
Ceramah dan diskusi ini terlalu rewel pada detail
Saat ini ada artikel bagus di ACM yang pada dasarnya mengatakan bahwa mereka tidak sepakat tentang apa itu abstraksi, tetapi tetap sangat berguna. Saya pada umumnya setuju tentang di mana poin pentingnya berada. Saya tidak setuju tentang apa tepatnya itu dan mengapa itu penting. Meski begitu, ada banyak inspirasi yang bisa diambil, dan itu sendiri sudah bernilai
Hacking bukan coding, bukan pula programming, software development, atau software engineering. Namun pada akhirnya banyak orang memakai istilah-istilah ini hampir secara bergantian, dan menekankan perbedaan definisi pribadi atas semuanya jarang merupakan penggunaan waktu yang produktif