Mengapa programmer payah

Sekali waktu, saya menulis sebuah artikel tentang topik "Mengapa Komputer Menyebalkan" (akhirnya disebut "Komputer" dan " Apa yang Salah dengan Komputer " [ tautannya terputus dalam aslinya, jadi salinan dari arsip web - catatan penerjemah ] dalam dua versi lain, dan nama aslinya tidak pernah keluar). Artikel itu cukup panjang, tetapi esensi bermuara pada gagasan bahwa komputer adalah omong kosong karena fakta bahwa programmer membuat hal-hal rumit terliar yang tidak dapat dipahami orang lain, dan karena kompleksitas didasarkan pada kompleksitas yang lebih besar selama semua orang aspek program tidak akan menjadi tidak terkendali.


gambar
CPAP dari sini


Apa yang saya tidak tahu adalah mengapa programmer melakukan ini. Jelas bahwa mereka melakukan ini; tetapi mengapa industri perangkat lunak menciptakan begitu banyak kode yang liar, rumit, dan tidak dapat dibaca? Mengapa ini terus berlanjut bahkan setelah, tampaknya, pengembang harus belajar dari pengalaman negatif pertama? Apa yang membuat pemrogram tidak hanya menulis kode yang buruk, tetapi terus melakukannya berulang kali?


Ya, itu adalah misteri bagi saya, tetapi pada awalnya saya tidak terlalu mengkhawatirkannya. Gagasan bahwa "program buruk berasal dari programmer buruk" sangat sederhana dan jelas sehingga menjadi dasar untuk seluruh studi di bidang pemrograman, yang akhirnya memiliki hasil yang baik (yang terutama dijelaskan dalam blog ini, dan juga merupakan subjek dari buku yang sedang ditulis). Masalahnya diidentifikasi (programmer buruk yang menciptakan kompleksitas), dan, pada pandangan pertama, dia punya solusi (membuat aturan untuk pengembangan perangkat lunak yang akan mencegah ini), dan itu sudah cukup bagi saya.


Tetapi saya masih bertanya-tanya bahwa universitas-universitas terkenal di dunia, sekolah-sekolah teknis dan program-program pendidikan meluluskan programmer-programmer yang mengerikan itu, meskipun telah berpengalaman selama puluhan tahun dalam mengajarkan teknik pengembangan perangkat lunak. Tentu saja, banyak dari prinsip-prinsip desain program tidak pernah dirahasiakan, dan banyak tips bagus sudah dekat, dan banyak dari mereka sangat umum. Bahkan jika orang tidak bersekolah, apakah mereka tidak membaca nasihat seperti itu?


Ya, kebenaran itu di luar imajinasi saya, dan butuh waktu hampir lima tahun untuk bekerja di Proyek Bugzilla dengan partisipasi sejumlah besar pengembang, sehingga suatu hari saya tiba-tiba menyadari fakta yang menakutkan:


Sebagian besar (90% atau lebih) programmer tidak tahu apa yang mereka lakukan.


Bukannya mereka tidak membaca apa pun tentang pengembangan perangkat lunak (walaupun kemungkinan besar tidak). Bukan berarti bahasa pemrograman itu terlalu rumit (meskipun itu). Faktanya adalah bahwa sebagian besar programmer tidak tahu apa yang sebenarnya mereka lakukan. Mereka hanya meniru kesalahan programmer lain - menyalin kode dan mencetak mantra yang kurang lebih bermakna di komputer dengan harapan akan berperilaku serupa dengan apa yang mereka harapkan, tanpa memiliki pemahaman nyata tentang mekanisme komputer, atau prinsip-prinsip pengembangan perangkat lunak, atau nilai-nilai. setiap kata dan simbol individual yang mereka masukkan ke dalam komputer.


