เรียนรู้สถาปัตยกรรมคอมพิวเตอร์ในฐานะโปรแกรมเมอร์ [ปิด]


12

ฉันมักจะพบเจอกันที่กูรูที่ SO และสถานที่อื่น ๆ (อาจารย์ผู้สอนผู้เขียนหนังสือ ฯลฯ ) ที่จะพูดอะไรบางอย่างตามเส้น"This will cause alignment issues"หรือเกร็ดเล็กเกร็ดน้อยอื่น ๆ

ฉันต้องการเรียนรู้เกี่ยวกับเกร็ดเล็กเกร็ดเหล่านี้ทั้งหมดที่เกี่ยวกับrelevantการเขียนโปรแกรม ตอนนี้โดยปกติแล้วเมื่อฉันเห็นหนังสือระดับต่ำ (เช่นหนังสือสถาปัตยกรรมคอมพิวเตอร์) พวกเขาอยู่ในระดับต่ำเกินไปและเหมาะสำหรับผู้ที่มีความสนใจหลักคือสถาปัตยกรรมคอมพิวเตอร์และไม่ใช่การออกแบบซอฟต์แวร์

คุณมีคำแนะนำสำหรับหนังสือที่อ่านเนื้อหาต่ำที่เกี่ยวข้องกับโปรแกรมเมอร์หรือไม่?


4
คุณต้องการ "หนังสือที่ผ่านเนื้อหาระดับต่ำ" แต่คุณไม่ต้องการหนังสือที่ "ต่ำเกินไป" ใช่หรือไม่ สถาปัตยกรรมการเรียนรู้สำหรับโปรแกรมเมอร์บางคนอาจเป็นประโยชน์อย่างยิ่ง คล้ายคลึงกับนักพัฒนาเว็บที่เข้าใจ TCP / IP stack มันไม่เคยมีประโยชน์ทั้งหมดจนกว่าคุณจะต้องการจริงๆ \
Chris

1
@Chris: สิ่งที่ฉันหมายถึงคือ "ระดับต่ำสำหรับโปรแกรมเมอร์" ในทางเทคนิคเราสามารถไปไกลเท่าที่เต็มไปด้วยสถาปัตยกรรมซีพียูที่ถูกเป่าและไม่ต้องสงสัยเลยว่ามันจะมีประโยชน์ในหนึ่งวัน แต่การพิจารณาเรามีเวลา จำกัด ที่สอนเนื้อหาระดับต่ำที่โปรแกรมเมอร์ทุกคนควรรู้จะสมบูรณ์แบบ
Samaursa

ในกรณีนั้นหนังสือแนะนำเล่มใดจะทำให้คุณไปในทิศทางที่ถูกต้องหลังจากนั้นคุณจะเลือกหนังสือตามความต้องการหรือความปรารถนา
Chris

คนที่ขับรถด้วยระบบเกียร์อัตโนมัติจะได้ประโยชน์จากการรู้ว่าอะไรคืออะไรและทำงานอย่างไรขณะขับรถ ฉันเชื่อว่าคุณเป็นโปรแกรมเมอร์ที่ดีขึ้นโดยการเรียนรู้การเขียนโปรแกรมอย่างน้อยนิด ๆ หน่อย ๆ ในภาษาแอสเซมบลีแบบเดียวกับที่ฉันคิดว่าคุณจะกลายเป็นคนขับที่ดีกว่าเมื่อคุณเรียนรู้ที่จะ
Warren P

คำตอบ:


16

ชุดหนังสือที่ดีสำหรับจุดประสงค์นี้อย่างแม่นยำคือซีรีส์ "Write Great Code" ของ Randall Hyde (ชุดที่1 เล่ม 2 ): คำอธิบายของสถาปัตยกรรมเครื่องจักรอย่างชัดเจนจากมุมมองของสิ่งที่คุณต้องรู้ในการเขียนโค้ดที่มีประสิทธิภาพในภาษาระดับสูง .


ภาษาระดับสูงประเภทใดที่ใช้กับเรื่องนี้ สิ่งนี้รวมถึง Python, JavaScript, C #, Scala หรือไม่?
งาน

