เริ่มต้นเขียนโปรแกรมด้วยภาษา Python กันเถอะ (ตอนที่ 1)

Posted by | August 15, 2009 | Python | 24 Comments

เริ่มต้นกันสักที่บทความทางคอมพิวเตอร์ ตอนแรกว่าจะเขียนเรื่อง การพัฒนา GUI Application ด้วย WxPython แต่ลองมาคิดดูว่า ถ้ายังเล่น Python กันไม่เป็นเนี่ย การที่จู่ๆ จะให้มานั่งอ่านบทความการสร้าง GUI มันคงจะมึนน่าดู ดังนั้นแล้ว ผมก็เลยว่าแนะนำการเขียนโปรแกรมด้วยภาษา Python กันก่อนสัก 2-3 บทความก่อนละกัน เวลาที่ไปดู WxPython จะได้ไม่มึนนัก

ทำไมต้อง Python?

หลายๆ คนถามผมบ่อยเหมือนกันว่าทำไมต้องใช้ Python ในเมื่อสถาบันศึกษาหลายแห่งก็ไม่เห็นบรรจุในหลักสูตรวิชา Basic Programming (ส่วนใหญ่สอน C, C++, หรือไม่ก็ Java) แสดงว่า Python มันไม่เจ๋งจริงรึเปล่า?

ถ้าให้สารภาพตามตรง เมื่อก่อนผมก็คิดว่าในเมื่อ C/C++ กับ Java มันทำได้ตั้งมากมายขนาดนั้นตั้งแต่งาน Low-Level ยัน High-Level แล้วผมจะหัดอีกภาษาเพิ่มให้มึนเพิ่มทำไมกัน แต่จากความบังเอิญ (แกมบังคับ) ที่ได้มาใช้งานมันจนถึงทุกวันนี้ ทำเอาผมแทบขี้เกียจกลับไปเขียน C++ เลยทีเดียว

Python เป็นภาษา Dynamic Object-Oriented Programming ที่ถูกพัฒนาขึ้นโดย Guido von Rossum ในปี ค.ศ. 1990 (ปีนั้นผมยังเพิ่งเริ่มหัดพูดหัดเดินเอง 😛 ) และปัจจุบันถูกดูแลโดย Python Software Foundation (PSF) โดย Version ล่าสุดตอนนี้คือ Python 3.1 หรือเรียกอีกอย่างว่า Python 3000 หรือ Py3k (ไม่รู้ว่ากะจะใช้จนถึงปีค.ศ. 3000 รึเปล่า 555 :P) รายละเอียดเพิ่มเติมสามารถที่จะดูได้ที่ Official Site ที่ http://www.python.org

สิ่งที่ดึงดูดผมให้ชอบ Python ก็คือมันเป็นทั้ง Cross Platform และมี Open Source License ดังนั้นแล้วหมายความว่า

“ถ้าผมพัฒนาโปรแกรมสักตัวด้วย Python ผมสามารถที่จะเอาไปทำงานบน? Operating System ได้หลากหลาย ไม่ว่าจะเป็น? MS Windows, Linux, หรือ OS/X เป็นต้น (Cross Platform) โดยที่ผมมีอิสระในการแก้ไข Library ต่างๆ ที่ Python ให้มา รวมถึงการนำ Software ที่พัฒนาขึ้นจาก Python ไปทำประโยชน์ทางธุรกิจได้อย่างเต็มที่โดย ไม่เสียเงิน ครับ ^___^ (Open Source License)”

นอกจากนี้ตัวโครงสร้างและ Syntax ของภาษาค่อนข้างอ่านง่าย เข้าใจง่าย และมี Object ด้าน Data Structure รองรับอยู่หลายแบบแล้ว ทำให้ Python เป็นของ ฟรี และของ ดี ที่ช่วยให้พัฒนาโปรแกรมได้เร็วขึ้น มันจึงเพิ่มความมันส์ในการเขียนโปรแกรมให้กับ Programmer หลายคน (รวมถึงผมด้วย ^___^)