Ini adalah pernyataan yang berani, mengejutkan, dan menghina, tetapi pengalaman saya membenarkannya. Saya pribadi memeriksa dan memberi nilai pada lusinan programer. Saya membaca kode banyak orang lain. Saya berbicara dengan banyak, banyak programmer tentang pengembangan perangkat lunak, dan membaca artikel dari ratusan pengembang. Jumlah mereka yang benar-benar mengerti apa yang mereka lakukan hanya sekitar 10% dari semua programmer yang pernah saya ajak bicara, bekerja sama, atau mendengar.


Pengembang open source adalah yang terbaik dari yang terbaik; ini adalah orang-orang yang ingin memprogram bahkan di waktu luang mereka. Dan bahkan kemudian, saya akan mengatakan bahwa hanya sekitar 20% dari pengembang open source benar - benar bagus dalam apa yang mereka lakukan.


Tapi mengapa demikian? Apa masalahnya? Bagaimana mungkin ada begitu banyak orang yang bekerja di industri ini yang tidak tahu apa yang mereka lakukan?


Yah, tampaknya mereka agak "bodoh." Tetapi apakah kebodohan itu? Orang tidak menjadi bodoh hanya karena mereka tidak tahu sesuatu . Ada banyak hal yang tidak semua orang tahu. Tapi itu tidak membuat mereka bodoh. Ini membuat mereka tidak mengerti tentang hal-hal tertentu, tetapi tidak bodoh. Tidak, kebodohan, kebodohan nyata - itu berarti tidak mengetahui bahwa Anda tidak tahu sesuatu . Orang bodoh berpikir bahwa mereka tahu sesuatu, meskipun mereka tidak mengetahuinya , atau mereka tidak menyadari bahwa bidang pengetahuan jauh lebih luas daripada yang mereka pikirkan .


"Kebodohan" ini adalah sesuatu yang dapat ditemukan di hampir semua bidang, dan pengembangan perangkat lunak tidak terkecuali. Banyak programmer tidak menyadari bahwa mungkin ada undang-undang atau prinsip umum tertentu untuk pengembangan perangkat lunak, sehingga mereka bahkan tidak berusaha menemukannya. Banyak perusahaan perangkat lunak tidak berupaya meningkatkan pemahaman pengembang bahasa pemrograman yang mereka gunakan. Mungkin ini karena manajemen percaya bahwa programmer harus "sudah mengetahui semua ini, karena mereka disewa untuk melakukan ini."


Sayangnya, pandangan ini berbahaya ketika mengembangkan perangkat lunak, karena jika Anda ingin menjadi programmer yang benar-benar baik, Anda perlu tahu banyak . Siapa pun yang percaya bahwa ia tahu segalanya (atau yang memiliki "titik buta", karena itu ia tidak melihat apa lagi yang harus dipelajari) - mengaburkan kode idealnya tanpa adanya pengetahuan - pengetahuan tentang keberadaan yang tidak mereka ketahui Mereka tahu , dan bahkan tidak menyadari, fakta kurangnya pengetahuan .


Tidak peduli seberapa banyak yang Anda ketahui, selalu ada hal lain di bidang apa pun , dan pemrograman tidak terkecuali. Jadi untuk berpikir bahwa Anda tahu semuanya selalu salah.