@ งาน - ฉันไม่ได้อ่านหนังสือ แต่ฉันจะบอกว่ามันจะใช้กับสิ่งใดก็ตามที่ / สามารถใช้ประโยชน์จากสิ่งต่าง ๆ เช่นมัลติเธรดและการประมวลผลแบบ 64 บิต การใช้ภาษาที่คุณกล่าวถึงอาจทำให้ความรู้นั้นมีประโยชน์ (โดยเฉพาะถ้าคุณเป็นผู้ดูแลเซิร์ฟเวอร์หรือใช้ภาษาเหล่านั้นนอกสภาพแวดล้อมของเว็บ)
Shauna

ไฮด์เป็นกูรูด้านภาษาแอสเซมบลีดังนั้นสำหรับเขา "ระดับสูง" ส่วนใหญ่แปลว่าซี แต่เนื้อหาของเขามีความสำคัญต่อผู้ใช้ภาษาที่สูงขึ้น Strings, การเรียกโพรซีเดอร์และอื่น ๆ ไม่ได้มีความแตกต่างกันในระดับฮาร์ดแวร์ไม่ว่าจะถูกประกาศใน C หรือ Python
Kilian Foth

ฉันคิดว่าภาษาที่คอมไพล์แล้ว (C, C ++, Pascal, Objective-C) ที่อนุญาตให้ใช้ภาษาแอสเซมบลีเล็กน้อยจะได้รับประโยชน์มากที่สุดจากหนังสือเล่มนี้ อย่างไรก็ตามผู้ที่ใช้ Python และเขียนส่วนขยายสำหรับ C หรือแม้แต่ผู้ที่ใช้ java และไม่ใช้วิธีดั้งเดิมใด ๆ สามารถทำได้ด้วยการคิดเพิ่มเติมเกี่ยวกับค่าใช้จ่ายของสิ่งที่พวกเขาทำและ วิธีการทำงานอย่างมีประสิทธิภาพภายในแพลตฟอร์มที่ใช้
Warren P

แม้ว่าฉันจะยังไม่ได้อ่านหนังสือ แต่ฉันจะเลือกคำตอบนี้ให้ถูกต้องตามรีวิว / สรุปของหนังสือ
Samaursa

6

น่าเศร้าที่ฉันไม่รู้จักเทคโนโลยีไมโครโปรเซสเซอร์ที่ทันสมัย: มุมมองของโปรแกรมเมอร์โดย R. Dewar ที่ฉันรู้จักใกล้ที่สุดคือการจัดระเบียบและออกแบบคอมพิวเตอร์รุ่นที่สี่: ส่วนต่อประสานฮาร์ดแวร์ / ซอฟต์แวร์ของ David A. Patterson และ John L. Hennessy แต่ฉันไม่แน่ใจว่าคุณจะไม่พิจารณาในระดับต่ำเกินไป คุณจะต้องทำเพื่อบทประพันธ์อื่น ๆ ของพวกเขา, สถาปัตยกรรมคอมพิวเตอร์, แนวทางเชิงปริมาณ

ออนไลน์http://www-uxsup.csx.cam.ac.uk/courses/Ar Architecture/course.pdfนี้อาจจะให้สิ่งที่คุณต้องการ


ลิงก์ไปยัง pdf นั้นตายแล้ว
ajay

5

สำหรับแพลตฟอร์ม x86 คว้าสำเนาของคู่มือ 64 processor IA-32 และ Intel อินเทล คู่มืออ้างอิงการเพิ่มประสิทธิภาพกล่าวถึงปัญหาเหล่านี้มากมายจากมุมมองระดับต่ำสำหรับ Intel x86 CPU AMD ยังมีคู่มือที่คล้ายกันซึ่งครอบคลุมปัญหาเดียวกัน

สถาปัตยกรรมซีพียูอื่น ๆ ส่วนใหญ่มีคู่มือที่คล้ายกันที่กล่าวถึงปัญหาด้านประสิทธิภาพ ( เช่น ARMและPowerPC )


