Haruskah pengembang mengetahui cara kerja bagian dalam perangkat keras komputer? [Tutup]


13

Saya tidak berbicara hanya bagaimana memori ditugaskan dan manajemen memori (hal-hal yang dapat Anda pelajari dari C misalnya) tetapi lebih pada aspek perangkat keras dan bagaimana masing-masing komponen perangkat keras komputer bekerja secara internal dan bagaimana mereka saling berkomunikasi.

Berapa banyak dari Anda yang tahu semua ini?

Jawaban:


31

Itu tergantung pada apa yang Anda lakukan.

Jika Anda seorang pengembang tertanam (dan Anda menulis sangat dekat logam di perangkat yang sangat kecil), Anda harus mengetahui setiap masuk dan keluar dari setiap komponen dalam sistem.

Jika Anda seorang pengembang sistem (dan sedang menulis sistem operasi atau driver perangkat atau bahkan mungkin basis data), maka Anda harus mengetahui segala hal yang perlu diketahui tentang antarmuka perangkat keras tingkat rendah.

Jika Anda seorang pengembang game dan terlambat dalam proyek Anda (di mana Anda mengoptimalkan hal-hal), Anda perlu mengetahui seluk-beluk cache CPU dan arsitektur grafis yang akan Anda gunakan.

Jika Anda seorang pengembang aplikasi, Anda tidak perlu mengetahui hal ini kecuali menjaga penggunaan memori pada tingkat yang wajar.

Jika Anda seorang pengembang web, akan sangat berguna untuk mengetahui protokol internet, tetapi tidak ada hal lain yang diperlukan selain cara menangani masalah memori.


20
Mengetahui tentang mesin Anda selalu membuat Anda menjadi pengembang yang lebih baik, bahkan jika Anda hanya melakukan aplikasi lini bisnis. Pengetahuan seperti itu mungkin tidak diperlukan, tetapi itu tentu saja penting.
Robert Harvey

@Robert Harvey: Benar, itulah sebabnya saya katakan "tidak perlu tahu." Tentu saja tidak ada salahnya untuk mengetahui hal-hal ini. :)
greyfade

2
+1, tapi saya tahu (lebih dari) beberapa pengembang web yang tidak pernah mempertimbangkan penggunaan memori.
Tim Post

-1 untuk "Jika Anda seorang pengembang aplikasi, Anda tidak perlu mengetahui semua ini kecuali menjaga penggunaan memori pada tingkat yang wajar." Beberapa masalah besar dalam sistem di sekitar sini disebabkan oleh perancang aplikasi yang tidak tahu bagaimana menggunakan database dan kemudian menyalahkan dba ketika "semuanya berjalan lambat, dan itu bukan kode saya; lihat, ada profil".
Andrew Hill

@ AndrewrewHill: Kapan itu masalah perangkat keras dan bukan yang algoritmik? Pertanyaannya adalah tentang memahami perilaku perangkat keras tingkat rendah, bukan algoritma tingkat tinggi.
greyfade

12

Tidak, Anda tidak harus melakukannya, tapi saya pikir itu ide yang bagus. Mempelajari gambaran umum tentang bagaimana berbagai hal bekerja pada level logis telah sangat membantu saya dalam pengembangan.


6

Saya pikir komentar tentang pengembang aplikasi dan pengembang web salah.

Misalnya, jika seseorang mengembangkan aplikasi web yang melibatkan banyak hal keamanan seperti ssh atau algoritma enkripsi lainnya, sangat penting bagi mereka untuk mengetahui jenis perangkat keras apa yang mereka jalankan sehingga mereka dapat menentukan apakah mesin tersebut benar-benar dapat menangani beban kerja. Contoh lain mungkin termasuk server yang meng-host beberapa jenis konten yang diunduh. Anda sebaiknya mengetahui kemampuan disk drive dan apa pun jenis antarmuka bus yang dilampirkan jika Anda mengharapkan jumlah permintaan yang cukup besar.

Dari sudut pandang aplikasi, jika Anda sedang mengembangkan semacam program CAD, atau sesuatu yang melakukan rendering 3d Anda dapat mengharapkan aplikasi ini menjadi komputasi intensif baik secara algoritmik maupun grafis. Akan lebih bijaksana untuk memahami perangkat keras untuk memastikan aplikasi responsif dan dapat digunakan.

Saya tidak mengatakan bahwa Anda harus memahami seluk beluk protokol PCI, tetapi lebih baik Anda memahami apa yang bisa dilakukan antarmuka dan perangkat keras.

Pada akhirnya, ini penting terlepas dari jenis pengembangan apa yang Anda lakukan. Tingkat detail yang diperlukan agar Anda mengerti bisa diperdebatkan.


2

