Belajar arsitektur komputer sebagai programmer [ditutup]

12

Saya biasanya berlari melintasi guru di SO dan tempat-tempat lain (instruktur, penulis buku dll.) Yang akan mengatakan sesuatu di sepanjang baris "This will cause alignment issues"atau informasi rahasia tingkat rendah lainnya.

Saya ingin belajar tentang semua informasi yang berkaitan relevantdengan pemrograman. Sekarang biasanya ketika saya melihat buku tingkat rendah (buku arsitektur komputer misalnya) mereka terlalu rendah dan diarahkan kepada orang-orang yang bidang utamanya adalah arsitektur komputer dan bukan desain perangkat lunak.

Apakah Anda memiliki rekomendasi untuk buku yang membahas hal-hal tingkat rendah yang relevan bagi programmer?

Samaursa
sumber
4
Anda ingin "buku yang melalui hal-hal tingkat rendah" tetapi Anda tidak ingin buku yang terlalu "tingkat rendah"? Belajar arsitektur untuk beberapa programmer bisa sangat menguntungkan. Serupa dengan pengembang web yang memahami tumpukan TCP / IP. Ini tidak pernah begitu bermanfaat sampai Anda BENAR-BENAR membutuhkannya. \
Chris
1
@ Chris: Yang saya maksudkan adalah "level rendah untuk programmer" ... secara teknis kita bisa mencapai arsitektur CPU yang penuh, dan tidak diragukan lagi itu akan berguna suatu hari, tetapi mengingat kita semua memiliki waktu yang terbatas, sebuah buku yang mengajarkan hal-hal tingkat rendah yang harus diketahui oleh semua programmer akan menjadi sempurna.
Samaursa
Dalam hal itu setiap buku pengantar akan membuat Anda ke arah yang benar, di mana Anda mengambilnya setelah itu adalah pilihan Anda berdasarkan kebutuhan atau keinginan.
Chris
Seseorang yang mengendarai mobil dengan transmisi otomatis mendapat manfaat dari mengetahui apa itu, dan bagaimana cara kerjanya, saat mengemudi. Saya percaya Anda menjadi programmer yang lebih baik dengan belajar memprogram setidaknya sedikit, dalam bahasa assembly, dengan cara yang sama yang saya pikir Anda menjadi driver yang lebih baik ketika Anda belajar untuk "drive stick".
Warren P

Jawaban:

16

Satu set buku yang bagus untuk tujuan ini tepatnya adalah seri "Write Great Code" karya Randall Hyde ( Vol.1 Vol. 2 ): deskripsi arsitektur mesin secara eksplisit dari perspektif apa yang perlu Anda ketahui untuk menulis kode efisien dalam bahasa tingkat tinggi .

Kilian Foth
sumber
Bahasa tingkat tinggi mana ini akan berlaku? Apakah ini termasuk Python, JavaScript, C #, Scala misalnya?
Pekerjaan
@ Pekerjaan - Saya belum membaca buku-buku, tapi saya akan mengatakan itu akan berlaku untuk apa pun yang akan / bisa mengambil keuntungan dari hal-hal seperti multi-threading dan pemrosesan 64bit. Menjalankan bahasa yang Anda sebutkan mungkin akan membuat pengetahuan itu berguna (terutama jika Anda juga seorang admin server, atau menjalankan bahasa tersebut di luar lingkungan web).
Shauna
Hyde adalah guru bahasa Majelis, jadi baginya "tingkat tinggi" sebagian besar berarti C. Tapi kontennya sama pentingnya bagi pengguna bahasa yang bahkan lebih tinggi; String, panggilan prosedur, dll. Sebenarnya tidak jauh berbeda pada tingkat perangkat keras, apakah mereka dinyatakan dalam C atau dalam Python.
Kilian Foth
Saya akan berpikir bahasa kompilasi asli (C, C ++, Pascal, Objective-C) yang juga memungkinkan sedikit bahasa assembly, akan mendapat manfaat paling banyak dari buku ini. Namun, orang yang menggunakan Python, dan menulis ekstensi untuknya dalam C, atau bahkan orang yang menggunakan java dan tidak menggunakan metode asli sama sekali, dapat melakukannya dengan sedikit lebih banyak berpikir tentang biaya apa yang mereka lakukan, dan bagaimana melakukan pekerjaan mereka secara efisien dalam platform yang mereka gunakan.
Warren P
Meskipun saya belum membaca buku, saya akan memilih jawaban ini sebagai benar berdasarkan ulasan / ringkasan buku.
Samaursa
6

