เรียนโปรแกรมมิ่ง หรือ Computer Science จงเป็นเจ้านายภาษา …

ขอท้าวความนิดนึง ว่าทำไมผมถึงเขียนแบบนี้

คืออันนี้ผมไป ได้มาจากพี่เดฟ (ithilien_rp) post ตอบไว้ใน pantip.com โดยที่เจ้าของกระทู้เขียนว่า ในlonghorn นั้น microsoft จะใช้ภาษาใหม่ ซึ่งก็คือ mc++ ดังนั้นขอให้พวกโปรแกรมเมอร์ทั้งหลายระงับการเรียนโปรแกรมกันไว้ก่อนเพราะว่าอีกไม่นานต้องเปลี่ยนอีก

อะไรทำนองนี้แหละครับ เนื้อหาบทความีดังนี้ครับ


         การเรียนรู้ platform/library/language ใหม่ๆ เป็นเรื่องปกติของ programmer อยู่แล้ว ดังนั้นผมว่ามีของใหม่มา ก็ไม่ใช่เรื่องแปลกอะไร

         การเรียนรู้อะไรผมไม่อยากให้ดูที่เปลือกนอกมากไปนักน่ะครับ อย่าไปดูที่ syntax, libraryอะไรให้มากนัก ดูที่แนวความคิด หรือว่าปรัชญาของการเขียนโปรแกรมจะดีกว่ารวมไปถึง algorithm flow หรือว่า program design ด้วย เพราะว่า ถึงแม้ภาษาต่างๆ มันจะเปลี่ยนไป หรือว่า library/framework ต่างๆ มันเปลี่ยนไปตามกาลเวลาของมัน ไอ้พวก algorithm หรือว่า design philosophyพวกนี้ไม่ค่อยเปลี่ยนตามหรอกครับ หรือว่าเปลี่ยนตามก็ช้ากว่าไม่รู้กี่เท่า

         เรียนprogramming language ใหม่ๆ ภาษานึงนี่ ผมว่ามันไม่ใช่เรื่อง big dealอะไรเลย ตอนที่ผมเปลี่ยนมาใช้ mac os x ใหม่ๆ แล้วอยากจะเขียนโปรแกรมบน osx ผมก็ต้องเรียน objective-c ซึ่งผมไม่เคยเห็นมาก่อนในชีวิตก็ไม่มีอะไรมาก ใช้เวลาครึ่งวันอ่าน syntax, keyword ใหม่ๆ ว่ามีอะไรบ้างอีกครึ่งวันหาพวก FAQ ว่ามันมีอะไรต่างจาก c/c++/java มั่งวันที่สองวันที่สาม ก็เขียนอะไรใน objective-c ได้แล้วส่วนเรื่องการเขียนโปรแกรมใน os x นี่ แน่นอนว่า architecture มันต่างจากwindows โดยสิ้นเชิง ดังนั้นความรู้อะไรก็ตามที่ผมรู้มาจาก win32, mfc,.net ใช้ไม่ได้เลย (ของตาย ยกเว้น M$ จะ port ไปลง แต่ว่า .net ก็มีdotGNU ก็พอจะใช้กันได้บ้าง) แต่ว่าก็เรียนรู้ Cocoa framework (ที่เป็นnative framework ของ mac os x) ก็ใช้เวลาไม่นานเท่าไหร่ ก็เขียน GUIapplication ได้แล้ว ใช้ system service ได้พอสมควร (ก็อ่านๆ พวก basicแล้วที่เหลือก็เปิด reference เอา)

         ขอสรุปความคิดคร่าวๆละกันนะครับ ก่อนจะนอกเรื่องไปมากกว่านี้ผมอยากจะเสนอความคิดแบบนี้ดีกว่าครับ สำหรับคนที่จะหัดเขียนโปรแกรม

