Dapatkah peningkatan penggunaan bahasa pemrograman yang lebih tinggi dan lebih tinggi menyebabkan defisit programmer dengan pengetahuan arsitektur komputer?

15

Kutipan dari Wikipedia artikel "Bahasa pemrograman tingkat tinggi":

Bahasa pemrograman tingkat tinggi adalah bahasa pemrograman dengan abstraksi yang kuat dari perincian komputer. Dibandingkan dengan bahasa pemrograman tingkat rendah, mungkin menggunakan elemen bahasa alami, lebih mudah digunakan, atau lebih portabel di seluruh platform. Bahasa semacam itu menyembunyikan detail operasi CPU seperti model akses memori dan manajemen ruang lingkup.

Yaitu, ketika tingkat bahasa pemrograman meningkat, semakin jauh programmer pergi dari perangkat keras yang menjalankan program.

Sekarang saya tidak tahu statistik penggunaan bahasa lintas level, tetapi saya menduga bahwa bahasa tingkat yang lebih tinggi semakin banyak menggantikan bahasa tingkat yang lebih rendah. Jika demikian, dapatkah hal ini menyebabkan defisit programmer dengan pengetahuan arsitektur komputer? Apakah ini akan menjadi masalah bagi industri?

Gablin
sumber

Jawaban:

16

Bisa , tetapi kemungkinan tidak akan menimbulkan masalah.

Itu hanya ekonomi. Jika sebagian besar orang kehilangan kemampuan untuk memahami arsitektur yang mendasarinya, dan masih ada KEBUTUHAN besar untuk memahami arsitektur yang mendasarinya, maka orang-orang yang melakukannya akan memiliki pekerjaan dan dibayar lebih, sedangkan mereka yang tidak hanya akan memiliki pekerjaan di mana itu tidak diperlukan (dan mungkin masih dibayar lebih banyak ... siapa tahu?).

Apakah membantu mengetahui? Benar. Anda mungkin akan lebih baik. Apakah perlu dalam kebanyakan kasus? Tidak. Itu sebabnya abstraksi begitu hebat, kita berdiri di atas pundak para raksasa tanpa harus menjadi raksasa sendiri (tetapi akan selalu ada raksasa di sekitar).

Ryan Hayes
sumber
4
Tetapi semua abstraksi bocor. Mengetahui arsitektur yang mendasarinya adalah suatu keharusan jika Anda ingin menjadi orang yang tepat untuk memecahkan masalah abstraksi yang bocor.
dsimcha
5
@dsimcha, Setuju, tetapi untuk menjadi pria yang Anda tuju, Anda membutuhkan "yang lain" untuk datang kepada Anda ;-) Jika semua orang perlu tahu segalanya, abstraksi itu gagal total.
Preet
1
@Preets, Dan itu sebabnya banyak abstraksi telah gagal total. Untuk bahkan memiliki ruang bagi lelaki yang ingin hadir adalah bukti bahwa abstraksi telah gagal.
Pacerier
@Ryan, Ini sebenarnya akan mengarah ke masalah di mana di masa depan dunia dibanjiri dengan aplikasi yang penuh dengan bug halus karena lapisan demi lapisan abstraksi bocor. Cukup luar biasa sekarang bahwa perusahaan seperti Google dengan sumber daya tak terbatas masih dapat memiliki bug di aplikasi inti mereka.
Pacerier
3
@Pacerier google memiliki jauh dari sumber daya tak terbatas dan mereka membuat aplikasi yang beberapa urutan besarnya lebih kompleks dan yang terdiri dari beberapa pesanan lebih banyak garis kode daripada kebanyakan yang lain. mengklaim setiap orang harus mengetahui hal-hal komputer tingkat rendah karena semua abstraksi dapat bocor seperti mengatakan bahwa setiap orang harus tahu bagaimana membangun rumah dari awal tanpa menggunakan alat karena badai mungkin datang dan menghancurkan rumah mereka. tidak layak (atau pintar) menghabiskan sumber daya seperti itu.
sara
9

