วันอังคารที่ 6 กรกฎาคม พ.ศ. 2553

การเลือกภาษา : In the eyes of the beholder

สองคนยลตามช่อง

คนหนึ่งมองเห็นโคลนตม

อีกคนพอได้ชม

เห็นดวงดาวอยู่พราวพราย

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

ผมขอพูดถึงภาษาที่ได้รับความนิยมสูงเท่านั้นนะครับ

ภาษา Assembly

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

ถ้าเจ้านายของคุณ ให้คุณหาผลรวมของเงินเดือนทุกคนในบริษัท ถ้าคุณใช้ภาษาอื่นเขียน คุณอาจจะขอเวลา ครึ่งชั่วโมง คุณสามารถเอาตัวเลขไปนำเสนอให้เจ้านายคุณได้ แต่ถ้าคุณใช้ภาษา Assembly คุณอาจต้องใช้เวลาถึงสองเดือนในการเขียน มันไม่ได้งานครับ ถึงแม้ว่าคุณจะบอกว่า ถ้าเขียนด้วยภาษาอื่น คุณอาจต้องใช้เวลาถึง 3 นาที กว่าจะได้คำตอบ แต่ถ้าใช้ภาษา Assembly คุณอาจใช้เพียงแค่ 30 วินาทีเท่า นั้น แต่ตัวเลขที่แตกต่างนี้ไม่มีนัยครับ ตราบใดถ้าคุณมีตัวเลขให้เจ้านายคุณบ่ายนี้

จุดอ่อนหลักอีกข้อของภาษา Assembly ก็คือ CPU แต่ละตัวจะมีภาษาไม่ เหมือนกัน คุณต้องศึกษาภาษา Assembly หลายตัวเพื่อให้รองรับการทำงานกับเครื่องที่ต่างกันครับ

ถ้ามองอีกแง่หนึ่ง ก็คือ ความเร็วของภาษา Assembly กับภาษาระดับสูงนั้น ไม่ได้แตกต่างกันมากนัก เครื่องคอมพิวเตอร์ในยุคปัจจุบัน ก็เร็วมาก เร็วจนกระทั่ง เราใช้ภาษาที่ช้าที่สุดในโลก ความเร็วยังอยู่ในเกณฑ์ยอมรับได้ และการกำเนิด OS แบบ GUI เช่น Windows ก็ยิ่งทำให้การเขียนภาษา Assembly ยุ่งยากขึ้น ดังนั้น ภาษา Assembly จึงเสื่อมมนต์ขลังในที่สุด

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

ภาษา C

จุดกำเนิดของภาษา C นั้น เกิดมาจาก UNIX ผู้ออกแบบภาษา UNIX ต้องการให้ OS ของตัวเอง สามารถใช้งานได้บนเครื่องต่างๆ กัน แต่การที่จะต้อง Implement UNIX โดยใช้ภาษา Assembly ของแต่ละ เครื่อง เป็นสิ่งที่ยุ่งยากเกินไป ผู้ออกแบบ UNIX จึงสร้างภาษากลางภาษาหนึ่ง ซึ่ง UNIX ทั้งตัวเขียนจากภาษาดังกล่าว ดังนั้นเมื่อต้องการ ให้ UNIX ใช้งานได้บนเครื่องใด ก็ให้สร้างคอมไพเลอร์ของภาษากลางบนเครื่องนั้นก่อน คอมไพเลอร์จะแปล โปรแกรมให้เป็นภาษาเครื่อง ทำให้ลดความซับซ้อนลงมาก ภาษากลางดังกล่าวก็คือ ภาษา C นั่นเองครับ

การออกแบบภาษา C เข้าลักษณะภาษาเฉพาะกิจ ผู้ออกแบบ คงไม่ได้คาดว่า มันจะเป็นที่นิยมมากในเวลาต่อมา ดังนั้นเป้าหมายตอนออกแบบคือเน้น Productivity มากกว่าเน้นความสวยงาม ดังนั้นภาษา C จึงดูค่อนข้างยากเมื่อเทียบกับภาษาอื่นๆ ภาษา C มีจุดเด่นอยู่หลายข้อ แต่ที่กล่าวว่าเป็นจุดเด่น แต่ละข้อนั้น บางคนก็ว่า มันคือจุดด้อยต่างหาก ผมว่ามันขึ้นอยู่กับรสนิยมของผู้ใช้งานเหมือนกัน

