Peningkatan kompleksitas sistem tanpa henti, menindas dan akhirnya melumpuhkan. Bagi saya sebagai programmer generasi yang lebih tua, itu juga mengecewakan.
Saya telah memprogram selama lebih dari 40 tahun, memiliki kode tertulis dalam 50-100 bahasa atau dialek yang berbeda, dan menjadi ahli dalam 5-10. Alasan saya bisa mengklaim begitu banyak adalah karena sebagian besar mereka hanya bahasa yang sama, dengan tweak. Tweak menambah kompleksitas, membuat setiap bahasa sedikit berbeda.
Saya telah menerapkan algoritma yang sama berkali-kali: koleksi, konversi, pengurutan dan pencarian, penyandian / dekode, format / parse, buffer dan string, aritmatika, memori, I / O. Setiap implementasi baru menambah kompleksitas, karena masing-masing hanya sedikit berbeda.
Saya bertanya-tanya pada keajaiban yang ditimbulkan oleh seniman trapeze terbang tinggi dari kerangka kerja web dan aplikasi seluler, pada bagaimana mereka dapat menghasilkan sesuatu yang begitu indah dalam waktu yang singkat. Kemudian saya menyadari betapa mereka tidak tahu, berapa banyak yang mereka butuhkan untuk belajar tentang data atau komunikasi atau pengujian atau utas atau apa pun sebelum apa yang mereka lakukan menjadi berguna.
Saya belajar keterampilan saya di era bahasa generasi keempat, di mana kami benar-benar percaya bahwa kami akan menghasilkan suksesi bahasa tingkat yang lebih tinggi dan lebih tinggi untuk secara progresif menangkap semakin banyak bagian berulang dari perangkat lunak penulisan. Jadi bagaimana hasilnya, tepatnya?
Microsoft dan IBM membunuh ide itu dengan kembali ke C untuk menulis aplikasi untuk Windows dan OS / 2, sementara dBase / Foxpro dan bahkan Delphi merana. Kemudian web melakukannya lagi dengan trio utamanya bahasa assembly: HTML, CSS dan JavaScript / DOM. Semua sudah menurun dari sana. Selalu lebih banyak bahasa dan lebih banyak perpustakaan dan lebih banyak kerangka kerja dan lebih banyak kompleksitas.
Kami tahu kami harus melakukannya secara berbeda. Kita tahu tentang CoffeeScript dan Dart, tentang Less dan Sass, tentang template untuk menghindari keharusan menulis HTML. Kami tahu dan kami tetap melakukannya. Kami memiliki kerangka kerja kami, penuh dengan abstraksi yang bocor, dan kami melihat keajaiban apa yang dapat dilakukan oleh beberapa orang terpilih yang mempelajari mantra misterius, tetapi kami dan program kami terjebak oleh keputusan yang dibuat di masa lalu. Terlalu rumit untuk berubah atau memulai lagi.
Hasilnya adalah hal-hal yang seharusnya mudah tidaklah mudah, dan hal-hal yang seharusnya mungkin hampir mustahil, karena kerumitan. Saya dapat memperkirakan biaya untuk membuat perubahan untuk mengimplementasikan fitur baru dalam basis kode yang sudah ada dan yakin saya akan tepat. Saya bisa memperkirakan, tetapi saya tidak bisa membenarkan atau menjelaskannya. Itu terlalu rumit.
Dalam menjawab pertanyaan terakhir Anda, saya akan sangat menyarankan programmer muda untuk memulai setinggi mungkin pada lapisan kue, dan hanya menyelam ke lapisan bawah karena kebutuhan dan keinginan memberikan dorongan. Preferensi saya adalah bahasa tanpa loop, sedikit atau tanpa percabangan dan kondisi eksplisit. Lisp dan Haskell datang ke pikiran. Dalam praktiknya saya selalu selesai dengan C # / Java, Ruby, Javascript, Python dan SQL karena di situlah komunitas berada.
Kata-kata terakhir: kompleksitas adalah musuh utama! Kalahkan itu dan hidup menjadi sederhana.