un

guest
1 / ?
back to lessons

Pemrograman dalam Binary Absolut

Programmer pertama menulis dalam binary absolut: setiap instruksi & alamat dalam bit binary yang tidak bersih. Sebuah instruksi mungkin terlihat seperti 01100101 00001010 — kode instruksi & alamat memori dalam binary.

Masalah Kode Spaghetti

Ketika ada kesalahan yang membutuhkan penggunaan instruksi baru, programmer menghadapi dilema. Menempelkan di tempat berarti setiap alamat instruksi berikutnya bergeser satu — membutuhkan programmer untuk memperbarui setiap referensi alamat dalam seluruh program. Kacau.

Solusi: gantikan instruksi sebelum titik pengisian dengan melompat ke memori kosong. Di lokasi kosong tersebut: tulis instruksi yang dihapus, tambahkan instruksi baru, lalu melompat kembali. Ketika kesalahan muncul dalam perbaikan, terapkan trik yang sama lagi menggunakan memori kosong lainnya.

Hasilnya: jalur eksekusi melalui program melompat ke lokasi yang tampaknya acak. Hamming menyebut ini 'sebotol saus spaghetti.' Jalur aliran kendali, yang digambar di kertas, benar-benar terlihat seperti saus spaghetti yang dipintal.

Rute Keluar

Dua peningkatan segera: notasi oktal (mengelompokkan digit binary dalam kelompok 3) dan heksadesimal (kelompok 4, menggunakan A-F untuk nilai di atas 9). Ini mengurangi kesalahan saat menulis tetapi tidak menyelesaikan masalah alamat dasar.

Assembler simbolik (mis. SAP — Symbolic Assembly Program — dan SOAP — Symbolic Optimizing Assembly Program pada IBM 650) memungkinkan programmer untuk menulis nama instruksi (ADD, MOVE) dan label alamat simbolik daripada binary. Assembler ini menerjemahkan ke binary pada waktu input, secara otomatis mengelola pengasihan alamat.

SOAP melakukan optimasi tambahan: mengatur instruksi pada drum berputar sehingga instruksi berikutnya tiba di kepala bacaan saat instruksi sebelumnya selesai — kode latensi minimum. SOAP bahkan mengompilasi diri sendiri: program A diproses sebagai data untuk menghasilkan B, B dijalankan pada A untuk menentukan seberapa baik self-compilation memperbaikinya.

Parse Tree & Hierarki Bahasa

Perpustakaan & Kode yang Dapat Dipindahkan

Hamming menyebutkan bahwa gagasan tentang perangkat lunak yang dapat diulang guna (perpustakaan matematika) datang sangat awal - Babbage telah memikirkannya. Masalahnya: sebuah perpustakaan alamat absolut membutuhkan setiap rutin untuk menempati lokasi memori yang sama setiap kali digunakan. Ketika perpustakaan total terlalu besar, program bersaing untuk alamat yang sama.

Solusi: kode yang dapat dipindahkan. Assembler menghasilkan instruksi yang merujuk pada memori relatif - offset dari alamat dasar - daripada alamat absolut. Pemindai menyelesaikan alamat akhir pada waktu penggunaan.

Laporan publikasi Von Neumann (yang luas) menggambarkan trik-programming yang diperlukan. Buku program pertama (Wilkes, Wheeler & Gill, EDSAC, 1951) mengkodifikasi teknik-teknik ini.

Jelaskan mengapa perpustakaan alamat absolut menciptakan masalah skalabilitas, dan bagaimana kode yang dapat dipindahkan memecahkannya. Apa yang khusus dari alamat absolut yang menyebabkan tabrakan, dan apa yang dimaksud dengan 'dipindahkan' secara teknis?

Pecah Desain Bahasa

FORTRAN (1957, IBM) dan ALGOL (1958, komite internasional) mewakili dua filosofi desain yang menghasilkan hasil yang sangat berbeda.

