Jelas bahwa pengetahuan tentang hal-hal tingkat rendah sangat penting dalam pekerjaan kami.
Tetapi dalam situasi di mana Anda sudah mengembangkan perangkat lunak komersial pada tingkat tinggi, dan ketika Anda sudah memiliki arahan yang dipilih tetapi tidak memiliki keterampilan perakitan, bukankah lebih masuk akal untuk fokus mempelajari hal-hal yang berkaitan dengan arahan Anda? Atau adakah alasan mengapa Anda harus meluangkan waktu untuk mempelajari dasar-dasar tingkat rendah?
Kapan terlambat, dan kapan tidak? Dan jika belum terlambat, lalu bagaimana cara belajar secara optimal (dalam arti tidak menghabiskan waktu berlebihan untuk mendapatkan kedalaman dan pemahaman)?
Jawaban:
Tidak percaya tidak ada yang menyebutkan debugging ...
Saya belum menulis garis kode perakitan selama bertahun-tahun sekarang. Tetapi saya cukup sering membacanya . Melakukan debug tingkat tinggi sangat bagus ketika Anda memiliki informasi sumber dan simbol, tetapi ketika perpustakaan mewah Anda melemparkan pengecualian yang tidak tertangani pada mesin pelanggan, sudah terlambat untuk mengharuskannya dimasukkan dalam lisensi ...
Tapi aku masih bisa membuka disassembler dan melihat apa logika tingkat tinggi Anda akhirnya berakhir melakukan , melacak buruk kembali data ke asalnya, cari tahu yang mengubah kontrol FPU mendaftar ...
Ini telah menghemat bacon saya lebih sering daripada yang saya pikirkan. Dan tidak ada kata terlambat untuk belajar - ada banyak referensi dan tutorial hebat di 'Net, dan hampir semua program yang berjalan di komputer Anda dapat menyediakan lingkungan yang praktis.
sumber
Anda tidak perlu belajar bahasa assembly, Anda hanya perlu memahami cara kerjanya. Anda perlu tahu apa itu XOR dan menghitung dalam biner dalam tidur Anda, dll. Tapi saya tidak pernah membutuhkan kode perakitan dalam pekerjaan saya, tidak pernah.
Jadi seperti yang Anda katakan, pengetahuan tentang hal-hal tingkat rendah adalah penting, tetapi pengetahuan praktis dalam perakitan tidak.
sumber
Jika Anda benar-benar tidak memiliki keterampilan pemrograman tingkat rendah, saya akan sangat menyarankan untuk belajar beberapa di waktu luang Anda. Anda tidak perlu menjadi ahli dalam hal itu; hanya mencapai beberapa tingkat kemahiran. Anda harus melakukan banyak pekerjaan matematika sendiri, daripada bergantung pada kompiler atau perpustakaan untuk melakukannya untuk Anda. Ini akan membantu Anda memahami keterbacaan dalam pemrograman, karena sebagian besar instruksi perakitan sesuai dengan satu instruksi prosesor. Anda harus mengelola sendiri kompleksitas dalam program yang sedikit lebih besar, tanpa manfaat dari hal-hal seperti
if...else
. Ini akan membantu Anda menulis program tingkat tinggi yang lebih sederhana, karena pengalaman perakitan akan mengajarkan Anda betapa mudahnya membaca.Juga, ingatlah bahwa majelis bukanlah bahasa! Ini adalah istilah generik, yang pada dasarnya berarti kumpulan instruksi prosesor yang telah diabstraksi menjadi bahasa simbolik. Prosesor yang berbeda memiliki set instruksi yang berbeda, dan karena itu bahasa assembly berbeda. Ketika Anda belajar 'berkumpul', Anda belajar suatu proses, bukan bahasa.
sumber
Anda akan selalu mendapat manfaat dari memuncak di bawah selimut dan sedikit lebih memahami tentang apa yang duduk di bawah abstraksi Anda berdiri di atas. Seperti yang dinyatakan oleh seorang profesor perguruan tinggi saya sekali "Semua programmer yang baik memahami perangkat keras" - Anda tidak harus dapat membuat dan memanipulasi sirkuit, tetapi Anda harus memiliki pemahaman tentang apa yang terjadi di sana - itu hanya akan membuat Anda lebih baik.
Coba Desain dan Organisasi Komputer
sumber
Ya - Pembelajaran berkelanjutan dan seumur hidup adalah komponen penting dari karier dalam pengembangan Perangkat Lunak. Jika Anda tertarik untuk terus belajar tentang pemrograman dan bagaimana meningkatkan keterampilan Anda maka ya, pada titik tertentu Anda harus belajar perakitan karena akan membuat Anda terpapar pada bahasa yang sama sekali baru dan cara penulisan kode. Untuk alasan yang sama, saya sarankan bereksperimen dengan banyak bahasa / gaya pemrograman termasuk Ruby / Python (bahasa dinamis), Haskell / F # (bahasa fungsional murni), Lisp / Skema (bahasa fungsional), dll ...
Saya akan mengatakan bahwa sudah terlambat jika Anda tidak lagi tertarik untuk belajar lebih banyak tentang kerajinan pemrograman. Misalnya, jika Anda telah mencapai titik dalam karir Anda di mana Anda mungkin akan segera pindah dari pemrograman ke bidang lain seperti Manajemen, Teknik Sistem, Penjualan / Pemasaran, dll. Jika Anda berpikir Anda mungkin ingin pindah ke area baru di beberapa tahun ke depan saya akan lebih fokus pada keterampilan yang diperlukan untuk mengembangkan di bidang itu, daripada pada keahlian pemrograman.
sumber
Anda harus tahu apa itu dan apa yang dilakukan komputer. Mempelajari sesuatu seperti MIX Knuth akan membantu Anda. Sebagian besar dapat menilai efisiensi kode Anda. Dapatkan Seni Pemrograman Komputer dan bacalah. Itu akan membuat Anda seorang programmer yang lebih pintar.
sumber
Menjawab:
sumber
Saya pikir Anda mencapai titik pengembalian yang semakin berkurang seiring kemajuan karier Anda. Artinya, Anda harus belajar bahasa assembly sejak dini, karena itu mengarah pada pemahaman fundamental yang lebih baik tentang segala sesuatu yang terjadi setelahnya. Namun, jika Anda sudah menjadi pekerja dan memiliki pengalaman beberapa tahun, Anda sudah akan merasakan bagaimana cara kerjanya, jadi mempelajari detail baut dan baut yang sebenarnya mungkin tidak memberi Anda wawasan sebanyak mungkin. .
sumber
Saya tidak tahu berapa banyak gunanya belajar perakitan. Tetapi paling tidak melakukan beberapa pemrograman dalam bahasa seperti C akan bermanfaat. Saya baru-baru ini harus melakukan beberapa pemrograman dalam C dan saya merasa agak mencerahkan. C menghilangkan banyak abstraksi yang ada dalam bahasa tingkat yang lebih tinggi. Abstraksi itu tidak datang tanpa biaya. Anda harus mengelola lebih banyak detail level lebih rendah di C, di mana seperti dalam bahasa level yang lebih tinggi detail itu dikelola untuk Anda. Dengan melakukan beberapa pemrograman dalam C Anda harus mengetahui detail-detail itu. Jadi, ketika Anda kembali ke bahasa sehari-hari Anda, Anda masih akan memiliki kesadaran itu dan akan lebih menghargai apa yang sebenarnya terjadi. Itu akan membantu menjadikan Anda seorang programmer yang lebih baik.
sumber
Dalam profesi Pengajaran, setidaknya di Inggris, guru harus memiliki kualifikasi yang jauh melebihi apa yang mereka ajarkan. Guru sekolah menengah (sekolah menengah) diharapkan memiliki gelar dalam mata pelajaran yang mereka ajarkan, dan guru sekolah dasar (sekolah dasar) juga memiliki gelar, dan harus mahir dalam semua mata pelajaran utama hingga tingkat GCSE tingkat yang baik (sekolah menengah) keluar dari ujian ?, tidak ada yang setara dengan AS sebenarnya).
Mengapa? Karena untuk mengajarkan sesuatu dengan baik, atau memang menggunakan sesuatu dengan baik, Anda harus memahaminya. Ini membutuhkan pemahaman tentang struktur yang mendasarinya, rantai keputusan sebelum Anda bekerja dengan yang mengarah padanya. Agar dapat memahami kode tingkat tinggi dengan benar, Anda harus memahami lapisan tempat kode itu dibangun, bagaimana operasinya, di mana kekuatan dan kelemahannya berada. Ini bersifat rekursif, untuk memahami lapisan di bawahnya, Anda juga harus memahami lapisan di bawahnya.
Pada akhirnya, inilah mengapa program universitas / perguruan tinggi yang layak dalam bidang Komputasi meminta kemampuan matematika yang baik sebelum yang lainnya, karena hal itu secara efektif menjadi dasar.
Jika Anda kurang pengetahuan dalam bidang-bidang ini, maka pemahaman Anda dikompromikan di bawahnya. Semakin dekat ke tingkat Anda mengoperasikan lapisan lain, semakin penting untuk memiliki landasan di dalamnya.
Jadi: Apakah Anda perlu tahu assembler sebagai pembuat kode tingkat tinggi? Itu akan membantu.
sumber
Itu sangat penting dalam kehidupan saya sebelumnya sebagai guru supercompuer. Saat itu saya merasa Anda tidak mengerti mesin sampai Anda telah menulis setidaknya beberapa ratus assembler, dan bermain-main dengan itu mencoba untuk memeras kinerja. Karena sangat sedikit programmer yang ingin melakukannya sedalam itu, itu membuat saya sangat diperlukan. Dan saya masih memiliki bahasa yang sama ketika berbicara dengan tipe desainer HW.
Tapi, sebenarnya kebutuhan / manfaat untuk ini sebagian besar beberapa dekade yang lalu. Di antara kemajuan kompiler, dan eksekusi di luar urutan HW ada sangat sedikit ruang untuk bisa memainkan pahlawan dengan menulis assembler lagi. Meskipun saya pikir itu berguna untuk memahami cara kerja. Saya berencana untuk mengajar anak-anak saya (mahasiswa baru CS jurusan) untuk memprogram dalam assembler yang sangat sederhana pada mesin virtual sederhana, supaya mereka dapat merasakan apa yang terjadi. Semoga kita bisa bermain dengan hal-hal seperti membuka gulungan, pipelining perangkat lunak, cache, dan prefetching, memuat bawah dll. Jadi setidaknya mereka akan tahu bahwa pada tingkat tertentu hal ini sedang terjadi.
sumber