Untuk seorang programmer profesional, saya melihatnya sebagai pendekatan holistik untuk memahami seluruh sistem , daripada hanya mengetahui sintaks dari bahasa pemrograman yang diberikan du jour . Saya merasa ini membantu programmer (dan analis) membuat keputusan desain yang cerdas, dan membuat lebih banyak pilihan informasi tentang algoritma dan struktur data.

Dalam pengalaman saya sendiri, programmer terbaik cenderung tahu tentang pekerjaan dalam, ke berbagai tingkatan, apakah itu memahami instruksi perakitan asli yang ditetapkan untuk platform target, kursus pengantar organisasi komputer di sekolah, elektronik digital yang belum sempurna atau mampu memahami secara rinci deskripsi CPU dan GPU core dalam model terbaru, yang terbaik memiliki pengetahuan yang lebih lengkap daripada rekan-rekan mereka yang kurang bintang.


1

Saya tidak yakin apakah itu membantu, tetapi saya merasa lebih nyaman ketika saya tahu lebih banyak tentang sistem yang saya kerjakan daripada yang benar-benar saya butuhkan. Ketika saya masih muda, saya tidak suka tidak tahu bahasa majelis dari sistem yang saya kerjakan; entah saya sudah berubah, atau saya sudah belajar cukup banyak sehingga satu lagi tidak akan memperluas rasa saya untuk sistem banyak. Saya belum pernah menjadi orang yang suka perangkat keras, tetapi saya dapat memisahkan komputer dan menamai berbagai subsistem dan bagaimana mereka berinteraksi.


0

Sedikit yang saya tahu saya pelajari di kelas arsitektur komputer hampir 25 tahun yang lalu, dan pada arsitektur non-dunia nyata pada saat itu.

Saya terutama melakukan pemrograman aplikasi pada berbagai platform. Ada periode di mana saya mengembangkan kode untuk berjalan tidak hanya pada perangkat keras komoditas x86, tetapi juga pada Sparc, PA-RISC, dan arsitektur server lainnya. Pengetahuan di tingkat itu tidak diperlukan untuk pekerjaan yang saya lakukan.


0

Saya mengajar pemrograman Java sebagai kelas sekolah menengah AP. Saya telah menemukan bahwa ketika siswa mengetahui sesuatu tentang cara kerja internal komputer, itu membantu mereka memahami konsep pemrograman.

Saya tidak berlebihan - hanya konsep sederhana seperti bagaimana hal-hal yang tersimpan dalam memori tampaknya membantu para siswa.


0

Saya akan menjawab ini sebagaimana ditanyakan dalam judul:

Ya, pengembang harus mengetahui cara kerja bagian dalam perangkat keras. Berapa banyak tergantung pada jenis pengembang & tujuan mereka, waktu yang tersedia, dan minat pribadi. Prioritas harus, tentu saja, pada alat langsung, teknik, dll, yang mereka gunakan di daerah mereka. Pendapat ini sejalan dengan menjadi individu yang berpengetahuan luas. Semakin banyak Anda mengetahui hal-hal di luar keahlian Anda, tanpa mengorbankan keahlian Anda, semakin baik.

Itu tidak berarti bahwa Anda perlu menjadi gila dengan Whiz Keju. Memiliki ikhtisar perangkat keras yang baik, bagaimana bagian-bagiannya berinteraksi, bagaimana sistem operasi menggunakannya. Sejalan dengan ini, saya sarankan membaca buku konsep sistem operasi untuk semua pengembang.

Apakah saya tahu semua ini? Heck no. Saya sudah lupa begitu banyak informasi yang tidak berguna tentang SCSI yang bahkan tidak lucu. Namun, belajar tentang itu adalah pengalaman yang sangat berharga. Saya juga lupa banyak detail perangkat keras lain yang terkait, tetapi ingat konsep penting yang saya pelajari dari pengetahuan itu.

Jadi, saya sarankan belajar tentang perangkat keras. Lakukan dengan kecepatan yang masuk akal, tergantung pada kebutuhan Anda. Pelajari sebanyak mungkin detailnya, tetapi fokuslah pada konsepnya.


0

Setiap pengembang harus mengetahui konsep dasar yang terkait dengan teknik komputer: aritmatika biner, konversi basis, aljabar Boolean, gerbang logika, komposisi CPU (dan apa komponennya), cache, memori virtual, kompresi, deteksi kesalahan, dan koreksi ...

Sejauh mana ini harus diketahui tergantung pada pekerjaan programmer. Seperti yang dikatakan orang lain, pengembang sistem tertanam harus jauh lebih akrab dengan kemampuan perangkat keras dan cara menulis perangkat lunak yang paling baik menggunakan perangkat keras daripada yang dikatakan, pengembang web.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.