Sayangnya saya tidak tahu setara modern dengan Microprocessors: A Programmer's View oleh R. Dewar. Yang paling dekat yang saya tahu adalah Organisasi dan Desain Komputer, Edisi Keempat: Antarmuka Perangkat Keras / Software oleh David A. Patterson dan John L. Hennessy, tetapi saya tidak yakin Anda tidak akan menganggapnya terlalu rendah; Anda pasti akan melakukannya untuk karya mereka yang lain, Arsitektur Komputer, pendekatan kuantitatif.

Online, http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf ini mungkin akan memberi Anda apa yang Anda inginkan.

Pemrogram
sumber
Tautan ke pdf sudah mati.
ajay
5

Untuk platform x86, ambil salinan manual prosesor IA-32 dan Intel 64 Intel . Manual referensi pengoptimalan membahas banyak masalah ini dari perspektif level rendah untuk CPU Intel x86. AMD juga memiliki manual serupa yang membahas masalah yang sama.

Sebagian besar arsitektur CPU lainnya memiliki manual serupa yang membahas masalah kinerja. ( Misalnya ARM dan PowerPC .)

greyfade
sumber
3

Saya menemukan "Arsitektur Komputer: Pendekatan Kuantitatif" oleh Hennessy dan Patterson ( tautan Amazon ) sebagai pendekatan yang sangat kuat dan solid untuk arsitektur komputer, dengan beberapa studi kasus yang secara langsung relevan dengan pemrograman.

Ini digunakan untuk berbagai luasan di beberapa kursus arsitektur CS tingkat sarjana dan pascasarjana di AS.

Itu juga mendapat ulasan bagus tentang Ars Technica beberapa waktu lalu.

Bitgarden
sumber
1
Walaupun saya suka buku ini - saya memiliki empat edisi - buku ini diarahkan sebagai arsitek komputer, bukan programmer.
Pemrogram
3

Inilah yang saya gunakan di kelas Sistem Komputer saya sekarang Sistem Komputer: Perspektif Programmer (Edisi ke-2) dan sementara kelas baru saja dimulai, saya telah melihatnya dan sangat menyukainya.

Berikut deskripsi buku:

Beberapa siswa yang mempelajari ilmu komputer atau teknik komputer akan pernah memiliki kesempatan untuk membangun sistem komputer. Di sisi lain, sebagian besar siswa akan diminta untuk menggunakan dan memprogram komputer setiap hari. Sistem Komputer: Perspektif Programmer memperkenalkan konsep penting dan abadi yang mendasari sistem komputer dengan menunjukkan bagaimana ide-ide ini memengaruhi kebenaran, kinerja, dan kegunaan program aplikasi. Pendekatan hands-on teks (termasuk satu set laboratorium yang komprehensif) membantu siswa memahami operasi "under-the-hood" dari sistem komputer modern dan mempersiapkan mereka untuk kursus mendatang dalam topik sistem seperti kompiler, arsitektur komputer, sistem operasi, dan jaringan.

Jetti
sumber
Itu buku yang luar biasa !!
Armando
2

Ini banyak pekerjaan, tetapi Memprogram Bahasa Pragmatik mungkin persis seperti yang Anda cari. Buku ini secara teoritis sebagian besar tentang parsing dan kompilasi (yang merupakan pengetahuan penting bagi mereka yang ingin benar-benar belajar pemrograman) dan dalam prosesnya Anda akan berakhir belajar bagaimana konsep bahasa diterjemahkan ke dalam apa yang terjadi pada level rendah. Lebih baik lagi Anda akan mempelajari ini untuk banyak bahasa sekaligus dan Anda akan dapat dengan cerdas membandingkan dan membedakan bagaimana bahasa yang berbeda sebenarnya bekerja.

Saya tidak bisa merekomendasikan itu kecuali Anda dapat mendedikasikan beberapa bulan untuk benar-benar mempelajari materi. Itu bukan hal-hal yang Anda hanya selip dan tiba-tiba tercerahkan. Tetapi jika Anda serius maka saya sangat merekomendasikannya.

btilly
sumber
2

Mungkin keliru dalam biologi, tetapi dalam ilmu komputer, "ontogeni merekapitulasi filogeni" hampir. Tinjauan historis arsitektur komputer sejak komputer pertama adalah cara yang bagus untuk memahami subjek arsitektur komputer dari perspektif programmer; desain komputer hampir semua merupakan penyempurnaan dari desain sebelumnya.