FORTRAN

John Backus memimpin proyek FORTRAN (FORmula TRANslation) di IBM. Tujuan desain: membuat bahasa mudah untuk ilmuwan dan insinyur digunakan. FORTRAN menerima notasi matematika yang terasa alami bagi pengguna: A = B + C * D daripada TAMBAH B, C; SIMPAN T; KALI T, D; SIMPAN A.

FORTRAN bertahan selama 60+ tahun. Ini tetap digunakan aktif dalam komputasi ilmiah, dinamika fluida, modeling iklim, & fisika komputasional. Hamming mencatat ketahanan ini sebagai bukti desain yang sukses.

ALGOL

ALGOL (ALGOrithmic Language) dirancang oleh sebuah komite ahli logika & ilmu komputer yang berfokus pada ketelitian matematis: sebuah bahasa yang bersih logika & definisi secara formal. Notasi Backus-Naur (BNF) untuk mendeskripsikan gramatika diciptakan untuk spesifikasi ALGOL.

ALGOL gagal dalam praktik. Meskipun keindahan logika & pengaruh besar pada desain bahasa berikutnya (Pascal, C, & hampir setiap bahasa modern turunan dari konsep gramatika ALGOL), ALGOL sendiri tidak pernah diadopsi secara luas. Hukuman Hamming: dirancang secara logika, tidak dapat digunakan oleh manusia.

Hierarki Bahasa

Hamming menggambarkan hierarki alami dari kode mesin, melalui assembly, bahasa tingkat tinggi, & akhirnya 'bahasa yang difokuskan pada masalah' yang dekat dengan cara praktisi berpikir tentang domain masalah mereka. Setiap level menambahkan readability manusia dengan biaya efisiensi mesin.

Kriteria Empat Hamming untuk Desain Bahasa

Hamming mengambil pelajaran dari FORTRAN vs ALGOL dan menggabungkannya menjadi empat kriteria untuk bahasa pemrograman sukses:

1. Mudah dipelajari — seorang pemula dapat menjadi produktif dengan cepat

2. Mudah digunakan — tugas rutin membutuhkan upacara minimal

3. Mudah di-debug — kesalahan menghasilkan pesan yang bermakna & lokasi

4. Mudah menggunakan subrutin — penggunaan & abstraksi tidak membutuhkan usaha heroik

Dia menambahkan pengamatan struktural: bahasa manusia mengandung sekitar 60% redundansi; bahasa tertulis sekitar 40%. Bahasa dengan rendah redundansi (seperti APL) menghasilkan satu baris yang indah para ahli yang dianggap mistis oleh pemula — dan yang mengandung kesalahan yang tidak terdeteksi saat satu karakter berubah makna.

Implicasi: sebuah bahasa yang dirancang untuk keindahan logika mengoptimalkan pembaca yang salah. Programmer adalah manusia; manusia membutuhkan redundansi untuk menangkap kesalahan & menyampaikan niat.

Terapkan kriteria empat Hamming pada bahasa pemrograman yang Anda ketahui baik. Beri skor 1-5 untuk setiap kriteria (5=excelent). Kemudian, identifikasi kriteria yang, jika diperkuat, akan meningkatkan bahasa terbaik — dan jelaskan apa perubahan spesifik yang akan terlihat.

Desain Bahasa Psikologis vs Logis

Hamming kembali ke kontras FORTRAN/ALGOL sebagai pelajaran tentang dinamika institusional & manusia, bukan hanya desain bahasa.

FORTRAN dirancang psikologis — untuk manusia yang akan menggunakan itu, khususnya ilmuwan yang berpikir dalam notasi matematis. ALGOL dirancang logis — untuk kebenaran formal & keindahan teoretis.

Paradoks Hamming yang diidentifikasi: bahasa yang benar secara logis yang ditolak manusia gagal; bahasa yang dirancang secara praktis yang diterima manusia sukses, meskipun itu lebih bingung secara logis.

