กำลังบ้า Ruby on Rails ภาค MVC

เพิ่งแก้ Blog จากการใช้ Category มาเป็น Tag แทนด้วยเหตุผลที่ว่ามันทำให้การค้นหาและจัดหมู่นั้นทำได้ง่ายกว่ามาก ซึ่งช่วงนี้กำลังหาสิ่งใหม่ ๆ เข้าตัว เริ่มด้วยการศึกษาหลักการ Design Pattern ต่าง ๆ ของ GoF และ Model-view-controller (MVC) ที่เป็น Design Pattern อีกแบบหนึ่งที่ได้รับความนิยมมาก โดยตัวที่เอาประกอบการศึกษาก็คือ Ruby on Rails (RoR) ซึ่งเป็นการใช้ภาษา Ruby มาเป็นภาษาในการพัฒนาและทำเป็น Framework ที่ชื่อว่า Rails นั้นเอง โดยรวมยังไปไม่ถึงไหน แต่ที่แน่ ๆ การพัฒนาทำได้รวดเร็วและง่ายมาก ๆ แต่สิ่งหนึ่งที่ต้องเข้าใจคือ MVC เสียก่อน เพราะไม่งั้นพัฒนาไปแล้ว งง แน่ ๆ

Model-view-controller (MVC) เป็นการแยกการพัฒนา Software ออกมาเป็น 3 ส่วนหลัก ๆ  (หรือบางคนเรียกกว่า 3 Layer) ซึ่งได้แก่ Model, View และ Controller

  • Model เป็นการตัดสินใจ (Domain logic) ในการเข้าถึงและใช้งานข้อมูล (Raw data) ซึ่งเป็นไปตามกฎที่ตั้งไว้ (Business Rule) 
  • View เป็นส่วนของการนำข้อมูลที่ได้จาก Model มาแสดงผลให้ผู้ใช้ได้ทราบข้อมูลผ่านทางส่วนติดต่อกับผู้ใช้งาน (User Interface,UI)
  • Controller เป็นส่วนที่ตอบรับและโต้ตอบการทำงานของผู้ใช้ (Event และ Responds) โดยจะเป็นตัวกระตุ้นให้ Model และ View ทำงานไปในทิศทางเดียวกัน

ขั้นตอนการทำงานของ MVC แบบคราว ๆ

เหตุการณ์สมมติ "นักเรียนต้องการส่งคำตอบในการทำข้อสอบให้กับครูผู้สอน" การทำงานแบบ MVC จะมีลักษณะดังนี้

  1. เมื่อนักเรียนกดปุ่ม Submit เพื่อส่งข้อสอบ ซึ่งอยู่ที่ View จะส่งคำร้องนี้ไปยัง Controller (1) จะทำการรับการโต้ตอบจากปุ่ม Submit และสร้าง handler หรือ callback ขึ้นมา เพื่อใช้ติดต่อระหว่าง Layer
  2. Controller ทำการเลือก Model ที่ตรงกับข้อมูลของผู้ใช้ที่ส่งข้อมูลเข้ามา (2) แล้ว Model ทำการตรวจสอบความถูกต้องของข้อมูลตามกฎที่ตั้งไว้ (Business Rules) ถ้ามีข้อผิดพลาดจะส่งคำร้องไปยัง View (5) ให้ทำการสร้างหน้าแจ้งข้อผิดพลาดออกมาและจบการทำงานทันที แต่ถ้าไม่มีข้อผิดพลาดจะใส่ข้อมูลนั้นลงฐานข้อมูล โดยที่ Model จะเป็นคนจัดการข้อมูลในฐานข้อมูลเองทั้งหมด (3) แล้ว Controller จะบอกให้ View (4) จะทำการสร้างส่วนติดต่อกับผู้ใช้ใหม่ขึ้นมาโดยไปดึงผลคะแนนที่ได้มาจาก Model (5) ออกมาแสดงที่ส่วนติดต่อผู้ใช้งาน (User Interface,UI)
  3. และการทำงานจะเป็นแบบไหนไปเรื่อย ๆ จนกว่าโปรแกรมจะจบการทำงาน

จากตัวอย่างด้านบนคงจะพอเห็นภาพแล้วว่าการติดต่อระหว่าง Model, View และ Controller แล้ว เมื่อเราสามารถแยกการทำงานของโปรแกรมของเราได้ในรูปแบบนี้ จะทำให้การดูแลและแก้ไขระบบเป็นไปด้วยความรวดเร็ว และลดความซับซ้อนในการสร้างลงไปมาเลยทีเดียว

ซึ่งในการเขียน RoR นั้นก็ใช้หลักการแบบนี้เช่นกัน และตัว Framework เองนั้นออกแบบมาให้มีความสามาถในการสร้างงานที่สูงมาก (High Productivity) กล่าวคือเราไม่จำเป็นต้องออกแบบฟอร์มเองทั้งหมด แต่ตัว Framework จะออกแบบมาให้แล้ว และเรามาปรับแต่งฟอร์มทีหลัง โดยตัวฟอร์มจะมีความสอดคล้องกับข้อมูลที่ออกแบบใน Database มากที่สุด แถมด้วยระบบตรวจสอบข้อมูลในฟอร์มแบบซึ่งสามารถปรับแต่งแก้ไขได้ง่ายมาก ๆ

สำหรับตอนนี้ก็คงต้องกลับไปนั่งเล่นกับมันก่อน เดี่ยวมาเล่าต่อครับ ;)

เพิ่งไปอบรม SCJP @ CSIT-NU (สนับสนุนโดย SIPA สาขาเชียงใหม่)

ในช่วง 4-5 วันที่ผ่านมาไม่ได้ทำอะไรเลย งานการไม่ได้ทำ เพราะเอาเวลาไปอบรม Sun Certified Java Programmer (SCJP) ซึ่งในวันจันทร์ที่ผ่านมา (วันที่ 16 ตุลาคม 49) เป็นวันทดสอบ Pre-Test เพื่อลองเชิงว่ามีคุณสมบัติพอที่จะสอบหรือไม่ โดยมีคำถาม 15 ข้อ ทำให้ได้ไม่ต่ำกว่า 8 ข้อก็ผ่านแล้ว โดยตัวข้อสอบที่ให้ทำเป็นการไล่ตัว code ของโปรแกรมที่เขียนด้วยภาษา Java ทั้งหมดเลย โดยให้ตอบว่าผลการทำงานจะออกมาเป็นอะไร ซึ่งตัวข้อสอบไม่ได้ให้หาผลอย่างเดียว แต่ยังมีข้อให้เลือกว่ามันจะมี Compilation Fails หรือ Runtime Error หรือไม่ด้วย ซึ่งทั้งสองแบบก็มีอยู่หลายข้อเหมือนกัน