ภาษา C มีจุดเด่น คือ สั้น กะทัดรัด ภาษา C มีรูปแบบย่อทำให้เขียนสั้นลง อยู่มาก ซึ่งข้อดีก็คือ สั้นดีครับ แต่ข้อเสีย ก็คือ ซับซ้อน อ่านยาก เวลาอ่านก็เหมือนกับการแก้สมการ คุณอาจจะบอกว่า คุณเลือกที่จะเขียนแบบไม่ซับซ้อนก็ได้ แต่พูดยากครับ คุณไม่เขียน แต่คนอื่นเขาเขียนครับ ถ้าคุณไม่เรียนรู้เสียเลย คุณก็อ่าน Code คนอื่นไม่รู้เรื่อง และการใช้ วงเล็บปีกกา ซึ่งดูคล้ายกับวงเล็บธรรมดา เวลาเขียนโปรแกรมก็สับสนพอสมควร จุดอ่อนอีกจุดหนึ่งที่สำคัญของภาษา C ก็คือ ภาษา C มองทุกอย่างเป็น Case Sensitive ทำให้เขียนโปรแกรมแล้วหลงเรื่อง Case เป็นประจำ

จุดเด่นที่สุดของภาษา C คือการรองรับ pointer นั้นอาจจะมองได้ว่าคือจุดอ่อนที่สุดของภาษา C ทำไมถึงเป็นเช่นนั้น

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

อีกปัญหาหนึ่ง ก็คือตัวของภาษา C ไม่มีตัวจัดการจองหน่วยความจำในตัวเอง เมื่อเวลาเราต้องการจองหน่วยความจำแบบ Dynamic ภาษา C ทำ wrapper เพื่อติดต่อกับ OS เพื่อขอจองหน่วยความจำโดยตรง ปัญหาก็คือ การติดต่อกันระหว่างโปรแกรมของเรากับ OS เป็นไป อย่างหลวมๆ ถ้าโปรแกรมลืมบอก OS ว่าเลิกจองหน่วยความจำดังกล่าว หน่วยความจำนั้นก็จะถูกจองไปเรื่อยๆ เราจะเห็นเครื่องคอมพิวเตอร์ทำงานได้เร็วในตอนเช้า แต่พอตกบ่ายก็ช้าลงจนทำงานไม่ไหว จนสุดท้ายต้อง boot ใหม่ สาเหตุหลักของปัญหานี้คือ สิ่งที่เรียกว่าหน่วยความจำรั่ว หรือ Memory Leak ก็เรื่องจองแล้วลืมเอาคืนนั่นแหละครับ

ภาษาเคย C ถูกใช้เป็นบทพิสูจน์ว่าคุณเป็นโปรแกรมเมอร์ระดับดีหรือไม่ ถ้าโปรแกรมเมอร์คนไหน เขียนภาษา C ไม่ได้ เขาจะดูถูกเอา ภาษา C จึงดูเป็นของโก้เก๋ เอาไปคุยข่มกันได้ ในยุคหนึ่งมีการกล่าวกันว่า ถ้าคุณเขียนภาษา C ไม่เป็น คุณไม่ใช่โปรแกรมเมอร์ที่แท้จริง แต่ผมว่า โปรแกรมเมอร์ที่แท้จริงตายไปเยอะแล้วครับ

เห็นผมบ่นภาษา C แต่คงต้องบอกก่อนว่า ผมรักภาษา C มากที่สุด ก็ผมโตมากับมันนี่ครับ วันนี้ภาษา C ก็เสื่อมความนิยมไปมากแล้ว ตั้งแต่ GUI OS อย่าง Windows เข้ามามีบทบาท ภาษา C ปรับตัวเองเข้ากับการเขียนโปรแกรมแบบ GUI ไม่ค่อย ได้ จึงเสื่อมความนิยมไปเกือบหมด คงเหลือแต่การใช้งานบน UNIX เท่านั้นครับ ที่ยังคงพอใช้ภาษา C กันอยู่

จุดเด่นของภาษา C อีกข้อก็คือ เรามีหนังสือ Algorithms ดีๆ ที่ใช้ภาษา C อ้างอิงอยู่มากครับ ถ้าคุณต้องการศึกษา Algorithm คุณจะไม่ผิดหวังครับจากหนังสือภาษา C

ภาษา C++