3

ฉันพบว่า "สถาปัตยกรรมคอมพิวเตอร์: วิธีเชิงปริมาณ" โดย Hennessy และ Patterson ( ลิงก์ Amazon ) เป็นวิธีที่แข็งแกร่งและแข็งแกร่งสำหรับสถาปัตยกรรมคอมพิวเตอร์โดยมีกรณีศึกษาจำนวนเล็กน้อยที่เกี่ยวข้องโดยตรงกับการเขียนโปรแกรม

มันใช้ในขอบเขตที่หลากหลายในหลักสูตรสถาปัตยกรรม CS ระดับปริญญาตรีและบัณฑิตในสหรัฐอเมริกา

นอกจากนี้ยังได้รับการรีวิวที่ดีเยี่ยมเกี่ยวกับ Ars Technicaในขณะที่กลับ


1
ในขณะที่ฉันชอบหนังสือเล่มนี้ - ฉันเป็นเจ้าของรุ่นที่สี่ - เป็นผู้กำกับคอมพิวเตอร์สถาปนิกไม่ใช่โปรแกรมเมอร์
AProgrammer

3

นี่คือสิ่งที่ฉันใช้ในชั้นเรียนระบบคอมพิวเตอร์ของฉันตอนนี้ระบบคอมพิวเตอร์: มุมมองของโปรแกรมเมอร์ (รุ่น 2)และในขณะที่ชั้นเพิ่งเริ่มฉันได้ดูมันและชอบมันมาก

นี่คือคำอธิบายของหนังสือเล่มนี้:

นักเรียนไม่กี่คนที่เรียนวิทยาศาสตร์คอมพิวเตอร์หรือวิศวกรรมคอมพิวเตอร์จะมีโอกาสสร้างระบบคอมพิวเตอร์ ในทางกลับกันนักเรียนส่วนใหญ่จะต้องใช้และโปรแกรมคอมพิวเตอร์เป็นประจำทุกวัน ระบบคอมพิวเตอร์: มุมมองของโปรแกรมเมอร์แนะนำแนวคิดที่สำคัญและยั่งยืนที่รองรับระบบคอมพิวเตอร์โดยแสดงให้เห็นว่าความคิดเหล่านี้มีผลต่อความถูกต้องประสิทธิภาพและประโยชน์ของโปรแกรมแอปพลิเคชันอย่างไร วิธีการลงมือปฏิบัติของข้อความ (รวมถึงชุดห้องปฏิบัติการที่ครอบคลุม) ช่วยให้นักเรียนเข้าใจการดำเนินงาน "ภายใต้กรอบ" ของระบบคอมพิวเตอร์ที่ทันสมัยและเตรียมพวกเขาสำหรับหลักสูตรในอนาคตในหัวข้อระบบเช่นคอมไพเลอร์สถาปัตยกรรมคอมพิวเตอร์ระบบปฏิบัติการ และเครือข่าย


นั่นเป็นหนังสือที่น่าอัศจรรย์ !!
อาร์มันโด

2

มันเป็นงานจำนวนมาก แต่การเขียนโปรแกรมภาษาเน้นการปฏิบัติอาจเป็นสิ่งที่คุณกำลังมองหา หนังสือส่วนใหญ่เกี่ยวกับการแยกวิเคราะห์และรวบรวม (ซึ่งเป็นความรู้ที่จำเป็นสำหรับผู้ที่ต้องการเรียนรู้การเขียนโปรแกรมจริง ๆ ) และในกระบวนการคุณจะจบลงด้วยการเรียนรู้วิธีที่แนวคิดทางภาษาแปลไปสู่สิ่งที่เกิดขึ้นในระดับต่ำ ดีกว่า แต่คุณจะได้เรียนรู้สิ่งนี้ในหลายภาษาพร้อมกันและคุณสามารถเปรียบเทียบและเปรียบเทียบความแตกต่างของภาษาที่ใช้งานได้อย่างชาญฉลาด