โดยในวันนั้นใช้เวลาสอบไม่เกิน 30 นาที ซึ่งถือว่าเวลาน้อยสำหรับคนที่นั่งไล่โปรแกรม เพราะแต่ละข้อนั้นกว่าจะไล่ตัวโปรแกรมเสร็จก็ปาไป 2-3 นาทีต่อข้อแล้ว แถมบางข้อยาวเสียด้วย ซึ่งการสอบเราต้องทำตัวเป็น compiler เพื่อจับผิดตัว code โปรแกรมต่าง ๆ ซึ่งสอบเสร็จก็ทำถูกไปได้ 13 ข้อ ส่วนอีก 2 ข้อเนี่ยมั่วไป แบบว่าตอนนั้นเวลามันไม่ทันแล้วต้องส่งแล้วด้วย แต่ดันมั่วไม่ถูกอีก เซง ๆ (ตอนตรวจเสร็จแล้วขอดูได้ว่าเราผิดข้อไหนด้วย)

ซึ่งเราก็ผ่านการทำสอบ Pre-Test เราเลยมีสิทธิ์ในการเข้าอบรมโดยเค้าจะมีเอกสารและมีวิทยากรมาอบรมให้ โดยวิทยากรที่มาอบรมก็เป็นคนที่สอบ SCJP มาก่อนเป็นรุ่นแรก ๆ และทำงานสายนี้มาก่อนอยู่แล้ว ซึ่งสอนได้ดี และละเอียด รวมถึงเป็นกันเองมาก เลยหล่ะ โดยอบรมให้เราเป็นเวลา 5 วัน ตั้งแต่เวลา 9.00 – 16.00 (ไม่รวมพักเที่ยง)  ซึ่งถือว่าทรหดมาก แต่โดยรวมก็มันดี ได้แนวคิดในการเขียนของ Java มาเยอะ และทำให้เรารู้ว่าภาษา Java นี่มันมีความหยุ่มหยิ่มในการเขียนมาก แถมใช้ความเคยชินจาก C/C++ มาเขียนบางครั้งก็ไม่ได้ด้วย
โดยในการอธิบายกลไกการจัดการ Object ใน Java แล้วก็อึ้ง ๆ อยู่ในหลาย ๆ เรื่องคือเรื่องของ String Pool หรือพวกระบบการสร้าง Object ของมันที่สลับซับซ้อนมาก แถมในตัวข้อสอบที่จะต้องไปสอบมันมีถามด้วยดิว่าเราเขียนโปรแกรมมาแบบนั้นแบบนี้ มันสร้าง Object มากี่ตัว หรือสร้าง Refference variable มากี่ตัว อะไรแบบนี้ ซึ่งมันดูเหมือนไม่มีประโยชน์ในการเขียนโปรแกรม แต่ถ้าลองใช้ลึก ๆ แล้วน่าจะทำให้เราจัดการหน่วยความจำได้ดีมากขึ้น ซึ่งการอบรมนั้นมีหัวข้อหลัก ๆ ดังนี้

  • Java Platform Architecture
  • Declarations, Initialization and Scoping
  • Flow Control (if or switch statement, loops and iterators, assertions, exceptions and exception handling , etc)
  • API Contents (Primitive wrapper classes, String VS StringBuffer, etc )
  • Concurrency (Thread and Runnable)
  • OO Concepts (encapsulation, access modifiers, inheritance superclass, overridden, overloaded ,is-a" and/or "has-a" relationships, polymorphism, etc)
  • Collections / Generics (hashCode and equals, Data Structure, etc )
  • Garbage collection
  • Fundamentals (primitive data types, arithmetic operators, access modifiers, package declarations, and import statements, etc )

จริง ๆ มันมีมากกว่านี้ครับ แต่เอาย่อ ๆ ประมาณนี้แล้วกัน โดยรวมทำให้เรารู้เลยว่าการทำงานของ Garbage collector ใน Java นี่มันเป็นไปตามใจของ JVM จริง ๆ คิดจากที่ได้อบรมมา เรื่องการเอา Object ที่ไม่ได้ถูกใช้งานแล้วออกจากหน่วยความจำนี่บังคับไม่ได้เลย คือแล้วแต่อารมณ์ของ JVM มาก ๆ คือ Object ไม่ได้ถูกอ้างถึงอีก มันก็ยังคงลอยหน้าลอยตาอยู่ในหน่วยความจำ Garbage collector มันก็มองว่า Object นั้นเข้าข่ายที่จะถูกลบไปได้ แต่มันจะลบหรือไม่ก็อีกเรื่อง แถม Garbage collector เนี่ยมันจะทำงานเมื่อไหร่ก็ไม่รู้ -_-‘ เราไปปลุกมันก็ไม่ได้ ได้แต่ร้องขอไป ถ้ามันอยากทำงานเดี่ยวมันก็ทำงานเอง ถ้ามันไม่ทำ ก็คือไม่ทำ (ใครจะทำไม) เป็นซะอย่างงี้อีก ไม่รู้ว่า 1.6 มันจะเป็นแบบนี้หรือเปล่านะ โดยรวมนี่ก็อึ้ง ๆ มึนๆ กับเรื่องนี้มาก เดี่ยวว่าจะหาอ่านเรื่อง Garbage collection ทบทวนน่าจะ ok ไม่รู้ว่าภาษาอื่น ๆ มันเป็นแบบนี้หรือเปล่า -_-‘

ส่วนต่อมาก็เรื่องของ Data type ที่ในภาษา Java นี่ stric มาก จนน่ารำคาญอย่างแรง คืออย่างเราเอา ข้อมูลที่เป็นชนิด short กับ short มาบวกกันมันออกมาเป็น integer ซะอย่างงั้นอ่ะ นี่ยังไม่รวม byte อีกนะ เออ ก็แปลงดี ต้อง casting กันให้วุ่นวายไปหมด แถมในการสอบก็มีให้เห็นกันแบบนี้อีก แถมมีการเอาชนิดข้อมูล char มาใช้เป็นตัวเลขได้ด้วย โดยไม่ต้อง casting อีก โอ้วววว สับสนใช้ได้เลย เรื่องของพวก Data type นี่เป็นอะไรที่สับสนงงงวงมาก แถมการประกาศ String s = "xyz"; กับ String s = new String("xyz"); นี่ได้ Object ไม่เท่ากัน ด้วย แบบแรกจะได้ String pool 1 ตัว โดยมี s เป็น reference 1 ตัว ซึ่งมันชี้ไปที่ String Pool แต่ในแบบที่สอง มี Object 1 ตัว และ String pool 1 ตัว โดยมี s เป็น reference อีก 1 ตัว โดยที่มันจะไปชี้ Object แล้ว Object จะชี้ไปที่ String pool อีกที (เราต้องมองว่า String pool คือ 1 ตัวคือ 1 Object ด้วยนะ) ซึ่งนี่แหละทำให้ งง กันไปพักนึง โดย String pool ใน Java นี่เป็นเหมือน Database สำหรับเก็บ String ที่สร้างขึ้นมา โดยที่ String ที่สร้างขึ้นนี้จะไม่มีทางถูกแก้ไขอีกถ้าสร้างมาแล้ว แถมถ้าไอ้ตัวที่สร้างมาแล้วมีตัวที่เหมือนกันจะสร้างซ้ำ มันก็จะไม่ให้สร้างซ้ำมันจะเอา reference ที่จะสร้างซ้ำนั้นน่ะมาชี้มาที่ String pool index ที่ซ้ำกันอยู่ทำให้ข้อมูลของ String 1 pool มี reference variable 2 ตัวชี้มาที่เดียวกัน เพื่อลดการใช้งานหน่วยความจำ แต่ถ้าใครอยากได้ String แบบที่เปลี่ยนแปลงค่าได้ก็ต้องใช้ StringBuffer แทน

เฮ้อ ….. นี่แค่เรื่องเล็ก ๆ ในช่วง 4-5 วันที่ได้อบรมนะ เดี่ยวจะมาเล่าต่อว่ามีอะไรอีกบ้าง ;)

