นักพัฒนาซอฟต์แวร์ควรทราบถึงการทำงานภายในของฮาร์ดแวร์ของคอมพิวเตอร์หรือไม่ [ปิด]


13

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

มีกี่คนที่รู้เรื่องทั้งหมดนี้?

คำตอบ:


31

ขึ้นอยู่กับสิ่งที่คุณทำ

หากคุณเป็นนักพัฒนาที่ฝังตัว (และคุณกำลังเขียนอยู่ใกล้กับโลหะในอุปกรณ์ขนาดเล็กมาก) คุณจำเป็นต้องรู้ทุกองค์ประกอบในระบบ

หากคุณเป็นนักพัฒนาระบบ (และกำลังเขียนระบบปฏิบัติการหรือไดรเวอร์อุปกรณ์หรือแม้กระทั่งฐานข้อมูล) คุณจะต้องรู้ทุกอย่างเกี่ยวกับส่วนต่อประสานฮาร์ดแวร์ระดับต่ำ

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

หากคุณเป็นนักพัฒนาแอปพลิเคชันคุณไม่จำเป็นต้องรู้สิ่งใดนอกจากการใช้หน่วยความจำในระดับที่เหมาะสม

หากคุณเป็นนักพัฒนาเว็บการรู้โพรโทคอลอินเทอร์เน็ตเป็นเรื่องที่สะดวก แต่ไม่มีสิ่งอื่นใดที่จำเป็นนอกจากวิธีจัดการกับปัญหาหน่วยความจำ


20
การรู้เกี่ยวกับเครื่องของคุณจะทำให้คุณเป็นนักพัฒนาซอฟต์แวร์ที่ดีกว่าแม้ว่าคุณจะทำเฉพาะแอพพลิเคชั่นทางธุรกิจ ความรู้ดังกล่าวอาจไม่จำเป็น แต่เป็นสิ่งสำคัญอย่างแน่นอน
Robert Harvey

@ Robert Harvey: ถูกต้องซึ่งเป็นเหตุผลที่ฉันพูดว่า "ไม่จำเป็นต้องรู้" แน่นอนมันไม่เจ็บที่จะรู้สิ่งเหล่านี้อยู่ดี :)
greyfade

2
+1 แต่ฉันรู้ (มากกว่า) นักพัฒนาเว็บบางคนที่ไม่เคยพิจารณาการใช้หน่วยความจำ
Tim Post

-1 สำหรับ "หากคุณเป็นผู้พัฒนาแอปพลิเคชันคุณไม่จำเป็นต้องรู้สิ่งใดนอกจากการใช้หน่วยความจำในระดับที่เหมาะสม" ปัญหาที่ใหญ่กว่าบางอย่างในระบบที่นี่เกิดจากนักออกแบบแอปพลิเคชันไม่ทราบวิธีการใช้ฐานข้อมูลจากนั้นโทษ dba เมื่อ "สิ่งที่กำลังทำงานช้าและไม่ใช่รหัสของฉัน; ดูมีโปรไฟล์"
Andrew Hill

@AndrewHill: เมื่อใดที่ฮาร์ดแวร์มีความสำคัญและไม่ใช่อัลกอริทึม คำถามเกี่ยวกับการทำความเข้าใจพฤติกรรมฮาร์ดแวร์ระดับต่ำไม่ใช่อัลกอริธึมระดับสูง
greyfade

12

ไม่คุณไม่จำเป็นต้องแต่ฉันคิดว่ามันเป็นความคิดที่ยอดเยี่ยม การเรียนรู้ภาพรวมทั่วไปของการทำงานในระดับตรรกะช่วยฉันในการพัฒนาได้อย่างไร


6

ฉันคิดว่าความคิดเห็นเกี่ยวกับนักพัฒนาแอปพลิเคชันและนักพัฒนาเว็บนั้นผิด

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

จากจุดยืนของแอปพลิเคชันหากคุณกำลังพัฒนาโปรแกรม CAD บางประเภทหรือสิ่งที่ทำให้การเรนเดอร์แบบสามมิติคุณสามารถคาดหวังแอปพลิเคชันเหล่านี้ให้คำนวณอย่างละเอียดทั้งในเชิงอัลกอริทึมและแบบกราฟิก จะต้องเข้าใจอย่างถี่ถ้วนเพื่อทำความเข้าใจกับฮาร์ดแวร์เพื่อให้แน่ใจว่าแอปพลิเคชันตอบสนองและใช้งานได้

ฉันไม่ได้บอกว่าคุณต้องเข้าใจถึงสิ่งที่ลึกล้ำของบางอย่างเช่นโปรโตคอล PCI แต่คุณเข้าใจดีว่าอินเทอร์เฟซและฮาร์ดแวร์ใดที่มีความสามารถ

ในที่สุดมันเป็นสิ่งสำคัญโดยไม่คำนึงถึงประเภทของการพัฒนาที่คุณทำ ระดับของรายละเอียดที่จำเป็นสำหรับคุณที่จะเข้าใจเป็นที่ถกเถียงกัน


