จาก NAND สู่ Tetris (2017)
(nand2tetris.org)- Nand2Tetris มอบสื่อการเรียนสำหรับผู้ที่ต้องการทำความเข้าใจระบบคอมพิวเตอร์ตั้งแต่พื้นฐาน โดยให้สร้าง ระบบคอมพิวเตอร์เอนกประสงค์ และเลเยอร์ซอฟต์แวร์สมัยใหม่ด้วยตนเอง
- รวมบทเรียน เอกสารโปรเจกต์ และเครื่องมือไว้ในที่เดียว และสามารถใช้งานแบบโอเพนซอร์สได้ฟรีใน สภาพแวดล้อมที่ไม่แสวงหากำไร
- หลักสูตรนี้ถูกใช้ใน มหาวิทยาลัย·โรงเรียนมัธยม·บูตแคมป์ มากกว่า 400 แห่ง โดยมีผู้เรียนตั้งแต่นักเรียนมัธยม นักศึกษาปริญญาเอก ไปจนถึงวิศวกรอาวุโส
- ผู้เรียนด้วยตนเองสามารถเรียนตาม lecture notes และส่วน Projects บนเว็บไซต์ได้ ส่วนบน Coursera มีการเรียนแบบเสียค่าใช้จ่ายและออกใบรับรองอย่างเป็นทางการได้
- โครงสร้างเนื้อหามุ่งทั้งการเรียนรู้ส่วนบุคคลและการสอนในสถาบันการศึกษา โดยผู้สอนสามารถติดต่อแยกต่างหากเพื่อรับเอกสารเพิ่มเติมได้
สื่อการเรียนสำหรับสร้างคอมพิวเตอร์ตั้งแต่พื้นฐาน
- เว็บไซต์ทางการ Nand to Tetris courses รวบรวมและมอบสื่อที่จำเป็นสำหรับการสร้าง ระบบคอมพิวเตอร์เอนกประสงค์ และเลเยอร์ซอฟต์แวร์สมัยใหม่ตั้งแต่เริ่มต้น
- สื่อประกอบด้วยบทเรียน เอกสารโปรเจกต์ และเครื่องมือ โดยมุ่งเป้าไปที่ นักเรียน·ผู้สอน·ผู้เรียนด้วยตนเอง
- หนังสือที่เกี่ยวข้องคือ The Elements of Computing Systems โดย Noam Nisan และ Shimon Schocken
- เอกสาร CACM ที่เกี่ยวข้องกับหลักสูตรมีให้ในรูปแบบ ข้อความ และ วิดีโอ
เส้นทางการเรียนและการใช้งานในภาคการศึกษา
- หลักสูตร Nand to Tetris ถูกสอนในมหาวิทยาลัย โรงเรียนมัธยม และบูตแคมป์ มากกว่า 400 แห่ง
- ผู้เรียนครอบคลุมตั้งแต่นักเรียนมัธยม นักศึกษาปริญญาเอก ไปจนถึงวิศวกรอาวุโส
- สามารถดู ประมวลรายวิชาแบบขยาย ของหลักสูตรเวอร์ชันวิชาการทั่วไปได้
- การเรียนแบบอิสระสามารถทำได้โดยเรียนตาม lecture notes และส่วน Projects บนเว็บไซต์
- หลักสูตรบน Coursera เป็นแบบ เสียค่าใช้จ่าย และมีใบรับรองอย่างเป็นทางการ
- เอกสารเพิ่มเติมสำหรับผู้สอนสามารถขอรับได้โดยติดต่อ nand2tetris@gmail.com
1 ความคิดเห็น
ความเห็นจาก Hacker News
ตอนลองครั้งแรกหลังเรียนจบมหาวิทยาลัยเมื่อ 7 ปีก่อน ทำได้แค่ถึงบท 2 แต่ก็รู้สึกคุ้มค่ามาก ก่อนจะหยุดไปเพราะโปรเจกต์ข้างอื่น
เมื่อ 3 เดือนก่อนกลับมาเริ่มใหม่ ตอนนี้มาถึงบท 8 แล้ว ทำ ลอจิกเกต, ALU, CPU, แอสเซมเบลอร์ และครึ่งหนึ่งของ virtual machine เสร็จไปแล้ว ซึ่งทุกบทจะมีช่วงที่คิดว่า “สิ่งนี้มันทำงานยังไงกันแน่?” แต่พอมันทำงานได้จริงก็สะใจมาก
ในฐานะโปรเจกต์ข้างเพื่อการเรียนรู้ล้วน ๆ นี่คือสิ่งที่ให้ความคุ้มค่ามากที่สุดที่เคยทำมา และก็ค่อนข้างภูมิใจกับตัวเองที่ยังทำต่อจนถึงตอนนี้ แนะนำอย่างมาก
ช่วงฤดูใบไม้ร่วง/ฤดูหนาวปีที่แล้วก็ทำคู่ไปกับซีรีส์ยอดเยี่ยมของ Ben Eater ที่สร้าง คอมพิวเตอร์ 8 บิต บน breadboard และใช้เวลาหลายเดือนซื้อชิ้นส่วนจากจีน ค่อย ๆ สร้างซับซิสเต็มไปตลอดหน้าหนาวตามของที่ทยอยมาถึง
แนะนำให้ลองอันนั้นต่อเป็นลำดับถัดไป ได้ความคุ้มค่ามากเหมือนกัน และภาพไฟ LED กระพริบพร้อมกับเข้าใจว่าสิ่งที่เกิดขึ้นภายในคืออะไรนั้นเจ๋งมากจริง ๆ
เช่นกลไกจริง ๆ ที่ทำให้วงจรรวมเปลี่ยนอินพุตเป็นเอาต์พุตที่มีประโยชน์ เพราะแม้แต่วงจรรวมที่ง่ายที่สุดในโลกจริงอย่าง TI SN7400 ก็ยังหาแหล่งข้อมูลที่อธิบายการทำงานจริง ๆ ได้ดีพอไม่เจอ
ฉันชอบคอร์สนี้มาก และแนะนำอย่างยิ่งสำหรับคนที่ทำงานกับคอมพิวเตอร์แต่ไม่เคยเรียนวิชาคอมพิวเตอร์ศาสตร์ระดับล่าง
มันช่วยให้เข้าใจอย่างเป็นธรรมชาติว่าคอมพิวเตอร์ทำงานอย่างไรในส่วนสำคัญที่ส่งผลต่อโปรแกรมระดับสูงและภาษาโปรแกรม และสำหรับฉันจุดที่ได้เห็นภาพชัดที่สุดคือการเข้าใจ ความต่างระหว่าง stack กับ heap อย่างแท้จริง
การได้เห็นว่าวงจรง่าย ๆ ถูกต่อยอดซ้อนกันขึ้นไปจนกลายเป็นเครื่องจักรซับซ้อนที่เราใช้อยู่ทุกวันนั้นให้ความรู้สึกเหมือนเวทมนตร์ และผู้สอนก็ทำให้จับแก่นของหัวข้ออย่างภาษาแอสเซมบลีได้อย่างรวดเร็วโดยไม่ทำให้เนื้อหาที่จริง ๆ อาจกินเวลาหลายภาคการศึกษาถูกลดทอนเกินไป
ถ้ามีเวลาแนะนำมากจริง ๆ โดยภาค 1 ตั้งแต่ NAND gate ไปจนถึงการสร้าง CPU นั้นสนุกและค่อนข้างง่าย แต่ภาค 2 ที่พาจากคอมพิวเตอร์ไปสู่ระบบปฏิบัติการเต็มรูปแบบนั้นงานเยอะกว่ามาก
กำลังพยายามตัดสินใจว่าต้องใช้ทั้งสองอย่างหรืออย่างใดอย่างหนึ่งก็พอ
ขอแนะนำ คอร์ส/หนังสือ นี้อย่างมาก
ถ้าทำจนจบจะรู้สึกคุ้มค่ามาก
หลังจากทำซีรีส์คอมพิวเตอร์ 8 บิตอันยอดเยี่ยมของ Ben Eater (https://eater.net/8bit/) จบแล้ว การต่อมาที่ nand2tetris เป็นเส้นทางที่เป็นธรรมชาติมาก
มันช่วยให้เข้าใจแนวคิดพื้นฐานของการออกแบบคอมพิวเตอร์ที่มักถูกอธิบายแบบผ่าน ๆ ได้อย่างแท้จริง และเป็นโปรเจกต์ที่เหมาะมากสำหรับเริ่มทำในช่วงวันหยุดยาว
ฉันชอบวิดีโอของเขา โดยเฉพาะตอนแนะนำ ลูป และตอนแนะนำ interrupt
การได้เห็นโค้ดที่เขาเขียนถูกนำมาเขียนใหม่อย่างสวยงามขึ้นมากด้วยแนวคิดเหล่านี้เป็นอะไรที่น่าพอใจมาก
ตอนนี้คงต้องไปดู NAND to Tetris บ้างแล้ว
สองอย่างนี้เข้ากันได้ดีมาก
มีเกม NAND สนุก ๆ ที่ได้แรงบันดาลใจจากคอร์สนี้: https://nandgame.com/
ทั้งคู่เป็นสไตล์เขียนด้วยภาษาคล้ายแอสเซมบลีและสนุกมากในเชิงการเรียนรู้
ถ้ากำลังพยายามเข้าใจคอมพิวเตอร์ในระดับที่ลึกลงไปอีก ขอแนะนำคอร์ส Digital Design and Computer Architecture ของ ETH Zürich ด้วย
https://www.youtube.com/playlist?list=PL5Q2soXY2Zi-EImKxYYY1...
ฉันเคยเรียนวิชาแนะนำสถาปัตยกรรมคอมพิวเตอร์มา แต่เสียดายที่ไปได้ไม่ไกลนัก และไม่ได้แตะเรื่องมหัศจรรย์อย่าง out-of-order execution ที่ CPU สมัยใหม่ทำเลย
เพลย์ลิสต์นี้น่าจะกลายเป็นหัวข้อประจำวันหยุดครั้งนี้ของฉัน
ฉันมีทั้งความทรงจำดี ๆ กับหนังสือเล่มนี้ และกับช่วงเวลาที่ได้หยิบมันขึ้นมาอ่าน
ตอนนั่งดื่มกาแฟกับแฟน ฉันบอกเธอว่าเพิ่งอ่านมาว่าสามารถสร้าง ลอจิกเกต ทุกชนิดได้ด้วย NAND อย่างเดียว เธอเลยเกิดความสงสัย แล้วเราก็ช่วยกันเขียน NAND ลงบนกระดาษเช็ดปากหลายแผ่นเพื่อดูว่าจะสร้างทั้งหมดออกมาได้จริงไหม
สุดท้ายก็ทำได้ และสนุกมากจริง ๆ
ทุกครั้งที่สร้างเกตหนึ่งตัวจาก NAND ได้ เราจะเขียนชื่อเกตใหม่ลงบนกระดาษเช็ดปาก แล้วฉันก็เอากระดาษพวกนั้นกับความสนุกกลับบ้านไปด้วย หลังจากนั้นอีกไม่กี่วันก็พยายามเอาเกตเหล่านั้นมาประกอบกันจนไปถึง ALU ทั้งชุด
ระหว่างทางก็ได้เจอ multiplexer และสิ่งน่าสนใจอีกหลายอย่าง สุดท้ายแม้จะตัน แต่เพราะเคยได้ยินชื่อหนังสือเล่มนี้มาก่อนก็เลยตัดสินใจสั่งมา
บทถัด ๆ มาช่วยให้ฉันเข้าใจโลกระดับล่างที่เคยเป็นเรื่องลึกลับมาตลอดสำหรับคนที่มีแต่ประสบการณ์ซอฟต์แวร์อย่างฉันได้มากจริง ๆ
แต่ในทางปฏิบัติฉันไม่ได้สร้างมันต่อจนจบ
พอเข้าไปถึงฝั่งซอฟต์แวร์ระดับล่าง ฉันรู้สึกว่าเข้าใจมากพอแล้วจึงไม่ดึงดูดให้ลงมือทำต่อเท่าไร แต่แค่อ่านก็ยอดเยี่ยมมากแล้ว
ยังมีรีโพซิทอรีของ george hotz อันนี้ด้วย และค่อนข้างน่าสนใจ
https://github.com/geohot/fromthetransistor
ไม่มีเอกสาร มีแค่โครงร่างคร่าว ๆ ของคอร์สสมมุติ แต่ถ้าไปดูคอมมิตแรก ๆ จะชัดขึ้น
“ผมเขียนสิ่งนี้ไว้เมื่อหลายปีก่อนและอยากเอาขึ้นออนไลน์ การจ้างคนเป็นเรื่องยาก การศึกษาวิทยาการคอมพิวเตอร์สมัยใหม่จำนวนมากนั้นแย่มากจริง ๆ และมันยากเกินไปที่จะหาคนที่เข้าใจสแตกคอมพิวเตอร์สมัยใหม่จาก หลักการพื้นฐาน วันหนึ่งถ้าผมมีเวลา 12 สัปดาห์ว่างอีกครั้ง อาจจะทำเป็นคอร์สให้เรียนตามจากที่บ้านก็ได้ ผมเองก็อยากมาร่วมสนุกด้วย”
ตอนปริญญาตรีฉันไม่ได้เรียน CS แต่เรียน วิศวกรรมคอมพิวเตอร์ และหัวข้อในลิสต์นั้นประมาณ 80% ก็ครอบคลุมอยู่แล้ว
ฉันเรียนทั้ง Verilog กับวิชาระบบปฏิบัติการหลายตัว และยังทำไมโครคอนโทรลเลอร์/FPGAs เยอะมาก
ไฮไลต์ที่สุดคือการสร้าง CPU ด้วย Verilog แล้วต่อด้วยเขียนแอสเซมเบลอร์/คอมไพเลอร์
มันเป็นหลักสูตรที่หนักมาก แต่ตอนเรียนจบฉันรู้สึกว่าเข้าใจทั้งสแตกได้ค่อนข้างดี
บางทีเขาอาจไม่ค่อยรู้จักฝั่งวิศวกรรมคอมพิวเตอร์ก็ได้
สงสัยว่า “sand2nand” ซึ่งเหมือนเป็นภาคก่อนหน้า จะทำเป็นโปรเจกต์ DIY ได้ไหม
ตอนทำงานเป็นนักวิเคราะห์ข้อมูล ฉันลองเรียนคอร์สนี้เล่น ๆ แบบไม่คิดอะไรมาก แต่มันกลายเป็นจุดเริ่มต้นของ การเปลี่ยนสายอาชีพ
เป็นคอร์สที่ยอดเยี่ยมมาก ถ้ามีเวลาขอแนะนำให้ลองจริง ๆ
อยากรู้ว่าได้ย้ายไปเส้นทางสายการเขียนโปรแกรมระดับล่างมากขึ้นหรือเปล่า