ผลต่างระหว่างรุ่นของ "204435 มโนทัศน์ภาษาโปรแกรม 2550"
Jittat (คุย | มีส่วนร่วม) ล (ย้อนการแก้ไขของ 109.230.216.60 (Talk) ไปยังรุ่นของ 109.230.216.225) |
Jittat (คุย | มีส่วนร่วม) ล (204435 มโนทัศน์ภาษาโปรแกรม 2552 ถูกเปลี่ยนชื่อเป็น 204435 มโนทัศน์ภาษาโปรแกรม 2550) |
||
(ไม่แสดง 2 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 1: | แถว 1: | ||
− | + | หน้านี้เป็นหน้ารายวิชาของวิชามโนทัศน์ภาษาโปรแกรม | |
+ | |||
+ | ผู้สอน: [http://www.cpe.ku.ac.th/~jtf จิตร์ทัศน์ ฝักเจริญผล] | ||
+ | |||
+ | ==ประกาศ== | ||
+ | * เกรดและคะแนนดูได้ที่หน้าห้องครับ | ||
+ | * ข้อสอบปลายภาค | ||
+ | ** อนุญาตให้เปิดเอกสารได้ | ||
+ | ** จะเน้นมโนทัศน์ (concept) ที่เรียนหลังสอบกลางภาค เช่น แนวคิดเกี่ยวกับโมดูล, การโปรแกรมเชิงวัตถุ, การเปรียบเทียบภาษาเชิงวัตถุต่าง ๆ การโปรแกรมแบบทำงานพร้อมกัน เป็นต้น | ||
+ | ** อย่างไรก็ตามในข้อสอบอาจกล่าวถึง หรืออ้างถึง หรือให้วิเคราะห์ แนวคิดที่เรียนมาทั้งหมดได้ | ||
+ | ** ข้อสอบปลายภาคจะไม่เน้นให้เขียนโปรแกรม และไม่เน้นภาษาโปรแกรมที่ทดลอง เช่น Ruby หรือ Python อย่างไรก็ตาม อาจมีการถามแนวคิดต่าง ๆ โดยยกตัวอย่างจากภาษาเหล่านี้ด้วย ยกตัวอย่างเช่น ข้อสอบอาจถาม | ||
+ | จงพิจารณาโปรแกรมภาษา Ruby ที่หาผลรวมของตัวเลขใน array (หรือเรียกว่า list ในภาษาอื่น) ต่อไปนี้ | ||
+ | l = [1,2,3,4,5,6] | ||
+ | sum = 0 | ||
+ | l.each do |x| | ||
+ | sum += x | ||
+ | end | ||
+ | โครงสร้าง do .. end เรียกว่า block ในโปรแกรมข้างต้น ใน block ดังกล่าวเราประกาศให้รับค่าเข้ามาทางตัวแปร x | ||
+ | แล้วนำมาบวกกับตัวแปร sum โดย method each ของคลาส array จะนำข้อมูลแต่ละตัวมาป้อนให้กับ block นี้ | ||
+ | จากตัวอย่างดังกล่าว จงอธิบายว่า เพราะเหตุใด block จึงต้องเป็น closure | ||
+ | * '''ข้อสอบเก่า:''' [http://theory.cpe.ku.ac.th/wiki/images/204435Final49.pdf 204435Final29.pdf] | ||
+ | |||
+ | ==การเตรียมตัวก่อนเข้าเรียน== | ||
+ | ในส่วนนี้จะระบุรายละเอียดของซอฟต์แวร์ที่นิสิตต้องติดตั้งก่อนเข้าเรียนแต่ละครั้ง โดยแยกเป็นหมู่เรียนที่วิทยาเขตบางเขน และวิทยาเขตศรีราชา | ||
+ | * สัปดาห์ที่ 13 | ||
+ | ** จะทดลองเขียนโปรแกรมแบบทำงานพร้อมกัน ด้วย [http://www.stackless.com/ Stackless Python] ให้ติดตั้งมาก่อน เพื่อความสะดวกแนะนำให้ใช้ [http://www.stackless.com/download ตัวติดตั้งสำเร็จรูป] ที่มีให้เฉพาะบน Windows ในกรณีของ Linux ต้องคอมไพล์เอง | ||
+ | |||
+ | ==รายละเอียดวิชา== | ||
+ | ในมุมมองที่กว้างที่สุด ภาษาโปรแกรมเป็นเครื่องมือสำหรับอธิบายการคำนวณ (computation) อย่างไรก็ตามมุมมองของการคำนวณนั้นมีได้หลากหลาย เป็นจุดกำเนิดที่ทำให้เกิดภาษาโปรแกรมที่วางอยู่บนกระบวนทัศน์ (paradigm) ที่แตกต่างกันจำนวนมากมาย | ||
+ | |||
+ | วิชานี้ มีเป้าหมายที่จะศึกษาแนวคิดต่าง ๆ ที่มีใช้ในภาษาโปรแกรมสมัยใหม่ เพื่อให้เข้าใจกระบวนการทำงาน ขีดจำกัด และผลกระทบที่มีต่อกระบวนการคิดวิเคราะห์ของผู้ใช้ | ||
+ | |||
+ | เราจะสนใจแนวคิดพื้นฐาน พร้อมกับเน้นกระบวนทัศน์ภาษาโปรแกรมที่สำคัญได้แก่การโปรแกรมเชิงฟังก์ชันและการโปรแกรมเชิงวัตถุ นอกจากนี้ยังจะให้ความสำคัญเกี่ยวกับแนวคิดของภาษาเชิงพลวัติที่ทวีความสำคัญมากขึ้นเรื่อย ๆ | ||
+ | |||
+ | นอกจากจะศึกษาแนวคิดที่สำคัญแล้ว ในวิชานี้จะมีการให้นิสิตได้ทดลองเขียนโปรแกรมด้วยภาษาและกรอบงาน (framework) ต่าง ๆ เพื่อเพิ่มความเข้าใจอีกด้วย ตัวอย่างภาษาที่จะได้ทดลอง เช่น Scheme, ML, Smalltalk, Java, C#, Ruby | ||
+ | |||
+ | ==การบ้าน== | ||
+ | การส่งการบ้านที่เป็นโปรแกรม ให้ส่งเป็นจดหมายอิเล็กทรอนิกส์ ไปที่ e-mail ของอาจารย์ผู้สอน (ดูจาก [http://www.cpe.ku.ac.th/~jtf]) | ||
+ | * การบ้าน 1: ให้ทำแบบฝึกหัดใน[http://garnet.cpe.ku.ac.th/~jtf/435/lect02-scheme.pdf เอกสาร Scheme] ข้อที่ 1, 2, 6, 8, 10 และ 11 (กำหนดส่ง. บางเขน: 12 พ.ย. ศรีราชา: 28 พ.ย.) ([http://garnet.cpe.ku.ac.th/~jtf/435/sol01.pdf เฉลย]) | ||
+ | * การบ้าน 2: [http://garnet.cpe.ku.ac.th/~jtf/435/hw02.pdf pdf] (กำหนดส่ง: บางเขน: 30 พ.ย. ศรีราชา: 12 ธ.ค.) | ||
+ | * การบ้าน 3: [http://garnet.cpe.ku.ac.th/~jtf/435/hw03.pdf pdf] (กำหนดส่ง: บางเขน: 11 ธ.ค. ศรีราชา: 12 ธ.ค.) | ||
+ | * การบ้าน 4: [http://garnet.cpe.ku.ac.th/~jtf/435/hw04.pdf pdf] (กำหนดส่ง: บางเขน: 17 ธ.ค. ศรีราชา: 19 ธ.ค.) | ||
+ | * การบ้านโปรแกรม 3: จะประกาศเร็ว ๆ นี้ ส่งหลังสอบกลางภาค | ||
+ | |||
+ | ==คำบรรยายและแผ่นใส== | ||
+ | เอกสารหลักจะใช้บันทึกคำบรรยายที่เตรียมโดยผู้สอน ประกอบกับสไลด์วิชา [http://www.stanford.edu/class/cs242/ Programming Languages] ของ [http://theory.stanford.edu/people/jcm/ John C. Mitchell] | ||
+ | * แนะนำวิชา ([[media:204435-Lect00-intro.pdf|pdf]]) | ||
+ | * แนะนำภาษาโปรแกรมเชิงฟังก์ชัน: Scheme (slides ของ JCM: [http://www.stanford.edu/class/cs242/slides/index.html Lisp]) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): [http://garnet.cpe.ku.ac.th/~jtf/435/lect02-scheme.pdf pdf]) | ||
+ | ** บทความ: [http://paulgraham.com/rootsoflisp.html Roots of Lisp] โดย Paul Graham | ||
+ | * พื้นฐาน: การแปลภาษาโปรแกรม แลมบ์ดาแคลคูลัส (slides ของ JCM: [http://www.stanford.edu/class/cs242/slides/lambda.ppt ppt], [http://www.stanford.edu/class/cs242/slides/lambda.pdf pdf]) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): [http://garnet.cpe.ku.ac.th/~jtf/435/lect03-lambda.pdf pdf]) | ||
+ | * ภาษาตระกูล Algo และ ML ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * ระบบแบบชนิดข้อมูล (type system) และการอนุมานแบบชนิดข้อมูล ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * ขอบเขตตัวแปรและการจัดการ ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): [http://garnet.cpe.ku.ac.th/~jtf/435/lect06-scope.pdf pdf]) | ||
+ | * โครงสร้างควบคุม ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * โมดูลและการโปรแกรมเชิงวัตถุ ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * การโปรแกรมเชิงวัตถุ: Simula, Smalltalk ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * การโปรแกรมเชิงวัตถุ: C++, Java, C# ([http://www.stanford.edu/class/cs242/slides/index.html slides] ของ JCM) | ||
+ | * ภาษาเชิงพลวัติ (dynamic languages): Ruby และ Python | ||
+ | * กรอบงานการโปรแกรม: Ruby on Rails, (Seaside) | ||
+ | * Meta-programming | ||
+ | * การทำงานพร้อมกัน: Java และ Erlang | ||
+ | * การวิเคราะห์เชิงสถิตย์และเครื่องมือ (static analysis) | ||
+ | |||
+ | ==ซอฟต์แวร์และเอกสารเพิ่มเติม== | ||
+ | ===Scheme=== | ||
+ | * หน้าอ้างอิงของภาษา [http://www-swiss.ai.mit.edu/projects/scheme/ Scheme] | ||
+ | * ระบบของ Scheme ที่ใช้ [http://www.plt-scheme.org/software/drscheme/ DrScheme] | ||
+ | ** ระบบอื่น ๆ เช่น: [http://kaolin.unice.fr/STk STk], [http://www.gnu.org/software/mit-scheme/ MIT/GNU Scheme] | ||
+ | * เอกสารเกี่ยวกับ Scheme | ||
+ | ** [http://www-swiss.ai.mit.edu/~jaffer/r5rs_toc.html ข้อกำหนดภาษา] | ||
+ | ** [http://www.schemers.org/ Schemer.org] | ||
+ | ** [http://www.cs.wcu.edu/~bubak/scheme/ Scheme Tutorial] | ||
+ | ** [http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html Teach Yourself Scheme in Fixnum Days] | ||
+ | ===ML=== | ||
+ | * ระบบของภาษา ML ที่ใช้ [http://www.smlnj.org/ Standard ML of New Jersey] | ||
+ | * เอกสารเกี่ยวกับ ML | ||
+ | ** [http://www.dcs.napier.ac.uk/course-notes/sml/manual.html A Gentle Introduction to ML] | ||
+ | ** [http://www.dcs.ed.ac.uk/home/stg/NOTES/ Programming in Standard ML'97: An On-line Tutorial] | ||
+ | ** [http://www.cs.cmu.edu/~rwh/introsml/ Programming in Standard ML] | ||
+ | * ลิงก์ที่เกี่ยวข้อง: ภาษา [http://caml.inria.fr/ Caml], [http://research.microsoft.com/fsharp/ F#] | ||
+ | ===Python=== | ||
+ | * [http://www.python.org/ หน้าหลัก] | ||
+ | * [http://docs.python.org/tut/tut.html Tutorial] | ||
+ | ===Ruby=== | ||
+ | * [http://www.ruby-lang.org/en/ หน้าหลัก] | ||
+ | * เอกสาร: | ||
+ | ** [http://www.ruby-doc.org/docs/ProgrammingRuby/ Programming Ruby] | ||
+ | ** [http://qa.poignantguide.net/ Why’s (Poignant) Guide to Ruby] (แนวมาก) | ||
+ | ===Smalltalk=== | ||
+ | * [http://www.smalltalk.org/main/ หน้าหลัก] | ||
+ | ** [http://users.ipa.net/~dwighth/smalltalk/byte_aug81/design_principles_behind_smalltalk.html Design Principles Behind Smalltalk] โดย Daniel H. H. Ingalls | ||
+ | ** [http://www.eli.sdsu.edu/courses/spring01/cs635/readingSmalltalk.pdf I can Read C++ and Java But I can't Read Smalltalk] โดย Wilf LaLonde | ||
+ | ** [http://www.iam.unibe.ch/~ducasse/FreeBooks.html หนังสือ Smalltalk on-line] | ||
+ | * [http://www.squeak.org/ Squeak] เป็น Smalltalk environment ที่ใช้เรียน | ||
+ | ** เอกสาร: [http://www.iam.unibe.ch/~scg/SBE/ An open book: Squeak by Example], [http://wiki.squeak.org/squeak Swiki] | ||
+ | |||
+ | ==ลิงก์ที่เกี่ยวข้อง== | ||
+ | * [http://www.stanford.edu/class/cs242/ วิชาภาษาโปรแกรมที่ Stanford] | ||
+ | * [http://www.cpe.ku.ac.th/~jtf/204435-49/ เว็บวิชาเดียวกันภาคการศึกษา 2549] |
รุ่นแก้ไขปัจจุบันเมื่อ 06:19, 7 มิถุนายน 2556
หน้านี้เป็นหน้ารายวิชาของวิชามโนทัศน์ภาษาโปรแกรม
ผู้สอน: จิตร์ทัศน์ ฝักเจริญผล
เนื้อหา
ประกาศ
- เกรดและคะแนนดูได้ที่หน้าห้องครับ
- ข้อสอบปลายภาค
- อนุญาตให้เปิดเอกสารได้
- จะเน้นมโนทัศน์ (concept) ที่เรียนหลังสอบกลางภาค เช่น แนวคิดเกี่ยวกับโมดูล, การโปรแกรมเชิงวัตถุ, การเปรียบเทียบภาษาเชิงวัตถุต่าง ๆ การโปรแกรมแบบทำงานพร้อมกัน เป็นต้น
- อย่างไรก็ตามในข้อสอบอาจกล่าวถึง หรืออ้างถึง หรือให้วิเคราะห์ แนวคิดที่เรียนมาทั้งหมดได้
- ข้อสอบปลายภาคจะไม่เน้นให้เขียนโปรแกรม และไม่เน้นภาษาโปรแกรมที่ทดลอง เช่น Ruby หรือ Python อย่างไรก็ตาม อาจมีการถามแนวคิดต่าง ๆ โดยยกตัวอย่างจากภาษาเหล่านี้ด้วย ยกตัวอย่างเช่น ข้อสอบอาจถาม
จงพิจารณาโปรแกรมภาษา Ruby ที่หาผลรวมของตัวเลขใน array (หรือเรียกว่า list ในภาษาอื่น) ต่อไปนี้ l = [1,2,3,4,5,6] sum = 0 l.each do |x| sum += x end โครงสร้าง do .. end เรียกว่า block ในโปรแกรมข้างต้น ใน block ดังกล่าวเราประกาศให้รับค่าเข้ามาทางตัวแปร x แล้วนำมาบวกกับตัวแปร sum โดย method each ของคลาส array จะนำข้อมูลแต่ละตัวมาป้อนให้กับ block นี้ จากตัวอย่างดังกล่าว จงอธิบายว่า เพราะเหตุใด block จึงต้องเป็น closure
- ข้อสอบเก่า: 204435Final29.pdf
การเตรียมตัวก่อนเข้าเรียน
ในส่วนนี้จะระบุรายละเอียดของซอฟต์แวร์ที่นิสิตต้องติดตั้งก่อนเข้าเรียนแต่ละครั้ง โดยแยกเป็นหมู่เรียนที่วิทยาเขตบางเขน และวิทยาเขตศรีราชา
- สัปดาห์ที่ 13
- จะทดลองเขียนโปรแกรมแบบทำงานพร้อมกัน ด้วย Stackless Python ให้ติดตั้งมาก่อน เพื่อความสะดวกแนะนำให้ใช้ ตัวติดตั้งสำเร็จรูป ที่มีให้เฉพาะบน Windows ในกรณีของ Linux ต้องคอมไพล์เอง
รายละเอียดวิชา
ในมุมมองที่กว้างที่สุด ภาษาโปรแกรมเป็นเครื่องมือสำหรับอธิบายการคำนวณ (computation) อย่างไรก็ตามมุมมองของการคำนวณนั้นมีได้หลากหลาย เป็นจุดกำเนิดที่ทำให้เกิดภาษาโปรแกรมที่วางอยู่บนกระบวนทัศน์ (paradigm) ที่แตกต่างกันจำนวนมากมาย
วิชานี้ มีเป้าหมายที่จะศึกษาแนวคิดต่าง ๆ ที่มีใช้ในภาษาโปรแกรมสมัยใหม่ เพื่อให้เข้าใจกระบวนการทำงาน ขีดจำกัด และผลกระทบที่มีต่อกระบวนการคิดวิเคราะห์ของผู้ใช้
เราจะสนใจแนวคิดพื้นฐาน พร้อมกับเน้นกระบวนทัศน์ภาษาโปรแกรมที่สำคัญได้แก่การโปรแกรมเชิงฟังก์ชันและการโปรแกรมเชิงวัตถุ นอกจากนี้ยังจะให้ความสำคัญเกี่ยวกับแนวคิดของภาษาเชิงพลวัติที่ทวีความสำคัญมากขึ้นเรื่อย ๆ
นอกจากจะศึกษาแนวคิดที่สำคัญแล้ว ในวิชานี้จะมีการให้นิสิตได้ทดลองเขียนโปรแกรมด้วยภาษาและกรอบงาน (framework) ต่าง ๆ เพื่อเพิ่มความเข้าใจอีกด้วย ตัวอย่างภาษาที่จะได้ทดลอง เช่น Scheme, ML, Smalltalk, Java, C#, Ruby
การบ้าน
การส่งการบ้านที่เป็นโปรแกรม ให้ส่งเป็นจดหมายอิเล็กทรอนิกส์ ไปที่ e-mail ของอาจารย์ผู้สอน (ดูจาก [1])
- การบ้าน 1: ให้ทำแบบฝึกหัดในเอกสาร Scheme ข้อที่ 1, 2, 6, 8, 10 และ 11 (กำหนดส่ง. บางเขน: 12 พ.ย. ศรีราชา: 28 พ.ย.) (เฉลย)
- การบ้าน 2: pdf (กำหนดส่ง: บางเขน: 30 พ.ย. ศรีราชา: 12 ธ.ค.)
- การบ้าน 3: pdf (กำหนดส่ง: บางเขน: 11 ธ.ค. ศรีราชา: 12 ธ.ค.)
- การบ้าน 4: pdf (กำหนดส่ง: บางเขน: 17 ธ.ค. ศรีราชา: 19 ธ.ค.)
- การบ้านโปรแกรม 3: จะประกาศเร็ว ๆ นี้ ส่งหลังสอบกลางภาค
คำบรรยายและแผ่นใส
เอกสารหลักจะใช้บันทึกคำบรรยายที่เตรียมโดยผู้สอน ประกอบกับสไลด์วิชา Programming Languages ของ John C. Mitchell
- แนะนำวิชา (pdf)
- แนะนำภาษาโปรแกรมเชิงฟังก์ชัน: Scheme (slides ของ JCM: Lisp) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): pdf)
- บทความ: Roots of Lisp โดย Paul Graham
- พื้นฐาน: การแปลภาษาโปรแกรม แลมบ์ดาแคลคูลัส (slides ของ JCM: ppt, pdf) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): pdf)
- ภาษาตระกูล Algo และ ML (slides ของ JCM)
- ระบบแบบชนิดข้อมูล (type system) และการอนุมานแบบชนิดข้อมูล (slides ของ JCM)
- ขอบเขตตัวแปรและการจัดการ (slides ของ JCM) (เอกสารประกอบคำบรรยาย (ไม่สมบูรณ์): pdf)
- โครงสร้างควบคุม (slides ของ JCM)
- โมดูลและการโปรแกรมเชิงวัตถุ (slides ของ JCM)
- การโปรแกรมเชิงวัตถุ: Simula, Smalltalk (slides ของ JCM)
- การโปรแกรมเชิงวัตถุ: C++, Java, C# (slides ของ JCM)
- ภาษาเชิงพลวัติ (dynamic languages): Ruby และ Python
- กรอบงานการโปรแกรม: Ruby on Rails, (Seaside)
- Meta-programming
- การทำงานพร้อมกัน: Java และ Erlang
- การวิเคราะห์เชิงสถิตย์และเครื่องมือ (static analysis)
ซอฟต์แวร์และเอกสารเพิ่มเติม
Scheme
- หน้าอ้างอิงของภาษา Scheme
- ระบบของ Scheme ที่ใช้ DrScheme
- ระบบอื่น ๆ เช่น: STk, MIT/GNU Scheme
- เอกสารเกี่ยวกับ Scheme
ML
- ระบบของภาษา ML ที่ใช้ Standard ML of New Jersey
- เอกสารเกี่ยวกับ ML
- ลิงก์ที่เกี่ยวข้อง: ภาษา Caml, F#
Python
Ruby
- หน้าหลัก
- เอกสาร:
Smalltalk
- หน้าหลัก
- Design Principles Behind Smalltalk โดย Daniel H. H. Ingalls
- I can Read C++ and Java But I can't Read Smalltalk โดย Wilf LaLonde
- หนังสือ Smalltalk on-line
- Squeak เป็น Smalltalk environment ที่ใช้เรียน
- เอกสาร: An open book: Squeak by Example, Swiki