เพ้อเจ้อเรื่องภาษา(คอมฯ)


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

รูปข้างบนนี่ไม่ใช่ประวัติศาสตร์ของภาษาคอมพิวเตอร์นะครับแต่เป็นลำดับการเรียนรู้ของผมเองเท่าที่พอนึกออกซึ่งดูมั่วใช้ได้เลย ถ้าให้พูดถึงภาษาแรกที่แต่ละคนหัดคือภาษาอะไรสมัยนี้บางคนอาจเป็นภาษาในกลุ่มของ .Net framework อย่าง C# หรือ VB.net นักศึกษาบางคนก็อาจเป็น C, Java หรือพวกหัดทำเว็บอย่าง PHP หรือที่กำลังนิยมอย่าง Python กับ JavaScript แต่ถ้าเป็นในยุคที่ผมหัดเริ่มถ้าไม่ใช่ Logo ก็คงเป็น BASIC เหมือนผมนี่แหละแล้วก็ลองศึกษาภาษาอื่นๆ มาเรื่อย นอกจาก Assembly ที่มึนตึ๊บแล้วก็มี C นี่แหละที่ไม่ชอบโครงสร้างภาษามากรู้สึกอ่านยาก พอมาเจอ Pascal ที่โครงสร้างเป็นระเบียบเรียบร้อยแล้วชอบมากกว่าแต่ก็ยังชอบความง่ายของ BASIC อยู่ดีพอได้มาเจอกับ Turbo Basic (ตอนนั้นมาสาย Borland ไม่เคยเล่นของ Microsoft เพราะใช้แผ่นเยอะ FD 5 1/4" ) ที่เอา BASIC มาโมใหม่เป็น structured programming แล้วถูกใจมากแต่น่าเสียดายที่มีปัญหากับจอเขียว (ส่วน QBasic ของ Microsoft คอมไพล์แล้วไม่ได้ไบนารื่ที่สมบูรณ์เหมือน Pascal ต้องมีตัวรันไทม์) ต่อมาก็มาเป็น Prolog ที่เขาว่ากันว่าเป็นภาษายุคที่ 5 สำหรับปัญญาประดิษฐ์ แต่ตัว Turbo Prolog เองก็ดูทำอะไรไม่ค่อยได้มากเท่าไหร่มานึกๆ ดูแล้วสมัยนี้ใช้แค่ SQL ก็พอจะทำอะไรคล้ายๆ กันได้

พอตอนเรียนป.ตรีผมไม่ได้มาทางสายคอมฯ ก็เลยไม่ได้ทำอะไรเป็นชิ้นเป็นอันเท่าไหร่ได้แต่เล่นนู่นนี่ไปเรื่อย ตอนจบใหม่ทำงานในแลปที่คณะได้ลองเล่น C++ Builder ถึงได้รู้ว่า RAD มันเจ๋งแค่ไหนแทบไม่มีความรู้ภาษา C ส่วน OOP ก็ยังไม่รู้จักแต่ก็ยังพอสร้างโปรแกรมแบบง่ายๆ ออกมาได้ ตอนนั้นได้เล่นอินเทอร์เน็ทที่มหาวิทยาลัยก็เริ่มสนใจพวกเว็บแต่ส่วนใหญ่ก็ยังเป็น static web ไม่ค่อยได้ทำอะไรมากจนเข้ามาเรียนโทได้มาเรียน Java (ตอนนั้น ver. 1.3 มั๊งไม่แน่ใจ) มีคนเขาบอกว่าคนที่ไม่มีพื้นมาเลยจะเข้าใจ OOP ได้ง่ายกว่าหลายคนที่ชินกับ structured programming ก็มักจะสับสนกันแต่ผมไม่นะ ผมค่อนข้างประทับใจกับ Java ในหลายเรื่องโดยเฉพาะคอนเซปท์ write once run anywhere และการแยกโปรแกรมออกเป็น class แล้วเอามาประกอบกัน จากโครงสร้างแบบ C ที่เคยเกลียดแต่ใน Java ผมกลับชอบเพราะอ่านโค้ดง่ายกว่า และชอบมากขึ้นตอนที่ได้เจอกับ PHP ทั้งที่เป็น dynamic type แต่ก็เพราะมันง่ายนี่แหละและตัว PHP manual เป็นเอกสารที่ดีมากละเอียดอ่านเข้าใจง่ายมีตัวอย่างประกอบชัดเจนครอบคลุมการใช้งานอยากรู้อะไรก็หาเจอ พอได้มาเจอกับ Ruby รู้สึกว่าเป็นภาษาที่สวยมากแม้ประสิทธิภาพจะยังไม่ค่อยดีนัก (ตอนนั้นยัง Ruby 1 กว่าๆ อยู่) แต่ใครสนกันล่ะผมไม่ได้เอาไปใช้งานอะไรจริงจังเน้นเอามันพอ จากที่เคยชอบพวกภาษาที่เป็นระเบียบเรียบร้อยอย่าง Pascal หรือ Java กลายเป็นชอบพวกภาษาสคริปต์ dynamic type อย่าง PHP, Ruby เน้นที่เขียนง่ายทำอะไรเล็กๆ น้อยๆ เล่นสนุกๆ เอามันมากกว่า