ภาษาโปรแกรมมิ่งไพธอน (Python programming language)

ทำรายงานเรื่องไพธอน แล้วก็ส่งไปแล้ว เลยคิดว่าถ้าทำแล้วแค่ส่งให้อาจารย์แล้วก็กองไว้ตรงนั้น มันจะมีประโยชน์อะไร เอามาเผยแพร่น่าจะได้ประโยชน์กว่าเยอะเลย ;)


ข้อมูลเบื้องต้น

ไพธอน (Python) เป็นภาษาโปรแกรมในลักษณะภาษาอินเตอร์พรีเตอร์โปรแกรมมิ่ง (Interpreted programming language) ผู้คิดค้นคือ Guido van Rossum ในปี 1990 ซึ่งไพธอนเป็น การจัดการชนิดของตัวแปรแบบแปรผันตามข้อมูลที่บรรจุอยู่ (Fully dynamically typed) และใช้การจัดการหน่วยความจำเป็นอัตโนมัติ (Automatic memory management) โดยได้เป็นการพัฒนาและผสมผสานของภาษาอื่น ๆ ได้แก่ ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl และภาษาไพธอนยังเป็นแนวคิดที่ทำให้เกิดภาษาใหม่ ๆ ซึ่งได้แก่ Ruby และ Boo เป็นต้น

ไพธอนนั้นพัฒนาเป็นโครงการ Open source โดยมีการจัดการแบบไม่หวังผลกำไรโดย Python Software Foundation และสามารถหาข้อมูลและตัวแปรภาษาได้จากเว็บไซต์ของไพธอนเอง ที่ http://www.python.org/ ซึ่งในปัจจุบัน (ณ.วันที่ 29 มิถุนายน 2006) Python ได้พัฒนาถึงรุ่นที่ 2.4.3 (ออกวันที่ 29 มีนาคม 2006) และรุ่นทดสอบการทำงาน หรือ beta นั้นอยู่ที่รุ่น 2.5 ซึ่งออกเมื่อ 20 มิถุนายน 2006


ประวัติ

Python 1.0

ไพธอนสร้างขึ้นครั้งแรกในปี 1990 โดย Guido van Rossum ที่ CWI (National Research Institute for Mathematics and Computer Science) ในประเทศเนเธอร์แลนด์ โดยได้นำความสำเร็จของภาษาโปรแกรมมิ่งที่ชื่อ ABC มาปรับใช้กับ Modula-3, Icon, C, Perl, Lisp, Smalltalk และ Tcl โดย Duido van Rossim ถือว่าเป็นผู้ริเริ่มและคิดค้น แต่เค้าก็ยังคิดว่าผลงานอย่างไพธอนนั้น เป็นผลงานความรู้ที่ทำขึ้นเพื่อความสนุกสนานโดยได้อ้างอิงงานชิ้นนี้ของเขาว่าเป็น Benevolent Dictator for Life (BDFL) ซึ่งผลงานที่ถูกเรียกว่าเกิดจากความสนุกสนานเหล่านี้นั้นมักถูกเรียกว่า BDFL เพราะมักเกิดจากความไม่ตั้งใจ และความอยากที่จะทำอะไรที่เป็นอิสระนั้นเอง ซึ่งคนที่ถูกกล่าวถึงว่าทำในลักษณะแบบนี้ก็ได้แก่ Linus Torvalds ผู้สร้าง Linux kernel, Larry Wall ผู้สร้าง Perl programming language และคนอื่น ๆ อีกมากมาย

โดยที่ในไพธอน 1.2 นั้นได้ถูกปล่อยออกมาในปี 1995 โดย Guido ได้กลับมาพัฒนาไพธอนต่อที่ Corporation for National Research Initiatives (CNRI) ที่ เรสตัน, มลรัฐเวอร์จิเนีย ประเทศสหรัฐอเมริกา โดยที่ในขณะเดียวกันก็ได้ปล่อยรุ่นใหม่ ในหมายเลขรุ่น 1.6 ออกมาโดยอยู่ที่ CNRI เช่นกัน