2

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

จากประสบการณ์ของผมเองโปรแกรมเมอร์ที่ดีที่สุดมีแนวโน้มที่จะรู้เกี่ยวกับงานภายในเพื่อองศาที่แตกต่างไม่ว่าจะเป็นความเข้าใจชุดพื้นเมืองของการเรียนการสอนการประกอบสำหรับแพลตฟอร์มเป้าหมายเบื้องต้นองค์กรคอมพิวเตอร์หลักสูตรที่โรงเรียนพื้นฐานดิจิตอลอิเล็กทรอนิกส์หรือความสามารถในการเข้าใจรายละเอียด คำอธิบายของคอร์ CPU และ GPU ในรุ่นล่าสุดที่ดีที่สุดมีความรู้ที่สมบูรณ์มากกว่าเพื่อนที่ด้อยกว่า


1

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


0

สิ่งเล็ก ๆ น้อย ๆ ที่ฉันรู้ว่าฉันได้เรียนรู้ในชั้นเรียนสถาปัตยกรรมคอมพิวเตอร์เกือบ 25 ปีที่แล้วและในสถาปัตยกรรมที่ไม่ใช่โลกแห่งความจริง

ฉันมักจะเขียนโปรแกรมประยุกต์เป็นหลักบนแพลตฟอร์มที่หลากหลาย มีช่วงเวลาหนึ่งที่ฉันพัฒนาโค้ดเพื่อทำงานบนฮาร์ดแวร์ x86 ชุดสินค้า แต่ยังรวมถึง Sparc, PA-RISC และสถาปัตยกรรมเซิร์ฟเวอร์อื่น ๆ ความรู้ในระดับนั้นไม่จำเป็นสำหรับงานที่ฉันทำ


0

ฉันสอนการเขียนโปรแกรม Java เป็นโรงเรียนมัธยม AP ฉันพบว่าเมื่อนักเรียนรู้อะไรเกี่ยวกับการทำงานภายในของคอมพิวเตอร์มันช่วยให้พวกเขาเข้าใจแนวคิดการเขียนโปรแกรม

ฉันไม่ไปลงน้ำ - เพียงแค่แนวคิดง่ายๆเช่นการเก็บสิ่งต่าง ๆ ในความทรงจำที่ดูเหมือนจะช่วยนักเรียน


0

ฉันจะตอบคำถามนี้ตามที่ถามในหัวข้อ:

ใช่นักพัฒนาควรรู้ผลงานภายในของฮาร์ดแวร์ ขึ้นอยู่กับประเภทของนักพัฒนา & เป้าหมายเวลาที่มีอยู่และความสนใจส่วนบุคคล แน่นอนว่าลำดับความสำคัญควรอยู่ที่เครื่องมือเทคนิคและอื่น ๆ ที่พวกเขาใช้ในพื้นที่ของพวกเขา ความคิดเห็นนี้เป็นไปตามสายของการเป็นบุคคลที่โค้งมนอย่างดี ยิ่งคุณรู้จักสิ่งต่าง ๆ นอกเหนือจากงานฝีมือของคุณมากเท่าไหร่ก็ยิ่งดีเท่านั้น

นั่นไม่ได้หมายความว่าคุณจะต้องคลั่งไคล้ชีสวิซ มีภาพรวมที่ดีของฮาร์ดแวร์วิธีการโต้ตอบและวิธีใช้ระบบปฏิบัติการ ในบรรทัดเหล่านี้ฉันขอแนะนำให้อ่านหนังสือแนวคิดระบบปฏิบัติการสำหรับนักพัฒนาทั้งหมด

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

ดังนั้นฉันขอแนะนำให้เรียนรู้เกี่ยวกับฮาร์ดแวร์ ทำได้ตามจังหวะที่เหมาะสมทั้งนี้ขึ้นอยู่กับความต้องการของคุณ เรียนรู้รายละเอียดมากที่สุดเท่าที่จะทำได้ แต่ให้ความสำคัญกับแนวคิด


0

นักพัฒนาทุกคนควรรู้แนวคิดพื้นฐานที่เกี่ยวข้องกับวิศวกรรมคอมพิวเตอร์: เลขคณิตไบนารีการแปลงฐานพีชคณิตแบบบูลตรรกะประตูองค์ประกอบของซีพียู (และส่วนประกอบที่ทำ) แคชหน่วยความจำเสมือนการบีบอัดการตรวจจับข้อผิดพลาดและการแก้ไข ...

ขอบเขตที่ควรทราบสิ่งเหล่านี้ขึ้นอยู่กับงานของโปรแกรมเมอร์ เช่นเดียวกับที่คนอื่นพูดนักพัฒนาระบบสมองกลฝังตัวจะต้องคุ้นเคยกับความสามารถของฮาร์ดแวร์และวิธีการเขียนซอฟต์แวร์ที่ใช้ประโยชน์จากฮาร์ดแวร์ได้ดีกว่าที่นักพัฒนาเว็บกล่าว

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