เพื่อให้เข้าใจได้ง่ายขึ้นว่า โครงสร้างมันเขียนง่ายอ่านง่ายยังไง ลองมาดูตัวอย่างกันนิดหน่อยดีกว่า ว่าระหว่าง Java กับ Python เขียนอ่านยากง่ายต่างกันยังไง

เริ่มจะสนุกแล้วคลิกข้างล่าง เพื่ออ่านต่อได้เลยนะครับ ——>>>>

ตัวอย่างที่ 1: ตัวอย่างโปรแกรมยอดฮิต “Hello world !” (อีกแล้วเหรอ :-p )

สำหรับ Java

public class
{
   public static void main(String[]args)
   {
         System.out.println("Hello, world!");
   }
}

สำหรับ Python

print "Hello, world!"

จะเห็นได้ชัดเจนว่าทางฝั่ง Java เขียนได้ยาวกว่ามาก ยิ่งถ้านับถึงความวุ่นวายในการเรียก method แล้ว ทาง Python เขียนสั้นและอ่านง่ายกว่าอย่างชัดเจน ผู้อ่านบางคนอาจจะบอกว่าทางฝั่ง Java ผมยกเอาทั้ง main function มาเต็มรูปแบบมันก็ต้องยาวสิ แต่ผมก็จะบอกเหมือนกันว่า ทางของ Python นั้น ก็เป็น main function เต็มรูปแบบเหมือนกันครับ

ลองดูตัวอย่างต่อไปก็จะเห็นได้เช่นกันว่า แม้กระทั่งการประกาศตัวแปรหรือการใช้ Conditional Statement ก็ยังดูกระทัดรัดกว่า

ตัวอย่างที่ 2: การประกาศตัวแปรและลักษณะการใช้ Conditional Statement

สำหรับ Java

int myCounter = 0;
String myString=String.valueOf(myCounter);
if (myString.equals(?0?))

              . . .

สำหรับ Python

myCounter = 0
myString = str(myCounter)
if myString == ?0?:

              . . .

ใน Java และ C/C++ การประกาศตัวแปรจะต้องระบุชนิดของตัวแปรอย่างชัดเจน แต่ใน Python นั้น การใช้งานตัวแปรต่างๆ ไม่จำเป็นต้องมีการประกาศและกำหนดชนิดของตัวแปรก่อน นอกจากนั้นการเปรียบเทียบค่าของตัวแปรก็ใช้ operator แทนการใช้ method ทำให้เขียนอ่านเข้าใจง่ายกว่า

ในเรื่องของตัวแปรที่เกี่ยวข้องกับ Data Structure ยกตัวอย่างเช่น Linked List ทาง Python เองก็มีลักษณะที่กะทัดรัดกว่าเช่นกัน สังเกตได้จากตัวอย่างที่ 3 ข้างล่าง การประกาศใช้ Linked List ของ Python ไม่จำเป็นต้องกำหนดประเภทของข้อมูลของ Linked List ล่วงหน้า ทำเพียงแค่ประกาศขึ้นมาลอยๆ แล้วสามารถที่จะทำข้อมูลมาใส่เพื่อใช้งานได้เลย ^___^

ตัวอย่างที่ 3: การใช้งาน Data Structure ประเภท Linked List

สำหรับ Java

public Vector aList = new Vector;
public int aNumber = 5;
public int anotherNumber;

aList.addElement(aNumber);

anotherNumber = aList.getElement(0);

สำหรับ Python

aList = []
aNumber = 5

aList.append( aNumber )

anotherNumner = aList[0]

อ้างอิงตัวอย่างการเปรียบเทียบจาก http://www.ferg.org/projects/python_java_side-by-side.html)

แล้ว Python มันดีกว่า Java หรือ C/C++ ในทุกๆ ด้านจริงเหรอ?

แน่นอนครับว่า Python มีข้อดีมาก แต่ก็ใช่ว่าจะไม่มีข้อเสียเลยเมื่อเทียบกับ C/C++? 😛