ซึ่งหลังจากปล่อยรุ่น 1.6 ออกมาแล้ว Guido van Rossum ก็ได้ออกจาก CNRI  เพื่อทำงานให้การทำธุรกิจพัฒนาซอฟต์แวร์แบบเต็มตัว โดยก่อนที่จะเริ่มทำงานธุรกิจ เขาก็ได้ทำให้ไพธอนนั้นอยู่บนสัญญาลิขสิทธิ์แบบ General Public License (GPL) โดยที่ CNRI และ Free Software Foundation (FSF) ได้รวมกันเปิดเผยรหัสโปรแกรมทั้งหมด เพื่อให้ไพธอนนั้นได้ชื่อว่าเป็นซอฟต์แวร์เสรี และเพื่อให้ตรงตามข้้อกำหนดของ GPL-compatible ด้วย (แต่ยังคงไม่สมบูรณ์เพราะการพัฒนาในรุ่น 1.6 นั้นออกมาก่อนที่จะใช้สัญญาลิขสิทธิ์แบบ GPL ทำให้ยังมีบางส่วนที่ยังเปิดเผยไม่ได้)

และในปีเดียวกันนั้นเอง Guido van Russom ก็ได้รับรางวัลจาก FSF ในชื่อว่า “Advancement of Free Software”

โดยในปีนั้นเองไพธอน 1.6.1 ก็ได้ออกมาเพื่อแก้ปัญหาข้อผิดพลาดของตัวซอฟต์แวร์และให้เป็นไปตามข้อกำหนดของ GPL-compatible license อย่างสมบูรณ

Python 2.0

ในปี 2000 Guido และ Python Core Development team ได้ย้ายการทำงานไป BeOpen.com โดยที่พวกเขาได้ย้ายจาก BeOpen PythonLabs team โดยในไพธอนรุ่นที่ 2.0 นั้นได้ถูกนำออกเผยแพร่ต่อบุคคลทั่วไปจากเว็บไซต์ BeOpen.com และหลังจากที่ไพธอนออกรุ่นที่ 2.0 ที่ BeOpen.com แล้ว Guido และนักพัฒนาคนอื่น ๆ ในทีม PythonLabs ก็ได้เข้ารวมกับทีมงาน Digital Creations

ไพธอนรุ่น 2.1 ได้สืบทอนการทำงานและพัฒนามาจาก 1.6.1 มากกว่าไพธอนรุ่น 2.0 และได้ทำการเปลี่ยนชื่อสัญญาลิขสิทธิ์ใหม่เป็น Python Software Foundation License โดยที่ในไพธอนรุ่น 2.1 alpha นั้นก็ได้เริ่มชื่อสัญญาสิขสิทธิ์นี้และผู้เป็นเจ้าของคือ Python Software Foundation (PSF) โดยที่เป็นองค์กรที่ไม่หวังผลกำไรเช่นเดียวกับ Apache Software Foundation

อนาคต

ผู้พัฒนาไพธอนมีการประชุมและถกเถียงกันในเรื่องของความสามารถใหม่ ๆ ในไพธอนรุ่นที่ 3.0 โดยมีชื่อโครงการว่า Python 3000 (Py3K) โดยที่จะหยุดการสนับสนุนโค้ดโปรแกรมจากรุ่น 2.x โดยที่ทำแบบนี้เพื่อทำการปรับปรุงเปลี่ยนแปลงการทำงานของภาษาให้ดียิ่งขึ้นตามคำแนะนำที่ว่า “reduce feature duplication by removing old ways of doing things” (ลดทอนคุณสมบัติที่ซ้ำซ้อนด้วยการยกเลิกเส้นทางที่เดินผ่านมาแล้ว) โดยในตอนนนี้ยังไม่มีตารางงานของไพธอน รุ่น 3.0 แต่อย่างใด แต่ Python Enhancement Proposal (PEP) ได้มีการวางแผนไว้แล้ว โดยได้วางแผนไว้ดังนี้

  • ทำการเพื่อส่วนสนับสนุนชนิดตัวแปรให้มากขึ้น
  • สนับสนุนการทำงานของชนิดตัวแปรแบบ unicode/str และ separate mutable bytes type
  • ยกเลิกการสนับสนุนคุณสมบัติของ classic class, classic division, string exceptions และ implicit relative imports
  • ฯลฯ

หลักปรัชญาของภาษาไพธอน

ไพธอนเป็นภาษาที่สามารถสร้างงานได้หลากหลายกระบวนทัศน์ (Multi-paradigm language) โดยจะมองอะไรที่มากกว่าการ coding เพื่อนำมาใช้งานตามรูปแบบเดิม ๆ แต่จะเป็นการนำเอาหลักการของกระบวนทัศน์ (Paradigm) แบบ Object-oriented programming, Structured programming, Functional programming และ Aspect-oriented programming นำเอามาใช้ทั้งแบบเดียว ๆ และนำมาใช้ร่วมกัน ซึ่งไพธอนนั้นเป็น ภาษาที่มีการตรวจสอบชนิดตัวแปรแบบยืดหยุ่น (dynamically type-checked) และใช้ Garbage collection ในการจัดการหน่วยความจำ