ภาษา C++ เป็นลูกผสมระหว่างภาษา Simula และ ภาษา C นั่นเอง ภาษา C++ รับเอาแนวคิดของ ภาษา C มากว่า 95% ประยุกต์เข้ากับแนวคิดเชิงวัตถุของ Simula ทำให้ ภาษา C++ เป็นลูกผสมระหว่าง Procedural Language และ Object Oriented Language เราไม่สามารถบอกได้ ว่า C++ เป็น OOP 100% มันไม่ใช่ครับ คุณเลือกแบบภาษา C ก็ยังได้

ในยุคหนึ่งภาษา C++ เป็นภาษาที่ถูกพิจารณาว่าทำงานช้า ก็เล่นไปเปรียบเทียบกับภาษา C หรือ Assembly นี่ครับ ภาษา C++ อิงกับการใช้งาน Indirect pointer อยู่ มาก แต่ยุคนี้ภาษา C++ ถูกพิจารณาว่าเป็นภาษาที่ทำงานบน GUI OS ได้เร็วที่สุด (2 ภาษาข้างต้นยุ่งยากเกินไป) ดังนั้น โปรแกรมเมอร์ที่แท้กลับมาอีกแล้วครับ โปรแกรมเมอร์ที่แท้ต้องเขียน C++ ได้ ผมว่ามันไปกันใหญ่แล้วครับ

ภาษา C++ เป็นภาษาที่ละโมบพอสมควรครับ การออกแบบเน้นให้เป็นภาษา Superman มีโครงสร้างครบถ้วนที่สุด ปรับแต่งได้แทบทุกจุด ทำให้ Syntax ของภาษา C++ มีความซับซ้อน มาก โดยเฉพาะอย่างยิ่ง ความต้องการที่รองรับ Generic Programming และ Multiple Inheritance ทำให้ ภาษา C++ ตั้งปรับโครงสร้างของภาษา เพื่อให้รองรับได้ แต่มีโปรแกรมน้อยกว่า 1% ครับที่ดึงเอาความสามารถเหล่านั้นมาใช้งานจริงๆ แต่โปรแกรมอีก 99% ต้องรองรับความยุ่งยากของ Syntax มีหลายคนว่าไม่คุ้มครับ

ถ้าจะกล่าวไปแล้ว ภาษา C++ รองรับ OOP ค่อนข้างเต็มรูป แต่นั่นแหละครับ มันเหมือนกับการตายน้ำตื้น ที่ภาษา C++ ยังยอมรับ pointer และการจอง Memory จาก OS ทำให้เกิดปัญหาเดียวกับภาษา C ซึ่งยังแก้ไม่ตกในยุคปัจจุบัน ทุกวันนี้ เรายังเห็นโปรแกรมจากบริษัทใหญ่ๆ เขียนจากโปรแกรมเมอร์ระดับโลก มีปัญหาเรื่อง Memory Leak อยู่ และ Pointer ชี้ออกนอกลู่นอกทางก็ยังเห็นอยู่ทั่วไปครับ

ถ้าใครคิดจะศึกษา OOP ให้ลึก แต่ไม่สามารถอ่านภาษา C++ รู้เรื่อง ผมว่ายากครับ หนังสือเกี่ยวกับ OOP ดีๆ ส่วนมาก จะอิงกับภาษา C++ ครับ

JAVA

บริษัท Sun ถูกมรสุมทางการค้าค่อนข้างหนัก ทั้งในเรื่องของ Hardware มาในยุคหลังๆ ก็ถูก Hardware ถูกๆ แบบ PC ตีค่อนข้างหนัก ทำให้ยอดขายไม่ดีอย่างที่หวังไว้ เท่านั้นยังไม่พอ Windows NT ที่ OS ระดับ Server ราคาถูกจาก Microsoft ก็ตีปราการอันแข็งแกร่งของ Solaris ลงได้ ทำให้ ในที่สุด Sun ต้องกลืนน้ำลายตัวเอง ประกาศสนับสนุน OS อย่าง Linux กะว่าจะอาศัยความฟรี สยบ Microsoft จะทำได้หรือไม่ได้ต้องดูต่อไป

เท่านั้นยังไม่พอ Sun ต้องการเครื่องมือในการพัฒนาโปรแกรมที่ค่อนข้างสมบูรณ์ เพราะการสั่งซื้อ Hardware ต่างๆ จำนวนไม่น้อย ขึ้นอยู่กับฝ่าย IT ของบริษัทนั้นๆ ถ้ากุมใจของฝ่าย IT ของบริษัทได้ การค้าขายก็จะเกิดขึ้น Sun จึงสนับสนุนเครื่องมือในการเขียนโปรแกรม ในยุคแรก Sun สนับสนุนภาษา PERL ครับ แต่ไปไม่ค่อยรอด มาในยุคปัจจุบัน Sun สนับสนุนภาษา JAVA ครับ