ประการแรกเลยครับ Python เป็น Scripting Language ซึ่งทำงานโดยมี Interpreter แปลงคำสั่งในแต่ละบรรทัดของโปรแกรมให้เป็น machine code ในระหว่างที่โปรแกรมทำงาน โดยไม่มีการ compile ตัว source code ทั้งหมดเป็น machine code ก่อนเริ่มการทำงานของโปรแกรม ดังนั้นสิ่งที่จะพบแน่ๆ คือ มันจะทำงานช้ากว่า C/C++ (รวมถึง Java ด้วย )

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

อย่างไรก็ตามแม้ว่าโปรแกรมที่พัฒนาด้วย Python จะมีความเร็วในการทำงานช้ากว่า C/C++ และ Java แต่สิ่งแลกกลับมาก็คือ ความเร็วในการพัฒนาโปรแกรม ลองคิดดูครับว่า ถึงแม้ C/C++ จะทำงานเร็ว แต่ใช้เวลาในการพัฒนาโปรแกรมค่อนข้างนาน โดยเฉพาะอย่างยิ่ง งานที่ต้องใช้ Data Structure ที่มีความซับซ้อนมาก ซึ่งไอ้ความนานของการพัฒนานี่เองที่ทำให้ผู้เขียนอาจจะเบื่อที่จะพัฒนาโปรแกรมไปก่อน (เพราะทำไม่เสร็จสักที) ยิ่งถ้าเป็นงานที่เกี่ยวกับธุรกิจแล้ว อาจจะส่งผลความเบื่อนี้ให้กับลูกค้าของเราด้วย ^^; ซึ่งในหลายๆ ครั้ง สิ่งที่พบในงานจริงๆ นั้น ลูกค้ามักจะอยากได้โปรแกรมไปใช้เร็วๆ มากกว่าได้โปรแกรมเร็วๆ แต่ไม่รู้ว่าพัฒนาเสร็จเมื่อไหร่ ดังนั้นเรื่องความเร็วในการทำงานจึงไม่เป็นปัญหามากนัก ยกเว้นว่าโปรแกรมมันจะทำงานช้ามากๆๆๆๆๆ จนคนใช้โปรแกรมรำคาญ 😛

จริงๆ แล้วมันมีเทคนิคในการนำ C/C++ มาผสมกับ Python เพื่อนำข้อดีด้านความเร็วในการทำงานของ C/C++ กับความยืดหยุ่นและความง่ายในการเขียนของ Python มารวมเข้าด้วยกันโดยใช้ tools เสริม ซึ่งไว้โอกาสหลังๆ ผมจะพูดถึงเรื่องนี้อีกทีหนึ่งตอนที่เราทำกันเรื่องที่ Advance มากๆ แล้วครับ ^___^

เป็นยังไงบ้างครับ หวังว่าทุกท่านที่แวะผ่านเข้ามาที่นี่ น่าจะมีความรู้จักเบื้องต้นกับ Python แล้ว ^___^ ในบทความหน้า ผมจะเขียนถึงวิธีการติดตั้งโปรแกรมและ tools สำหรับการพัฒนาโปรแกรมเบื้องต้นด้วย Python ครับ สำหรับตอนนี้ผมขอจบเท่านี้ก่อนล่ะน่อ สวัสดีครับ