1. แยกการเรียน "ภาษา" กับการเรียน "library/framework" ออกจากกัน
         เดี๋ยวนี้library/framework ใหม่ๆ ส่วนมากจะ support หลายภาษา และ codeที่เขียนเรียกใช้ library เหล่านั้นในแต่ละภาษาจะไม่ต่างกันมากเท่าไหร่(ลองดู code ที่ใช้ .NET framework ที่เขียนใน VB.NET, C#.NET หรือว่าManaged C++.NET สิครับ ออกมาแทบจะเหมือนกันเลย ผมอ่านหนังสือ VB.NET นี่แปลง code เป็น C# ได้แบบแทบไม่ต้องคิดเลย เกือบจะบรรทัดต่อบรรทัด แปลงแค่syntax กับ keyword แล้วก็ structure นิดหน่อย)
         ดังนั้นการแยกการเรียนรู้ library/framework ออกจากการเรียนภาษาเป็นเรื่องที่สำคัญครับ ตามความคิดของผม

2. อย่าไป focus กับภาษามากเกินไป ดูที่ algorithm + program design มากๆ
         ภาษาก็เป็นแค่เครื่องมือแม้ว่าภาษาแต่ละภาษาจะมีข้อดีข้อเสียไม่เหมือนกัน แต่ว่าอย่างไรก็ดี การdesign program นั้น design framework, design patternsส่วนมากจะไม่ขึ้นกับภาษา คือ จะใช้ในภาษาไหนก็ได้ เช่นเดียวกับ algorithm
         ดังนั้นเมื่อต้องถึงเวลาที่จะเปลี่ยน platform ไม่ว่าจะเป็นการไปใช้ platformตระกูลใหม่ (เช่น windows->linux, windows->macหรือว่ากลับกันก็ตาม) หรือว่าตระกูลเดิม แต่ update architectureใหม่จนจำไม่ได้ (เช่น windows 3.11->windows 95, win32->.net หรือmac os 9->mac os x) ก็ตาม สิ่งที่ต้องทำก็คือ
         – เรียนรู้ syntax และลักษณะเฉพาะของภาษาใหม่ (ถ้าจำเป็น)
         -เรียนรู้ basic ของ framework ของ platform นั้นๆ (เช่น การเรียกใช้component, การใช้ memory, ฯลฯ)
         จากนั้นในการเขียนโปรแกรมหรือว่าสร้าง application อะไร ในภาพรวม ก็คิดตามหลักprogram design เดิม และใช้ algorithm ตัวเดิม แต่ว่าเรียกใช้ componentจาก framework ตัวใหม่ (ซึ่งตรงนี้ ถ้า basic แน่นดี ก็เปิดดูจากreference ได้เลย) และอาจจะปัญหาเรื่องรายละเอียดปลีกย่อยนิดหน่อยในส่วนที่เป็นลักษณะเฉพาะของภาษาใหม่ ที่ต่างไปจากภาษาที่เคยชินเท่านั้นเอง เช่นตอนที่เขียน objective-c ใหม่ๆ งงกับมันอยู่พักนึง กับsemi-automatic memory management ของมัน เพราะว่าเคยแต่ใช้ manual แบบc/c++ หรือว่า fully automatic แบบ java
         ส่วนถ้าใครอยากจะลองเล่นกับmanaged c++ ก็หาตัวอย่างได้ทั่วไปครับ ส่วนหนังสือเล่มที่อยากจะแนะนำนอกจากหนังสือของสำนักพิมพ์ microsoft ที่น่าจะเป็นมาตรฐานที่ต้องอ่านแล้วก็มี Developing Applications with Visual Studio.NET โดย RicardGrimes เล่มนี้จะเน้นการใช้ Managed C++และจากพูดถึงส่วนของรายละเอียดต่างๆ ข้อเหมือนและข้อแตกต่างระหว่างmanaged c++ กับ c++และ c# ไว้ดีพอสมควรทีเดียว แต่ว่าอาจจะไม่มี codeตัวอย่างมากนัก เหมาะกับคนที่เขียนโปรแกรมเป็นอยู่แล้ว

1 thought on “เรียนโปรแกรมมิ่ง หรือ Computer Science จงเป็นเจ้านายภาษา …

  1. เรียน OOP C# ASP.NET ด้วยตนเอง
    เรียนวิธีคิดแบบ OOP แล้วประยุกต์ใช้ด้วยการเขียนโปรแกรมภาษา C# เพื่อสร้างเว็บไซต์แบบ ASP.NET

    http://thai-cs.spaces.live.com

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

    หลักการ OOP ไม่ใช่ของใหม่ มันเป็นหลักการที่เริ่มต้นมาพร้อมๆ กับวิธีเขียนโค้ดแบบ procedural แต่เพิ่งจะได้รับความนิยมมากขึ้นในระยะสิบปีที่ผ่านมา ปัจจุบันนักเขียนโค้ดจำนวนมากหันไปหาภาษา OOP อย่าง Java ภาษา .NET (และภาษาอื่นๆ ที่เริ่มได้รับความนิยมเพิ่มขึ้นอย่าง Python และ Ruby) แม้กำลังใช้ภาษาแบบ OOP แต่นักเขียนโปรแกรมจำนวนมาก กลับไม่สามารถเขียนโปรแกรมตามแนวคิด OOP ได้

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

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

    ในหนังสือเล่มนี้ ท่านจะได้เรียนรู้เรื่องที่สำคัญอย่างยิ่งต่อวิชาชีพซอฟท์แวร์ในอนาคตสามเรื่องคือ .NET Framework, วิธีสร้าง Web Application และการเขียนโปรแกรมภาษาด้วย C#

    หนังสือนี้แม้จะครอบคลุมเนื้อหาเบื้องต้น ระดับกลาง และระดับก้าวหน้าของภาษา C# ไว้ทั้งหมด แต่มันก็ไม่ใช่หนังสือที่สอนไวยากรณ์ในภาษา C# (เช่น ไม่สอนว่าคำสั่ง if else ใช้อย่างไร คำสั่ง do while มี syntax อย่างไรเป็นต้น) หากท่านต้องการหนังสือที่มีรายละเอียดทุกคำสั่งในภาษา C# ผู้เขียนขอแนะนำหนังสือชื่อ The C# Programming Language (Hejlsberg สำนักพิมพ์ Addison Wesley) หรือศึกษาได้จากเอกสาร และเว็บไซต์ MSDN (Microsoft development network)

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

Leave a Reply