แนวคิดของ Sun คือต้องให้ JAVA ทำงานได้บนทุกเครื่อง เพื่อสร้างสังคม JAVA ให้ได้ คน PC ก็จะมีโอกาสลองใช้ แต่แน่นอนครับ Hardware PC มัน สู้ ของ Sun ไม่ได้หรอกในแง่ความเสถียร เมื่อคน PC ใช้กันจนติดแล้ว สุดท้ายก็ต้องมาซื้อ Sun เพื่อทำเป็น Production นั่นเอง

Sun ทำตัวเหมือนค่ายเพลงเมืองไทยครับ ลดแลกแจกแถม JAVA นี้แจกกันฟรีๆ ไปเลย เนื้อหาของภาษา นั้นเอาภาษา C++ มาปรับปรุง ตัดเอา pointer ทิ้งหมด ทำให้กลายเป็นภาษา ระดับสูงโดยสมบูรณ์ พร้อมกันนั้น ตัดเอาการรองรับ procedural language แบบ C ออก คงเหลือแต่ OOP เท่านั้น และก็ได้ตัด เอา Multiple Inheritance และ Generic Programming ออกด้วย ทำให้ Syntax ดูง่ายขึ้น

แนวคิดของการตัดออก ผมไม่แปลกใจเลยครับ Sun ยึดหลักเอาเฉพาะที่จำเป็น อย่างที่เคยกล่าวในเมื่อพัฒนา Hot Java ว่า ผู้ใช้ส่วนมากแล้ว ไม่ได้ต้องการ ความสามารถอะไรมากหรอก Web Browser คือ Web Browser เราตัดขนาดได้ลงเยอะ มาเน้นเฉพาะสิ่งที่ผู้ใช้ต้องการใช้จริงๆ ดีกว่า สุดท้าย ผู้ใช้ก็สวดส่งครับ Star Office เหมือนกันที่ Sun ยึดเอาหลักนี้มาใช้ ก็เช่นเคยครับ ไปไม่ค่อยรอด

แต่ JAVA ไม่เป็นเช่นนั้นครับ ถึงแม้จะตัดอะไรออกไปมาก จนผมอึดอัด แต่ก็โชคดีของ JAVA ครับ คือตีตลาดถูกจุด คือรองรับ Web นั่นเอง Web Client Script และ Applet เป็นสิ่งที่ Java ผูกขาดความเป็นเจ้าของได้เลย ผมคิดนะครับ ถ้า JAVA ไม่ได้สัมปทาน ของสิ่งสองสิ่งนี้ ผมว่ามันตายไปนานแล้วครับ

ใช่ว่า JAVA จะตัดออกอย่างเดียวนะครับ มีสิ่งหนึ่งที่ JAVA เพิ่ม เข้าไป นั่นก็คือ Garbage Collector ซึ่งจะรับเป็นนายหน้าจัดการเรื่องเกี่ยวกับหน่วยความจำ แทนที่จะอนุญาตให้โปรแกรมเมอร์จองหน่วยความจำโดยตรงจาก OS ทำให้มันสามารถปล่อยหน่วยความจำได้โดยอัตโนมัติ ไม่เกิด Memory Leak

มีจุดเด่นอีกข้อหนึ่ง ซึ่งก็คงรู้ๆ กันอยู่ ก็คือ โปรแกรมสามารถทำงานได้บนทุกเครื่อง เพราะ JAVA ได้สร้าง Platform ของตัวเอง ซึ่งเป็นแบบเฉพาะ (แม้ว่า Sun จะอ้างว่าเป็นมาตรฐานก็ตาม) โปรแกรมต่างๆ ต้องทำงานบน Platform เฉพาะนั้น ถึงจะทำงานได้ Java เน้นจุดนี้ มากกว่าความเร็วครับ ทำให้โปรแกรม Java ทำงานค่อนข้างช้าเมื่อเทียบกับภาษาอื่น