Aku pikir begitu. Ini adalah tren yang membuat saya khawatir. Tidak ada abstraksi yang sempurna ; jika ada cara sempurna untuk menyederhanakan masalah rumit, itu akan mengganti yang asli dengan sangat cepat. (Itu terjadi di masa lalu, kadang-kadang dengan komputer, dan lebih sering di bidang lain yang tidak terlalu khawatir tentang kompatibilitas mundur seperti yang kita lakukan, seperti fisika.)

Artinya, setiap kali Anda menggunakan abstraksi, ada beberapa kompleksitas penting yang harus disembunyikan dari Anda. Jika Anda tidak tahu apa itu, mengapa ada di sana dan apa yang dilakukannya, Anda akhirnya secara tidak sengaja menulis bangkai kereta api besar, dan tidak tahu bagaimana cara memperbaikinya karena Anda tidak tahu apa yang sebenarnya terjadi.

Siapa pun yang mencoba memberi tahu Anda sebaliknya adalah menjual minyak ular atau tidak punya banyak pengalaman dengan perangkat lunak yang serius. Di tempat kerja, saya mengerjakan program yang menjalankan persentase yang baik dari semua stasiun TV dan radio di AS. Ketika stasiun dan jaringan menjadi lebih besar dan lebih kompleks, teknik cepat dan kotor yang bekerja dengan baik untuk merancang produk untuk satu stasiun kecil akhirnya menabrak dinding teknis besar ketika diimplementasikan untuk jaringan dengan 50 stasiun dan 200 saluran! Tanpa pemahaman mendalam tentang bagaimana bahasa bekerja, (dan bahasa yang efisien di tempat pertama), dan pemahaman mendalam tentang bagaimana database bekerja, coders kami tidak akan pernah bisa membuat skala produk berhasil.

Ini juga bukan kisah yang terisolasi. Perangkat lunak terus tumbuh semakin kompleks, tidak sederhana, dan saya khawatir bahwa tingkat keahlian teknis ini akan menjadi sesuatu yang hilang, dan program besok akan lebih buruk daripada hari ini, tidak lebih baik.

Mason Wheeler
sumber
5
Saya pernah mendengarnya dinyatakan sebagai "Anda perlu tahu abstraksi satu lapis ke bawah dari tempat Anda bekerja". Yah, itu agak pithier; ingatanku cacat. Jadi jika Anda bekerja di C atau Delphi, Anda harus tahu cara kerja perakitan. Jika Anda bekerja di Smalltalk atau Java, Anda harus tahu cara kerja VM Anda. (Bisa dibilang, Anda harus selalu tahu sesuatu tentang perakitan!) Jika Anda bekerja dengan TCP, Anda harus tahu cara kerja IP. Dan seterusnya.
Frank Shearar
1
Maksud saya, Anda dapat mengambilnya lebih jauh: mengapa harus cukup hanya dengan mengetahui perakitan? itu hanya abstraksi tingkat tinggi yang dipegang tangan atas instruksi CPU biner. tapi tunggu! kode mesin? itu hanya sebuah abstraksi! Anda perlu belajar bagaimana CPU dibangun menggunakan transistor untuk membangun gerbang logika! dan bus dan register. tapi tunggu! transistor? itu hanya abstraksi untuk konfigurasi atom tertentu. dan atom hanyalah abstraksi atas fluktuasi dalam bidang kuantum. pada akhirnya, ini hanya javascript:alert("Hello world")membutuhkan PhD dalam teori string.
sara
1
@ Kai Kau sedikit konyol . Saya cenderung setuju dengan Anda bahwa biasanya Anda perlu memahami beberapa lapisan bawah untuk sebagian besar aplikasi. Tapi kita berbicara tentang kasus tepi, tidak setiap hari. Tentu, Anda tidak perlu tahu cara kerja pipa ledeng untuk mencuci piring. Tetapi jika air kotor mulai mengisi wastafel Anda, Anda mungkin harus belajar sedikit tentangnya sebelum Anda mencoba memperbaikinya. Atau, Anda bisa menabrak sepotong rebar ke selokan sampai berfungsi lagi, dan siapa yang peduli ke mana air mengalir. (lanjutan ...)
DrewJordan
1
@DrewJordan maksud saya hanya itu: kecuali Anda seorang profesional yang perlu mengetahui dan memperbaiki kelas masalah tertentu (atau hanya memiliki minat pribadi yang tajam), maka terus terang tidak masuk akal untuk mengklaim bahwa Anda perlu mengetahui cara kerja batin. dan seluk-beluk aneh setiap alat yang Anda gunakan. Saya hanya menarik sudut pandang kesimpulan logis itu. tentu, mengetahui bagaimana kabel ethernet dibangun akan memungkinkan Anda untuk membangun yang baru, mengingat alat yang tepat ketika koneksi internet Anda gagal, tetapi menghabiskan waktu dan uang untuk mendapatkan pengetahuan ketika Anda bekerja 20 lapisan di atas hanya sia-sia.
sara
1
@DrewJordan tentu saja SESEORANG perlu mengetahui semua hal ini sehingga seseorang dapat memperbaikinya ketika abstraksi rusak, tetapi seluruh TITIK abstraksi adalah untuk menjaga jumlah orang yang perlu mengetahui detail seminimal mungkin sehingga sebagian besar dapat fokus pada menyelesaikan pekerjaan. di mana Anda secara sewenang-wenang menggambar garis di mana segala sesuatu menjadi "terlalu rendah" hanya tergantung pada apa yang Anda kerjakan secara pribadi, seperti yang diilustrasikan dengan argumenum ad absurdium saya (yang bukan merupakan kesalahan, saya ingin Anda tahu!)
sara
5