ข้อเด่นของภาษาไพธอน

  • ง่ายต่อการเรียนรู้ โดยภาษาไพธอนมีโครงสร้างของภาษาไม่ซับซ้อนเข้าใจง่าย ซึ่งโครงสร้างภาษาไพธอนจะคล้ายกับภาษาซีมาก เพราะภาษาไพธอน สร้างขึ้นมาโดยใช้ภาษาซี ทำให้ผู้ที่คุ้นเคยภาษาซี อยู่แล้วใช้งานภาษาไพธอนได้ไม่ยาก นอกจากนี้โดยตัวภาษาเองมีความยืดหยุ่นสูงทำให้การจัดการกับงานด้านข้อความ และ Text File ได้เป็นอย่างดี
  • ไม่ต้องเสียค่าใช้จ่ายใดๆ ทั้งสิ้น เพราะตัวแปรภาษาไพธอนอยู่ภายใต้ลิขสิทธิ์ Python Software Foundation License (PSFL) ซึ่งเป็นของ Python Software Foundation (PSF) ซึ่งมีลักษณะคล้ายกับ ลิขสิทธิ์แม่แบบอย่าง General Public License (GPL) ของ Free Software Foundation (FSF)
  • ใช้ได้หลายแพลตฟอร์ม ในช่วงแรกภาษาไพธอนถูกออกแบบใช้งานกับระบบ Unix อยู่ก็จริง แต่ในปัจจุบันได้มีการพัฒนาตัวแปลภาษาไพธอน ให้สามารถใช้กับระบบปฏิบัติการอื่นๆ อาทิเช่น Linux Platform, Windows Platform, OS/2, Amiga, Mac OS X และรวมไปถึงระบบปฎิบัติการทีี่ .NET Framework, Java virtual machine ทำงานได้ ซึ่งใน Nokia Series 60 ก็สามารถทำงานได้เช่นกัน
  • ภาษาไพธอนถูกสร้างขึ้นโดยได้รวบรวมเอาส่วนดีของภาษาต่างๆ เข้ามาไว้ด้วยกัน อาทิเช่น ภาษา ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl
  • ไพธอนสามารถรวมการพัฒนาของระบบเข้ากับ COM, .NETและ CORBA objects
  • สำหรับ Java libraries แล้วสามารถใช้ Jython เพื่อทำการพัฒนาซอฟต์แวร์จากภาษาไพธอนสำหรับ Java Virtual Machine
  • สำหรับ .NET Platform แล้ว สามารถใช้ IronPython ซึ่งเป็นการพัฒนาของ Microsoft เพื่อจะทำให้ไพธอนนั้นสามารถทำงานได้บน .Net Framework ซึ่งใช้ชื่อว่า Python for .NET
  • ไพธอนนั้นสนับสนุน Internet Communications Engine (ICE) และการรวมกันของเทคโนโลยีอื่น ๆ อีกมากมายในอนาคต
  • บางครั้งนักพัฒนาอาจจะพบว่าไพธอนไม่สามารถทำงานบางอย่างได้ แต่นักพัฒนาต้องการให้มันทำงานได้ ก็สามารถพัฒนาเพิ่มได้ในรูปแบบของ extension modules ซึ่งอยู่ในรูปแบบของโค้ด C หรือ C++ หรือใช้ SWIG หรือ Broost.Python
  • ภาษาไพธอนเป็นสามารถพัฒนาเป็นภาษาประเภท Server side Script คือการทำงานของภาษาไพธอนจะทำงานด้านฝั่ง Server แล้วส่งผลลัพธ์กลับมายัง Client ทำให้มีความปลอดภัยสูง และยังใช้ภาษาไพธอนนำมาพัฒนาเว็บเซอร์วิสได้อีกด้วย
  • ใช้พัฒนาระบบบริหารการสร้างเว็บไซต์สำเร็จรูปที่เรียกว่า Content Management Systems (CMS) ซึ่ง CMS ที่มีชื่อเสียงมาก และเบื้องหลังทำงานด้วยไพธอนคือ Plone http://www.plone.org/

Category และ Application Domains

ภาษาไพธอนนั้น จัดอยู่ใน Category ภาษาที่สามารถสร้างงานได้หลากหลายกระบวนทัศน์ (Multi-paradigm language) โดยรองรับทั้ง Object-oriented programming, Imperative, Functional programming และ Logic programming ซึ่งไพธอนสามารถนำไปพัฒนาซอฟต์แวร์ประยุกต์ได้มากมาย ได้แก่

Web และ Internet Development

ไพธอนนั้นมีการสนับสนุนในด้า้นของ Web Development ในโซลูชันระดับสูงด้วย Zope, mega frameworks อย่าง Django และ TurboGears และรวมไปถึง Content Management Systems ขั้นสูงอย่าง Plone และ CPS จึงทำให้ไพธอนนั้นเป็น Common Gateway Interface (CGI) ระดับสูงที่มีประสิทธิภาพที่ดีที่สุดตัวหนึ่งในตลาด

Database Access

ไพธอนนั้นสนับสนุนการเข้าถึงข้อมูลในฐานข้อมูลของผู้ผลิตฐานข้อมูลต่าง ๆ มากมาย โดยผ่านทาง ODBC Interfaces และ Database Connection Interface อื่น ๆ ซึ่งสามารถทำงานร่วมกับ  MySQL, Oracle, MS SQL Server, PostgreSQL, SybODBC และอื่น ๆ ที่จะมีมาเพิ่มเติมอีกในอนาคต

Desktop GUIs

เมื่อไพธอนได้ติดตั้งลงบนเครื่องของคุณแล้ว จะมี Tk GUI development library ซึ่งเป็น libraries ที่มีความสามารถเทียบเท่า Microsoft Foundation Classes (MFC, ซึ่งคล้าย ๆ กับ win32 extensions), wxWidgets, GTK, Qt, Delphi และอื่น ๆ ทำให้สามารถพัฒนาซอฟต์แวร์ประยุกต์ต่าง ๆ แบบ Graphic user interface ได้

Scientific และ Numeric computation

ไพธอนรองรับการทำงานของนักวิทยาศาสตร์ในเรื่องของทฤษฎีการคำนวณ, Bioinformatics และ Physics เป็นต้น

Education

ไพธอนนั้นเป็นภาษาที่เหมาะกับการเรียนการสอนในวิชา programming อย่างมาก โดยสามารถนำไปใช้ในระดับเบื้องต้นถึงระดับสูง ซึ่ง Python Software Foundation นั้นได้มีหลักสูตรสำหรับการเรียนการสอนในด้านนี้อยู่แล้ว ซึ่งสามารถนำเอา pyBiblio  และ Software Carpentry Course มาเรียนเพื่อเสริมความรู้ได้

Network programming

เป็นการเพิ่มความามารถจาก Web และ Internet Development ไพธอนนั้นสนับสนุนในการเขียนโปรแกรมในระดับต่ำในด้านของ network programming ที่ง่ายต่อการพัฒนา sockets และ รวมไปถึงการทำงานร่วมกับ mudules อย่าง Twisted และ Framework สำหรับ Asyncronous network programming

Software build และ Testing

