Table of Contents
มโนทัศน์ภาษาโปรแกรม ภาคต้น 2552
ประกาศ
- เนื้อหาที่ออก: สัปดาห์ที่ 6 (function call, storage), 9 (C++), 10-11 (Java). อาจมีเนื้อหาสัปดาห์ที่ 2 (Modularity, OOP, Simula, Smalltalk) และเนื้อหาส่วนอื่น ๆ ได้ด้วย
- สามารถเปิดเอกสารในการสอบปลายภาคได้ ไม่อนุญาตให้เปิดเครื่องคอมพิวเตอร์โน้ตบุ๊ค
- สามารถนำเอกสารต่าง ๆ เข้าในการสอบกลางภาคได้ สามารถเปิดเอกสารที่เป็นอิเล็กทรอนิกส์ได้ในเครื่องส่วนตัว แต่ไม่อนุญาตให้ทดลองเขียนโปรแกรมและหรือทำอย่างอื่น
- งดเรียนวันจันทร์ที่ 24 ส.ค. 52
- เลื่อนสอบกลางภาคจากวันจันทร์ที่ 24 ส.ค. 52 เป็นจันทร์ที่ 31 ส.ค. 52
- ประชุมเรื่องตารางเรียน วันจันทร์ที่ 15 มิ.ย. เวลา 16:10 ห้อง 507
- ยินดีต้อนรับเข้าสู่เว็บรายวิชา 204435
การเตรียมตัวก่อนเข้าเรียน
- จันทร์ที่ 20 ก.ค. : ติดตั้ง Scala มาก่อน
- จันทร์ที่ 29 มิ.ย. : ติดตั้ง The Glasgow Haskell Compiler มาก่อน
- จันทร์ที่ 22 มิ.ย. : ติดตั้งโปรแกรม Squeak มาก่อน
การบ้าน
- การบ้าน 1
- ทฤษฎี: แบบฝึกหัด 3.2, 3.6, 3.7.
- โปรแกรม: Programming Exercise 1 (ส่งทาง e-mail ใส่หัวเรื่องว่า
204435: homework 1
)
- การบ้าน 2
- ทฤษฎี: แบบฝึกหัด 5.1, 5.2, 5.3
- หมายเหตุ: ในการพิจารณาข้อ 5.3 ให้พิจารณาเป็นภาษา Haskell ก็ได้
- การบ้าน 3
- โปรแกรม: Erlang
รายละเอียดวิชา
ในมุมมองที่กว้างที่สุด ภาษาโปรแกรมเป็นเครื่องมือสำหรับอธิบายการคำนวณ (computation) อย่างไรก็ตามมุมมองของการคำนวณนั้นมีได้หลากหลาย เป็นจุดกำเนิดที่ทำให้เกิดภาษาโปรแกรมที่วางอยู่บนกระบวนทัศน์ (paradigm) ที่แตกต่างกันจำนวนมากมาย
วิชานี้ มีเป้าหมายที่จะศึกษาแนวคิดต่าง ๆ ที่มีใช้ในภาษาโปรแกรมสมัยใหม่ เพื่อให้เข้าใจกระบวนการทำงาน ขีดจำกัด และผลกระทบที่มีต่อกระบวนการคิดวิเคราะห์ของผู้ใช้ เราจะสนใจแนวคิดพื้นฐาน พร้อมกับเน้นกระบวนทัศน์ภาษาโปรแกรมที่สำคัญได้แก่การโปรแกรมเชิงฟังก์ชัน และการโปรแกรมเชิงวัตถุ นอกจากนี้ยังจะให้ความสำคัญเกี่ยวกับแนวคิดของภาษาเชิงพลวัติที่ทวีความ สำคัญมากขึ้นเรื่อย ๆ และอาจรวมไปถึงแนวคิดของการ implement ภาษาบนระบบ run-time ต่าง ๆ เช่น บน JVM หรือบน CLR
นอกจากจะศึกษาแนวคิดที่สำคัญแล้ว ในวิชานี้จะมีการให้นิสิตได้ทดลองเขียนโปรแกรมด้วยภาษาและกรอบงาน (framework) ต่าง ๆ เพื่อเพิ่มความเข้าใจอีกด้วย
ตัวอย่างกระบวนทัศน์ของภาษาจะได้ทดลองในวิชานี้: Functional (ตัวอย่างภาษาที่อาจได้ทดลอง เช่น Scheme, Haskell, ML, ocaml, F#), Object-oriented (ตัวอย่างภาษา เช่น Smalltalk, Objective C, C++, Java, C#, Ruby), Multi-paradigm (เช่น Scala)
ตารางเรียนและเอกสารประกอบ
เอกสารส่วนมากจะใช้จากวิชา CS424 สอนโดย John Mitchell และ Kathleen Fisher
- สัปดาห์ที่ 1: แนะนำวิชา, แนะนำแนวคิดการเขียนโปรแกรมเชิงวัตถุ ผ่านทาง C#, ทดลองและเปรียบเทียบ C# และ Java, แนวคิดพื้นฐานเกี่ยวกับภาษาโปรแกรม: แนวคิดเบื้องต้นของแบบชนิดข้อมูล (type system), โครงสร้างควบคุม
- เบื้องหลัง1): นิสิตจำนวนมากคุ้นเคยกับ C# แต่อาจจะยังไม่เคยพัฒนาโปรแกรมเชิงวัตถุบน C# เนื้อหาในวันแรกจะแนะนำให้เห็นการ implement แนวคิดเชิงวัตถุลงในโครงสร้างของภาษา C# จากนั้นเราจะเริ่มเปรียบเทียบ C# กับ Java ซึ่งคล้ายคลึงกันมาก เราจะเปรียบเทียบบางคุณลักษณะของภาษาทั้งสอง และแสดงให้เห็นผลกระทบต่อลักษณะการโปรแกรม โดยเฉพาะการโปรแกรม GUI หลังจากนั้นเราจะทดลองคุณลักษณะใหม่ของ C# 3.0 เราจะจบด้วยการเกริ่นนำให้เห็นแนวคิดสำคัญต่าง ๆ ของภาษาโปรแกรม
- สัปดาห์ที่ 2: ภาษาโปรแกรมเชิงวัตถุ 1 (Simula, Smalltalk, และ Ruby)
- เอกสารประกอบ Slides หัวข้อ Modules and objects และ Simula and Smalltalk
- สัปดาห์ที่ 3: ภาษาโปรแกรมเชิงฟังก์ชัน
- เอกสารประกอบ http://www.stanford.edu/class/cs242/slides/2007/index.html หัวข้อ Lisp
- สัปดาห์ที่ 4: ภาษาที่มีโครงสร้างแบบบล็อคและโครงสร้างควบคุม
- เอกสารประกอบ http://www.stanford.edu/class/cs242/slides/ หัวข้อ Algo Family and Haskell และ Exceptions, continuations, functional programming
- สัปดาห์ที่ 5: ระบบแบบชนิดข้อมูล
- เอกสารประกอบ http://www.stanford.edu/class/cs242/slides/ หัวข้อ Types and type inference
- สัปดาห์ที่ 6: ขอบเขต การเรียกฟังก์ชัน และการจัดการหน่วยความจำ
- เอกสารประกอบ http://www.stanford.edu/class/cs242/slides/ หัวข้อ Scope, function calls, local storage
- สัปดาห์ที่ 7: การวิเคราะห์โปรแกรมแบบสถิตย์
- ลิงก์ทั่วไป: http://www-inst.eecs.berkeley.edu/~cs169/fa08/doku.php?id=lectures (lectures 25, 26), http://www.stanford.edu/class/cs295/ (lectures 10-19!!)
- สัปดาห์ที่ 8: Erlang
- สัปดาห์ที่ 9: C++ (http://www.stanford.edu/class/cs242/slides/ หัวข้อ C++)
- สัปดาห์ที่ 10: Java Language (http://www.stanford.edu/class/cs242/slides/ หัวข้อ Java Language)
- สัปดาห์ที่ 11: Java Implementation (http://www.stanford.edu/class/cs242/slides/ หัวข้อ Java Implementation) / Dynamic language runtime / Fortress