Ya, saya pikir orang akan kurang memahami perangkat keras seiring kemajuan bahasa (dan, sama halnya, ketika instruksi membuat kemajuan). Tetapi seperti yang telah dicatat di banyak tempat lain, kendala utama pada sebagian besar program sekarang adalah waktu CPU atau efisiensi, tetapi waktu programmer. Jika orang yang mendesain bahasa terus melakukan pekerjaan mereka dalam membuat abstraksi efisien, dan jika orang tetap menggunakan abstraksi ini dengan benar, maka pemahaman tentang arsitektur komputer tidak sepenuhnya diperlukan; setidaknya pengetahuan yang lengkap tidak mendasar untuk menjadi programmer yang baik hari ini.

David Hollman
sumber
2
Secara teori, ya, tetapi itu adalah beberapa seandainya cukup besar .
Mason Wheeler
1

Tidak, itu tidak akan menyebabkan defisit programmer dengan pengetahuan arsitektur komputer. Bahasa digunakan untuk memecahkan masalah dalam domain tertentu. Jika Anda ingin menyelesaikan masalah tertentu, Anda menggunakan bahasa yang sesuai atau yang cukup baik diberikan sumber daya Anda.

Pada kenyataannya, domain apa yang sebenarnya membutuhkan pengetahuan tentang arsitektur komputer? Itu perlu diikat ke arsitektur perangkat keras tertentu? Sistem operasi? Driver Perangkat? Tentu, tetapi bahkan hanya sebagian dari kode tersebut yang membutuhkan pengetahuan arsitektur tertentu.

Peningkatan performa? Ya, Anda bisa menerapkan pengetahuan arsitektur komputer untuk meningkatkan kinerja algoritma. Tetapi dua faktor lain memiliki dampak yang lebih besar pada kinerja: penggunaan algoritma yang lebih baik dan pengetahuan tentang lingkungan runtime bahasa.

Intinya, bahasa pemrograman yang lebih abstrak memecahkan masalah yang detail arsitektur komputernya tidak perlu. Mereka memungkinkan lebih banyak masalah untuk dipecahkan. Orang-orang yang menggunakannya tidak menggunakannya untuk memecahkan masalah yang bergantung pada mesin. Orang-orang yang perlu memecahkan masalah yang bergantung pada mesin akan terus menggunakan bahasa yang mampu menggunakan mesin. Ini bukan masalah zero-sum.

Huperniket
sumber