ฉันไม่สามารถแนะนำได้หากคุณไม่สามารถอุทิศเวลาหลายเดือนเพื่อเรียนรู้เนื้อหา มันไม่ใช่สิ่งที่คุณเพิ่งอ่านและรู้แจ้งทันใด แต่ถ้าคุณจริงจังแล้วฉันขอแนะนำ


2

มันอาจจะผิดในชีววิทยา แต่ในวิทยาศาสตร์คอมพิวเตอร์ "ontogeny recapitulate phylogeny" สวยเกือบ ภาพรวมทางประวัติศาสตร์ของสถาปัตยกรรมคอมพิวเตอร์ตั้งแต่คอมพิวเตอร์เครื่องแรกเป็นวิธีที่ยอดเยี่ยมในการทำความเข้าใจหัวเรื่องของสถาปัตยกรรมคอมพิวเตอร์จากมุมมองของโปรแกรมเมอร์ การออกแบบคอมพิวเตอร์มีการปรับแต่งการออกแบบก่อนหน้าเกือบทั้งหมด

นั่นคือฉันขอแนะนำให้ศึกษาการออกแบบระบบที่เก่ากว่าโดยสมบูรณ์ซึ่งประกอบด้วยหนังสือ "สถาปัตยกรรมคอมพิวเตอร์" เชิงทฤษฎีที่พวกเขาให้คุณในสาขาวิทยาศาสตร์คอมพิวเตอร์ เพื่อให้เข้าใจถึงการออกแบบระบบและทำงานเขียนซอฟต์แวร์ได้อย่างยอดเยี่ยม เข้าใจสถาปัตยกรรมของระบบคอมพิวเตอร์ได้ง่ายต้องอาศัยความเชี่ยวชาญในหลาย ๆ แนวคิด ฉันคิดว่าถ้าคุณเริ่มต้นอีกครั้งเมื่อสถาปัตยกรรมคอมพิวเตอร์สามารถจัดการได้ในขนาดและขอบเขตที่มากขึ้นคุณอาจทำให้พ่อพร้อมที่จะเขียนโค้ดให้ดีขึ้น

(นั่นคือชุดหนังสือ "write great code" ที่ผู้ชายอีกคนพูดถึงแล้วมันดูยอดเยี่ยมและฉันได้แก้ไขคำถามของฉันเพื่อลบความรู้สึกที่ฉันเคยเรียนรู้จากหนังสือมาก่อนเพราะมันดูยอดเยี่ยม! )