ตอนที่เรียนป.โทนี่ยังเป็นครั้งแรกที่ได้ใช้งาน Linux อย่างเป็นเรื่องเป็นราวจากที่เมื่อก่อนแค่ลองเล่นดิสโทรเล็กๆ ในแผ่น CD ในฐานะโปรแกรมทดแทน Windows ซึ่งยังไม่ค่อยเวิร์ค พอได้มาใช้จริงจังกับ Fedora แล้วรู้สึกชอบ อย่างพวก desktop environment พัฒนาขึ้นมากสวย ใช้ง่าย สเถียร และมีลูกเล่นขึ้น ภาษาไทยก็ใช้งานได้ดี จนเริ่มเปลี่ยนมาใช้ Linux เป็นหลักหัดใช้ Bash กับ Perl เล็กน้อย (แต่พอมาใช้เต็มตัวดันเปลี่ยนมาสาย Debian อย่าง Kubuntu ซะงั้น) พอจบโทได้ทำงานเกี่ยวกับเขียนโปรแกรม ที่บริษัทใช้ผลิตภัณฑ์ของ Microsoft เลยได้มีโอกาสใช้งาน Visual Studio ซึ่งเป็นเครื่องมือที่ดีมากน่าเสียดายที่ใช้ได้แต่บน Windows (ถ้าไม่ใช้เครื่องบริษัทก็ต้องลง Windows ผ่าน VM เอา) ก่อนนั้นเคยดู C# ผ่านๆ ก็คล้าย Java ดีแต่ที่บริษัทใช้ VB.Net กับ ASP.Net เป็นหลักเลยไม่ได้ลอง C# ซักที ตอนนั้น .Net ยังค่อนข้างใหม่ในที่ทำงานส่วนใหญ่ยังเป็น VB6 อยู่เลยพวกโปรแกรมเดกส์ทอปจะใช้ VB6 ส่วน .Net จะใช้ทำเว็บเป็นหลัก ก็เพิ่งจะมีโอกาสได้เล่น Visual Basic กับเขาเป็นครั้งแรกด้วย (ยุคนี้คนอื่นเขาจะเลิกใช้กันอยู่แล้ว) back to the BASIC ก็เป็นอะไรที่ง่ายดี การเขียนแบบ event driven ง่ายมากไม่เคยเรียนไม่เคยเขียนมาก่อนนั่งคลำแป๊ปเดียวก็ทำงานได้แล้วถ้าเป็น Java ถึงจะมีตัวช่วยเขียน UI แต่ก็ต้องมานั่งจัดการกับ event กันวุ่นวายตัวเครื่องมือของ Microsoft แค่คลิกๆ ไม่กี่ทีแล้วก็ไปเขียนแต่ส่วนที่เป็น logic นอกนั้นก็ปล่อยให้ IDE มันจัดการ แต่ส่วนตัวใช้ Linux  เป็นหลักจะไปใช้ Mono หรือ Java เขียน GUI ก็ไม่ง่ายเท่าจนไปเจอ Gambas ซึ่งคล้าย VB6 มากเสียอย่างเดียวคอมไพล์เป็นไบนารีใช้เดี่ยวๆ ไม่ได้ต้องอาศัย gambas runtime เหมือนกับ VB ส่วน Python นี่ก็เคยอยากลองมานานแล้วแต่ยังไม่มีโอกาสพอช่วงที่คนเริ่มนิยม Python มากขึ้นก็เลยจัดสักหน่อยเทียบกับ Ruby แล้ว Ruby ดูเก๋เท่กว่าแต่ Python จะดูเป็นระเบียบเรียบร้อยกว่าแต่ก็ทำงานได้หลากหลายดี อยากจะลองเขียนโปรแกรมบน smart phone บ้างแต่ก็เบื่อ Java แล้วจะไปหัด Kotlin ก็ยังขี้เกียจสุดท้ายก็พับโครงการไปก่อน ช่วงที่หาเกม opensource มาเล่นก็ได้รู้จักกับภาษา Lua บ้างแต่ตอนที่อยากเขียนเกมเล่นบ้างก็ไปเจอกับ LÖVE (หรือ Love2D) เป็น framework เขียนเกมภาษา Lua เลยได้ศึกษาดูจนตอนนี้รัก Lua ไปอีกตัวหนึ่งแล้ว เล็ก เร็ว ง่าย เขียนสนุกถึงภาษามันจะไม่ฮิตและในไทยก็มีคนใช้น้อยก็เถอะ อาจจะลำบากสำหรับคนไทยที่จะศึกษาหน่อยพวกเอกสารก็เหมือนตัวภาษาเลยอธิบายสั้นมากไม่ค่อยละเอียด

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


ความคิดเห็น