มีสิ่งหนึ่งที่ผมไม่ค่อยชอบ Sun ก็คือ Sun ชอบใช้หลักจิตวิทยา โดยเฉพาะอย่างยิ่งกับ Microsoft บริษัท Sun พยายามทุกวิถีทางที่จะกล่าวร้าย Microsoft ว่าพยายามผูกขาด (แต่มันก็จริง) และพยายามจะเปรียบเทียบ Java กับ VB มีเอกสารมากมาย ที่ Sun เขียนขึ้นเพื่อเปรียบเทียบ (ไม่ค่อยเป็นธรรมนัก) ออกทำนองว่า Java ดีกว่าเยอะ ทำให้ คนใช้ Java บางคนก็เคลิ้มไป คิดว่าตัวเองเหนือกว่า เที่ยวไปโจมตี VB, Com, J++ แถมด้วย Windows อีกต่างหาก แบบนี้ไม่ดี

มีจุดหนึ่งที่ผมอยากจะกล่าวกับคนเขียน JAVA หน่อย คืออย่าไปเชื่อ Sun มาก ว่า JAVA จะอยู่คงกระพัน SUN มักจะบอกทำนองว่า JAVA เป็นภาษาที่ลงตัวที่สุดแล้ว แทบจะไม่ต้องมีการแก้ไข Syntax ของภาษา มีแต่เพิ่มสิ่งใหม่ๆ เข้าไป สิ่งนี้ต้องระวังครับ ไม่มีภาษาไหนคงกระพันหรอกครับ เก่าไปใหม่มาทั้งนั้น มองตัวเองเป็นนายของภาษาดีกว่าให้ภาษาเป็นนายเราครับ

C#

คงไม่ต้องกล่าวอะไรมากนักสำหรับภาษา C# เราศึกษากันมาพอสมควรแล้ว ผมแค่อยากกล่าวว่า C# นั้นลอก Java มาครับ Microsoft มีจุดไม่ดีมากๆ ก็เรื่องชอบลอกนี่แหละครับ Windows ก็ลอก Apple LISA และ Macintosh มา IDE ของการเขียนโปรแกรมก็ลอก Borland มา และอื่นๆ อีกมาก รวมทั้ง .NET Framework ก็ลอก JAVA Platform มาไม่น้อยกว่า 80% แต่ก็นั่นแหละครับ Microsoft เป็นจอมลอกที่มีพรสวรรค์ครับ ลอกแล้ว ถ้าใครไม่ใช่แฟนพันธุ์แท้ จะดูไม่รู้เลยครับ

อีกอย่างคือ Microsoft เป็นจอมกลืนน้ำลาย ถ้า Microsoft สัญญาว่าอะไร อย่าได้เชื่อว่าเป็นจริงนะครับ พลิกลิ้นได้ตลอด Microsoft เป็นบริษัทที่เน้นการค้ามากกว่า Technology นะครับ ถ้าคุณคิดจะคบกับ Microsoft คุณต้องรู้จุด นี้เอาไว้ Microsoft จะทำทุกวิถีทางที่จะล้มคู่ต่อสู้ให้ได้ ตั้งแต่ทำของเลียนแบบ เปลี่ยน platform หนี ไปจนกระทั่งสู้ไม่ได้ก็ซื้อบริษัทมาดองเอาไว้เลย

แล้วทำไมผมถึงให้ความสนใจ C# ที่ผมสนใจนั้น ไม่ใช่เป็นเพราะคำว่า Microsoft หรอกครับ แต่หากเป็นเพราะชื่อ Anders Heijsberg ต่างหาก ผมโตมาผลงานของเขาครับ ผมชื่นชมตั้งแต่ เมื่อตอนหัดใช้งาน Turbo Pascal 2.0 บน CP/M มา ถึง J++ และ .NET ในปัจจุบัน ผมมีความรู้สึกเองว่าครั้งนี้ Microsoft เอาจริง สร้าง .NET Framework ให้คนที่เป็นนักวิทยาศาสตร์ คอมพิวเตอร์ มือเซียนๆ ร่วมกันออกแบบ ผมเลยชอบครับ

ยิ่งรู้ว่า สิ่งที่ Sun ตัดออกจาก JAVA หลายอย่างที่ดีๆ เช่น enum, pass by reference และกลิ่นอายของภาษา C ที่ผมรัก จะได้คืนมา ผมก็สนใจเต็มที่ครับ

ถ้าจะพูดถึงข้อดีแต่ของ C# โดยไม่พูดถึง .NET Framework ก็คง ไม่ได้ ถ้าพิจารณาถึง .NET Framework ผมพูดได้คำเดียวว่า ใช่เลย!

