Kejenuhan terhadap perangkat lunak
(tonsky.me)- Perangkat lunak modern, alih-alih mengembalikan kemajuan perangkat keras dalam bentuk efisiensi, kesederhanaan, dan kematangan, selama ini menormalkan inefisiensi dengan bertumpu pada asumsi bahwa “komputer sudah cukup cepat”
- Bahkan tugas dasar seperti scroll web, membuka email di Google Inbox selama 13 detik, pembaruan Windows 10 selama 30 menit, atau jeda input di editor teks terasa lebih lambat dari yang diharapkan
- Sistem Android 6GB, Windows 10 4GB, Google Keyboard 150MB, serta contoh aplikasi Electron dan Slack menunjukkan bahwa pembengkakan aplikasi dan platform berujung pada biaya kinerja, kompleksitas, dan keandalan
- Seperti pembaruan OS, aplikasi, browser, dan penghentian dukungan aplikasi 32-bit di iOS 11, perangkat lunak yang dulu berjalan baik pun bisa melambat atau rusak seiring waktu
- Untuk membuat perangkat lunak yang lebih baik, insinyur harus memahami kinerja, struktur, dan batasan sistem yang mereka buat, serta menghasilkan hasil yang cepat dan dapat diprediksi dengan sumber daya yang lebih sedikit
Perangkat lunak yang membuang-buang kinerja
- Perangkat lunak modern sering dianggap tetap baik-baik saja meski berjalan hanya dengan 1% atau 0,01% dari kinerja yang sebenarnya mungkin dicapai
- Sementara mobil, bangunan, dan pesawat mendekati batas fisik atau bentuk optimalnya, perangkat lunak membenarkan inefisiensi dengan alasan “komputer sudah cukup cepat”
- Pepatah “waktu programmer lebih mahal daripada waktu komputer” bisa menutupi kenyataan bahwa waktu komputer dibuang-buang secara belum pernah terjadi sebelumnya
- Sebuah tweet tentang menulis ulang program Python yang dijalankan setiap hari ke Rust sehingga waktunya turun dari 1,5 detik menjadi 0,06 detik, tetapi butuh lebih dari 41 tahun untuk menebus 6 jam kerja, sering dipakai sebagai contoh representatif dalam diskusi efisiensi
Pengalaman dasar yang lambat sampai sulit ditoleransi
- Komputer portabel terbaru ribuan kali lebih kuat daripada komputer era pendaratan di bulan, tetapi bahkan pada MacBook Pro terbaru pun sulit melakukan scroll halaman web dengan mulus di 60fps
- Inbox buatan Google membutuhkan 13 detik untuk membuka satu email di Google Chrome
- Pendekatan menganimasikan kotak putih kosong alih-alih konten lebih mirip kompromi yang menyesuaikan diri dengan batas kinerja halaman web
- Bahkan ketika layar 120Hz sudah menjadi arus utama, melihat satu balasan komunitas web saja dianggap belum cukup stabil bahkan di 60Hz
- Pembaruan Windows 10 memakan waktu 30 menit, dan dalam waktu itu orang bisa beberapa kali memformat SSD lalu mengunduh dan memasang build baru sebagai perbandingan
- Editor teks modern memiliki latensi input yang lebih besar daripada Emacs yang berusia 42 tahun
- Bahkan tugas yang hanya perlu memperbarui area persegi kecil pada setiap penekanan tombol pun disebut tidak dapat diselesaikan dalam 16ms
- Game 3D, dalam 16ms yang sama, melakukan rendering seluruh layar, memproses input, menghitung dunia, dan mengelola sumber daya
- Perangkat keras yang lebih cepat akhirnya dipakai bukan untuk perangkat lunak yang lebih baik, melainkan untuk menjalankan perangkat lunak yang melakukan hal yang sama dengan lebih lambat
Aplikasi dan platform yang membengkak
- Aplikasi web bisa menjadi 10 kali lebih cepat hanya dengan memblokir iklan, dan AMP lebih dekat ke solusi masuk akal berupa membuang bagian-bagian yang membengkak daripada teknologi baru
- Sistem Android berukuran 6GB bahkan tanpa aplikasi apa pun, Windows 95 berukuran 30MB, dan Windows 10 berukuran 4GB
- Windows 10 133 kali lebih besar daripada Windows 95, tetapi fungsi dasarnya dinilai tidak jauh berbeda
- Android bahkan 1,5 kali lebih besar daripada Windows 10
- Google Keyboard biasanya memakan 150MB, aplikasi Google 350MB, dan Google Play Services 300MB
- Kritiknya diajukan dengan mempertanyakan apakah Google Keyboard, aplikasi yang hanya menggambar sekitar tiga puluh tombol di layar, benar-benar 5 kali lebih rumit daripada seluruh Windows 95
- Google Play Services tidak bisa dihapus bahkan jika tidak digunakan
- Situasi ketika setelah memasang aplikasi dasar ruang tersisa untuk menyimpan foto hanya sekitar 1GB dikontraskan dengan masa ketika OS, aplikasi, dan data semua disimpan di floppy disk
- Aplikasi Todo berbasis Electron bahkan bisa menyertakan driver kontroler Xbox 360, rendering grafis 3D, pemutaran musik, dan fungsi pengambilan gambar webcam
- Slack, meski hanyalah aplikasi yang dekat dengan chat dan editor teks sederhana, tetap digolongkan sebagai aplikasi berat karena kecepatan muat dan penggunaan memorinya
- Semakin besar aplikasi, semakin besar hilangnya kendali, biaya kompleksitas, penurunan kinerja, dan utang keandalan, sehingga aplikasi yang terlalu berat tidak boleh diterima sebagai hal normal
Perangkat lunak yang membusuk seiring waktu
- Tiga tahun lalu ponsel Android 16GB masih cukup, tetapi pada era Android 8.1 aplikasi menjadi dua kali lebih besar tanpa alasan khusus sehingga sulit dipakai
- iPhone 4s diumumkan bersama iOS 5, tetapi menjalankan iOS 9 terasa berat, padahal iOS 9 juga dianggap tidak secara mendasar jauh lebih unggul
- iOS 11 menghentikan dukungan aplikasi 32-bit, sehingga aplikasi yang tidak lagi punya pengembang atau tidak diperbarui bisa jadi tak akan pernah terlihat lagi
- Sebuah tweet dikutip yang mengatakan bahwa program DOS berjalan di banyak komputer sejak 1980-an tanpa modifikasi, tetapi aplikasi JavaScript bisa rusak hanya oleh pembaruan Chrome berikutnya
- Halaman web yang hari ini baik-baik saja pun mungkin dalam 10 tahun tidak lagi berjalan benar di browser mana pun
- Orang membeli ponsel baru dan MacBook baru untuk melakukan hal yang sama, tetapi akhirnya hanya menjalankan aplikasi yang sama dengan lebih lambat
Turunnya ekspektasi kualitas
- Ketika halaman web bermasalah, alih-alih mencari penyebabnya, pengguna diminta menekan refresh
- Aplikasi web dapat memuntahkan error JavaScript yang “acak” bahkan di browser yang kompatibel
- Desain halaman web dan basis data SQL dikritik karena dibangun di atas harapan bahwa data tidak akan berubah saat pengguna sedang melihat halaman web yang sudah dirender
- Fitur kolaborasi sering berhenti pada tingkat “upaya terbaik”, sehingga memuat skenario sehari-hari yang bisa menyebabkan hilangnya data
- Dialog seperti “versi mana yang ingin dipertahankan?” pada dasarnya lebih dekat ke memilih mana dari hasil kerja yang akan dihancurkan
- Linux tetap menjadi sistem operasi server paling populer meski memiliki desain yang dapat mematikan proses secara arbitrer
- Contoh monitor Dell, AirDrop, dan Bluetooth menunjukkan bahwa perangkat lunak di dalam perangkat dan spesifikasi yang rumit menciptakan pengalaman yang bergantung pada reset berkala atau keberuntungan
- Untuk mengirimkan sesuatu yang bekerja stabil, kita harus memahami objek yang dibuat luar dan dalam, tetapi itu sulit dalam sistem yang terlalu menggembung
Kekacauan alat pemrograman dan praktik pengembangan
- Bahkan pada elemen dasar seperti manajemen paket, sistem build, compiler, desain bahasa, dan IDE, sulit melihat kematangan yang cepat, efisien, dan tahan lama
- Sistem build, meski punya semua informasi perubahan, tetap secara berkala meminta semuanya dihapus lalu dimulai lagi dari awal
- Menurut penulis, tidak ada alasan mengapa hal itu tidak bisa dibuat andal, dapat diprediksi, dan dapat direproduksi
- NPM digambarkan telah bertahun-tahun berada dalam kondisi “kadang berfungsi”
- Sebuah tweet dikutip bahwa
rm -rf node_modulestampak seperti sesuatu yang tak terhindarkan dalam pengembangan Node.js/JavaScript
- Kenyataan bahwa compiler serta pekerjaan pra/pasca-proses yang memakan beberapa menit atau beberapa jam tetap diterima bertentangan dengan ucapan bahwa “waktu programmer itu penting”
- Contoh memilih Hadoop bahkan dalam situasi ketika ia lebih lambat daripada menjalankannya di satu PC menunjukkan bahwa programmer tidak selalu membuat keputusan rasional
- Machine learning dan “kecerdasan buatan” dikritik karena memindahkan perangkat lunak ke era tebakan yang tidak dapat dipercaya
- Sebuah tweet dikutip yang mengatakan bahwa aplikasi atau layanan yang menyebut “AI” atau “machine learning” dibaca sebagai tidak andal, tidak dapat diprediksi, dan sulit menjelaskan hasilnya
- Menjalankan VM di atas Linux, lalu menaruh Docker di dalam VM, ditafsirkan sebagai tanda bahwa kita tidak tahu cara merapikan program, bahasa, dan lingkungan eksekusi dengan bersih
- Kenyataan bahwa berkas eksekusi tunggal Go disebut sebagai keunggulan utama memperlihatkan situasi di mana asal tidak berantakan sudah dianggap sukses
- Dependensi diperkenalkan ketika orang mencoba menyelesaikan masalah sederhana dengan “solusi paket lengkap”, sambil menarik masuk biaya adopsi dan dependensi lain
- Sulit menggunakan program selama bertahun-tahun tanpa restart, dan kadang-kadang bahkan sulit selama beberapa hari
- Restart proses, menyalakan ulang basis data, watchdog yang me-restart aplikasi setiap 20 menit, menyertakan sumber daya duplikat, dan mengirimkannya dalam bentuk terkompresi adalah cara cepat lewat, bukan memperbaiki
- Praktik semacam ini bukan rekayasa, melainkan pemrograman malas, dan rekayasa berarti memahami secara mendalam kinerja, struktur, dan batasan dari apa yang dibuat
Kompleksitas yang menumpuk dan ketidakpedulian pasar
- Perangkat lunak saat ini adalah tumpukan kode yang sekadar berfungsi di atas kode lain yang juga sekadar berfungsi, terus membesar dan makin rumit sehingga peluang untuk mengubahnya makin kecil
- Ekosistem yang sehat kadang butuh proses mundur dulu sebelum maju, tetapi disebutkan bahwa selama 25 tahun kita tidak melihat kernel OS baru dan kini semuanya sudah terlalu rumit untuk ditulis ulang
- Browser juga sulit menulis ulang layout engine dari nol karena edge case dan masalah historis
- Kemajuan hari ini tampak seperti menuang bahan bakar ke api: memperkenalkan microservices untuk menyelesaikan masalah monolit, Docker untuk menyelesaikan masalah microservices, lalu Kubernetes untuk menyelesaikan masalah Docker
- Sebuah tweet dikutip yang mengatakan bahwa kita sudah berpindah dari konfigurasi deklaratif berbasis XML ke konfigurasi microservices berbasis YAML, tetapi setidaknya XML dulu punya skema
- Pengguna pada akhirnya hanya bisa menerima apa yang diberikan insinyur, dan dalam situasi seperti aplikasi Android 350MB, scroll tersendat, atau “kalau tidak berfungsi, reboot saja”, pilihan nyaris tidak ada
- Jika semua produk pesaing juga lambat, besar, dan berkualitas rendah, sulit muncul tekanan kompetitif
- Produk yang sesekali menciptakan ketegangan seperti iPhone/iOS terhadap ponsel lain, atau Chrome terhadap browser lain, memang pernah muncul tetapi dianggap tidak bertahan lama
- Tugas insinyur seharusnya adalah menunjukkan apa yang mungkin dicapai komputer modern dalam hal kinerja, keandalan, kualitas, dan ketersediaan
Tetap ada alternatif yang terlihat
- LMAX Disruptor, SBE, dan Aeron karya Martin Thompson disebut sebagai contoh yang mengesankan, sederhana, dan efisien
- Xi editor karya Raph Levien dinilai dibuat dengan prinsip yang benar dalam pikiran
- Jonathan Blow membuat bahasa untuk gimnya sendiri, dan di laptopnya ia bisa melakukan kompilasi ulang penuh atas 500 ribu baris kode hanya dalam 1 detik
- Hasil itu adalah kompilasi ulang penuh, bukan build inkremental maupun cache perantara
- Menulis program yang cepat tidak membutuhkan jenius atau sihir; cukup jangan membangunnya di atas tumpukan sampah raksasa seperti toolchain yang sedang tren
Tuntutan untuk perangkat lunak yang lebih baik
- Rekayasa perangkat lunak tidak boleh berhenti pada keadaan sekarang dan harus menjadi lebih baik; tidak perlu terus membuat hal yang sama dalam bentuk yang lebih lambat dan lebih besar
- Pengembangan saat ini lebih dekat ke sekadar memenuhi tujuan bisnis di atas alat yang compang-camping daripada benar-benar kemajuan
- Hasil dari terjebak pada optimasi lokal adalah kita menjadi terbiasa dengan keadaan yang membengkak dan tidak efisien
- Insinyur bisa dan harus membuat aplikasi yang lebih baik dengan alat yang lebih baik, secara berkali-kali lipat lebih hemat sumber daya, cepat, dapat diprediksi, dan andal
- Untuk menghasilkan produk berkualitas tinggi yang andal dan dapat diprediksi, kita harus sepenuhnya memahami apa yang dikerjakan dan alasannya; alasan “memang bawaan yang ada seperti ini” tidak bisa diterima
2 komentar
Artikel ini sudah pernah memiliki terjemahan bahasa Korea sebelumnya, jadi silakan lihat itu.
https://tonsky.me/blog/disenchantment/ko/
Tautannya sudah saya ubah langsung ke versi terjemahan.
Komentar Hacker News
Kode yang lebih kecil, lebih bersih, lebih sedikit bug, lebih aman, lebih cepat, dan lebih awet jelas mungkin dibuat. Kalau itu bisa dilakukan pada awal era informasi, tidak ada alasan itu tidak bisa dilakukan sekarang ketika kita punya pengalaman puluhan tahun dan alat yang jauh lebih kuat
Alasan itu tidak dilakukan adalah karena tidak ada uang di sana, atau lebih tepatnya justru sebaliknya. Startup yang didanai VC harus lebih dulu masuk ke pasar agar bisa bertahan hidup, dan bahkan di organisasi yang sudah matang pun biaya dan pembengkakan bukan diperlakukan sebagai masalah, melainkan seperti fungsi yang memperbesar gengsi manajer. Pada akhirnya biayanya dibebankan ke pelanggan
Alasan “prinsip pasar yang kejam” tidak membetulkan pemborosan seperti ini tampaknya karena, meski codebase yang lebih baik suatu hari bisa mendapatkan kunci kerajaan, lingkungan persaingan nyata terlalu rentan terhadap patologi dan tren
Namun, ada satu hal yang lebih mudah dilakukan dibanding perusahaan yang didanai VC, yaitu mengalokasikan waktu untuk refactoring dan penanganan utang teknis. Saat ini kami memang sedang menginjak rem keras selama 45 hari pada pengembangan fitur baru untuk menangani masalah teknis utama. Jika Anda berharap akan diakuisisi tahun depan, sulit membuat investasi seperti ini, dan utang teknis menjadi masalah orang lain
Selama produk terus dikembangkan, bug dan masalah baru akan terus muncul. “Kode yang sempurna” hanya mungkin dalam konteks tertutup ketika fitur baru tidak lagi ditambahkan
Saya rasa model pendanaan VC yang mendorong industri ke arah ini. Startup menerima jutaan dolar, lalu harus menghasilkan uang cukup cepat untuk mengembalikannya kepada investor, jadi mereka harus memeras uang dari aplikasinya secepat mungkin. Pekerjaan yang tidak punya metrik ROI tidak menarik perhatian siapa pun
Pada dasarnya dulu ada akses terbuka, tanpa kata sandi atau kata sandi pendek, penyimpanan kata sandi yang tidak aman, semuanya plaintext, sanitasi input diabaikan, hal-hal seperti telnet, dan seterusnya
Di sini juga ada alasan lain mengapa perangkat lunak menjadi lebih bengkak. Kita mulai melihat interaksi dan risikonya, dan setelah melihatnya, kita tidak bisa pura-pura tidak melihat. Kondisi batas yang harus ditangani tidak berkurang, malah terus bertambah, dan perangkat keras yang harus didukung juga makin banyak
Proses menulis kode yang berkinerja baik memang bisa ditingkatkan, tetapi pada saat yang sama garis dasarnya naik lebih cepat daripada kecepatan kita mencapainya. Menarik juga bahwa sekarang kita perlahan bergerak lagi ke arah tanpa kata sandi
Cakupan unit test yang tinggi, yang membuat refactoring jadi menyakitkan, sering kali menghambat rilis fitur, dan menurut saya itu terjadi jauh lebih sering daripada yang mau diakui para fanatik test-driven development. Banyak “praktik terbaik” di industri lebih mirip dogma tidak realistis yang dibuat oleh orang-orang di perusahaan yang sudah menemukan product-market fit dan uangnya mengalir sendiri
Saya masih punya HP MS200 all-in-one yang nyaris masih bisa dipakai. Saya membelinya murah di garage sale pada 2017, dan jika dipasangi Linux, setelah Chrome dimuat, komputer itu masih bisa dipakai untuk panggilan video layar penuh Skype versi web atau menonton YouTube layar penuh
Baru-baru ini saya mengambilnya lagi dan memasang FC38 serta Chrome terbaru sebelum menjadikannya komputer untuk anak, dan video YouTube berubah jadi slideshow. Saya utak-atik semua pengaturan tetap tidak berhasil, lalu menaikkan RAM dari 2GB menjadi 3GB, dan hasilnya kembali ke tingkat pemutaran layar penuh 720p seperti 6 tahun lalu
Artinya, untuk melakukan hal yang sama sekarang dibutuhkan memori 1,5 kali lebih banyak, tambahan 1GB. Saya tahu orang bilang 16GB itu minimum, tetapi bahkan di mesin jelek ini pun Chrome pada dasarnya hanya browser web yang hampir menganggur, namun jejak memorinya terlihat sekitar 30GB. Mungkin sebagian besar adalah file yang di-
mmap, tapi tetap saja 30GBSebaliknya, pada sebagian besar perangkat, peningkatan daya tahan baterai, suhu yang lebih rendah, serta kebutuhan RAM dan disk yang lebih kecil adalah perbaikan yang jelas. YouTube bisa saja menyimpan duplikat file encoding lama di server, tetapi itu jadi pemborosan ruang ketika mayoritas pengguna mengakses dari perangkat modern
Sebagian besar kenaikan penggunaan RAM Chrome berasal dari perkembangan arsitektur sandbox. Memori bersama dan ruang proses bisa dipakai untuk serangan keluar dari sandbox, jadi isolasi makin ditambah, dan kebiasaan Chrome menjalankan proses independen baru untuk tiap tab dan ekstensi juga menjadi penyebab besar
Akhir-akhir ini ad blocker juga berpengaruh besar. Karena web makin memburuk, makin sulit membuat pemblokir iklan yang efektif dan itu butuh lebih banyak sumber daya. Perangkat lunak lambat tidak melambat hanya untuk menyiksa orang; sering kali itu hasil dari mengubah hack berbahaya menjadi implementasi yang baik dan dari perubahan kebutuhan. FLV sudah tidak lagi cukup, dan h264 pun tampaknya sulit bertahan lama lagi dalam 5 tahun ketika h265 dan AV1 makin menyebar
Toolchain modern berfokus pada “jangan menciptakan ulang roda”, tetapi jika setiap dependensi memilih versi roda yang berbeda, maka dengan menarik beberapa dependensi saja Anda bisa membawa masuk enam implementasi fungsi low-level yang sama
Hanya saja yang terpasang adalah Flatpak, dan terasa bengkak. Untungnya, Chrome masih bisa dipasang langsung secara native lewat RPM, dan benar-benar memakai shared library milik OS
Tulisan ini bahkan tidak menyentuh sumber penderitaan utamanya, yaitu bug. Hampir semua software terasa sebisa mungkin penuh bug. Setiap kali harus memakai software lewat jalur yang tidak umum atau alur yang tidak normal, rasanya ngeri, dan hampir selalu gagal
Belum lama ini saat menjual mobil ke Carvana, saya akhirnya berhasil hanya dengan bolak-balik antara Chrome dan Firefox. Di Chrome, wizard unggah gambar melempar exception JS, dan bagian itu entah bagaimana hanya berhasil di Firefox, tetapi bagian lain dari situsnya jelas bermasalah seolah-olah mereka sama sekali tidak menguji di Firefox
Yang lebih buruk, ketika pengguna nonteknis menemui bug, mereka mengira merekalah yang melakukan kesalahan. Sekarang saya malah rela menerima software yang besar dan lambat, asalkan stabil dan kokoh
Di sisi lain, saya terus melihat betapa penuh bug semuanya, dan saya tidak tahu apakah memang bug-nya makin banyak, atau saya yang makin tua dan makin paham isi dapurnya sehingga kesabaran saya terhadap pengembangan software ala perusahaan besar makin menipis. Saya kesal pada product person khayalan yang berkata, “rilis fitur X sekarang juga,” padahal bug UX yang jelas-jelas kentara pun mudah ditemukan
Saya paham, dan sampai taraf tertentu setuju, dengan argumen tentang biaya, biaya peluang, dan pragmatisme, tetapi kadang sulit menepis perasaan bahwa kita sekadar menerima hidup di dunia yang setengah jadi
Sekarang pun rasanya tidak lebih baik. Jika anak kecil memegang ponsel atau laptop, hanya dengan menekan tombol terlalu cepat atau dalam urutan yang tak terduga, mereka bisa dengan cukup konsisten membuat perangkat modern macet, freeze, atau crash. Bukan dirusak secara fisik, tetapi begitulah kondisi teknologi modern
Saya paham kenapa ini tidak diperbaiki. Orang-orang sudah terbiasa menganggap restart sesekali itu perlu, dalam kasus seperti ini mudah menyalahkan anaknya, dan restart biasanya menyelesaikannya. Meski begitu, mengingat siklus hidup sistem operasi, saya berharap sekarang kondisinya sudah lebih baik
Saya tidak membahasnya di tulisan tentang C, tetapi salah satu alasan besar saya memakai C adalah karena software jadi lebih sulit membengkak. Anda bisa menambah fitur, tetapi tidak mudah membuat satu fitur saja menambah 100KB ke executable
Saat ini saya memang tidak bekerja sebagai karyawan, tetapi saya memakai mesin yang kuat untuk “pekerjaan”. Meski begitu, saya memakai Neovim dan tmux alih-alih IDE, lalu memakai Gentoo yang dimodifikasi besar-besaran alih-alih distribusi Linux biasa, OpenRC alih-alih systemd, dan Qtile sebagai tiling window manager alih-alih desktop penuh
Saya menjaga mesin ini agar tidak bloat, sampai-sampai setelah boot dan baru login hanya ada 40 proses. Sekarang saya benar-benar sedang merekayasa software. Saya berusaha menjaga software tetap kecil dan cepat sambil secara efektif meredam masalah C, dan berharap suatu hari bisa membangun bisnis di atasnya
Sepertinya kita akan melihat apakah masih ada pasar untuk software yang tidak bloat dan lincah
https://gavinhoward.com/2023/02/why-i-use-c-when-i-believe-i...
https://gavinhoward.com/2020/12/my-development-environment-a...
https://gavinhoward.com/2023/06/an-apology-to-the-gentoo-aut...
https://gavinhoward.com/2023/09/lessons-learned-as-a-user-3-...
Program seperti WordPerfect, Lotus 123, MS-DOS 1.0, dan SubLogic Flight Simulator sebelum diakuisisi Microsoft ditulis dalam assembly. Pengamat industri saat itu melihat bahwa Microsoft bisa mengiterasi fitur baru di MS Word dan MS Excel lebih cepat serta mem-porting-nya ke arsitektur lain lebih cepat karena ditulis dalam C yang “bloat”, dibanding WordPerfect dan Lotus 123. Pesaing mereka terlalu lama bertahan di assembly
Saya melihat trade-off yang sama di software pribadi. Jika memakai C#/Python yang lebih high-level dan “bloat” ketimbang C/C++ yang lebih ramping, Anda bisa menyelesaikan pekerjaan tertentu jauh lebih cepat. Saya lebih mahir di C++ dan lebih suka executable kecil, tetapi jika C# membuat pekerjaan yang saya inginkan selesai lebih cepat, keunggulan itu jadi tidak berarti. Saya juga bagian dari masalah software bloat
“Saya akan membuat jembatan terkuat dan teringan di dunia” itu luar biasa, sedangkan “Saya akan membuat jembatan yang cukup ringan dan cukup kuat dengan biaya yang sanggup ditanggung pelanggan” itulah rekayasa
Saya berhenti setelah membaca sedikit lebih dari setengahnya, tetapi argumen intinya tampak seperti perangkat lunak harus cepat, dan saya tidak ingat ada pembenaran untuk filosofi itu selain kesan implisit bahwa “itu memang kebenaran”. Memang diakui ada sanggahan bahwa peningkatan efisiensi kadang sama sekali tidak menutup biaya waktu yang dihabiskan untuk mengejar efisiensi, tetapi argumen itu dilewati tanpa benar-benar bergulat dengannya
Ciri utama lain dari tulisan itu adalah memilih data secara cherry-picking dan terlalu menyederhanakan ranah masalah. Ia berulang kali membuat seruan emosional, “Sebenarnya perangkat lunak memakai waktu dan ruang itu untuk apa?”, tetapi tidak berusaha menjawab pertanyaan itu dengan serius, lalu menggunakan ketiadaan jawaban seolah-olah itu bukti bahwa jawaban yang ada salah. Ia juga membandingkan beberapa perangkat lunak yang tidak setara secara fungsional seakan-akan perbedaannya hanya pada performa
Ada banyak yang bisa dibahas soal biaya sosial, lingkungan, dan bisnis dari inefisiensi, serta tentang perangkat lunak yang lebih efisien, tetapi juga layak dibahas bahwa perangkat lunak modern memungkinkan orang yang tadinya tidak akan bisa membuat apa pun untuk membuat sesuatu yang “buruk” namun mereka butuhkan. Seperti insinyur struktur memilih sesuatu yang “cukup kuat”, pengembang modern juga sering menargetkan sesuatu yang “cukup cepat”
Ada banyak bahan untuk perdebatan yang kaya, tetapi tulisan ini berhenti pada kemarahan emosional dan gagal menangani rasionalitas serta argumentasi yang sesungguhnya. Beberapa klaimnya memang mengandung kebenaran, tetapi menurut saya tulisannya sendiri sudah jelas menunjukkan bahwa ia tidak berniat berdiskusi
Jaringan Anda juga kemungkinan besar bukan lagi 2G beberapa kbps, melainkan 5G atau fiber ratusan Mbps. Pada akhirnya tindakan berbicara lebih keras daripada kata-kata, dan jika masyarakat secara keseluruhan mengikuti aksioma “perangkat lunak yang lebih cepat”, maka itu bisa diterima sebagai fakta
Terutama karena ini berasal dari aksioma yang sama dengan klaim “waktu developer lebih berharga”; bedanya hanya waktu siapa yang ingin dihemat
Jika developer tidak menguji di perangkat berspesifikasi rendah, mereka bisa sama sekali tidak menyadari masalah ini. Masalah sebenarnya, lebih dari sisi teknisnya, adalah sikap sebagian developer yang menjadi defensif dan mulai berdebat saat berhadapan dengan kenyataan tidak nyaman bahwa kode mereka terlalu lambat. Mereka harus duduk bersama manajer produk, menyediakan waktu untuk profiling dan optimasi, dan melihat bagaimana mengurangi masalah performa tanpa harus membangun ulang dari nol
BASIC dan SQL sejak lama juga ditujukan agar orang bisa membuat sesuatu yang “buruk”, demikian pula Fortran dan banyak bahasa/teknologi lain yang kini sudah hilang
Python atau Java, kalaupun dinilai dengan murah hati, tetap konservatif, dan jika melihat perkembangan bahasa pemrograman di tahun 70-an, keduanya justru pantas disebut anakronistik. J dan Prolog secara konseptual jauh lebih maju daripada Rust atau Go, tetapi dibuat lebih awal. Dari C89 sampai C23, apakah akumulasi C itu bahasa modern, atau hanya C23 yang modern, dan apakah benar ada perbedaan besar antara C89 dan C23, itu pun samar
Jadi saya penasaran apakah ada cara lain untuk mendefinisikan kemodernan, selain berdasarkan waktu dibuatnya atau pohon evolusi imajiner
Ini keluhan lama. Banyak kenyamanan yang kita anggap biasa punya biaya, dan biaya itu menumpuk besar. Layar 4K punya 17 kali lebih banyak piksel daripada 800x600, dan dengan warna 32-bit, ukuran mentah grafis untuk layar modern menjadi sekitar 68 kali lebih besar
Dulu gambar statis sudah cukup, tetapi sekarang animasi berkualitas tinggi dengan frame rate tinggi sudah menjadi standar. Arial Unicode adalah font 15MB, dan kemungkinan bahkan tidak muat di memori kebanyakan komputer yang menjalankan Windows 95
Pemeriksa ejaan di mana-mana kini dianggap wajar, dan hal-hal seperti ini terus bertambah. Meski begitu, semuanya membuat komputer jauh lebih nyaman dipakai. Saya tidak merindukan mode video 16 warna, atau masa ketika mustahil memakai dua bahasa non-Inggris sekaligus tanpa akal-akalan yang sangat menyebalkan
Tetapi saya tidak menginginkan animasi yang tujuannya cuma membuat waktu tunggu terasa kurang membosankan. Unicode juga layak dibayar
Namun teks seharusnya tetap bisa dirender ke layar dalam hitungan milidetik satu digit, seperti pada 1981. Piksel dan glif memang lebih banyak, tetapi itu tetap mungkin; hanya saja bukan prioritas
Mirip seperti membayar $100.000 untuk BMW performa tinggi, lalu insinyur berkata akselerasi 0-60mph butuh 30 detik, dan pengguna seharusnya menerima saja karena mereka bukan pakar performa
Saya juga melihat arus yang mirip di organisasi saat ini. Di awal, ketika tim masih kecil, detail itu penting. Tidak boleh lambat, animasi harus mulus, kecepatan scroll dan waktu muat penting, dan kami berusaha membuat produk yang paling efisien untuk meningkatkan efisiensi pengguna
Seiring tim membesar, nilai yang dikejar berubah ke arah meningkatkan efisiensi developer. Lebih banyak abstraksi, lapisan, dan framework masuk, dan kompromi yang menghabiskan jutaan detik waktu pengguna demi menghemat satu hari kerja developer pun diterima
Perbedaannya ada pada visibilitas. Eksekutif bisa melihat biaya pengembangan, tetapi tidak bisa melihat manfaat dari waktu eksekusi yang sedikit lebih cepat, caching yang lebih baik, atau scroll yang lebih mulus. Karena itu tidak diukur. Saat organisasi mencapai titik hanya peduli pada angka yang bisa diukur, arus seperti ini terasa alami
Tentu saja, ini hanya sampai AI mencapai titik di mana ia bisa memperbaiki apa yang kita tulis dengan buruk, atau yang AI tulis dengan buruk, dan bahkan AI yang sendiri sangat tidak efisien seperti diprediksi tulisan aslinya
Mobil baru dioptimalkan setelah ada guncangan minyak dari luar, dan itu pun sangat tidak merata. Faktanya, produk yang tidak efisien sering kali lebih menguntungkan karena pelanggan harus lebih sering menggantinya. Kabel iPhone murahan yang retak setelah setahun memungkinkan Apple menagih biaya penggantian lagi dan lagi. Peralatan rumah tangga lebih sering rusak tetapi dibuat lebih murah sehingga menaikkan laba per unit. Yang penting bukan efisiensi penggunaan setelah penjualan, melainkan efisiensi produksi
Dalam software, kapitalisme bekerja dengan mendorong otomatisasi baru secepat mungkin dan membuat konsumen menanggung pemborosan energi dan waktu. Rantai produksi makin distandardisasi dan dioptimalkan sehingga developer React atau admin Kubernetes bisa diganti seperti pekerja gudang, dan muncul pula tekanan upah. Sebagian otomatisasi lebih mirip pembenaran diri, seperti istilah akuntansi yang dibuat rumit untuk membenarkan profesi itu sendiri, dan sisanya soal laba
Segala sesuatu ada biayanya. Jika biaya komputasi atau buruknya pengalaman pengguna cukup besar, maka efisiensi akan dioptimalkan. Model ML adalah contohnya. Dalam kasus lain, itu tidak dioptimalkan, karena pengguna akhir tidak menginginkannya sampai harus mengorbankan fitur yang lebih sedikit
Mobil dulu juga boros bahan bakar, tetapi berubah ketika biaya bahan bakar dan kekhawatiran lingkungan membuat pelanggan menginginkan hal lain. Banyak engineer lupa bahwa mereka dibayar untuk membuat produk bagi pelanggan
Penulis asli juga tampaknya belum pernah menunggu mesin Windows atau Linux lama sampai benar-benar selesai booting. Versi modern boot jauh lebih cepat karena itulah yang diinginkan pelanggan. Ponsel menyala 24 jam, jadi boot yang lama sekali setiap beberapa bulan bukan hal yang dipedulikan pelanggan
BIOS saya butuh sekitar 20 detik untuk POST, dan katanya itu normal. Setelah itu boot OS sekitar 10 detik
Kita bisa bilang dokter atau engineer juga dibayar untuk mengembangkan obat baru atau sumber listrik baru, tetapi bidang-bidang ini sensitif dan penting sehingga ada banyak lapisan pengawasan pemerintah. Software belum punya tingkat pengawasan seperti itu
Mereka punya kekuatan untuk membentuk lingkungannya sendiri, sehingga bisa sangat mengubah arah hasil dari “permintaan pelanggan” itu
Ini tulisan dari 2018, dan sudah ada beberapa diskusi sebelumnya
https://news.ycombinator.com/item?id=18012334 (Sep 2018)
https://news.ycombinator.com/item?id=21929709 (Jan 2020)
https://news.ycombinator.com/item?id=31798580 (Jun 2022)
Sangat relate. Sebagai developer, penting untuk mengingat bahwa kita punya pilihan. Kita memang tidak bisa memilih segalanya, tetapi kita bisa memilih alternatif yang tidak terlalu buruk
Kita tidak harus memakai Node. Di ekosistem .NET atau JVM pun kita bisa menulis software yang hebat dan kompatibel ke belakang, serta berharap itu tetap berjalan tanpa perubahan 10 tahun kemudian
Kita juga tidak harus membuat halaman web satu halaman. HTML gaya lama yang memuat ulang halaman sepenuhnya setiap kali diklik juga bekerja dengan baik, dan pada titik ini latensinya bahkan bisa lebih rendah
Kita juga tidak harus membuat aplikasi desktop dengan Chromium. Memulai framework UI memang butuh sedikit lebih banyak kerja, tetapi kualitasnya sepadan. Kita memang tidak selalu punya kuasa mengambil keputusan, tetapi saat punya, kita harus keluar dari pilihan yang buruk