Yaitu, saya sarankan untuk mempelajari desain sistem lama yang sudah lengkap, insted buku "arsitektur komputer" teoritis yang mereka berikan kepada Anda dalam ilmu komputer. Untuk benar-benar memahami desain sistem, dan untuk melakukan pekerjaan yang sangat hebat dalam menulis perangkat lunak. Pemahaman intuitif arsitektur sistem komputer membutuhkan penguasaan banyak konsep. Saya pikir jika Anda memulai kembali ketika arsitektur komputer lebih mudah dikelola dalam ukuran dan ruang lingkup, Anda mungkin dapat membantu ayah dalam tujuan Anda untuk menulis kode yang lebih baik.

(Seri buku "tulis kode hebat" yang oleh orang lain sebutkan tampak hebat, omong-omong, dan saya telah mengedit pertanyaan saya untuk menghilangkan aspersi apa pun yang sebelumnya saya gambarkan untuk belajar dari buku, karena itu terlihat hebat! )

Beberapa hal yang mengajarkan arsitektur komputer dengan sangat baik:

  1. Saya suka memilih mesin dari tahun 1980-an sebagai tempat awal untuk menjelaskan dan menunjukkan hal kepada orang-orang, karena saat itulah saya mulai menggunakan komputer. Saya telah menggunakan panduan referensi programmeromodore 64, untuk menunjukkan kepada orang-orang tempat melompat di mana pengetahuan pemrograman, dan pengetahuan arsitektur komputer bertemu satu sama lain. Dengan buku semacam itu, dan mungkin emulator komoditas yang berjalan di PC Anda sehingga Anda dapat mencoba berbagai hal, Anda akan belajar tentang bagaimana sistem komputer dalam inkarnasi arsitektur komputer era 1980-an klasik, benar-benar dibangun. Dalam pandangan saya, satu contoh konkret adalah tempat yang lebih baik untuk memulai, daripada selusin model teoretis yang tidak memiliki perincian dunia nyata yang membuat berbagai hal bekerja. Jika Anda tahu apa itu register, apa itu ALU, apa itu bus, dan apa jam itu, dan sistem pensinyalan apa yang digunakan dalam desain tahun 1980-an, yang akan memberi Anda dasar-dasar yang perlu Anda ketahui untuk memahami sesuatu yang baru-baru ini, seperti "arsitektur jembatan berpasir" Intel. Secara historis, lihat kembali aslinya, misalnya mencari arsitektur "Von neumann", di wikipedia.

  2. Bergerak maju dari poin pertama saya beberapa tahun; Pelajari tentang arsitektur PC IBM asli, bahasa rakitan 8086, dan bus ISA. Dari sini, dan keterbatasannya, pemahaman tentang apa yang terkandung dalam CPU "Intel COre i7", dan apa yang dilakukan oleh PCI dan PCI-e bus dan mengapa Anda membutuhkannya, dapat berjalan lebih alami. Arsitektur PC saat ini masih memiliki sedikit "mabuk" dari desain PC IBM asli. Cara pemuatan program awal (sistem operasi) (boot-up) terjadi pada PC 2011 masih banyak berutang pada warisan PC IBM asli dan ROM BIOS-nya, dan pengaturan CMOS pada PC asli.

  3. Gunakan dan modifikasi Linux yang telah dikonfigurasikan sebelumnya yang bekerja pada beberapa perangkat non-PC tertanam, dan Anda akan belajar banyak tentang arsitektur komputer tertanam, tidak hanya arsitektur teknis, tetapi mengapa beberapa fitur ada di sana. Contoh bagus yang tersedia murah adalah TS-7200, yang memiliki PC-104 yang bagus (ISA Bus, seperti pada PC asli). PC-104 (tertanam 16 bit ISA-bus yang pin kompatibel dengan komputer IBM PC / AT 80286 era) adalah cara yang bagus untuk desainer non-papan untuk membangun sistem tertanam, karena modul dapat ditumpuk. Ingin beberapa IO atau peripheral tambahan? Cukup susun beberapa modul. TS-7200 memiliki inti non-x86 (cpu ARM9) yang mampu menjalankan big-endian atau little-endian. Jika Anda belum mengalami "endianness" dalam perjalanan pembelajaran arsitektur Anda, itu adalah tempat yang bagus untuk menjumpainya.

Warren P
sumber
0

Sebagian besar buku tentang bahasa rakitan akan membahas fitur arsitektur yang relevan, tetapi biasanya hanya untuk arsitektur yang ditargetkan buku. Jadi Anda akan mendapatkan informasi tentang tumpahan cache dan teknik pemetaan halaman MMU, tetapi mungkin tidak apa-apa tentang endianness.

TMN
sumber