About Te

  • noina

    ไหนบอกว่าจาสอน python ม่ะเห็นสอนเลยง่ะ T_T
    ให้ไปอ่านเองเหรอพี่เต้? เอ๊ะ ยังไง?

  • noina

    กำ โทดทีๆ เมื่อกี้ อ่านแค่ข้างหน้า ฮ่าๆ เด๊วขออ่านก่อนนะ แล้วจะมา comment ใหม่
    หน้าแตกซะ ก๊ากกกกกกกกกกกกๆๆๆๆ

  • sky

    พี่ครับช่วยเขียนบทความเกี่ยวกับการติดต่อ serial port USB port ด้วยนะครับ กำลังเริ่มศึกษาแบบว่าอยากรู้ว่าcomมันติดต่อกับอุปกรณ์ภายนอกได้อย่างไร ผมจะติดตามอ่านนะครับ

  • Type your comment here

    noina :

    กำ โทดทีๆ เมื่อกี้ อ่านแค่ข้างหน้า ฮ่าๆ เด๊วขออ่านก่อนนะ แล้วจะมา comment ใหม่
    หน้าแตกซะ ก๊ากกกกกกกกกกกกๆๆๆๆ

    ขำ ฮ่าๆๆ เพิ่งเห็นคนหน้าแตกใน blog เดี่ยวเขาจะพยายามทำไปครับ เพื่อให้น้องรุ่นต่อไป ได้สานต่อ (เพื่อชาติกันน่าดูเลย)

    sky :

    พี่ครับช่วยเขียนบทความเกี่ยวกับการติดต่อ serial port USB port ด้วยนะครับ กำลังเริ่มศึกษาแบบว่าอยากรู้ว่าcomมันติดต่อกับอุปกรณ์ภายนอกได้อย่างไร ผมจะติดตามอ่านนะครับ

    อืม เรื่องติดต่อภายนอก ต้องมีอยู่แล้วครับ สุดท้ายจะให้เอา pyWidget เพื่อรับส่ง ข้อมูล กับบอร์ดไมโครครับ

    แต่ไม่รู้นานแค่ไหนนะครับ อย่างไงก้อจะเร่งๆ คนเขียนให้ครับ

  • FFF

    ชอบกอ่านบทความที่มีทั้งข้อดีและข้อเสียมากเลยครับ
    ทำให้เรารู้ว่าจะต้องระวังอะไรบ้าง ส่วนมากเห็นแต่ข้อดี จะเจอข้อเสียก็ต่อเมื่อได้ลงมือทำ มันเสียเวลา 😉

  • ขอบคุณมากครับ ทั้งทางเวปและผู้เขียน
    ที่ตั้งใจจะเผยแพร่ความรู้ให้น้องๆ เพื่อชาติ

    ชื่นชมงับ

  • FFF :

    ชอบกอ่านบทความที่มีทั้งข้อดีและข้อเสียมากเลยครับ
    ทำให้เรารู้ว่าจะต้องระวังอะไรบ้าง ส่วนมากเห็นแต่ข้อดี จะเจอข้อเสียก็ต่อเมื่อได้ลงมือทำ มันเสียเวลา ;-)

    ถือว่าบทความที่นี้ เป็นการแลกเปลี่ยนความคิดเห็นกันครับ จิงๆแล้ว การเปรียบเทียบอาจจะเป็นเพียงมุมมองของผู้เขียน ที่ใช้งานมาเฉพาะด้าน อาจจะไม่ถูกต้องทั้งหมด จิงๆอยากฟังความคิดเห็นจากหลาย developer เหมือนกันครับ

    RobinTh :

    ขอบคุณมากครับ ทั้งทางเวปและผู้เขียน
    ที่ตั้งใจจะเผยแพร่ความรู้ให้น้องๆ เพื่อชาติ

    ชื่นชมงับ

    จากใจทางเราอยากกระตุ้นการเรียนรู้ เทคโนโลยีนะครับ
    อยากจะสร้างสังคมของการคนที่ชอบเทคโนโลยีด้วยครับ (ตาม concept web2.0 เลยครับ)

    คือ ถ้าพวกเราเข้าใจในตัวเนื้องานที่ทำ และประยุกต์ใช้งานได้แล้ว
    เวลาจะใช้เราจะมั่นใจกล้าลองมากขึ้นครับ

    เผื่อจะได้เห็นกรุงเทพฯ เป็นเมืองที่มีเทคโนโลยีรวมกับวัฒนธรรมที่ สุดยอดของโลกบ้าง ฮ่าๆ

  • แมน

    เราจะนำภาษา python มา run บน pic หรือ avr ได้ใหม อย่างไรครับ

    • ไม่ได้ครับ

      python มันเป็น interpreter/script ครับ ไม่ใช้ compiler เช่นเดียวกับ JAVA ก้อเป็น interpreter เช่นกัน

      อธิบายง่ายๆนะครับ ที่เราเขียนโปรแกรมใน pic หรือ avr ตัว compiler มันจะแปลงจาก code ที่เขียน เป็น machine code หรือ เป็น binary file คือไฟล์นี้จะสามารถรันได้ ทำงานได้
      ซึ่งจะแตกต่างกับ interpreter ครับ ตัว interpreter จะต้องโหลดเข้าไปในระบบก่อน จากนั้นก้อจะรัน code คำสั่ง อีกที่ครับ โดยมันไม่ไ้ด้ แปลงเป็น binary file

      เพราะฉะนั้น เป็นไปได้ยากที่จะเอา python ไปรันใน AVR หรือ PIC ครับ นอกจากท่านจะทำ เอาหลักการของ interpreter ไปทำชุดคำสั่งง่ายๆ ใส่เข้าไปใน MCU เองครับ

    • wrongite

      ของ PIC มี http://pyastra.sourceforge.net/

      • ว้าว ขอบคุณครับ เพิ่งรู้ว่ามีคนทำด้วย pic บน python

        แล้ว ได้ทดลองหรือยังครับ

  • Sukit

    ขอบคุณมากครับ ผมว่าจะเริ่มศึกษาดูบ้างแล้ว กำลังมองว่าจะใช้ Editor ตัวไหนดีที่เป็น IDE และ GUI ที่สะดวก เรียนรู้ง่าย
    มีคำแนะนำไม๊ครับ 

  • Chiro Max5

    เยี่ยมเลยครับ กำลังอยากลองเขียน python บ้าง ได้เป็นแนวทาง  _

  • มันเป็นอะไรที่ “ใช่” สำหรับผมเลยล่ะครับ กำลังลองศึกษาดูอยู่
    ยิ่งถ้าง่ายต่อการศึกษา และเข้าใจได้ง่ายๆ แบบนี้ก็น่าหันมาใช้งานนะครับเนี่ย
    ถึงแม้ว่าโปรแกรมที่พัฒนาขึ้นมา อาจจะมีความช้ากว่า C++ แต่ก็น่าลองครับ อิอิ

    ขอบคุณบทความดีดีแบบนี่เลยครับผม

    • ด้วยความยินดีครับ

  • Xmen

    นึกถึงภาษา Basic

  • Mafear8898

    หน้าสนใจดีนะคับ กับลังอยากลองอะไรใหม่ ๆ บ้างนะคับ

  • Haha_nopkub

    เจ๋งมากครับ ผมจะเรื่มจากภาษานี้แล้วกัน 

  • Rattaplon

    ผมก็ว่า Python นี่แหล่ะ ที่เหมาะสมที่สุด ในการศึกษา computer programming ในยุคนี้ เป็นภาษา ที่มีความง่าย และเข้าใจมันง่าย เหมือนกับภาษา basic ที่เขียนกันในสมัยก่อน ในตอนนี้เด็กนักเรียน  ในประเทศอังกฤษ ใช้ภาษานี้ในการเรียนวิชาการเขียนโปรแกรมคอมพิวเตอร์

  • Pontakorn Paesaeng

    thaithon ก็คือ python แปลไทยใช่ไหม

  • Superman

    alert(“Test”)

    • Fuckass

      เหอะ คิดจะ xss ฝันไปเถอะครับ

  • Rawat Malagun

    กำลังเริ่มที่จะศึกษาแล้วครับ…ขอบคุณที่นำมาเขียนกระตุ้นความคิดครับ

  • Veeranit Sook

    เพิ่งเริ่มศึกษาอยากติดตามกระทู้ค่ะ