====== มโนทัศน์ภาษาโปรแกรม ภาคต้น 2552 ====== ====== ประกาศ ====== * เนื้อหาที่ออก: สัปดาห์ที่ 6 (function call, storage), 9 (C++), 10-11 (Java). อาจมีเนื้อหาสัปดาห์ที่ 2 (Modularity, OOP, Simula, Smalltalk) และเนื้อหาส่วนอื่น ๆ ได้ด้วย * สามารถเปิดเอกสารในการสอบปลายภาคได้ ไม่อนุญาตให้เปิดเครื่องคอมพิวเตอร์โน้ตบุ๊ค * ข้อสอบปลายภาคเก่า [[http://www.cpe.ku.ac.th/~jtf/204435/files/435-fin-49.pdf|49]], [[http://www.cpe.ku.ac.th/~jtf/204435/files/435-fin-50.pdf|50]] มีเนื้อหาบางส่วนอยู่ในข้อสอบกลางภาคเก่าด้วย อย่าลืมศึกษาด้วย * สามารถนำเอกสารต่าง ๆ เข้าในการสอบกลางภาคได้ สามารถเปิดเอกสารที่เป็นอิเล็กทรอนิกส์ได้ในเครื่องส่วนตัว แต่ไม่อนุญาตให้ทดลองเขียนโปรแกรมและหรือทำอย่างอื่น * ข้อสอบกลางภาคเก่า [[http://www.cpe.ku.ac.th/~jtf/204435/files/435-mid-49.pdf|49]], [[http://www.cpe.ku.ac.th/~jtf/204435/files/435-mid-50.pdf|50]] (เนื้อหาอาจมากกว่าที่สอบในครั้งนี้) * งดเรียนวันจันทร์ที่ 24 ส.ค. 52 * เลื่อนสอบกลางภาคจากวันจันทร์ที่ 24 ส.ค. 52 เป็นจันทร์ที่ 31 ส.ค. 52 * ประชุมเรื่องตารางเรียน วันจันทร์ที่ 15 มิ.ย. เวลา 16:10 ห้อง 507 * ยินดีต้อนรับเข้าสู่เว็บรายวิชา 204435 ====== การเตรียมตัวก่อนเข้าเรียน ====== * ** จันทร์ที่ 20 ก.ค. **: ติดตั้ง [[http://www.scala-lang.org/|Scala]] มาก่อน * ** จันทร์ที่ 29 มิ.ย. **: ติดตั้ง [[http://haskell.org/ghc/|The Glasgow Haskell Compiler]] มาก่อน * ** จันทร์ที่ 22 มิ.ย. **: ติดตั้งโปรแกรม [[http://www.squeak.org/|Squeak]] มาก่อน ====== การบ้าน ====== * ** การบ้าน 1 ** * ทฤษฎี: แบบฝึกหัด 3.2, 3.6, 3.7. * โปรแกรม: [[204435-52:Programming Exercise 1]] (ส่งทาง e-mail ใส่หัวเรื่องว่า ''204435: homework 1'') * ** การบ้าน 2 ** * ทฤษฎี: แบบฝึกหัด 5.1, 5.2, 5.3 * หมายเหตุ: ในการพิจารณาข้อ 5.3 ให้พิจารณาเป็นภาษา Haskell ก็ได้ * ** การบ้าน 3 ** * โปรแกรม: [[204435-53:Erlang]] ====== รายละเอียดวิชา ====== ในมุมมองที่กว้างที่สุด ภาษาโปรแกรมเป็นเครื่องมือสำหรับอธิบายการคำนวณ (computation) อย่างไรก็ตามมุมมองของการคำนวณนั้นมีได้หลากหลาย เป็นจุดกำเนิดที่ทำให้เกิดภาษาโปรแกรมที่วางอยู่บนกระบวนทัศน์ (paradigm) ที่แตกต่างกันจำนวนมากมาย วิชานี้ มีเป้าหมายที่จะศึกษาแนวคิดต่าง ๆ ที่มีใช้ในภาษาโปรแกรมสมัยใหม่ เพื่อให้เข้าใจกระบวนการทำงาน ขีดจำกัด และผลกระทบที่มีต่อกระบวนการคิดวิเคราะห์ของผู้ใช้ เราจะสนใจแนวคิดพื้นฐาน พร้อมกับเน้นกระบวนทัศน์ภาษาโปรแกรมที่สำคัญได้แก่การโปรแกรมเชิงฟังก์ชัน และการโปรแกรมเชิงวัตถุ นอกจากนี้ยังจะให้ความสำคัญเกี่ยวกับแนวคิดของภาษาเชิงพลวัติที่ทวีความ สำคัญมากขึ้นเรื่อย ๆ และอาจรวมไปถึงแนวคิดของการ implement ภาษาบนระบบ run-time ต่าง ๆ เช่น บน [[http://en.wikipedia.org/wiki/Java_virtual_machine|JVM]] หรือบน [[http://en.wikipedia.org/wiki/Common_Language_Runtime|CLR]] นอกจากจะศึกษาแนวคิดที่สำคัญแล้ว ในวิชานี้จะมีการให้นิสิตได้ทดลองเขียนโปรแกรมด้วยภาษาและกรอบงาน (framework) ต่าง ๆ เพื่อเพิ่มความเข้าใจอีกด้วย ตัวอย่างกระบวนทัศน์ของภาษาจะได้ทดลองในวิชานี้: Functional (ตัวอย่างภาษาที่อาจได้ทดลอง เช่น [[http://groups.csail.mit.edu/mac/projects/scheme/|Scheme]], [[http://haskell.org/|Haskell]], [[http://en.wikipedia.org/wiki/ML_programming_language|ML]], [[http://caml.inria.fr/|ocaml]], [[http://msdn.microsoft.com/en-us/fsharp/default.aspx|F#]]), Object-oriented (ตัวอย่างภาษา เช่น [[http://www.smalltalk.org/main/|Smalltalk]], [[http://en.wikipedia.org/wiki/Objective-C|Objective C]], [[http://en.wikipedia.org/wiki/C%2B%2B|C++]], [[http://www.java.com/|Java]], [[http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx|C#]], [[http://www.ruby-lang.org/en/|Ruby]]), Multi-paradigm (เช่น [[http://www.scala-lang.org/|Scala]]) ====== ตารางเรียนและเอกสารประกอบ ====== เอกสารส่วนมากจะใช้จากวิชา [[http://www.stanford.edu/class/cs242/|CS424]] สอนโดย [[http://theory.stanford.edu/people/jcm/|John Mitchell]] และ [[http://www.research.att.com/info/kfisher|Kathleen Fisher]] * **สัปดาห์ที่ 1**: แนะนำวิชา, แนะนำแนวคิดการเขียนโปรแกรมเชิงวัตถุ ผ่านทาง C#, ทดลองและเปรียบเทียบ C# และ Java, แนวคิดพื้นฐานเกี่ยวกับภาษาโปรแกรม: แนวคิดเบื้องต้นของแบบชนิดข้อมูล (type system), โครงสร้างควบคุม * เบื้องหลัง((สำหรับอธิบายที่มาที่ไปของเนื้อหา)): นิสิตจำนวนมากคุ้นเคยกับ C# แต่อาจจะยังไม่เคยพัฒนาโปรแกรมเชิงวัตถุบน C# เนื้อหาในวันแรกจะแนะนำให้เห็นการ implement แนวคิดเชิงวัตถุลงในโครงสร้างของภาษา C# จากนั้นเราจะเริ่มเปรียบเทียบ C# กับ Java ซึ่งคล้ายคลึงกันมาก เราจะเปรียบเทียบบางคุณลักษณะของภาษาทั้งสอง และแสดงให้เห็นผลกระทบต่อลักษณะการโปรแกรม โดยเฉพาะการโปรแกรม GUI หลังจากนั้นเราจะทดลองคุณลักษณะใหม่ของ C# 3.0 เราจะจบด้วยการเกริ่นนำให้เห็นแนวคิดสำคัญต่าง ๆ ของภาษาโปรแกรม * **สัปดาห์ที่ 2**: ภาษาโปรแกรมเชิงวัตถุ 1 (Simula, Smalltalk, และ Ruby) * เอกสารประกอบ [[http://www.stanford.edu/class/cs242/slides/|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!!) * ESP: [[http://www.stanford.edu/class/cs295/papers/p57-das.pdf|paper]], [[http://www.cs.cornell.edu/courses/cs711/2005fa/slides/sep27.pdf|slides]] * **สัปดาห์ที่ 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