50 poin oleh GN⁺ 2025-03-26 | 5 komentar | Bagikan ke WhatsApp
  • 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

 
softer 2025-03-27

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

 
felizgeek 2025-03-27

Ini mengingatkan saya pada kelas mata kuliah teori komputasi! Saya merekomendasikan orang-orang yang melakukan pemrograman untuk mempelajarinya.

 
aer0700 2025-03-26

Saya penasaran apa itu TLA
Sepertinya saya harus mencarinya

 
GN⁺ 2025-03-26
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

    • Abstraksi dulu: sebelum menulis kode, tentukan pandangan abstrak dari program. Desain tingkat tinggi ini memperjelas logika dan membantu menemukan kesalahan lebih awal. Fokus pada ide, bukan bahasa tertentu
    • Algoritma != program: algoritma adalah konsep abstrak, sedangkan program adalah implementasi konkret
    • Eksekusi sebagai state: eksekusi program dimodelkan sebagai rangkaian state, dan masa depan setiap state hanya bergantung pada state saat ini. Ini menyederhanakan penalaran, terutama dalam konkurensi
    • Pentingnya invariant: identifikasi invariant, yaitu properti yang benar untuk semua state eksekusi. Memahaminya sangat penting untuk ketepatan
    • Pentingnya spesifikasi yang jelas: banyak library program tidak memiliki spesifikasi yang jelas, sehingga menghambat penggunaan yang benar. Deskripsi fungsi yang jelas dan independen dari bahasa sangat diperlukan, terutama dalam konkurensi
    • Menulis adalah berpikir: menulis memaksa kejelasan dan menyingkap pemikiran yang ceroboh. Berpikir memperbaiki tulisan. Ini adalah lingkaran yang baik
    • Belajar abstraksi: abstraksi adalah keterampilan inti dalam matematika, dan programmer perlu mengembangkan kemampuan ini
    • Abstraksi lewat AI? Muncul pertanyaan apakah model AI dapat dimanfaatkan untuk proses berpikir abstrak dalam pemrograman
  • 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