Terkadang sulit untuk menentukan apa yang Anda butuhkan untuk belajar sama sekali. Ada begitu banyak data, tetapi dari mana Anda memulai? Untuk membantu ini, saya mengajukan beberapa pertanyaan yang perlu saya tanyakan pada diri sendiri atau orang lain untuk mencari tahu bidang mana yang perlu dipelajari lebih lanjut:


  • Apakah Anda tahu semua yang Anda bisa tentang setiap kata dan setiap karakter pada setiap halaman kode Anda?
  • Sudahkah Anda membaca dan memahami dokumentasi untuk setiap fungsi yang Anda gunakan?
  • Apakah Anda memiliki pemahaman yang sangat baik tentang prinsip-prinsip dasar pengembangan perangkat lunak - sangat bagus sehingga Anda bisa menjelaskannya kepada pemrogram pemula di organisasi Anda?
  • Apakah Anda mengerti bagaimana masing-masing komponen fungsi komputer, dan bagaimana mereka bekerja bersama?
  • Apakah Anda memahami sejarah komputer dan bagaimana mereka akan berkembang lebih lanjut untuk memahami bagaimana kode Anda akan dieksekusi pada komputer yang dibuat di masa depan?
  • Apakah Anda tahu sejarah bahasa pemrograman untuk memahami bagaimana bahasa yang Anda gunakan telah berevolusi, dan mengapa cara kerjanya seperti itu?
  • Apakah Anda memahami bahasa pemrograman lain, pendekatan pemrograman lain, dan jenis komputer yang berbeda dari yang Anda gunakan untuk memahami alat mana yang terbaik untuk setiap tugas?
  • Top-down mendaftar hal-hal paling penting bagi seorang programmer untuk memahami kode apa yang dia tulis. Jika Anda dapat dengan jujur ​​menjawab "ya" untuk semua pertanyaan ini, maka Anda benar-benar seorang programmer hebat.

Mungkin panjang daftar terlihat menyedihkan. β€œWow, baca dokumentasi untuk setiap fungsi? Ya, itu akan memakan banyak waktu! " Oke, tahukah Anda apa lagi yang akan menghabiskan banyak waktu? Menjadi programmer yang baik tanpa membaca dokumentasi. Dan kamu tahu berapa banyak? Keabadian , karena ini tidak akan pernah terjadi.


Anda tidak akan pernah menjadi programmer yang baik hanya dengan menyalin kode orang lain dan berdoa itu akan bekerja untuk Anda. Tetapi yang lebih penting, menginvestasikan waktu dalam pelatihan berarti menjadi yang baik [ programmer - kira-kira. penerjemah ]. Waktu yang dihabiskan sekarang akan membuat Anda menjadi programmer yang lebih cepat di masa depan. Jika Anda menghabiskan banyak waktu membaca selama tiga bulan pertama mempelajari teknologi baru, maka Anda mungkin akan 10 kali lebih cepat selama 10 tahun ke depan daripada jika Anda terburu-buru menggunakannya tanpa membaca apa pun.


Saya ingin mengklarifikasi segera - tentu saja, itu tidak akan berfungsi hanya dengan membaca tiga bulan dan menjadi programmer yang baik. Pertama, itu terlalu membosankan - tidak ada yang mau menjejalkan teori selama tiga bulan tanpa melakukan praktik apa pun. Hanya sedikit orang yang bisa melakukan ini cukup lama bahkan menjadi seorang programmer, belum lagi menjadi baik sekaligus. Jadi, saya ingin segera mencatat bahwa pemahaman berasal dari praktik , dan bukan hanya dari teori. Tetapi tanpa mempelajari teori, pemahaman mungkin tidak muncul sama sekali . Jadi, penting untuk menyeimbangkan antara pemrograman praktis dan teori.


Saya tidak menyerang programmer mana pun yang bekerja secara pribadi dengan saya, atau programmer tertentu pada umumnya. Saya mengagumi hampir setiap programmer yang pernah saya kenal sebagai pribadi, dan saya berharap untuk mengagumi yang lain jika saya bertemu mereka. Sebaliknya, saya mendesak semua programmer untuk membuka pikiran mereka terhadap yang baru, sehingga selalu ada beberapa pengetahuan baru, bahwa teori dan praktik adalah kunci untuk penguasaan, dan bahwa tidak ada yang memalukan jika tidak mengetahui sesuatu - jika Anda Anda tahu tentang fakta bahwa Anda tidak tahu sesuatu. Luangkan waktu untuk mencari tahu kapan perlu.


Dari seorang penerjemah: Saya mencoba menerjemahkan dengan gaya sastra, jadi mungkin beberapa pernyataan atau ide dari yang asli terdistorsi karena keinginan untuk membuat terjemahan lebih mudah dibaca. Jika demikian, jangan mengemudi dengan kain kencing, tetapi tulis di PM.

Source: https://habr.com/ru/post/id402565/


All Articles