แต่สิ่งหนึ่งที่คนทั่วไป ไม่ค่อยเข้าใจว่าทำไม C# จึงเอา Pointer กลับมาอีก ผมเองก็พูดยากครับ ว่าเห็นด้วยหรือไม่เห็นด้วย ถ้า pointer กลับมาแบบภาษา C หรือ C++ ผมคงรับไม่ได้ แต่ pointer แบบ C# นั้นต้องตั้งใจจริงๆ ถึงจะใช้งานได้ ต้องเพิ่ม Syntax และ เวลา คอมไพล์ต้องระบุให้ชัดเจนว่ายอมรับ pointer จึงจะใช้ได้ Microsoft ให้เหตุผลหลักในการคงไว้ซึ่ง pointer ก็คือ การเชื่อมต่อกับ ภายนอก .NET เช่น COM Component เป็นต้น ผมว่า มันก็ฟังขึ้นเหมือนกัน

ตอนนี้ก็วัดใจ Microsoft ครับ ว่าจะแจก .NET Framework ฟรี หรือไม่ ถ้าฟรี Java ก็คงต้องเหนื่อยอีกเยอะครับ และระยะหลังมานี้ Microsoft ตัด Java ออกจาก Windows XP แล้ว Microsoft เวลานี้ มี C# ที่เหนือกว่า JAVA Script หลายขุม และ .dll ที่สามารถใช้งานได้เหมือนกับ Applet ครั้งนี้ ผมว่า Microsoft ชักธงรบแล้วครับ