บางสิ่งที่สอนสถาปัตยกรรมคอมพิวเตอร์ได้ดีจริงๆ:

  1. ฉันชอบที่จะเลือกเครื่องจักรจากยุค 80 เป็นจุดเริ่มต้นสำหรับการอธิบายและสาธิตสิ่งต่าง ๆ ให้กับผู้คนเพราะนั่นคือเมื่อฉันเริ่มใช้คอมพิวเตอร์ ฉันใช้คู่มืออ้างอิงของโปรแกรมเมอร์ 64 เพื่อแสดงให้ผู้คนได้เห็นถึงสถานที่ที่ความรู้เรื่องการเขียนโปรแกรมและความรู้เกี่ยวกับสถาปัตยกรรมคอมพิวเตอร์พบกัน ด้วยหนังสือเล่มนี้และบางทีตัวจำลอง 64 ตัวที่ทำงานอยู่บนพีซีของคุณเพื่อให้คุณลองทำสิ่งต่าง ๆ ได้คุณจะได้เรียนรู้ว่าระบบคอมพิวเตอร์ในยุคคลาสสิกยุค 1980 แห่งสถาปัตยกรรมคอมพิวเตอร์นั้นถูกสร้างขึ้นจริง ๆ ในมุมมองของฉันหนึ่งตัวอย่างที่เป็นรูปธรรมเป็นจุดเริ่มต้นที่ดีกว่าแบบจำลองเชิงทฤษฎีมากกว่าโหลที่ขาดรายละเอียดในโลกแห่งความเป็นจริงที่ทำให้สิ่งต่าง ๆ ทำงานได้ หากคุณรู้ว่าทะเบียนคืออะไร ALU คืออะไรรถบัสคืออะไรและนาฬิกาคืออะไร และระบบการส่งสัญญาณที่ใช้ในการออกแบบยุค 80 เก่าที่จะให้พื้นฐานที่คุณจำเป็นต้องรู้เพื่อทำความเข้าใจบางสิ่งบางอย่างเมื่อเร็ว ๆ นี้เช่น "สถาปัตยกรรมสะพานทราย" ของ Intel ประวัติศาสตร์มองย้อนกลับไปที่ต้นฉบับตัวอย่างเช่นค้นหาสถาปัตยกรรม "Von neumann" บนวิกิพีเดีย

  2. ก้าวไปข้างหน้าจากจุดแรกของฉันไม่กี่ปีที่ผ่านมา; เรียนรู้เกี่ยวกับสถาปัตยกรรมพีซี IBM ดั้งเดิมภาษาแอสเซมบลี 8086 และบัส ISA จากสิ่งนี้และข้อ จำกัด ความเข้าใจในสิ่งที่ซีพียู "Intel COre i7" มีและสิ่งที่ PCI และ PCI-e บัสทำและสาเหตุที่คุณต้องการสามารถดำเนินการได้อย่างเป็นธรรมชาติมากขึ้น สถาปัตยกรรมพีซีในปัจจุบันยังคงมี "อาการเมาค้าง" เล็กน้อยจากการออกแบบพีซี IBM ดั้งเดิม วิธีการโหลดโปรแกรมเริ่มต้น (ระบบปฏิบัติการ) เกิดขึ้นในพีซี 2011 ยังคงเป็นมรดกของพีซี IBM ดั้งเดิมและ ROM BIOS และการตั้งค่า CMOS ในพีซีดั้งเดิม

  3. ใช้และแก้ไขบิลด์ Linux ที่กำหนดค่าไว้ล่วงหน้าซึ่งทำงานบนอุปกรณ์ที่ไม่ใช่พีซีแบบฝังและคุณจะได้เรียนรู้มากมายเกี่ยวกับสถาปัตยกรรมคอมพิวเตอร์แบบฝังตัวไม่เพียง แต่สถาปัตยกรรมด้านเทคนิคเท่านั้น แต่ทำไมคุณสมบัติบางอย่างจึงมี ตัวอย่างที่ดีที่มีราคาถูกคือTS-7200ซึ่งมี PC-104 ที่ดี (ISA Bus เช่นเดียวกับในพีซีดั้งเดิม) PC-104 (บัส ISA บัส 16 บิตแบบฝังที่สามารถใช้งานร่วมกับพีซียุค IBM PC / AT 80286) เป็นวิธีที่ยอดเยี่ยมสำหรับนักออกแบบที่ไม่ได้ออกแบบบอร์ดเพื่อสร้างระบบฝังตัวเนื่องจากโมดูลสามารถวางซ้อนกันได้ ต้องการ IO หรืออุปกรณ์เสริมเพิ่มเติมหรือไม่ เพียงเพิ่มโมดูลไม่กี่โมดูล TS-7200 มีแกนที่ไม่ใช่ x86 (ซีพียู ARM9) ที่มีความสามารถในการรันทั้งขนาดใหญ่และเล็ก หากคุณยังไม่พบคำว่า "endianness" ในการเดินทางเพื่อเรียนรู้สถาปัตยกรรมของคุณนี่เป็นสถานที่ที่เหมาะสำหรับการสัมผัส


0

หนังสือส่วนใหญ่เกี่ยวกับภาษาแอสเซมบลีจะกล่าวถึงคุณสมบัติสถาปัตยกรรมที่เกี่ยวข้อง แต่โดยปกติแล้วสำหรับสถาปัตยกรรมที่หนังสือกำลังกำหนดเป้าหมายเท่านั้น ดังนั้นคุณจะได้รับข้อมูลเกี่ยวกับการรั่วไหลของแคชและเทคนิคการทำแผนที่หน้า MMU แต่อาจไม่ใช่ทุกอย่างที่เกี่ยวกับ endianness

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.