ไพธอนนั้นสนับสนุนการพัฒนาซอฟต์แวร์ที่มีการควบคุมการพัฒนาและจัดการระบบทดสอบต่าง ๆ โดยใช้เครื่องมือในการพัฒนาที่สนับสนุนการเขียนโปรแกรมในไพธอนเอง ซึ่งตัวไพธอนนั้นได้มาพร้อมกับ

  •   Scons สำหรับ build โปรแกรม
  •   Buildbot และ Apache Gump ที่ใช้สำหรับงาน Automated continuous compilation และ Testing
  •   Roundup หรือ Trac สำหรับ bug tracking และ project management

Game และ 3D Graphics Rendering

ไพธอนนั้นได้ถูกใช้ในตลาดพัฒนาเกมส์ทั้งเชิงธุรกิจและสมัครเล่น โดยมีการสร้าง Framework สำหรับพัฒนา Game บนไพธอนซึ่งชื่อว่า PyGame และ PyKyra ซึ่งยังรวมไปถึงการทำ 3D Graphics Rendering ที่ไพธอนมี libraries ทางด้านงานนี้อยู่มากมาย


ซอฟต์แวร์ที่เขียนด้วยไพธอน

  • BitTorrent เป็นการพัฒนาโดยระบบการจัดการไฟล์ BitTorrent, การจัดการ การกระจายตัวของ Package ข้อมูลใน Tracker และการเข้ารหัสส่วนข้อมูลต่าง ๆ
  • Blender ซอฟต์แวร์ open source สำหรับทำ 3D modeling
  • Chandler ซอฟต์แวร์จัดการข้อมูลส่วนบุคคล (Personal Information Manager, PIM) โดยมีส่วนเพิ่มเติมทั้งงานปฎิทิน, อีเมล, ตารางงาน และข้อมูลโน็ตต่าง ๆ ซึ่งทำงานคล้าย ๆ กับ Outlook ของ Microsoft
  • Civilization IV วีดิโอเกมส์ และยังเป็นเกมส์ที่ใช้ boost.python เพื่อทำการควบคุมส่วนประกอบต่าง ๆ ภายในเกมส์ ซึ่งรวมไปถึงรูปแบบ, หน้าตา และเนื้อหาของเกมส์ด้วย
  • Mailman หนึ่งในซอฟต์แวร์ E-Mail mailing lists ที่ได้รับความนิยมสูงสุด
  • Kombilo ระบบจัดการฐานข้อมูลของเกมส์โกะ
  • MoinMoin ระบบ Wiki ที่ได้รับความนิยมสูงตัวหนึ่ง
  • OpenRPG ระบบเกมส์เสมือนแบบ Role Playing Games ลน Internet
  • Plone ระบบ Content Management System
  • Trac ระบบติดตามติดตามข้อผิดพลาดและจัดการข้อมูลด้านการพัฒนาซอฟต์แวร์ด้วย MoinMoin ที่เป็น wiki และ Subversion เพื่อทำระบบ Source version control
  • Turbogears ระบบพัฒนาซอฟต์แวร์ Framework โดยรวมเอา Cherrypy, SQLObject, MochiKit และ KID templates
  • ViewVC ระบบ Web-based สำหรับจัดการด้าน CVS และ SVN repositories
  • Zope ระบบพัฒนาซอฟต์แวร์บนอินเทอร์เน็ตแบบ web-application platform
  • Battlefield 2 เกมส์ First Person Shooter ที่ได้ใช้ไพธอนในการทำ Configuration scripts
  • Indian Ocean Tsunami Detector ซอฟต์แวร์สำหรับมือถือเพื่อแจ้งเตือน Tsunami
  • EVE Online เกมส์แบบ Multi Massive Online Role Playing Game ซึ่งเป็นเกมส์ที่ได้รับอันดับสูงมากบน MMORPG.com
  • SPE – Stani’s Python Editor เป็น Free และ open-source สำหรับงานพัฒนาซอฟต์แวร์ด้วยไพธอน โดยมีทั้งแบบ Python IDE for Windows, Linux \& Mac with wxGlade (GUI designer), PyChecker (Code Doctor) และ Blender (3D)

ตัวอย่างความสำเร็จของไพธอน

Industrial Light & Magic

  • “ไพธอนเป็นกุญแจสำหรับการสร้างผลงานที่ดี ถ้าไม่มีมันแล้วงานอย่าง Star Wars: Episode II ก็เป็นเรื่องที่ยากมากที่จะสำเร็จ ด้วยวิธีการ  crowd rendering เพื่อส่งไปทำการ batch processing ในการ compositing video นั้นเป็นเรื่องที่ง่ายไปเลยเมื่อใช้การพัฒนาระบบด้วยไพธอน”  Tommy Burnette, Senior Technical Director, Industrial Light & Magic
  • “ไพธอนอยู่ทุก ๆ ที่ใน ILM มันช่วยให้เราสามารถที่จะทำงานกับภาพกราฟฟิกที่ถูกสร้างสรรค์ได้ง่ายและรวดเร็ว” Philip Peterson, Principal Engineer, Research & Development, Industrial Light & Magic

Google

  • “ไพธอนมีความสำคัญต่อ Google มาก เพราะตั้งแต่เริ่มมี Google เราก็ใช้มันสร้างระบบของเรา และยังคงเป็นส่วนสำคัญจนทุกวันนี้ โดยในทุก ๆ วันเหล่าวิศวะกรของ Google ใช้ไพธอนในการทำงานอยู่ตลอดเวลา เพื่อค้นหาข้อมูลบนโลกของอินเทอร์เน็ตอย่างไม่มีทีสิ้นสุด” Peter Norvig, Director of Search Quality, Google, Inc.

NASA

  • NASA ใช้ไพธอนในการพัฒนา การจัดการ Model, Integration และ ระบบ Transformation ในงาน CAD/CAE/PDM โดยพวกเราเลือกไพธอนเพราะมีความสามารถในการสร้างงานให้ออกมาได้อย่างรวดเร็วและมีประสิทธิภาพสูง โดยสิ่งที่สำคัญคือ code ในการเขียนนั้นสะอาดและง่ายต่อการจัดการดูแลในภายหลัง อีกทั้งยังมี libraries ให้ใช้อย่างมากมายทำการ Integration ของระบบนั้นเป็นไปอย่างชาญฉลาดและรวดเร็วแถมยังทำระบบที่สามารถเชื่อมต่อการกับระบบอื่น ๆ ได้อย่างดี ซึ่งไพธอนนั้นตอบโจทย์ของเราได้ทั้งหมด”  Steve Waterbury, Software Group Leader, NASA STEP Testbed

