Tujuh Bahasa Purba Pemrograman (2022)
(madhadron.com)- Perbedaan kelompok pola dasar lebih penting daripada tata bahasa masing-masing, dan bahasa pemrograman terbagi menjadi tujuh bahasa purba menurut cara pengulangan, rekursi, dan penyusunan komponennya
- ALGOL, Lisp, ML, Self, Forth, APL, Prolog adalah klasifikasi intinya, dan tiap keluarga memakai bahasa perwakilan sebagai sampel acuan untuk menilai garis keturunan bahasa lain
- Bahasa baru yang berbagi bahasa purba yang sudah akrab relatif mudah dipelajari, tetapi berpindah ke purba yang asing memerlukan jalur berpikir baru dan waktu belajar yang tidak sedikit
- ALGOL dicirikan oleh organisasi fungsi yang berpusat pada penugasan, kondisional, dan perulangan; Lisp oleh makro dan kode berbentuk list; ML oleh fungsi kelas satu dan rekursi; Self oleh objek berbasis pengiriman pesan; Forth oleh sintaks berbasis stack; APL oleh array n-dimensi; dan Prolog oleh struktur fakta dan penelusuran
- Bagi semua programmer, menguasai bahasa keluarga ALGOL adalah prioritas, lalu belajar SQL, dan setelah itu terus mempelajari bahasa purba yang asing secara konsisten akan lebih menguntungkan dalam jangka panjang
Tujuh Bahasa Purba Pemrograman
- Saat memilih bahasa pemrograman, yang lebih penting daripada perbedaan tata bahasa per bahasa adalah menguasai pola dasar, dan di antara bahasa-bahasa yang masih satu keluarga, struktur dasar seperti penelusuran array atau penelusuran kombinasi hampir selalu serupa
- Keluarga bahasa yang berbeda memiliki cara pengulangan, rekursi, dan penyusunan program yang sangat berbeda, dan kelompok pola dasar inilah yang membentuk bahasa-bahasa purba yang berbeda
- Mempelajari bahasa baru yang berbagi bahasa purba yang sudah akrab adalah perpindahan yang relatif mudah, tetapi pindah ke bahasa purba yang asing memerlukan waktu yang cukup besar dan jalur berpikir baru
- Bahasa purba yang dikenali di bidang perangkat lunak ada tujuh: ALGOL, Lisp, ML, Self, Forth, APL, Prolog
- Setiap bahasa purba diklasifikasikan dengan memakai bahasa perwakilan tertentu sebagai semacam sampel acuan, dan bahasa lain dinilai garis keturunannya dengan membandingkannya terhadap sampel itu
-
ALGOL
- Program tersusun sebagai rangkaian penugasan, kondisional, dan perulangan, lalu diorganisasi dalam satuan fungsi
- Banyak bahasa menambahkan sistem modul, cara mendefinisikan tipe data baru, polimorfisme, serta struktur alur kontrol alternatif seperti exception atau coroutine
- Sebagian besar bahasa pemrograman yang saat ini digunakan luas termasuk dalam garis bahasa purba ini
- ALGOL sendiri mencakup ALGOL 58, ALGOL 60, ALGOL W, ALGOL 68
- Assembly language, Fortran, C, C++, Python, Java, C#, Ruby, Pascal, JavaScript, Ada terhubung ke garis ini
- Ini adalah bahasa purba tertua, dengan silsilah yang dapat ditelusuri hingga formalisasi program Ada Lovelace untuk mesin analitik Babbage
- Bahasa mesin dan assembly dari komputer berarsitektur Eckert-Mauchly yang berlanjut ke EDVAC dan Univac awal, serta upaya bahasa tingkat tinggi awal dari A-0 milik Grace Hopper hingga Fortran dan COBOL, semuanya berada dalam bentuk ini
- Pada 1960-an, structured programming berkembang di akademia dan membuat bahasa-bahasa ini lebih mudah dikelola; hasilnya adalah ALGOL 60, yang kemudian menjadi asal bagi sebagian besar anggota keluarga ini
- Seiring waktu, ada kecenderungan menyerap fitur dari bahasa purba lain
- Pada 1980-an, konsep keluarga Self diadopsi dalam bentuk class dan dipakai sebagai sarana implementasi definisi tipe data serta polimorfisme
- Setelah 2010, konsep keluarga ML juga mulai muncul
-
Lisp
- Sintaks yang menggabungkan ekspresi prefiks yang dibungkus tanda kurung dan representasi list
(+ 2 3)(defun square (x) (* x x))(* (square 3) 3)
- Karena representasi list berupa item-item yang dipisah spasi dan dibungkus tanda kurung tertanam di dalam bahasa, kode itu sendiri berbentuk list
- Makro dapat menerima list, mengubahnya, lalu menyerahkan kode yang sudah diubah ke compiler, sehingga programmer memiliki struktur untuk mendefinisikan ulang makna bahasa
- Dalam sebagian besar penulisan kode, perilakunya cenderung mirip bahasa purba lain, biasanya ALGOL atau ML, tetapi sistem makro menjadi pembeda utamanya
- Sintaks
loopdi Common Lisp juga bukan fitur bawaan bahasa, melainkan didefinisikan sebagai makro - Ada banyak varian Lisp awal, tetapi komunitas akhirnya membentuk konsensus pada Common Lisp
- Sussman dan Steele mengeksplorasi sejauh mana fungsi dapat digunakan, lalu menciptakan Scheme
- Ada pula penggunaan Lisp untuk tujuan khusus seperti Lush untuk komputasi numerik, AutoLISP sebagai bahasa skrip AutoCAD, dan Emacs Lisp untuk mengimplementasikan perilaku editor Emacs
- Belakangan, Clojure muncul sebagai cabang utama ketiga keluarga Lisp
- Muncul sekitar satu tahun setelah Fortran, ini adalah keluarga bahasa tertua kedua yang masih digunakan hingga hari ini
- Titik awalnya adalah pertanyaan matematis tentang bagaimana menuliskan struktur matematika yang dapat mengevaluasi ekspresinya sendiri
- John McCarthy memberikan jawabannya pada 1958, lalu itu diimplementasikan di komputer
- Lisp awal, karena latar belakang matematisnya, kurang cocok dengan mesin pada zamannya; masalah memori dan siklus CPU bukanlah topik dalam matematika, sehingga teknik seperti garbage collection menjadi perlu
- Pada akhir 1970-an dan awal 1980-an, ada mesin yang dirancang dari bawah khusus untuk menjalankan Lisp
- Banyak elemen integrated development environment modern ditemukan pada mesin-mesin itu
- Pada periode yang sama, Lisp menjadi sarana utama riset kecerdasan buatan, tetapi ketika gelembung AI 1980-an gagal menghasilkan capaian yang diharapkan, Lisp ikut jatuh bersama bidang itu ke dalam AI Winter
- Setelah itu pun ia tetap bertahan, dan dengan peningkatan performa komputer serta adopsi fitur-fitur serupa oleh bahasa lain, kesulitan implementasinya berkurang
- Sintaks yang menggabungkan ekspresi prefiks yang dibungkus tanda kurung dan representasi list
-
ML
- Fungsi adalah nilai kelas satu, dan bahasa ini memiliki sistem tipe keluarga Hindley-Milner yang dapat mengekspresikan beragam fungsi serta tagged union
- Semua perulangan dilakukan melalui rekursi
sum [] = 0sum (x:xs) = x + sum xs
- Digunakan juga cara mendefinisikan fungsi yang mengenkapsulasi pola perulangan, lalu menerima fungsi lain untuk menjalankan perilakunya
map _ [] = []map f (x:xs) = (f x) : (map f xs)
- Beberapa bahasa seperti Miranda dan Haskell secara default memakai lazy evaluation
- Bahasa lain memperluas sistem tipenya ke berbagai arah
- OCaml mencoba menggabungkannya dengan konsep bahasa purba Self
- Agda dan Idris mengadopsi sistem dependent type yang mencampur nilai dan tipe
- 1ML menggabungkan modul dan tipe
- Dari ML lahir CaML, Standard ML, OCaml
- Garis kerabat seperti Miranda, Haskell, Agda, dan Idris juga berlanjut darinya
- ML awalnya adalah meta-language untuk program pembuktian teorema yang dikembangkan di Cambridge, Inggris, dan namanya pun berasal dari sana
- Setelah itu ia menyebar keluar dari konteks tersebut sebagai bahasa mandiri, dan terutama populer di Eropa, khususnya Inggris dan Prancis
-
Self
- Program tersusun sebagai sekumpulan objek yang saling mengirim pesan, dan semua perilaku diimplementasikan dengan cara ini
- Objek baru dibuat dengan mengirim pesan ke objek yang sudah ada
- Kondisional pun dijalankan melalui variabel yang merujuk ke salah satu dari objek true atau false
- Kedua objek menerima pesan yang membawa fungsi yang dijalankan saat benar dan fungsi yang dijalankan saat salah sebagai parameter
- Objek true menjalankan fungsi pertama, dan objek false menjalankan fungsi kedua
- Kode pemanggil tidak tahu objek mana yang dipakai dan hanya mengirim pesan
- Perulangan juga bekerja dengan cara yang sama, dan jika membuat objek yang tepat lalu menaruhnya di tempat yang tepat, seluruh makna bahasa dapat didefinisikan ulang
- Bahasa-bahasa seperti ini biasanya menyimpan source bukan sebagai berkas teks, melainkan dalam live environment
- Programmer memodifikasi sistem hidup, dan alih-alih mengompilasi berkas untuk membangun sistem, mereka menyimpan keadaan sistem tersebut
- Contoh pentingnya adalah Smalltalk dan Self
- Banyak bahasa hanya mengadopsi sebagian cara pengiriman pesan dari keluarga ini, dan adopsi parsial seperti itu biasanya disebut pemrograman berorientasi objek
- Sebagian besar dari mereka berbasis Smalltalk, dan JavaScript adalah pengecualian karena berasal dari sistem objek tanpa class milik Self
- Sistem objek Common Lisp menggeneralisasikannya sehingga runtime memilih kode yang akan dijalankan berdasarkan semua parameter, bukan hanya satu objek penerima pesan
- Erlang mengubah arahnya: alih-alih alur eksekusi berpindah di antara objek, thread eksekusi paralel secara eksplisit mendengar dan mengirim pesan
- Bahasa aslinya adalah Smalltalk, dikembangkan di Xerox Parc pada akhir 1970-an dan 1980-an
- Pada 1980-an, ada berbagai sistem Smalltalk komersial, dan IBM memakai Smalltalk untuk mengembangkan koleksi VisualAge, yaitu alat pemrograman untuk bahasa lain
- Saat ini Smalltalk terutama bertahan dalam bentuk open source Pharo Smalltalk
- Banyak riset dilakukan untuk menjalankan Smalltalk dengan cepat dan efisien, dan puncaknya adalah proyek Strongtalk
- Penemuan dari Strongtalk punya arti historis karena menjadi dasar compiler JIT HotSpot milik Java
- Smalltalk mewarisi konsep nilai dan tipe dari bahasa-bahasa sebelumnya untuk mengimplementasikan class; semua objek memiliki class yang memberi mereka tipe, dan class menciptakan objek dari tipe itu
- Self menghapus konsep class dan hanya terdiri dari objek
- Karena dianggap bentuk yang lebih murni, Self dipilih sebagai sampel bahasa purba ini
-
Forth
- Bahasa stack adalah semacam cerminan terbalik dari Lisp, dan berbagi sintaks dengan kalkulator notasi Polandia terbalik milik Hewlett Packard
- Bahasa ini memiliki data stack; saat literal seperti
42ditulis, nilainya di-push ke stack, dan nama fungsi bekerja terhadap stack tanpa parameter eksplisit - Aritmetika sederhana pun berbentuk terbalik seperti
2 3 + 5 * - Definisi fungsi juga sangat ringkas
- Dalam sebagian besar varian Forth,
:mendefinisikan kata baru squareberarti memanggildupdan*dupmenggandakan item teratas stack, dan*mengalikan dua item teratas
- Dalam sebagian besar varian Forth,
- Parser dapat dicegat dan diganti dengan kode sendiri, sehingga seluruh sintaks dapat diganti
- Program Forth yang mendefinisikan bahasa kecil untuk mem-parsing langsung hal-hal seperti subset Fortran, layout paket, atau diagram ASCII yang mewakili transisi state machine adalah bentuk yang umum
- Mencakup berbagai varian Forth, PostScript, Factor, Joy
- Joy adalah bahasa fungsional murni yang memakai formulasi matematis komposisi alih-alih stack
- Forth pertama kali ditulis pada 1970 untuk mengendalikan teleskop radio
- Setelah itu menyebar luas ke seluruh dunia embedded system
- Sistem Forth cukup mudah di-bootstrap sehingga ada puluhan varian yang dibuat banyak programmer sesuai tujuan masing-masing
- PostScript muncul pada 1980-an sebagai sarana fleksibel untuk mendeskripsikan dokumen di printer
- Dalam banyak hal PostScript lebih terbatas daripada Forth, tetapi ia mendefinisikan operasi dasar terkait layout grafis di dalam bahasa
-
APL
- Segala sesuatu dalam bahasa ini adalah array n-dimensi
- Operator tersusun dari satu atau dua simbol, dan menjalankan operasi tingkat tinggi terhadap seluruh array
- Ekspresinya sangat padat, sehingga deretan simbol itu sendiri menjadi penanda operasi tanpa perlu diberi nama lain
- Sebagai contoh, menghitung rata-rata variabel
xditulis sebagai(+⌿÷≢) x - APL, J, K adalah contoh representatif
- Operasi tingkat tinggi atas array sebagian telah diekspor ke banyak lingkungan lain seperti MATLAB, NumPy, dan R
- APL bermula dari notasi matematika yang dibuat Kenneth Iverson pada 1960-an, lalu kemudian diimplementasikan di komputer
- Sejak itu ia mempertahankan basis pendukung khusus di kalangan orang-orang yang melakukan komputasi berat
- Bahasa turunannya, K, sangat populer di lingkungan finansial
-
Prolog
- Program tersusun sebagai kumpulan fakta
father(bob, ed).father(bob, jane).
- Juga digunakan fakta tak-terikat yang menurunkan fakta dari fakta lain lewat variabel
grandfather(X, Y) :- father(X, Z), father(Z, Y).
- Runtime Prolog menerima fakta-fakta ini dan kueri, lalu melakukan penelusuran untuk menemukan hasil
- Jika struktur definisi faktanya dipilih dengan tepat, Turing-completeness dapat tercapai
- Dalam Prolog, term yang membentuk fakta adalah tipe data unik tersendiri, dan dapat dibuat lalu diteruskan ke runtime
- Dalam hal ini, posisinya mirip dengan makro di Lisp atau penggantian parser di Forth
- Karena program Prolog pada dasarnya adalah penelusuran, tuning berfokus pada pengaturan urutan penelusuran dan pemotongan dini jalur yang tidak menghasilkan, seperti pada kueri basis data
- Mencakup Prolog, Mercury, Kanren
- Sebagian besar praktik pemrograman nyata dalam keluarga bahasa purba ini dilakukan di Prolog sendiri, dan komunitasnya sangat terpusat
- Pada 1970-an, para logikawan Prancis menyadari bahwa program dapat diekspresikan sebagai logika orde pertama, lalu mulai mencoba mengimplementasikannya
- Pada 1980-an, proyek komputer generasi kelima Jepang bertaruh besar pada Prolog, tetapi ketika proyek itu gagal, reputasi Prolog ikut menurun
- Terlepas dari itu, selama puluhan tahun riset untuk membuat runtime Prolog efisien dalam sebagian besar kasus serta menambahkan fitur baru terus berlanjut
- Penambahan fitur seperti kendala numerik mengarah ke constraint logic programming
- Prolog terus muncul di area-area nis
- Pemeriksaan tipe Java selama bertahun-tahun diimplementasikan dengan Prolog
- Alat pencarian source code awal Facebook juga berbasis Prolog
- Program tersusun sebagai kumpulan fakta
Bagaimana memanfaatkannya
- Bagi sebagian besar programmer, sebagian atau seluruh keluarga bahasa ini mungkin tampak sangat asing, tetapi masing-masing layak diberi waktu karena jalur berpikir dan kemungkinan baru yang dibawanya
- Dari sudut pandang ALGOL, dua hal yang tampak sepenuhnya berbeda sangat sering ternyata hanya perbandingan sepele bila dilihat dari sudut pandang lain
-
Prioritas
- Semua programmer perlu benar-benar memahami satu bahasa keluarga ALGOL
- Setelah itu, disarankan mempelajari SQL, bahasa keluarga Prolog
- Dalam karier, manfaatnya berada tepat setelah ALGOL
-
Perluasan setelahnya
- Setelah menguasai dua keluarga di atas, akan menguntungkan dalam jangka panjang bila setiap tahun mempelajari satu bahasa baru dari keluarga bahasa purba yang belum akrab
- Bahasa yang disarankan dari tiap keluarga dan urutannya adalah sebagai berikut
- Lisp: PLT Racket
- ML: Haskell
- Self: Self
- Prolog: Prolog
- Forth: gForth
- APL: K, dipakai melalui
ok
-
Penyesuaian urutan
- Jika banyak melakukan komputasi numerik, lebih cocok mempelajari K lebih awal
- Jika banyak melakukan embedded programming, lebih cocok mempelajari gForth lebih awal
- Namun urutan itu sendiri, atau bahasa mana tepatnya yang dipilih, bukan hal yang terlalu penting
- Mengambil Standard ML atau OCaml alih-alih Haskell, Common Lisp alih-alih PLT Racket, atau Factor alih-alih gForth juga tetap masuk akal
-
Tambahan dalam catatan kaki
- Bahkan setelah mempelajari SQL, tetap perlu mempelajari Prolog itu sendiri
- Karena cara penggunaan nyatanya sangat berbeda dari SQL
- Ada pula pendapat pembaca bahwa untuk memahami Forth secara mendalam, pendekatan yang umum adalah membuat implementasi Forth sendiri
- Disebutkan bahwa Forth cukup kecil sehingga satu orang dapat mengimplementasikannya dari nol dalam waktu yang relatif singkat
- gForth adalah implementasi yang baik untuk mempelajari ANS Forth
- Sebagai materi belajar disebutkan FORTH Fundamentals, Volume 1 karya McCabe
- Forth lain yang juga disebut layak dilihat: PygmyForth, eForth, colorForth
- Bahkan setelah mempelajari SQL, tetap perlu mempelajari Prolog itu sendiri
5 komentar
Menarik ya
Waktu kuliah, saya belajar mata kuliah jurusan dan mengerjakan tugas dengan keluarga ALGOL, Lisp, dan Prolog, jadi rasanya nostalgia sekali.
Bahasa-bahasa itu meninggalkan banyak jejak pada bahasa pemrograman arus utama modern,
dan di antaranya hanya Forth yang pengaruhnya tampak lebih kecil.
Kalau sampai notasi prefix sih belum tentu, tapi kalau harus ngoding pakai notasi postfix memang terlalu tidak nyaman.
Komentar Hacker News
Di kelas PL di Tufts, kami pernah langsung membuat versi mini untuk masing-masing dari 4 keluarga bahasa awal, yaitu imperatif, Lisp, ML, dan Smalltalk, dan senang rasanya melihat proses itu kini juga terbit sebagai buku ajar. Agak disayangkan bagian Prolog yang dulu sempat ada sekarang hilang
Kalau ada satu hal yang ingin saya ubah dari klasifikasi tulisan ini, Ruby menurut saya jelas lebih tepat dilihat sebagai bahasa berorientasi objek daripada keluarga Algol. Pengaruh Smalltalk sangat besar, dan bahkan nama pustaka standarnya masih menyisakan jejak itu, misalnya memakai
collectalih-alihmap. Di Ruby, dari awal sampai akhir semuanya adalah objek, dan pemanggilan metode juga paling alami dipahami sebagai mengirim pesan ke objek. Memang sering dibandingkan dengan Python, tetapi jalur evolusinya cukup berbeda, dan sekarang rasanya keduanya bertemu di titik ekosistem yang mirip. Bagi saya, Ruby terasa seperti alpaka yang lebih hangat dibanding PythonHello Worldmungkin kurang terlihat, tetapi bahkan tipe dasar pun semuanya sudah menjadi objek. Untuk menekankan bahwa bahkan bilangan bulat adalah objek, cukup tunjukkantype(42)dandir(42)kepada orang yang tidak suka OOPSaya ingin menambahkan satu kategori lagi dalam silsilah bahasa, yaitu bahasa untuk mengekspresikan bukti. Ini adalah keluarga tempat program sekaligus menjadi bukti lewat korespondensi Curry-Howard, dan Lean adalah contoh utamanya. Memang bisa juga dilihat sebagai subkategori dari fungsional, tetapi karena tujuan utamanya adalah verifikasi, bukan eksekusi, rasanya layak dibahas sebagai sumbu tersendiri
Baru-baru ini saya meninjau lagi proyek perbandingan bahasa, berupa benchmark penguraian siklus permutasi bertanda paralel untuk 3.715.891.200 signed permutation dari 10 karakter. Saya ingin mencari bukan sekadar bahasa purwarupa, tetapi implementasi modern dari tiap paradigma yang sungguh layak dipilih untuk pemrograman riset. Saya menilai bukan hanya performa, tetapi juga kemudahan mendapat bantuan AI dan apakah saya nyaman membaca serta berpikir dengan kodenya, dan berkat AI saya bisa melakukan semacam wisata optimisasi yang cukup dalam untuk tiap bahasa. Hasilnya saya rangkum di sini, dan cukup mengejutkan bahwa F# muncul di posisi paling atas
Saya juga pernah menulis artikel serupa di sini. Saya setuju dengan Algol, Lisp, Forth, APL, dan Prolog, tetapi untuk bahasa fungsional inovatif saya memasukkan SASL yang sedikit lebih awal daripada ML, dan untuk perwakilan objek saya memilih Smalltalk yang muncul lebih dulu daripada Self. Saya juga menambahkan Fortran, COBOL, SNOBOL, dan Prograph karena menurut saya masing-masing mengubah permainan dengan caranya sendiri
Saya ingin menambahkan keluarga semantik ke diskusi ini. Misalnya Verilog, Petri nets, Kahn process networks, dataflow machines, process calculi, reactive, term rewriting, keluarga constraint solver/theorem prover, dan probabilistic programming. Selain itu ada juga bahasa seperti Unison, Darklang, temporal dataflow, dan DBSP yang tidak pas masuk 7 kategori lama, tetapi secara praktik sudah mendekati tahap produksi. Ini mungkin terdengar agak curang, tetapi kebanyakan memang merupakan model komputasi yang sejajar dengan model mesin von Neumann. Sudah lama saya ingin menulis sesuatu seperti “semua cara komputasi yang kita kenal, di luar von Neumann”
1+1ditulis ulang menjadi bentuk sepertiADD(1,1), saya bisa mem-parsing-nya dengan cara yang saya pahami. Ditambah lagi saya keras kepala menolak belajar regex, jadi kodenya jadi cukup aneh, dan saya masih ingat rekan tim berkata, “kalau Andy bilang bisa, jangan disentuh.” Orang lain di tim menyelesaikannya dengan regex dan kodenya kira-kira 20 kali lebih pendek daripada punya sayaMata kuliah “Concepts of programming languages” yang saya ambil di TU Delft adalah mata kuliah favorit saya selama kuliah ilmu komputer. Kami belajar C, sisi fungsional lewat Scala, dan konsep prototipe lewat JavaScript, dan itu sangat mempermudah saya saat beberapa tahun kemudian belajar Elixir. Ada juga kelas membuat agen Unreal Tournament dengan GOAL, bahasa berbasis Prolog. Lama sekali saya tidak pernah benar-benar paham Prolog cocok dipakai untuk apa, tetapi akhirnya saya memakainya untuk membuat spellcheck yang memaksa kalimat Papiamentu buruk hasil LLM diperbaiki berulang kali
Saya setuju dengan gagasan bahwa kita perlu belajar bahasa dari kategori yang berbeda-beda. Baru setelah belajar OCaml, fungsi benar-benar terasa seperti fungsi matematis bagi saya, dan Mathematica membentuk kebiasaan melihat ekspresi itu sendiri sebagai input. Notasi Polandia terbalik di PostScript memberi kesan seperti bukan sekadar aritmetika yang berbeda, tetapi benar-benar menyusun ulang cara berpikir saya. Namun saya tidak setuju dengan klaim bahwa memilih Java, C#, C++, Python, atau Ruby itu sama saja. Kalau targetnya hanya mengimplementasikan quicksort mungkin memang mirip, tetapi bagi orang yang benar-benar ingin membangun sesuatu, pilihan bahasa bisa membuat perbedaan sebesar siang dan malam. Kalau seseorang ingin membuat game 3D lalu pertama kali diberi Ruby, atau ingin melakukan data science eksploratif atau deep learning tetapi pertama kali diberi Java, motivasinya bisa langsung turun
Tulisan ini mengingatkan saya pada 7 languages in 7 weeks karya Bruce Tate. Saya juga pertama kali mengenal Erlang dari buku itu. Tetapi secara sejarah, memasukkan COBOL dan Fortran ke keluarga Algol terasa agak dipaksakan, meski tetap mengingatkan bahwa sejarah memang pada dasarnya selalu mengandung penyederhanaan
Ada juga diskusi HN lama yang terkait. Diskusi sebelumnya bisa membantu memahami konteks