Fungsi Sebenarnya dari Program Ada Lovelace (2018)
(twobithistory.org)- Pada 1843, Ada Lovelace mempublikasikan prosedur untuk menghitung bilangan Bernoulli bagi Analytical Engine yang saat itu belum selesai dibuat, dan karena itu ia berada di pusat perdebatan tentang “program komputer pertama”
- Tabel yang dipublikasikan menunjukkan satu langkah dari cara menangani seluruh deret bilangan Bernoulli, dan nilai yang disebut Lovelace sebagai B7 sesuai dengan bilangan Bernoulli kedelapan dalam notasi modern
- Program di Note G mencakup 25 operasi, loop bersarang, serta notasi untuk melacak nilai variabel, sehingga jauh lebih canggih daripada contoh Menabrea dengan 11 operasi tanpa pengulangan
- Dalam proses penerjemahan ke C, terungkap bahwa operasi keempat pada tabel asli
v5 / v4seharusnyav4 / v5; ini kemungkinan salah cetak, tetapi bisa dianggap sebagai bug tertua dalam sejarah komputasi - Keistimewaan Lovelace bukan sekadar gelar “programmer pertama”, melainkan bahwa ia memahami pembuatan kartu bukan sebagai terjemahan aljabar semata, melainkan sebagai pekerjaan pemrograman yang bisa dilakukan dengan baik atau buruk
Program 1843 yang Tak Pernah Dijalankan
- Berbeda dengan kisah pendirian Microsoft, program Ada Lovelace tidak pernah mendapat kesempatan dijalankan pada mesin sungguhan
- Paul Allen dan Bill Gates menguji interpreter BASIC dengan emulator berbasis spesifikasi Intel 8080 saat Altair belum ada, lalu menjalankannya juga pada Altair yang sebenarnya
- Lovelace juga menulis program untuk komputer yang saat itu hanya ada dalam bentuk penjelasan, tetapi tidak dapat menjalankannya karena Analytical Engine tidak pernah dibangun
- Program Lovelace sering disebut sebagai program komputer pertama di dunia, tetapi status itu masih diperdebatkan
- Perdebatan soal cakupan dan nilai kontribusi Lovelace terus berlangsung sampai Walter Isaacson menyebutnya sebagai “minor academic specialty”
- Pertanyaan penting di sini, alih-alih penilaian tokoh, adalah bagaimana program yang ditulis pada 1843 itu dirancang untuk bekerja
- Program itu melampaui sekadar daftar rumus
- Ia menyusun kelompok operasi yang dapat diulang, memakai struktur yang setara dengan loop
- Ia memperkenalkan notasi untuk melacak perubahan keadaan variabel
- Ada bagian-bagian yang mirip dengan pengalaman menulis perangkat lunak masa kini
Bilangan Bernoulli dan Masalah Jumlah Pangkat
- Program Lovelace dirancang untuk menghitung bilangan Bernoulli
- Di balik bilangan Bernoulli ada persoalan matematika lama, yaitu menghitung jumlah pangkat
- Kaum Pythagoras mencari cara menghitung
1 + 2 + 3 + ... + ntanpa menjumlahkannya satu per satu, dan memperoleh rumusn(n+1)/2dengan menyusun dua segitiga menjadi sebuah persegi panjang - Archimedes tertarik pada jumlah berbentuk
1² + 2² + 3² + ... + n², dan meninggalkan solusi yang dapat ditafsirkan secara geometris - Aryabhata menerbitkan Aryabhatiya pada tahun 499, termasuk rumus jumlah kubus
- Kaum Pythagoras mencari cara menghitung
- Masalah yang lebih umum adalah bagaimana mencari jumlah berbentuk
1^k + 2^k + ... + n^k- Johann Faulhaber pada 1631 menghitung dan menerbitkan rumus hingga pangkat 17, tetapi tidak memberikan solusi umum
- Blaise Pascal pada 1665 membuat metode umum, tetapi tetap perlu mengetahui terlebih dahulu cara menghitung semua jumlah pangkat yang lebih rendah
- Jakob Bernoulli meninggalkan solusi umum yang lebih praktis
- Ia menggunakan segitiga Pascal untuk memahami pola koefisien polinomial
- Sebagian koefisien diturunkan dari segitiga Pascal, sedangkan sisanya diperoleh dari sifat bahwa jumlah koefisien selalu 1
- Faktor koefisien kedua inilah yang kemudian dikenal sebagai deret bilangan Bernoulli
- Penemuan Bernoulli tidak serta-merta menjadikan perhitungan jumlah pangkat sembarang sebagai soal yang mudah
- Untuk menghitung jumlah pangkat ke-
k, perlu diketahui bilangan Bernoulli hingga urutan ke-k - Setiap bilangan Bernoulli dihitung berdasarkan bilangan Bernoulli sebelumnya
- Meski demikian, menghitung deret Bernoulli yang panjang tetap jauh lebih mudah daripada menurunkan setiap rumus jumlah pangkat satu per satu
- Untuk menghitung jumlah pangkat ke-
Dua Mesin Hitung Babbage
- Charles Babbage merancang dua jenis kalkulator mekanis
- Yang pertama adalah Difference Engine
- Yang kedua adalah Analytical Engine, yang kini dikenal sebagai komputer mekanis
- Difference Engine bukan komputer, melainkan mesin yang hanya melakukan penjumlahan dan pengurangan
- Babbage tidak puas dengan banyaknya kesalahan pada tabel logaritma saat itu, dan ingin membuat tabel logaritma secara mekanis
- Metode beda hingga dari Gaspard de Prony memecah proses pembuatan tabel logaritma menjadi langkah-langkah kecil yang hanya memerlukan penjumlahan dan pengurangan
- Polinomial dapat digunakan untuk mendekati fungsi logaritma dan fungsi trigonometri
- Difference Engine memetakan setiap kolom pada tabel beda ke kolom roda gigi fisik
- Setiap roda gigi mewakili satu digit desimal, dan satu kolom penuh mewakili satu bilangan desimal
- Mesin itu memiliki 8 kolom sehingga dapat membuat tabel hingga polinomial derajat 7
- Orang cukup menetapkan nilai awal lalu memutar engkol agar beda konstan merambat ke kolom berikutnya
- Babbage memang membuat dan mendemonstrasikan sebagian Difference Engine, tetapi tidak pernah menyelesaikan mesin utuhnya
- Ia tidak dapat menemukan pembuat yang mampu memproduksi jumlah roda gigi yang diperlukan dengan presisi memadai
- Difference Engine yang berfungsi baru berhasil dibuat pada 1990-an, setelah pemesinan presisi memungkinkan
- Analytical Engine dibayangkan sebagai mesin yang jauh lebih kuat dan fleksibel
- Mesin ini menggunakan kolom roda gigi seperti Difference Engine, tetapi direncanakan memiliki ratusan kolom atau lebih
- Ia bisa diprogram dengan kartu berlubang seperti Jacquard Loom
- Ia dapat melakukan bukan hanya penjumlahan dan pengurangan, tetapi juga perkalian dan pembagian
- Bagian yang disebut “mill” akan disusun ulang sesuai operasi, membaca operan dari kolom penyimpanan, lalu menuliskan hasil ke kolom lain
Makalah Menabrea dan Catatan Lovelace
- Babbage bertemu Luigi Menabrea di Turin, seorang insinyur Italia yang kelak menjadi perdana menteri, dan Menabrea menerbitkan makalah berbahasa Prancis pada 1842 yang menjelaskan kemungkinan-kemungkinan Analytical Engine
- Pada 1843, Lovelace menerjemahkan makalah Menabrea ke dalam bahasa Inggris
- Lovelace pertama kali bertemu Babbage pada 1833 saat berusia 17 tahun, dan terpikat oleh Difference Engine miliknya
- Sejak kecil ia mendapat banyak pendidikan matematika, dan setelah menikah serta melahirkan tiga anak pun tetap belajar matematika kepada Augustus de Morgan
- Makalah Menabrea secara singkat membahas cara kerja Difference Engine dan keunggulan Analytical Engine
- Analytical Engine diperkenalkan sebagai mesin yang dapat menghitung hasil kali dua bilangan 20 digit dalam waktu 3 menit
- Makalah itu memakai sistem persamaan linear sederhana dan perluasan hasil kali dua binomial sebagai contoh, dengan menggunakan “diagrams of development”
- Tabel-tabel ini juga merupakan program dalam arti yang sama seperti program Lovelace, tetapi hanya contoh sederhana tanpa percabangan atau pengulangan
- Terjemahan Lovelace disertai catatan-catatan yang lebih panjang daripada teks aslinya, dan di situlah kontribusi utamanya tampak
- Note A membahas panjang lebar kemungkinan Analytical Engine sebagai mesin yang dapat menjalankan operasi matematika apa pun
- Ia memandang mesin itu dapat bekerja bukan hanya pada angka, tetapi juga pada objek yang relasi dasarnya dapat dinyatakan sebagai ilmu abstrak operasi
- Misalnya, ia menyebut bahwa suatu hari mesin itu mungkin dapat menggubah musik
- Note G terkenal karena dua alasan
- Gagasan Lovelace bahwa Analytical Engine tidak bisa dikatakan “berpikir” kemudian oleh Alan Turing disebut “Lady Lovelace’s Objection”
- Pada saat yang sama, catatan itu juga memuat program untuk menghitung bilangan Bernoulli guna menunjukkan bahwa mesin tersebut dapat menangani masalah yang sangat kompleks
Struktur Nyata Program di Note G
- Seluruh tabel Lovelace adalah bentuk “diagram of development” yang diperluas, dan gambar aslinya dapat dilihat di sini
- Program itu lebih dekat ke daftar operasi yang dinyatakan dengan notasi matematika umum
- Tampaknya Babbage maupun Lovelace belum sampai pada tahap membuat sesuatu seperti himpunan opcode untuk Analytical Engine
- Lovelace menjelaskan cara menghitung seluruh deret bilangan Bernoulli sampai batas tertentu, tetapi program yang disajikan dalam tabel hanyalah satu langkah contoh dari proses itu
- Nilai yang dihitung adalah yang disebut Lovelace sebagai B7
- Dalam notasi matematika modern, itu adalah bilangan Bernoulli kedelapan
- Persamaannya berbentuk
B7 = -1(A0 + B1A1 + B3A3 + B5A5)
- Setiap suku dalam persamaan ini mewakili koefisien dari polinomial jumlah pangkat tertentu
- Pangkat yang dimaksud adalah 8, dan bilangan Bernoulli kedelapan pertama kali muncul dalam rumus jumlah bilangan berpangkat 8 untuk bilangan bulat positif
B1sampaiB7adalah bilangan Bernoulli yang berbeda menurut pengindeksan LovelaceA0sampaiA5adalah faktor koefisien yang dapat dihitung Bernoulli menggunakan segitiga Pascal- Program Lovelace menggunakan
n = 4
- Terjemahan ke C tersedia sebagai gist
- Mula-mula dihitung
A0danB1A1 - Setelah itu program masuk ke loop yang dijalankan dua kali untuk menghitung
B3A3danB5A5 - Setelah setiap hasil kali dihitung, nilainya dijumlahkan dengan hasil kali sebelumnya, dan pada akhirnya diperoleh jumlah keseluruhan
- Mula-mula dihitung
Loop, Keadaan Variabel, dan Bug Kuno
- Terjemahan ke C menunjukkan dengan baik betapa visionernya program Lovelace
- Program aslinya memang tidak memiliki
whileloop secara literal, tetapi Lovelace membentuk kelompok operasi dan menetapkan lewat catatan kapan kelompok itu harus diulang - Dalam terjemahan C ada dua
whileloop, dan salah satunya bersarang di dalam yang lain v10dalam versi asli maupun terjemahan C berfungsi seperti variabel penghitung yang berkurang pada setiap iterasi
- Program aslinya memang tidak memiliki
- Tabel Lovelace lebih mudah dipakai untuk mengikuti perubahan keadaan dibanding tabel Menabrea
- Ada kolom bernama “Indication of change in the value on any Variable”
- Setiap variabel diberi indeks superskrip untuk menunjukkan urutan nilai yang dimilikinya selama program berjalan
- Superskrip 2 berarti nilai kedua yang diberikan sejak program dimulai
- Saat dipindahkan ke C dan dijalankan, hasil awalnya ternyata salah, dan penyebabnya bukan pada kode terjemahan melainkan pada tabel asli
- “Diagram of development” milik Lovelace menuliskan operasi keempat sebagai
v5 / v4 - Urutan yang benar adalah
v4 / v5 - Ini kemungkinan bukan kesalahan dalam program yang dibuat Lovelace, melainkan salah cetak
- “Diagram of development” milik Lovelace menuliskan operasi keempat sebagai
- Jim Randall juga menerjemahkan program Lovelace ke Python dan menunjukkan bug pembagian yang sama serta dua masalah lain
- Bug kecil pada program asli mendukung penafsiran bahwa Lovelace sedang berusaha menulis sesuatu yang mendekati program nyata, bukan sekadar materi demonstrasi
Batasan Gelar Programmer Pertama
- Mengatakan bahwa Lovelace menulis atau menerbitkan “program pertama” tidak sepenuhnya akurat
- Menabrea menerbitkan “diagrams of development” setahun sebelum terjemahan Lovelace
- Babbage juga menulis lebih dari 20 program yang tidak dipublikasikan
- Tergantung definisi tentang apa yang dianggap sebagai program, perdebatan tetap terbuka
- Program Lovelace yang dipublikasikan jauh melampaui yang pernah dipublikasikan sebelumnya
- Program terpanjang yang ditunjukkan Menabrea terdiri dari 11 operasi
- Contoh Menabrea tidak memiliki loop maupun percabangan
- Program Lovelace mencakup 25 operasi dan loop bersarang, sehingga juga memuat struktur percabangan
- Menabrea berpendapat bahwa setelah mesin selesai, kesulitannya akan menyusut menjadi pembuatan kartu; kartu-kartu itu hanyalah terjemahan dari rumus aljabar sehingga mudah menyerahkan pelaksanaannya kepada pekerja dengan notasi sederhana
- Babbage dan Menabrea terutama berfokus menerapkan Analytical Engine pada masalah perhitungan matematika yang mereka minati
- Lovelace melihat bahwa Analytical Engine dapat melakukan jauh lebih banyak daripada yang dibayangkan Babbage atau Menabrea, dan memahami bahwa “pembuatan kartu” bukan tugas sampingan yang sederhana, melainkan pekerjaan pemrograman yang bisa dilakukan dengan baik atau buruk
1 komentar
Opini Hacker News
Tanda sejati dari program yang tidak sepele adalah tidak berjalan pada percobaan pertama
Menakjubkan bahwa setelah Babbage frustrasi karena teknologi pemesinan presisi massal untuk membuat mesin sederhana belum ada, ia malah merancang sistem baru yang satu digit lebih rumit dan pergi sampai ke Italia untuk mencari kemampuan manufaktur yang lebih maju
Kalau menemui jalan buntu saat mencoba sesuatu, ia mulai dengan membuat alatnya sendiri, dan suatu kali bahkan membuat font-nya sendiri karena tidak puas dengan font bawaan pada ukuran poin yang sangat kecil
Ia insinyur terbaik yang saya kenal, tetapi harus terus diawasi agar tidak masuk terlalu jauh ke lubang kelinci
Tim Robinson juga mengatakan, “Jika Meccano tahun 1920-an sudah ada 100 tahun sebelumnya, Babbage akan sepenuhnya berhasil,” dan menurut saya ia lebih mirip orang software yang terlempar ke hardware karena idenya melampaui tingkat yang secara realistis mungkin saat itu
Selain kurangnya naluri bisnis dan perencanaan proyek sehingga ia tidak mampu memperkecil cakupan atau menyerah pada presisi 10 digit, ia terus memunculkan ide yang lebih baik dan mengikutinya hingga masuk lubang kelinci; karena pada usia muda ia menerima berbagai penghargaan hanya dari proposal Difference Engine, tampaknya puluhan tahun kemudian pun sulit baginya untuk menyerah
Keterlibatannya dengan pemerintah juga menjadi salah satu poros besar tragedinya. Kaum aristokrat meremehkan dan tidak mempercayai pemerintah serta politik, sementara kelas bawah tidak mempercayai pemerintah karena pemerintah hampir tidak pernah membantu mereka, tetapi Babbage berasal dari kelas menengah yang tepat untuk memiliki pandangan patriotik tentang pemerintah, sehingga tampaknya ia menganggap penemuannya dipersembahkan kepada “negara” dan pemerintah seharusnya memberi kompensasi
Ia tidak berhasil menyelesaikan Difference Engine, tetapi bertanya kepada pemerintah apakah dengan dana tambahan ia dapat mewujudkan Analytical Engine yang lebih baik, dan pemerintah bersikap bimbang selama 20 tahun. Bahkan ketika pemerintah menawarkan untuk mengembalikan penemuannya, ia menolak
Mungkin karena pengaruh berbagai penghargaan, ia juga tampaknya terpaku pada identitas dirinya sebagai “orang pintar”; ada anekdot bahwa ia menolak tawaran untuk menjadi juri penghargaan bersama Faraday karena merasa harus menjadi satu-satunya juri. Sikap seperti ini juga sangat mungkin membuatnya lebih condong ke ide-ide jenius yang muluk daripada eksekusi praktis
The Thrilling Adventures of Lovelace and Babbage karya Sydney Padua tampak seperti buku yang diteliti dengan sangat baik; saya belum banyak membaca bagian utamanya, tetapi membaca lampirannya dengan saksama dan layak direkomendasikan
Tulisan yang benar-benar keren. Di bagian pembuka, mengesankan bahwa Lovelace memikirkan secara mendalam cara mengorganisasi operasi ke dalam kelompok yang dapat diulang, sehingga menemukan loop, dan menyadari pentingnya melacak status saat variabel berubah lalu membuat notasi untuk menandai perubahan itu
Dari sudut pandang programmer, menakjubkan betapa miripnya pekerjaan Lovelace dengan pengalaman menulis software masa kini, dan penjelasan bahwa ia merancangnya untuk menghitung bilangan Bernoulli juga cukup terperinci untuk memahami apa yang ia lakukan
Kalau ia hidup sekarang, rasanya ia akan berada di ujung koridor sedang bergulat dengan suatu masalah memakai Rust, dan sepertinya akan sangat menyukai bahasa dengan static typing
Intinya adalah ia melihat bahwa Analytical Engine dapat bekerja bukan hanya pada angka, tetapi juga pada objek lain yang dapat diekspresikan sebagai relasi dalam ilmu operasi abstrak; misalnya, jika relasi dasar harmoni dan komposisi dapat diekspresikan dengan cara seperti itu, maka mesin dapat membuat musik yang rumit dengan kompleksitas dan panjang berapa pun
Pada tahun 1842, satu abad sebelum komputer yang benar-benar dapat diprogram muncul, memikirkan hal seperti ini hanya dari penjelasan tentang prototipe komputer mekanis adalah sebuah hack yang luar biasa
https://en.wikipedia.org/wiki/Static_single-assignment_form#Benefits
Bahkan hari ini pun itu masih dekat dengan teknik mutakhir, dan ia sudah memilikinya 180 tahun lalu
Menarik bahwa Paul Allen dan Bill Gates menguji interpreter BASIC untuk Altair tanpa Altair sungguhan, menggunakan emulator yang mereka buat di komputer Harvard hanya berdasarkan spesifikasi Intel 8080, dan ketika pertama kali dijalankan di depan Altair sungguhan, program itu berjalan dengan benar
Kalau begitu, menurut saya pahlawan tersembunyi sebenarnya di sini adalah para insinyur Intel yang menulis spesifikasi yang begitu akurat sehingga software yang berjalan di emulator yang dibuat hanya dari spesifikasi itu juga berjalan mulus di hardware nyata
Pekerjaan itu dimaksudkan agar programmer lain yang menulis firmware 8080 untuk plotter bisa men-debug kodenya, dan seingat saya sumber emulator itu berasal dari sesuatu milik Intel bernama INTERP/8 8008. Dari tulisan-tulisan online, sepertinya Allen dan Gates juga memakainya
Menurut saya bagian paling keren adalah pekerjaan nyata yang terkandung dalam “notes” yang ia lampirkan pada terjemahannya
Referensi: https://upload.wikimedia.org/wikipedia/commons/c/cf/Diagram_for_the_computation_of_Bernoulli_numbers.jpg
Dan https://en.wikipedia.org/wiki/Note_G
Tulisan itu juga merujuk materi ini yang memindahkan pekerjaannya ke Python: https://enigmaticcode.wordpress.com/tag/bernoulli-numbers/
Melihat bagian yang mengatakan bahwa program Lovelace yang dipindahkan ke C tidak terasa begitu asing, kecuali dipenuhi variabel dengan nama yang tidak membantu, penulisnya jelas belum pernah bertemu rekan-rekan kerja saya
Saya sendiri tidak terlalu konservatif, tetapi tentu saja ia setiap kali tidak ingat variabel “butts” itu untuk apa, dan sampai akhir tidak memahami mengapa ia terus bingung gara-gara kodenya sendiri
Ayah saya, seorang insinyur kimia, belajar pemrograman dengan FORTRAN; saat itu nama variabel harus berupa 1 huruf dan paling banyak 2 angka. Ia kemudian belajar Basic, tetapi kodenya secara mental masih FORTRAN, jadi kebiasaan itu tetap terbawa
Awalnya saya kira hanya ayah saya yang seperti itu, tetapi jauh kemudian saat bekerja di Wall St dan berkolaborasi dengan para quant yang menyalin kode Numerical Recipes, di C pun tampilannya persis sama
Menarik melihat bahwa Menabrea memandang Analytical Engine terutama sebagai alat untuk mengotomatiskan “perhitungan yang panjang dan kering”, sehingga kapasitas intelektual ilmuwan-ilmuwan hebat bisa dipakai untuk pemikiran yang lebih tinggi; ini menunjukkan betapa awetnya wacana otomatisasi
Sekarang pun orang mengatakan hal yang sama tentang LLM
Saya penasaran apakah ada yang pernah membuat mesin virtual untuk set instruksi Babbage dan menjalankan program Ada di atasnya
Namun sepertinya program Ada tidak disertakan sebagai contoh, jadi tampaknya harus dimasukkan sendiri
Fakta menarik: proyek kelas compiler saya adalah membuat compiler C yang menargetkan emulator ini: https://github.com/Christopher-Chianelli/ccpa hati-hati, kodenya mengerikan
https://github.com/MarquisdeGeek/Ada-Origins
https://pairdebuggingwithlovelace.hashnode.dev/
Ini juga pernah didiskusikan saat tulisan tersebut diposting dulu
What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - Agu 2018, 52 komentar
Diskusi saat itu dengan 35 komentar ada di sini: https://news.ycombinator.com/item?id=10709730
Sedikit menyimpang, tetapi saya jadi penasaran orang-orang pada masa itu memanggilnya apa
Namanya Augusta Ada King dan ia adalah Countess of Lovelace; saya penasaran apakah saat itu lazim menyingkat gelar kebangsawanan dan memakainya seperti nama keluarga, atau apakah itu kebiasaan yang baru muncul belakangan
Setelah William King-Noel menjadi Earl of Lovelace, ia dipanggil “Lovelace”, dan di kalangan sosial Ada mungkin dipanggil “Lady Lovelace”, sedangkan dalam konteks resmi “Countess of Lovelace”
Tulisan yang bagus. Ini penjelasan paling jelas yang pernah saya baca sejauh ini tentang dalam arti apa Ada itu inovatif dan mengapa ia layak mendapat pengakuan