Dia menyebutkan APL sebagai kasus ekstrem: elegan secara logis, dapat dinyatakan dalam satu baris, dengan set karakter khususnya. Ahli suka dengan itu. Programmer normal menemukannya tidak dapat dibaca. Perubahan karakter tunggal dapat dengan sendirinya mengubah arti program. APL memiliki komunitas kecil yang devotion & hampir tidak ada penggunaan mainstream.

Argumen redundansi manusia: bahasa lisan ~60% redundan (konteks yang diulang, kata pengantar, struktur yang dapat diprediksi). Bahasa tertulis ~40% redundan. Redundansi ini melayani deteksi kesalahan - manusia tidak andal, jadi bahasa evolusi untuk membawa informasi yang cukup diulang untuk mendeteksi & memperbaiki kesalahan. Bahasa yang rendah redundansi menghapus jaringan keamanan ini.

Piranti Kompiler Hierarki

Hamming menggambarkan lapisan kompiler/interpreter: program dapat membaca bahasa tingkat tinggi & menerjemahkan ke yang lebih rendah. Letakkan lapisan ini - setiap satu menerjemahkan satu tingkat di bawah. Di atas: bahasa khusus domain yang ahli dalam bidang (biologi, keuangan, fisika) menulis secara alami. Di bawah: kode mesin. Setiap transisi adalah kompiler atau interpreter.

Memprediksi Selamatnya Bahasa

Pada tahun 1993, Hamming telah melihat banyak bahasa berhasil & gagal. FORTRAN (1957) bertahan. ALGOL (1958) gagal. COBOL (1959) bertahan bertahun-tahun dalam komputasi bisnis. LISP (1958) bertahan dalam penelitian AI. PL/I (1964) mencoba menyatukan segalanya & gagal.

Menggunakan perbedaan desain psikologis vs desain logis Hamming dan empat kriteria nya, jelaskan mengapa salah satu bahasa yang Anda ketahui itu berhasil dan satu lainnya gagal (atau sedang gagal). Penjelasan Anda harus mengidentifikasi faktor manusia khusus yang mendorong adopsi atau penolakan - bukan hanya sifat teknis.

Pola yang Kembali

Bab sejarah perangkat lunak Hamming mengandung pola yang kembali:

1. Batasan yang menyakitkan ada (alamat absolut, notasi biner, kode tidak terjaga)

2. Seseorang menciptakan lapisan abstraksi yang menghilangkan batasan tersebut

3. Abstraksi memungkinkan skala yang baru, yang menciptakan batasan yang menyakitkan baru

4. Ulangi

Binary → oktal/heksadesimal → assembly simbolik → FORTRAN → pemrograman berstruktur → bahasa pemrograman berorientasi objek → bahasa khusus domain. Setiap lapisan menangani masalah yang paling parah sebelumnya sementara memperkenalkan kelas masalah baru.

Masalah kode spaghetti (alamat absolut) menyebabkan assembly simbolik. Program assembly yang besar menyebabkan FORTRAN. Program FORTRAN yang besar menyebabkan pemrograman berstruktur dan kemudian orientasi objek. Kuliah Hamming berakhir sebelum transisi-transisi tersebut, tetapi pola tersebut terus berlanjut.

Pelajarannya bagi insinyur: Anda selalu menangani masalah yang diungkap oleh abstraksi sebelumnya. Memahami lapisan yang Anda jalani saat ini membutuhkan pengetahuan mengapa lapisan di bawahnya ada.

Identifikasi lapisan abstraksi perangkat lunak yang Anda kerjakan secara teratur. Apa batasan yang menyakitkan dalam lapisan di bawahnya yang disembunyikan? Dan apa kelas baru masalah yang lapisan Anda saat ini introduce — apa yang akan sakit akan lapisan di atasnya yang akan perlu diselesaikan?