Language Evaluation Criteria

ด้วยความที่ไพธอนนั้นผสมผสานการสร้างภาษาที่สวยงาม ทำให้การอ่านหรือเข้าใจโค้ด (Readability) ต่าง ๆ นั้นทำได้ง่าย รวมถึงการเขียนโค้ด (Writability) ที่กระชับและสั้นในการเขียน รวมถึงมีประสิทธิภาพ ทำให้มีเสถียรภาพ (Reliability) สูงขึ้นและมีความรวดเร็วในการทำงานอีกด้วย และในด้านค่าใช้จ่าย (Cost) ในการพัฒนาซอฟต์แวรจากไพธอนนั้นในประเทศไทยนั้นยังต้องใช้ค่าใช้จ่ายค่อนข้างสูง เพื่อให้ได้มาซึ่งซอฟต์แวร์ที่ดี เพราะผู้เชี่ยวชาญที่เขียนไพธอนได้มีเสถียรภาพนั้นยังมีน้อย ทำให้ค่าตัวสำหรับผู้พัฒนานั้นสูงตามไปด้วย ถึงแม้ว่าเครื่องมือในการพัฒนานั้นจะฟรี และเป็น Open source ก็ตาม แต่ค่าใช้จ่ายในด้านบุคลากรนั้นมีมากกว่าค่าเครื่องมือพัฒนา


ข้อมูลอ้างอิง

คำสั่งการใช้งานต่าง ๆ ของ Python สามารถอ่านได้จาก Python Programming Language Documentation ที่ http://docs.python.org

Programmer Life Style

  1. ค่าของคน อยู่ที่ผลของงาน
  2. โอกาศในวันพรุ่งนี้ขึ้นอยู่กับการกระทำในวันนี้
  3. จงรักและเชื่อในงานทีทำ ดูแลมันให้เหมือนลูกเหมือนเมีย
  4. สมดุลของชีวิตส่วนตัวและชีวิตงาน ห้ามทำงานเกิน 10ชม. เด็ดขาด
  5. ชีวิตคุณอาจจะมีแค่วันพรุ่งนี้ ดังนั้นทำวันนี้ให้ดีที่สุด
  6. เราเกิดมาเพื่ออะไร คุณค่าต่อสังคมของเราคืออะไร เราทำอะไรให้สังคมบ้าง
  7. คิดก่อนทำ
  8. ทำเสียวันนี้ ไม่ต้องรอวันพรุ่งนี้
  9. อย่ายึดติดกับภาษา มันก็แค่ฆ้อน ตะปู ที่ใช้สร้างบ้าน วิธีการสร้างบ้านต่างหากที่สำคัญ
  10. หมั่นศึกษาหาความรู้ใหม่ๆ โลก IT เปลี่ยนแปลงทุกนาที
  11. ค้นคว้าศึกษาด้วยตัวเองก่อนถามผู้อื่น ความรู้ที่เกิดจากการประมวลผลขึ้นมาเอง จะอยู่ติดเราไปจนตาย
  12. ให้ความสำคัญกับคุณภาพของงานที่ทำให้มากที่สุด มันคือสิ่งวัดคุณค่าของเรา
  13. ชีวิตคือของเรา แต่งานทำให้เรามีคุณค่า และผลงานคือสิ่งที่ทำให้เราอยู่ในความทรงจำ
  14. จงเป็นถูกเลือก ไม่ใช่ถูกลืม
  15. ธุรกิจคอมพิวเตอร์เหมือนเลขฐานสอง เป็น 1 หรือเป็น 0 อยู่รอดหรือดับสูญ
  16. จงทำมากกว่าพูด แต่เมื่อพูดแล้วต้องทำให้ได้ ถ้าไม่ได้อย่าพูดออกมา

อะไรคือโปรแกรม และการเขียนโปรแกรม ตอนที่ 2 (จบ)

ตอนที่แล้วจาก : อะไรคือโปรแกรม และการเขียนโปรแกรม ตอนที่ 1



หันกลับมา
มองการเขียนโปรแกรม

            เมื่อเราได้มองซ้ายมืองขวาแล้ว เราก็คงพบว่า ทั้งการก่อสร้าง ทั้งการเขียนนิยาย มีคอนเซปท์ที่ค่อนข้างคล้ายกันมากที่เดียว และถ้าเราเทียบกับการสร้างโปรแกรมแล้ว เราจะได้อะไร ?

            หาคิดเป็นการเขียนโปรแกรม เราจะพบว่าโปรแกรม ก็คือการที่เราสรางอะไารซักอย่างขึ้นในคอมพิวเตอร์ หรือว่าการเขียนนิยายสักเล่มขึ้นมาในคอมพิวเตอร์ การสร้างโปรแกรมขึ้นมาสักตัวนั้น ต้องการจินตนาการ, ความคิดพื้นฐาน และคอนเซปท์อื่น ๆเบื้องต้นมากมาย ว่าเราต้องการอะไร เมื่อสเร็จแล้วจะสามารถทำอะไรได้บ้าง และต่อไปก็คือ การวิศวกรรมซอฟต์แวร์ ซึ่งเป็นการเขียนพิมพ์เขียวของตัวโปรแกรมของเรา เพื่อให้ออกมามีความเสถียรภาพ แก้ไขได้ง่าย ต่อเติมได้ตามความต้องการ ฯลฯ และนอกจากนี้ ยังขึ้นอยู่กับขนาดของโปรแกรมอีกด้วย คือเมื่อสร้างโปรแกรมที่มีขนาดใหญ่ขึ้นนั้น ต้องใช้เวลาออกแบบต่าง ๆ นานขึ้น บางโปรแกรมต้องแก้แบบกันไม่รู้กี่เที่ยว กว่าจะได้ลงมือเขียนจริง ๆ และการสร้างนั้น มักจะทำเป็นทีมหลาย ๆ คน ยิ่งโปรแกรมที่มีขานดใหญ่เท่าใด ก็ยิ่งใช้คนมากเท่านั้น แต่ละคนแบ่งหน้าที่กันอย่างชัดเจน และนอกตากนี้แล้ว ถ้าแบบตอนแรกของโปรแกรมถูกวางไว้ไม่ดี ก็ยากที่จะสามารถพัฒนาโปรแกรมที่ดีได้แน่นอน
            นอกจากนี้ ความรู้พื้นฐานกับโปรแกรมหรือระบบที่ต้องการสร้างเป็นสิ่งสำคัญ และจำเป็นที่เราต้องรู้และทำความเข้าให้ดี ๆ จะกล่าวว่า ความรู้พื้นฐานเหล่านี้เป็นส่วนหน่งของ แบบแปลนพื้นฐานของสิ่งก่อสร้าง หรือว่า โครงเรื่องพืนฐานของนิยาย ก็ไม่ผิดนัก ซึ่งขอยกตัวอย่างโปรแกรมบางประเภท และความรู้พื้นฐานบางส่วนเท่านั้น ซึ่งมีดังนี้

  • โปรแกรมที่ทำการจำลองการเดินทางของแสง จำเป็นต้องเข้าใจ Electromagnetics (Maxwell’s equations) และ Finite Defference method เป็นอย่างน้อยที่สุด

  • การจำลองของไหลในท่อน้ำ อาจจะใช้ Navier-Stoke’s equations กับ Finite Elements methods
    Voice recognition program
    อาจจะต้องใช้ความรู้ Pattern recognition, Signal processing ตลอดจนเรื่องอื่นๆ ที่เกี่ยวข้อง

  • โปรแกรมแต่งภาพ ก้ต้องรู้เรื่องพวก Image processing ต่างๆ ตลอดจน Compression techniques ต่าง ๆ
    3D Modeling
    ก็ต้องเข้าใจคณิตศาสตร์ของ Bazier curve, B-Spilne, NURB, Ray tracing หรือว่าเร็วๆ นี้ก็ Photon mapping

  • โปรแกรมเพื่อทำการดู Pattern ใน DNA sequence ก็จำเป็นต้องรู้เกี่ยวกับเรื่องของ DNA เบื้องต้นด้วย
    การเขียนเกมปรแกรม อาจจะต้องรู้ A*Path-finding, Collision  detecting, การประยุกต์ใช้ DSP-Tree ฯลฯ

  • ฯลฯ

