เหตุใด Structure and Interpretation of Computer Programs จึงสำคัญ
นวัตกรรมของ SICP
- ยกระดับความเข้มข้นทางปัญญา: SICP ยกระดับความเข้มข้นทางปัญญาของการศึกษาวิทยาการคอมพิวเตอร์ระดับเริ่มต้นอย่างมาก เดิมทีวิชา CS แรกมักเน้นการเรียนรู้รายละเอียดของภาษาโปรแกรมใดภาษาหนึ่ง แต่ SICP เน้นการเรียนรู้ภาพรวมของกระบวนการเขียนโปรแกรม
- เน้นการทำ abstraction: เน้นความสำคัญของการมองหารูปแบบทั่วไปจากปัญหาเฉพาะ และสร้างเครื่องมือซอฟต์แวร์เพื่อทำให้แต่ละรูปแบบนั้นเป็นรูปธรรม
- การมองฟังก์ชันเป็นข้อมูล: ให้ความสำคัญกับแนวคิดที่ว่าฟังก์ชันสามารถใช้เป็นข้อมูลได้ แนวคิดนี้เรียนรู้ยาก แต่เมื่อเข้าใจแล้วจะทรงพลังมาก
- กระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย: ผสานกระบวนทัศน์การเขียนโปรแกรม 3 แบบ ได้แก่ functional, object-oriented และ declarative เข้ากับวิชา CS แรก
การเลือกใช้ภาษา Scheme
- ไวยากรณ์ที่เรียบง่ายและสม่ำเสมอ: Scheme มีไวยากรณ์ที่เรียบง่ายและสม่ำเสมอมากสำหรับทุกสิ่ง ภาษอื่น ๆ มักใช้ไวยากรณ์ต่างกันสำหรับการกำหนดค่าตัวแปร การทำเงื่อนไข การวนซ้ำ และการเรียกฟังก์ชัน แต่ Scheme ใช้รูปแบบเดียวจัดการได้ทั้งหมด
- เรียนรู้ได้หลายกระบวนทัศน์: ด้วยความเรียบง่ายของ Scheme จึงสามารถเรียนรู้กระบวนทัศน์การเขียนโปรแกรมที่หลากหลายได้ง่าย โดยเฉพาะช่วยให้เข้าใจว่าการเขียนโปรแกรมเชิงวัตถุถูกทำให้เกิดขึ้นได้อย่างไร
- เตรียมพร้อมสำหรับอนาคต: SICP ช่วยให้นักศึกษาพัฒนาความสามารถในการเรียนรู้ภาษาโปรแกรมใหม่ ๆ โดยยึดแนวคิดว่า "ภาษาที่จะใช้ในอนาคตยังไม่ได้ถูกประดิษฐ์ขึ้น"
แนวทางเชิงมองโลกในแง่ดีของ SICP
- ความคาดหวังที่สูง: SICP มีความคาดหวังเชิงบวกต่อสิ่งที่นักศึกษาชั้นปีหนึ่งสามารถทำได้ โดยนักศึกษามักได้เขียน interpreter ของภาษาโปรแกรม ซึ่งโดยปกติเป็นเรื่องที่นักศึกษาระดับสูงกว่าจะทำ
- การเรียนรู้อย่างลึกซึ้ง: ตัวบทอ่านเองไม่ได้อ่านง่ายนัก แต่ทุกประโยคมีความสำคัญ และแบบฝึกหัดแต่ละข้อก็สอนแนวคิดใหม่ที่สำคัญ
อิทธิพลของ SICP
- อิทธิพลที่ต่อเนื่อง: แม้วิชาที่อิงกับ SICP จะมีไม่มาก แต่อิทธิพลของมันมหาศาล หนังสือเรียนรุ่นหลังจำนวนมากพยายามยึดตามมาตรฐานที่ SICP วางไว้
- การขยายตัวของ Scheme: ขอบเขตของการใช้ Scheme เป็นภาษาเพื่อการเรียนรู้ได้ขยายตั้งแต่ระดับมัธยมต้นไปจนถึงบัณฑิตศึกษา
- วิทยาการคอมพิวเตอร์ที่ขับเคลื่อนด้วยแนวคิด: แนวคิดที่ว่าวิทยาการคอมพิวเตอร์ควรเป็นศาสตร์ที่ขับเคลื่อนด้วยไอเดียได้แพร่หลายอย่างกว้างขวาง
ความยืนยาวของ SICP
- อายุยืนยาว: SICP ดำรงอยู่มานานกว่า 25 ปีและยังคงมีการพิมพ์อยู่ แม้ว่าสภาพแวดล้อมการคอมพิวต์จะเปลี่ยนไปมาก แต่แนวคิดใหญ่ที่อยู่เบื้องหลังไม่ได้เปลี่ยน
- การเปลี่ยนแปลงของรายวิชา: รายวิชาที่อิงกับ SICP ได้เพิ่มหัวข้ออย่าง parallelism, การควบคุม concurrency, การออกแบบส่วนติดต่อผู้ใช้ และกระบวนทัศน์ client/server เข้าไปตามกาลเวลา
การเปลี่ยนแปลงหลักสูตรของ MIT
- หลักสูตรที่เน้นการประยุกต์ใช้: MIT เปลี่ยนจากหลักสูตรที่เน้นหัวข้อวิชาไปสู่หลักสูตรที่เน้นการประยุกต์ใช้ การเลือกภาษาโปรแกรมเป็นเพียงส่วนเล็กที่สุดของการตัดสินใจนั้น
- ความท้าทายของแนวทางใหม่: แนวทางใหม่นี้สอนได้ยากกว่า และแต่ละรายวิชาต้องอาศัยความร่วมมือจากคณาจารย์ด้านวิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์
ปฏิกิริยาของนักศึกษา
- ความนิยมในภายหลัง: ระหว่างเรียน นักศึกษามักไม่ค่อยตระหนักว่าตนกำลังเรียนรู้มากเพียงใด แต่ภายหลังกลับประเมินว่านี่เป็นหนึ่งในรายวิชาที่ได้รับความนิยมมากที่สุด และมีเสียงตอบรับว่าความรู้ที่เรียนยังถูกนำไปใช้ในการทำงานจริงหลังเรียนจบ
ความเห็นของ GN⁺
- ปรัชญาการศึกษาของ SICP: SICP เน้นการเรียนรู้แนวคิดใหญ่ มากกว่ารายละเอียดของภาษาโปรแกรม ทำให้นักศึกษาพัฒนาความสามารถในการเรียนรู้ภาษาใหม่ ๆ ได้ง่าย
- ข้อดีของ Scheme: ความเรียบง่ายและไวยากรณ์ที่สม่ำเสมอของ Scheme มีประโยชน์มากต่อผู้เริ่มต้น ช่วยให้เข้าใจกระบวนทัศน์การเขียนโปรแกรมที่หลากหลายได้ง่าย
- การเปลี่ยนแปลงของ MIT: การเปลี่ยนหลักสูตรของ MIT เน้นการเรียนรู้ที่มุ่งการประยุกต์ใช้ ซึ่งอาจมอบประสบการณ์ที่ใกล้เคียงการทำงานจริงมากขึ้น
- ความยั่งยืนของการศึกษา: อายุอันยืนยาวของ SICP แสดงให้เห็นว่าปรัชญาและเนื้อหาด้านการศึกษาของมันยังคงใช้ได้ผลอยู่ สิ่งนี้ตอกย้ำคุณค่าเชิงแก่นแท้ของการศึกษา
- การเชื่อมโยงกับภาคปฏิบัติ: การศึกษาที่อิงกับ SICP ช่วยสร้างความสามารถที่นำไปใช้ได้ทันทีในงานจริง และเป็นประโยชน์อย่างมากแม้หลังสำเร็จการศึกษา
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สามารถดูการบรรยายของ Prof. Abelson ได้บน YouTube และคุ้มค่ากับเวลาที่ลงทุนไป: มอบความเข้าใจด้านวิทยาการคอมพิวเตอร์อย่างลึกซึ้ง และอาจช่วยลดการหลงไปกับกระแส hype ล่าสุดได้
ครึ่งแรกของหนังสืออ่านได้สบายและน่าสนใจ: แต่ติดขัดในส่วนเชิงวัตถุ และโดยส่วนตัวรู้สึกว่าแนวคิดแบบฟังก์ชันเข้ากับตัวเองมากกว่า
สามารถดูการบรรยายจากช่วงต้นยุค 80 บน YouTube ได้: มีทั้งมุกตลก ความพยายามด้านกราฟิกในยุคแรก และแฟชั่นยุค 70 จึงทั้งให้ความรู้และน่าสนุก
สงสัยว่าหนังสือเล่มนี้ยังคุ้มค่าแก่การอ่านหรือไม่ แม้สำหรับโปรแกรมเมอร์ที่มีประสบการณ์มากแล้ว
เคยคิดว่าเป้าหมายของ SICP คือการทำให้คนที่ไม่ชอบวิทยาการคอมพิวเตอร์รู้สึกกลัว: แต่จริง ๆ แล้วมันเป็นหลักสูตรพื้นฐานที่มีคุณค่ามาก แม้จะทำให้บางคนเปลี่ยนไปเรียนสาขาอื่นก็ตาม
อ่านไม่พ้นสองสามหน้าแรก: ถ้ามันเป็นวิชาบังคับ ก็คงไปทำอย่างอื่นแทนแล้ว
เคยทำงานเป็นผู้ช่วยสอนวิชา CS 61A ที่ Berkeley: มีคนแย้งว่าสัญกรณ์ที่เรียบง่ายและเป็นแบบเดียวกันของภาษา Scheme ช่วยให้สอนได้ดีขึ้น แต่ในความเป็นจริงนักศึกษากลับสับสน คุณลักษณะที่ทุกอย่างใน Scheme ดูเหมือนกันหมดนั้นน่าจะเป็นข้อบกพร่องมากกว่า
บทเรียนที่ดีที่สุดจาก SICP คือทันทีที่เขียนฟังก์ชันตัวแรก คุณก็กำลังสร้าง DSL เพื่อแก้ปัญหาในโดเมนนั้นแล้ว: มุมมองนี้ช่วยยกระดับความสามารถในฐานะโปรแกรมเมอร์ได้มาก
ทุกครั้งที่อ่านเกี่ยวกับ SICP จะรู้สึกหงุดหงิดกับ Javascript: ถ้า Javascript เป็น Scheme การพัฒนาเว็บก็คงจะดีกว่านี้
มีคำขอให้ช่วยเปรียบเทียบ SICP กับ PAIP: ดูเหมือนว่า SICP จะครอบคลุมพื้นฐานของการเขียนโปรแกรมเชิงฟังก์ชันและวิทยาการคอมพิวเตอร์ ส่วน PAIP จะเน้นการฝึกเขียนโปรแกรมทั่วไปมากกว่า