ฉันไม่ได้พูดถึงวิธีการกำหนดหน่วยความจำและการจัดการหน่วยความจำ (สิ่งต่าง ๆ ที่คุณสามารถเรียนรู้จาก C) แต่เป็นแง่มุมของฮาร์ดแวร์และองค์ประกอบของฮาร์ดแวร์คอมพิวเตอร์แต่ละอย่างทำงานภายในและวิธีการสื่อสารระหว่างกัน
มีกี่คนที่รู้เรื่องทั้งหมดนี้?
ฉันไม่ได้พูดถึงวิธีการกำหนดหน่วยความจำและการจัดการหน่วยความจำ (สิ่งต่าง ๆ ที่คุณสามารถเรียนรู้จาก C) แต่เป็นแง่มุมของฮาร์ดแวร์และองค์ประกอบของฮาร์ดแวร์คอมพิวเตอร์แต่ละอย่างทำงานภายในและวิธีการสื่อสารระหว่างกัน
มีกี่คนที่รู้เรื่องทั้งหมดนี้?
คำตอบ:
ขึ้นอยู่กับสิ่งที่คุณทำ
หากคุณเป็นนักพัฒนาที่ฝังตัว (และคุณกำลังเขียนอยู่ใกล้กับโลหะในอุปกรณ์ขนาดเล็กมาก) คุณจำเป็นต้องรู้ทุกองค์ประกอบในระบบ
หากคุณเป็นนักพัฒนาระบบ (และกำลังเขียนระบบปฏิบัติการหรือไดรเวอร์อุปกรณ์หรือแม้กระทั่งฐานข้อมูล) คุณจะต้องรู้ทุกอย่างเกี่ยวกับส่วนต่อประสานฮาร์ดแวร์ระดับต่ำ
หากคุณเป็นผู้พัฒนาเกมและโครงการของคุณล่าช้า (ซึ่งคุณกำลังปรับปรุงประสิทธิภาพของสิ่งต่าง ๆ ) คุณต้องรู้รายละเอียดของแคชแคชและสถาปัตยกรรมกราฟิกที่คุณจะใช้
หากคุณเป็นนักพัฒนาแอปพลิเคชันคุณไม่จำเป็นต้องรู้สิ่งใดนอกจากการใช้หน่วยความจำในระดับที่เหมาะสม
หากคุณเป็นนักพัฒนาเว็บการรู้โพรโทคอลอินเทอร์เน็ตเป็นเรื่องที่สะดวก แต่ไม่มีสิ่งอื่นใดที่จำเป็นนอกจากวิธีจัดการกับปัญหาหน่วยความจำ
ไม่คุณไม่จำเป็นต้องแต่ฉันคิดว่ามันเป็นความคิดที่ยอดเยี่ยม การเรียนรู้ภาพรวมทั่วไปของการทำงานในระดับตรรกะช่วยฉันในการพัฒนาได้อย่างไร
ฉันคิดว่าความคิดเห็นเกี่ยวกับนักพัฒนาแอปพลิเคชันและนักพัฒนาเว็บนั้นผิด
ตัวอย่างเช่นหากมีใครบางคนกำลังพัฒนาเว็บแอปพลิเคชันที่เกี่ยวข้องกับการรักษาความปลอดภัยจำนวนมากเช่น ssh หรืออัลกอริทึมการเข้ารหัสอื่น ๆ มันเป็นสิ่งสำคัญที่พวกเขารู้ว่าฮาร์ดแวร์ชนิดใดที่พวกเขากำลังทำงานอยู่ ภาระงาน ตัวอย่างอื่นอาจรวมถึงเซิร์ฟเวอร์ที่โฮสต์เนื้อหาที่ดาวน์โหลดบางประเภท คุณควรทราบถึงความสามารถของดิสก์ไดรฟ์และบัสอินเตอร์เฟสทุกประเภทที่ติดมาด้วยหากคุณคาดหวังว่าจะมีคำขอจำนวนมากพอสมควร
จากจุดยืนของแอปพลิเคชันหากคุณกำลังพัฒนาโปรแกรม CAD บางประเภทหรือสิ่งที่ทำให้การเรนเดอร์แบบสามมิติคุณสามารถคาดหวังแอปพลิเคชันเหล่านี้ให้คำนวณอย่างละเอียดทั้งในเชิงอัลกอริทึมและแบบกราฟิก จะต้องเข้าใจอย่างถี่ถ้วนเพื่อทำความเข้าใจกับฮาร์ดแวร์เพื่อให้แน่ใจว่าแอปพลิเคชันตอบสนองและใช้งานได้
ฉันไม่ได้บอกว่าคุณต้องเข้าใจถึงสิ่งที่ลึกล้ำของบางอย่างเช่นโปรโตคอล PCI แต่คุณเข้าใจดีว่าอินเทอร์เฟซและฮาร์ดแวร์ใดที่มีความสามารถ
ในที่สุดมันเป็นสิ่งสำคัญโดยไม่คำนึงถึงประเภทของการพัฒนาที่คุณทำ ระดับของรายละเอียดที่จำเป็นสำหรับคุณที่จะเข้าใจเป็นที่ถกเถียงกัน
สำหรับโปรแกรมเมอร์มืออาชีพฉันมองไปที่มันเป็นแบบองค์รวมวิธีการทำความเข้าใจทั้งระบบมากกว่าเพียงแค่รู้ไวยากรณ์ของภาษาโปรแกรมที่ได้รับความหวือหวา ฉันพบว่ามันช่วยโปรแกรมเมอร์ (และนักวิเคราะห์) ตัดสินใจออกแบบอย่างชาญฉลาดและตัดสินใจเลือกอัลกอริธึมและโครงสร้างข้อมูลที่มีข้อมูลมากขึ้น
จากประสบการณ์ของผมเองโปรแกรมเมอร์ที่ดีที่สุดมีแนวโน้มที่จะรู้เกี่ยวกับงานภายในเพื่อองศาที่แตกต่างไม่ว่าจะเป็นความเข้าใจชุดพื้นเมืองของการเรียนการสอนการประกอบสำหรับแพลตฟอร์มเป้าหมายเบื้องต้นองค์กรคอมพิวเตอร์หลักสูตรที่โรงเรียนพื้นฐานดิจิตอลอิเล็กทรอนิกส์หรือความสามารถในการเข้าใจรายละเอียด คำอธิบายของคอร์ CPU และ GPU ในรุ่นล่าสุดที่ดีที่สุดมีความรู้ที่สมบูรณ์มากกว่าเพื่อนที่ด้อยกว่า
ฉันไม่แน่ใจว่ามันจะช่วยได้หรือไม่ แต่ฉันรู้สึกสบายใจเมื่อรู้เพิ่มเติมเกี่ยวกับระบบที่ฉันใช้งานมากกว่าที่ฉันต้องการจริงๆ เมื่อฉันยังเด็กฉันไม่ชอบที่จะไม่รู้ภาษาแอสเซมบลีของระบบที่ฉันทำงานอยู่ อย่างใดอย่างหนึ่งฉันได้เปลี่ยนหรือฉันได้เรียนรู้มากพอที่อีกหนึ่งจะไม่ขยายความรู้สึกของฉันสำหรับระบบมาก ฉันไม่เคยเป็นผู้ชายฮาร์ดแวร์มาก่อน แต่ฉันสามารถแยกเครื่องคอมพิวเตอร์และตั้งชื่อระบบย่อยที่แตกต่างกันและวิธีที่พวกเขาโต้ตอบกัน
สิ่งเล็ก ๆ น้อย ๆ ที่ฉันรู้ว่าฉันได้เรียนรู้ในชั้นเรียนสถาปัตยกรรมคอมพิวเตอร์เกือบ 25 ปีที่แล้วและในสถาปัตยกรรมที่ไม่ใช่โลกแห่งความจริง
ฉันมักจะเขียนโปรแกรมประยุกต์เป็นหลักบนแพลตฟอร์มที่หลากหลาย มีช่วงเวลาหนึ่งที่ฉันพัฒนาโค้ดเพื่อทำงานบนฮาร์ดแวร์ x86 ชุดสินค้า แต่ยังรวมถึง Sparc, PA-RISC และสถาปัตยกรรมเซิร์ฟเวอร์อื่น ๆ ความรู้ในระดับนั้นไม่จำเป็นสำหรับงานที่ฉันทำ
ฉันสอนการเขียนโปรแกรม Java เป็นโรงเรียนมัธยม AP ฉันพบว่าเมื่อนักเรียนรู้อะไรเกี่ยวกับการทำงานภายในของคอมพิวเตอร์มันช่วยให้พวกเขาเข้าใจแนวคิดการเขียนโปรแกรม
ฉันไม่ไปลงน้ำ - เพียงแค่แนวคิดง่ายๆเช่นการเก็บสิ่งต่าง ๆ ในความทรงจำที่ดูเหมือนจะช่วยนักเรียน
ฉันจะตอบคำถามนี้ตามที่ถามในหัวข้อ:
ใช่นักพัฒนาควรรู้ผลงานภายในของฮาร์ดแวร์ ขึ้นอยู่กับประเภทของนักพัฒนา & เป้าหมายเวลาที่มีอยู่และความสนใจส่วนบุคคล แน่นอนว่าลำดับความสำคัญควรอยู่ที่เครื่องมือเทคนิคและอื่น ๆ ที่พวกเขาใช้ในพื้นที่ของพวกเขา ความคิดเห็นนี้เป็นไปตามสายของการเป็นบุคคลที่โค้งมนอย่างดี ยิ่งคุณรู้จักสิ่งต่าง ๆ นอกเหนือจากงานฝีมือของคุณมากเท่าไหร่ก็ยิ่งดีเท่านั้น
นั่นไม่ได้หมายความว่าคุณจะต้องคลั่งไคล้ชีสวิซ มีภาพรวมที่ดีของฮาร์ดแวร์วิธีการโต้ตอบและวิธีใช้ระบบปฏิบัติการ ในบรรทัดเหล่านี้ฉันขอแนะนำให้อ่านหนังสือแนวคิดระบบปฏิบัติการสำหรับนักพัฒนาทั้งหมด
ฉันรู้ทั้งหมดนี้ไหม Heckไม่มี ฉันลืมข้อมูลที่ไร้ประโยชน์มากเกี่ยวกับ SCSI ซึ่งมันไม่ตลกเลย อย่างไรก็ตามการเรียนรู้เกี่ยวกับมันเป็นประสบการณ์ที่ทรงคุณค่า ฉันยังลืมรายละเอียดเกี่ยวกับฮาร์ดแวร์อื่น ๆ อีกมาก แต่จำแนวคิดสำคัญที่ฉันเรียนรู้จากความรู้นั้น
ดังนั้นฉันขอแนะนำให้เรียนรู้เกี่ยวกับฮาร์ดแวร์ ทำได้ตามจังหวะที่เหมาะสมทั้งนี้ขึ้นอยู่กับความต้องการของคุณ เรียนรู้รายละเอียดมากที่สุดเท่าที่จะทำได้ แต่ให้ความสำคัญกับแนวคิด
นักพัฒนาทุกคนควรรู้แนวคิดพื้นฐานที่เกี่ยวข้องกับวิศวกรรมคอมพิวเตอร์: เลขคณิตไบนารีการแปลงฐานพีชคณิตแบบบูลตรรกะประตูองค์ประกอบของซีพียู (และส่วนประกอบที่ทำ) แคชหน่วยความจำเสมือนการบีบอัดการตรวจจับข้อผิดพลาดและการแก้ไข ...
ขอบเขตที่ควรทราบสิ่งเหล่านี้ขึ้นอยู่กับงานของโปรแกรมเมอร์ เช่นเดียวกับที่คนอื่นพูดนักพัฒนาระบบสมองกลฝังตัวจะต้องคุ้นเคยกับความสามารถของฮาร์ดแวร์และวิธีการเขียนซอฟต์แวร์ที่ใช้ประโยชน์จากฮาร์ดแวร์ได้ดีกว่าที่นักพัฒนาเว็บกล่าว