วิดีโอบรรยาย SICP (1986)
(ocw.mit.edu)- สามารถติดตามภาพรวมทั้งหมดของ MIT 6.001
Structure and Interpretation of Computer Programsได้ผ่าน วิดีโอบรรยาย 20 ตอน จึงเป็นแหล่งข้อมูลที่ดีสำหรับทบทวน SICP อย่างเป็นระบบ - การบรรยายจัดขึ้นใน เดือนกรกฎาคม 1986 สำหรับพนักงาน Hewlett-Packard และผลิตอย่างมืออาชีพโดย Hewlett-Packard Television
- วิดีโอรับชมได้บน MIT OCW และเว็บไซต์ที่ให้บริการแยกต่างหาก โดยเผยแพร่ภายใต้ สัญญาอนุญาต Creative Commons ที่เข้ากันได้กับการใช้งานเชิงพาณิชย์
- เนื้อหาการบรรยายอิงจาก SICP ฉบับพิมพ์ครั้งที่ 1 ปี 1985 ส่วนฉบับพิมพ์ครั้งที่ 2 ปี 1996 มีการเขียนโปรแกรมบางส่วนใหม่และเพิ่มเนื้อหาใหม่
- หัวข้อทั้งหมดและลำดับการนำเสนอยังคงเดิม จึงยังมีคุณค่าอ้างอิงสำหรับผู้เรียนที่ใช้ฉบับพิมพ์ครั้งที่ 2
โครงสร้างการบรรยายและรูปแบบการให้บริการ
- การบรรยาย 20 ตอนโดย Hal Abelson และ Gerald Jay Sussman ครอบคลุมรายวิชา MIT 6.001
Structure and Interpretation of Computer Programsอย่างครบถ้วน - การบรรยายจัดขึ้นใน เดือนกรกฎาคม 1986 สำหรับพนักงาน Hewlett-Packard และผลิตอย่างมืออาชีพโดย Hewlett-Packard Television
- วิดีโอเป็นสื่อที่ Hal Abelson และ Gerald Jay Sussman จัดหาให้ และใช้งานโดยได้รับอนุญาต
- วิดีโอชุดเดียวกันมีให้รับชมบน MIT OCW และ เว็บไซต์ที่ให้บริการแยกต่างหาก โดยใช้สัญญาอนุญาต Creative Commons ที่เข้ากันได้กับการใช้งานเชิงพาณิชย์
ข้อควรทราบเกี่ยวกับฉบับของตำรา
- การบรรยายนี้ดำเนินตาม Structure and Interpretation of Computer Programs ฉบับพิมพ์ครั้งที่ 1 ซึ่งตีพิมพ์ในปี 1985
- ใน ฉบับพิมพ์ครั้งที่ 2 ปี 1996 โปรแกรมหลายรายการที่กล่าวถึงในการบรรยายถูกเขียนใหม่ และมีการเพิ่มเนื้อหาใหม่
- หัวข้อทั้งหมดและลำดับการนำเสนอไม่ได้เปลี่ยนแปลง วิดีโอบรรยายชุดนี้จึงยังมีประโยชน์สำหรับนักศึกษาที่ใช้ฉบับพิมพ์ครั้งที่ 2
รายการบรรยาย
-
Lisp และการทำ abstraction ของ procedure
- 1A: Overview and Introduction to Lisp: ภาพรวมและบทนำสู่ Lisp
- 1B: Procedures and Processes; Substitution Model: procedure, process และโมเดลการแทนที่
- 2A: Higher-order Procedures: higher-order procedure
-
ข้อมูลและการประมวลผลสัญลักษณ์
- 2B: Compound Data: ข้อมูลเชิงประกอบ
- 3A: Henderson Escher Example: ตัวอย่าง Henderson Escher
- 3B: Symbolic Differentiation; Quotation: การหาอนุพันธ์เชิงสัญลักษณ์และ quotation
- 4A: Pattern Matching and Rule-based Substitution: pattern matching และการแทนที่ตามกฎ
- 4B: Generic Operators: generic operator
-
สถานะ อ็อบเจ็กต์ และ stream
- 5A: Assignment, State, and Side-effects: assignment, state และ side effect
- 5B: Computational Objects: อ็อบเจ็กต์เชิงคำนวณ
- 6A: Streams, Part 1: stream ตอนที่ 1
- 6B: Streams, Part 2: stream ตอนที่ 2
-
evaluator และ logic programming
- 7A: Metacircular Evaluator, Part 1: metacircular evaluator ตอนที่ 1
- 7B: Metacircular Evaluator, Part 2: metacircular evaluator ตอนที่ 2
- 8A: Logic Programming, Part 1: logic programming ตอนที่ 1
- 8B: Logic Programming, Part 2: logic programming ตอนที่ 2
-
โมเดลเครื่องจักรและการคอมไพล์
- 9A: Register Machines: register machine
- 9B: Explicit-control Evaluator: explicit-control evaluator
- 10A: Compilation: การคอมไพล์
- 10B: Storage Allocation and Garbage Collection: การจัดสรรพื้นที่จัดเก็บและ garbage collection
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าจะศึกษา SICP จะใช้ MIT Scheme ก็ได้ หรืออีกทางเลือกคือใช้ Racket หรือ DrRacket พร้อมแพ็กเกจเสริมนี้: https://docs.racket-lang.org/sicp-manual/
ตัวอื่น ๆ มีฟีเจอร์รอบข้างเยอะเกินไป อาจทำให้เสียสมาธิได้
MIT Scheme ไม่ได้ถูกทำมาให้รันบน Apple Silicon และแม้จะใช้ amd64 version บน Mac รุ่นใหม่ได้ด้วยเทคนิคเล็กน้อย แต่ถ้า Apple เอา Rosetta2 ออก ก็มีโอกาสที่จะหายไป
ดังนั้น Racket อาจเป็นตัวเลือกที่ดีกว่า
จริง ๆ แล้ว Scheme implementation ที่ดีแทบอะไรก็ใช้กับ SICP ได้ แต่ไม่แนะนำ เพราะภาษามีการเปลี่ยนแปลงไปแล้วแม้หลัง edition 2
อย่างไรก็ดี หลังจากเริ่มโปรเจกต์ของตัวเองแล้ว จะใช้ระบบอื่นก็ได้ และอาจต้องอ่านคู่มือเพื่อหาสิ่งที่เทียบเท่ากับ idiom เก่า ๆ ในแบบสมัยใหม่
โปรแกรมเมอร์ทุกคนควรเรียน LISP หรืออย่างน้อยก็ควรศึกษามันอย่างจริงจัง
application programmer ส่วนใหญ่รู้จักแต่การคิดแบบ procedural เหมือนโปรแกรมเมอร์ C
LISP เป็นภาษาที่ “งดงาม” ซึ่งจัดการกับแนวคิด ไม่ใช่ฮาร์ดแวร์ และตอนที่เคยใช้ทำโปรเจกต์ระดับบัณฑิตศึกษาหลายปีที่มหาวิทยาลัยเดิมเมื่อปี 1990 มันเปลี่ยนวิธีคิดไปโดยสิ้นเชิง
เมื่อก่อนเคยลองเรียน SICP จากหนังสืออย่างเดียว แต่คิดว่า วิดีโอ lectures ดีกว่ามาก และหนังสือทำหน้าที่เป็นเอกสารอ้างอิงประกอบ
ไม่จำเป็นต้องทำแบบฝึกหัดหรืออ่านตามหนังสือก็ได้
ไม่ว่าจะเพิ่งเข้ามาในสายนี้ หรือมีประสบการณ์มาหลายสิบปี ถ้ายังไม่เคยดูวิดีโอเหล่านี้หรือไม่เคยเรียนคลาส SICP ก็น่าจะเป็นประโยชน์กับแทบทุกคน
ผมเรียนวิดีโอเหล่านี้และหนังสือทั้งเล่มจนจบ และยังตั้ง กลุ่มศึกษาแบบออฟไลน์ ผ่าน newsgroup ด้วย
สนุกมากและเป็นจุดทะลุผ่านครั้งใหญ่ แต่พอถึงช่วงกลาง ๆ ของหนังสือ จำนวนคนในกลุ่มศึกษาก็เริ่มลดลง
คำแนะนำให้ อ่าน SICP เป็นคำแนะนำที่ดีที่สุดที่เคยได้รับจาก /g/
ผมเรียน Lisp จากสิ่งนี้ แล้วต่อด้วย Clojure จากนั้นก็สร้าง career โดยมีมันเป็นแกนหลัก
เป็นภาษาที่ค่อนข้างชอบมาก
ขอแนะนำอย่างแรงจริง ๆ
แค่ดู lecture แรกก็จะติดทันที
คนที่สนใจ systems programming จะได้อะไรจากตรงนี้บ้าง?
ดังนั้นตราบใดที่ systems programming เกี่ยวข้องหลัก ๆ กับการจัดการ state และ abstraction ผมว่ามันเกี่ยวข้องอย่างลึกซึ้งมาก
แต่ถ้าคำว่า “systems programming” หมายถึงการพยายามเอาระบบสกปรก ๆ ที่มีอยู่แล้วมาต่อกัน หรือแค่สร้างสัญชาตญาณต่อ third-party libraries ก็อาจไม่ค่อยเกี่ยว
ถึงอย่างนั้น ตรงนี้ก็ยังมี insight อยู่ ผมเคยดูวิดีโอที่ Sussman อธิบายว่าทำไมเขาถึงวาง SICP ลง แล้วเรียกร้องให้ MIT สร้างคอร์สปูพื้นฐานใหม่ เป็นภาพของคนที่พับเก็บอัญมณีที่ตัวเองขัดเกลามาอย่างสุภาพและไตร่ตรองดีแล้ว
นั่นหมายความว่ายุคที่เราจะคาดหวังได้ว่าจะมองทะลุข้ามทุกชั้นของ abstraction นั้นจบลงแล้ว
lectures เหล่านี้ คุณภาพเสียงแย่มาก
มีวิธีปรับให้ชัดขึ้นไหม?