ใครบอกว่า JAVA หยั่งรากลึก ยากที่จะถูกล้ม ผมอยู่วงการนี้มาเกือบยี่สิบปีแล้ว ผมว่าผมไม่เห็นด้วยนะ คำแบบนี้ผมได้ยินมาเยอะครับ ตั้งแต่ Apple ][ มีโปรแกรมกว่า 40,000 โปรแกรม IBM PC จะมาล้มได้อย่างไร หรือ Windows จะ มาแทน DOS ได้อย่างไร ในเมื่อโปรแกรมที่เราใช้ทุกวันนี้ เป็น DOS ทั้งหมด จะเลิกใช้ได้อย่างไร ผมว่าไม่มีใครสนหรอกครับ ถ้าดีกว่า คนก็พร้อมที่จะเปลี่ยนครับ

Visual Basic & Visual Basic .NET

ภาษา VB ถูกดูถูกจาก โปรแกรมเมอร์ภาษาตระกูล C ครับ ทั้งนี้ก็เพราะการค้าด้วยส่วนหนึ่ง คนส่วนมากเข้าใจคลาดเคลื่อนมาก ตั้งแต่ที่มาของชื่อภาษาแล้วครับ คำว่า BASIC แค่ชื่อก็บอกถึงความไร้เดียงสาแล้ว ยิ่งผู้ที่รู้จักภาษา BASIC มาก่อนยิ่งแล้วใหญ่ คนจำนวนมากโดยเฉพาะอาจารย์มหาวิทยาลัย มองภาษา BASIC เป็นสิ่งที่ผิดพลาดอย่างร้ายแรงที่คิดค้นภาษานี้มา จริงหรือไม่จริง ไม่ใช่ประเด็นที่ผมจะคุยวันนี้ ผมอยากบอกว่า VB กับ ภาษา BASIC ต้นแบบนั้น มันคนละเรื่อง ทุกวันนี้ VB กับ BASIC ต้นแบบ แทบจะไม่เหมือนกันเลย ภาษา VB นั้นเป็นภาษา ที่ถูกออกแบบมาค่อนข้างดี รูปประโยคสวยงาม VB บังคับให้คุณเขียนคำสั่งละบรรทัด ทำให้โปรแกรมอ่านง่าย การใช้งานไม่ต้องมีบล็อก ทำให้ไม่สับสนว่า เปิดบล็อกแล้วลืมปิด มีรวมตัวเข้ากับ Visual Studio ทำให้การเขียนโปรแกรมนี่อย่างกับสวรรค์เลยครับ มี IntelliSense ให้ใช้ (เดี๋ยวนี้เลียนแบบกันมาก ครับ)

จุดหลักจุดหนึ่งที่ Sun โจมตี VB อีกก็คือ ความไม่แน่นอนของ Syntax มีการเปลี่ยนแปลงทุกรุ่น ทำให้โปรแกรมที่เคยเขียนจากรุ่นเก่า คอมไพล์ไม่ผ่าน ผิดกับ JAVA ซึ่ง ยังไงก็คงความ เข้ากันได้กับรุ่นก่อนไว้ เรื่องนี้ผมก็เห็นด้วยส่วนหนึ่งครับ แต่ถ้ามองอีกมุมหนึ่งแล้ว ผมมองกว่า ถ้าไม่มีการเปลี่ยนแปลงก็ไม่มีการพัฒนา ภาษา VB เป็นภาษาที่มีการพัฒนาสูง ยิ่งทำยิ่งทำให้ผู้ใช้ ใช้งานง่ายขึ้นจากรุ่นสู่รุ่น สิ่งนี้เอง จึงไม่น่าแปลกใจเลยว่า ภาษา VB จึงเป็นภาษาที่โลกยอมรับว่า productivity สูงที่สุด มัน "ได้งาน" นี่ครับ

และด้วย productivity ที่สูงขนาดนี้ ทำให้เกิดการใช้ภาษา VB ค่อนข้างกว้างขวาง โดยเฉพาะอย่างยิ่ง งานด้านฐานข้อมูล (ซึ่งงานประเภทนี้ เป็นงานที่ตลาดต้องการมากที่สุด กว่า 90% ของปริมาณงานคอมพิวเตอร์ทั้งหมด) คนส่วนมากสามารถทำความเข้าใจกับภาษา VB ได้โดยง่าย โดยเฉพาะอย่างยิ่ง โปรแกรมเมอร์ไร้เดียงสา ก็ยังสามารถใช้ VB ได้ ทำให้คนใช้ภาษา VB เลยมองดู เป็นคนเกรด B เพราะใช้แต่ของง่ายๆ มันทำให้คนกลุ่มหนึ่ง ซึ่งยอมรับความง่ายของมันไม่ได้ ต้องหันหาภาษาอื่น นัยว่าจะสามารถยกระดับตัวเองได้ ค่าของคน อยู่ที่ผลของงานครับ

จุดเด่นอีกข้อหนึ่งของ VB คือการครอบคลุมตลาด ตั้งแต่ RAD ไปกระทั่ง VB Script สำหรับเขียน ASP บน Web หรือแม้กระทั่ง Application ต่างๆ เช่น Office VISIO ก็ล้วนแล้วแต่รองรับการเพิ่มความ สามารถด้วย VBA และในปัจจุบัน Microsoft ได้ขยายสังเวียนการต่อไปไปถึง Pocket PC อีกด้วย สำหรับ VB นัยว่า Store procedure ของ SQL Server Microsoft จะรองรับภาษา VB ด้วย

มีจุดหนึ่งที่ทำให้ VB ดูดีกว่าภาษาตระกูล C ก็คือ Case Insensitive ผมคงไม่ปฏิเสธว่า Case Sensitive มันก็มีความยืดหยุ่นสูง แต่มันก็ทำให้เขียนโปรแกรมแล้วหลงได้ง่าย บางคนเลือก VB เพราะเหตุผลนี้เป็นหลักครับ

จุดอ่อนหลักที่ภาษา VB ถูกโจมตีอีกข้อก็คือ เรื่องความเร็ว แน่นอนครับภาษา VB ช้ากว่าภาษาอื่นมาก เรื่องนี้จริงครับ แต่คนส่วนมากที่ใช้ VB จะไม่ค่อยรู้สึก เพราะงานที่ต้องใช้ความเร็วจริงๆ มีไม่มาก ถ้างานที่ต้องใช้ความเร็วจริงๆ ก็ใช้ภาษาอื่นครับ

อีกข้อก็คือ VB ไม่ใช่เป็นภาษาที่เป็น OOP เต็มรูป แบบ ไม่สามารถทำ Implementation Inheritance ได้

มาถึง VB.NET อันนี้ก็เป็นรุ่นใหม่ของ VB มารุ่น นี้ VB ทำลายกำแพงเรื่องความเร็วไป แล้ว โปรแกรมที่เขียนด้วย VB.NET และ C# ความเร็วพอ กันครับ เร็วกว่า VB เดิมมาก และ VB รุ่น นี้ รองรับ Implementation Inheritance เป็นที่เรียบ ร้อยแล้ว แต่ผมอยากจะติง VB.NET ไว้นะครับ ผมว่ามันเป็นการตัดสินใจที่ผิดพลาด แน่นอนครับ ทุกคนยอมรับว่า C++ เป็นภาษาที่ใช้งานยาก ดังนั้น Microsoft จึงออกแบบ VB มาเพื่อให้ง่าย ทำให้ทุกคนสามารถเข้าถึงได้ VB จึงได้รับความนิยมสูงมาก เพื่อเป็นการทำให้ C++ ง่ายลง Microsoft จึงออก C# มา ซึ่งผมก็เห็นว่าเป็นความคิดที่ถูก แต่มา VB.NET Microsoft กลับต้องการทำให้ รองรับ OOP เต็มรูปแบบ จึงปรับโครงสร้างของภาษาใหม่ให้หมด มันจึงยากขึ้น ระดับความยากของมัน พอๆ กับ C# เลย ด้วยเหตุนี้ ทำให้เราสามารถแปลง Code จากภาษา C# เป็น VB ได้แทบบรรทัดต่อบรรทัด ซึ่งเรื่องนี้ ผมไม่เห็นด้วยครับ มันทำให้ VB.NET เสียความง่ายลงไป ซึ่งความง่ายนี้เอง เป็นจุดแข็งที่สุดที่ VB มี ผมว่า VB ควรง่ายกว่านี้ครับ

ในช่วงเวลาที่เขียนเรื่องนี้ ผมกำลังรอ Vote ในการเลือกภาษา VB.NET หรือ C# เพื่อมาใช้เป็นสื่อการสอน ASP.NET ผมว่าไม่น่าจะใส่ ใจมาก ว่าจะเป็น C# หรือ VB.NET มันสามารถแปลงได้บรรทัดต่อบรรทัดอยู่แล้ว

Delphi

Delphi ก็มีรากมาจากภาษา Pascal ซึ่งเป็นภาษาในค่ายของ Wirth นั่น เอง แนวคิดของ Wirth ออกจะดูไม่ค่อยเหมือนภาษาอื่นๆ ตรงที่ เขาต้องการให้ภาษานั้นเรียนรู้ได้ง่าย มี syntax น้อย และที่สำคัญคือ โปรแกรมจะต้องกำหนดทุกอย่างให้เป็นระเบียบ ตามแบบคนเป็นอาจารย์นั่นแหละครับ

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

Delphi เป็นภาษาที่มี productivity สูงครับ ไม่แตกต่างจาก VB มากนั้น เป็น Case Insensitive แถมยังเร็วไม่ห่างกับพวก C++ อีก ดังนั้น Dephi จึงเป็นภาษาที่เป็นตัวเลือกที่ดี ครับ

ยิ่งไปกว่านั้น Delphi ยัง สามารถ เชื่อมต่อทั้ง COM และ CORBA คือรองรับทั้ง 2 โลก ทำให้ Delphi เป็นภาษาที่ไม่เลวเลยครับ แล้ว ทุกวันนี้ Delphi ก็ข้ามฟากไปใช้งานได้บน Linux ก็ยิ่งดีเข้าไปอีก

Delphi มาจาก Borland ผู้ซึ่งมีความเชี่ยวชาญทางภาษา Assembly จึงไม่น่าแปลกใจเลยว่า Compiler ที่มาจากค่าย Borland นั้น ส่วนมากสามารถแทรกภาษา Assembly เข้าไปในภาษาโปรแกรมได้

อาจเพิ่งรีบสรุปว่า Delphi ดี นักนะครับ จุดอ่อนที่สำคัญคือ Delphi เก่งเฉพาะงาน RAD แต่บน Web และอื่นๆ นั้นยังห่างไกลกับคู่แข่งมากนัก และวันนี้สังเวียนมันเปลี่ยนจาก Windows และ Linux กลายเป็น Pocket PC หรือ มือถือ ซึ่ง Delphi ไม่ค่อยมี Solution ทางด้านนี้เท่าไหร่

เลือกภาษาไหนดี

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

ยิ่งถ้าคุณเลือกจากเขียนโปรแกรมบน .NET แล้วละก็ .NET Framework มันเป็นอิสระต่อภาษาครับ คุณสามารถทำงานข้ามภาษาได้ โอกาสที่คุณจะเจอ Source Code ที่มาจากภาษาอื่นๆ มีมากครับ ถ้าคุณไม่รู้เรื่องเสียเลย คุณก็จะอ่านไม่รู้เรื่องครับ

ที่มา http://www.twoguru.com/playground/article/languages.htm