เป็นต้น หรือว่าแม้แต่การพัฒนาส่วนประกอบใหม่ ๆ ของระบบเดิม ๆ เช่น

  • การเพิ่มตัวป้องกันเมลขยะ หรือ Spam mail ในโปรแกรมรับ e-mail ก็ตาม อาจจะใช้ความรู้พวก Machine learning, Pattern recognition, Rule discovery ฯลฯ ต่าง ๆ มากมาย

  • การทำ On-line e-Commerce นั้นก็อาจจะใช้ Machine learning เข้ามาช่วยกันกับ Data clustering และ  selt-organizing Map เพื่อแนะนำสินค้าให้กับลูกค้า

  • การเขียนโปรแกรมเพื่อควบุคมระบบ Network แบบอัตโนมัติ จำเป็นต้องรู้ Network Flows และ Optimization theory

  • ฯลฯ

            ซึ่งจะเห็นได่ว่า การเขียนโปรแกรมเหล่านี้นั้น ถ้าไม่มีความรู้และความเข้าใจพื้นฐานในสิ่งที่เราต้องการเขียนในระดับหนึ่งแล้ว ก็คงไม่สามารถทำได้ หรือว่าแม้ทำได้ก็ปราศจากความรู้เหล่านี้ ก็คงจะไม่มีประสิทธิภาพมากนัก ตลอดจนความผิดพลาดก็เป็นไปได้สูง นอกจากนั้นความรู้เบื้องต้นในแต่ละเรื่อง หลายครั้งไม่สามารถที่จะใช้งานข้ามไปข้ามมาในเรื่องอื่น ๆ ได้ ไม่ว่าแนวความคิดพื้นฐานจะใกล้เคียงกันแค่ไหนก็ตาม


ภาษาและการเขียนโปรแกรม

            การเขียนนิยาย เราใช้ภาษาใดภาษาหนึ่ง (ภาษาไทย, ภาษาอังกฤษ ฯลฯ) ในการเขียนบอกให้ตัวละครไปตามสถานที่ต่าง ๆ ในการเขียนบทสนทนา ในการเขียนบรรยายฉาก และเขียนในสำนวณต่าง ๆ กันไปแล้วแต่ผุ้เขียนแต่ละคน

            สำหรับการเขียนโปรแกรมนั้น ก็คือการเขียนคำสั่งเพื่อให้คอมพิวเตอร์ทำงานตามที่เราต้องการ อย่างที่ได้กล่าวถึงไปแล้วข้างต้น และเช่นเดียวกับการเขียนนิยาย ที่เราใช้ภาษาที่คนอ่านเข้าใจ การเขียนโปรแกรมคอมพิวเตอร์ ก็คือการเขียนคำสั่ง โดยใช้ภาษาที่คอมพิวเตอร์ สามารถเข้าใจได้ ซึ่งนั้นก็คือ ภาษาเครื่อง (Machine Language) นั่นเอง แต่ว่าทั้งนี้ ภาษาเครื่องนั้นยากต่อการทำความเข้าใจมาก จึงได้มีการพัฒนาภาษารับดับสูง (High-level Language) ขึ้นมามากมายหลายภาษา เพื่อให้คนสามารถเขียนโปรแกรมได้ง่ายขึ้น และใช้โปรแกรมที่เรียกกว่า คอมไฟเลอร์ (Compiler) ทำการแปลเป็นภาษาที่เครื่องเข้าใจอีดต่อหนึ่ง โดยภาษาระดับสูงที่เป็นที่รู้จักกันโดยทั่วไปก็คือ  C, C++, Pascal, Java ฯลฯ นอกจากนี้ยังมีอีกหลายภาษาที่ไม่เป้นที่รู้จักกันมากเท่ากับภาษาเหล่านี้ แต่ว่าก็เป็นภาษาที่สำคัญ และมีบทบาทในงานหลายอย่าง เช่น Lisp, OcaML, Python, Perl, Hashell ฯลฯ โดยภาษาเหล่านี้จะมีจุดเด่น และจุดด้อนแตกต่างกันไป

เรียบเรียงบทความโดย Rawitat Pulam

บทความฉบับนี้เป็นไปตามข้อกำหนดของ GNU Free Documentation License 1.2. เท่านั้น