เขียนโค้ด ภาษาไหนก็เหมือนกัน จริงไหม?


ว่าด้วยเรื่องของ เขียนโค้ด ภาษาไหนก็เหมือนกัน ต่างกันแค่ syntax

เคยได้ยินแนวคิดที่ว่า “ภาษาไหนก็เหมือนกัน” หรือไม่? คำอธิบายเพิ่มเติมของแนวคิดนี้คือ ไม่ว่าจะเป็นภาษาไหนก็ไม่ได้มีความแตกต่างกัน ถ้าเราเข้าใจโค้ด เข้าใจ algorithm เราก็สามารถเขียนภาษาอื่นๆ ได้ สิ่งที่ต้องเรียนเพิ่มก็คือ syntax ของภาษานั้นๆ เป็นต้นว่า ถ้าเราเขียนภาษา Javascript อยู่แล้ว และต้องการเรียน Python เราก็จะใช้เวลาไม่นานในการเรียน และโดยมากจะเป็นการเรียนรู้ syntax ของการเขียนภาษา Python เพราะว่าพวก if else หรือ loop ต่างๆ นั้นก็ไม่ได้ต่างกัน หลักการเขียนจริงๆ หรือไวยากรณ์นั้นไม่ได้ต่างกัน เช่น ในภาษา Javascript และ Python ต่างก็มี if else , array, object ถึงจะเขียนต่างกันบ้าง แต่การทำงานนั้นก็ยังคงเหมือนกัน เพราะฉะนั้นก็อาจจะกล่าวได้ว่าภาษานั้นก็ไม่ได้มีความแตกต่างกัน

เหมือนหรือแตกต่างกันแน่?

ผมเคยได้ยินคำกล่าวประมาณนั้นสองครั้ง มันก็อาจจะฟังดูสมเหตุสมผล ในแง่ของพื้นฐานการเขียนโค้ด แต่ทว่าผมไม่เห็นด้วย หากลองคิดทบทวนดูจะพบว่าภาษาโปรแกรมนั้นมีหลายภาษา ไม่ว่าจะเป็น C C++ Rust go Javascipt Python ซึ่งแต่ละภาษาก็จะมีจุดเด่นแตกต่างกัน และเหมาะกับงานที่ต่างกัน หากจะเขียนเว็บไซต์ก็ต้อง Javascript แต่หากจะเขียนเกมก็ต้อง C++ (Unreal engine) หรือจะเขียนเกี่ยวกับ Data และ AI ก็ต้อง Python คำถามก็คือ หากภาษาไหนก็เหมือนกัน ทำไมภาษาหนึ่งถึงเหมาะกับงานประเภทหนึ่งมากกว่าอีกภาษาละ?

หรือจริงๆ แล้วแต่ละภาษาเองก็มีความต่างกันอยู่? หลังจากที่ผมได้เรียนรู้ภาษาต่างๆ และลองคิดทบทวนดูเกี่ยวกับประเด็นนี้ หากจะเทียบให้เห็นชัดเลย ก็ต้องเทียบภาษาที่เป็น Compiler และ Interpreter ต้องอธิบายก่อนว่า Compiler ที่ว่าก็คือภาษาจำพวกที่ต้อง compile ออกมาเป็นไฟล์ที่จะใช้รันก่อน ซึ่งในภาษาประเภทนี้จะมีการเขียนที่เข้มงวดกว่า ต้องมีการระบุประเภทของตัวแปร ระบุขนาดของ Array และต่างๆ อีกมากมาย ส่วน Interpreter นั้นคือภาษาที่สามารถทำการรันไฟล์โค้ดได้เลย โดยตัว runtime จะทำการแปลงโค้ดทีละบรรทัดและรันให้ ณ เวลานั้น ซึ่งในการเขียนโค้ดของภาษาประเภทนี้จะไม่ค่อยมีความเข้มงวด มีความง่ายและยืดหยุนมาก เหตุผลหนึ่งที่ทำให้แต่ละภาษาต่างกันนั่นก็คือ ความต่างของ Compiler และ Interpreter นี่แหละ ขอยกตัวอย่าง ภาษา C (Compiler) และ Python (Interpreter) ขึ้นมาเปรียบเทียบให้เข้าใจมากขึ้น แน่นอนว่าทั้งสองภาษานี้มี if else แต่หากเขียน Python เป็นอยู่แล้ว และจะมาหัดเขียนภาษา C ละก็ แม้ว่าจะเขียน if else , for loop เป็นอยู่แล้ว ก็ไม่ใช่ว่าจะเขียนภาษา C เป็นเลย ในภาษา C นั้นจะมีเรื่องของการจัดการหน่วยความจำในแรม (Memory allocation) แม้จะเข้าใจ syntax ภาษา C แล้ว แต่ก็ยังคงต้องเข้าใจเรื่องหน่วยความจำด้วย ต้องเข้าใจว่าตัวแปรที่ประกาศออกไปมันถูกเก็บบน Stack หรือ Heap และยังมีเรื่องของ stack frame อีกด้วย ดังนั้นภาษา C จึงเหมาะจะนำไปเขียน Kernel มากกว่า Python

หรือจะเปรียบเทียบภาษาทางฝั่ง compiler ด้วยกันเองอย่างภาษา Rust และ C ที่ถึงแม้จะมีการจัดการ memory แต่ก็จะมีจุดที่แตกต่างกันบ้าง ซึ่งทำให้ภาษา Rust มีโอกาส Memory leak น้อยกว่าภาษา C

ไอเดียของภาษา

ถึงจะยกตัวอย่างเกี่ยวกับ Compiler และ Interpreter ไปแล้ว แต่ว่า แม้ในภาษาจำพวก Interpreter ด้วยกันเองนั้นก็ยังมีความแตกต่างกันอยู่ ซึ่งจะมีแนวคิดของภาษาที่ต่างกัน และรายละเอียดยิบย่อยที่ต่างกัน โดยเฉพาะกับ JavaScript ที่ตัวภาษามีไอเดียของ OOP อยู่ตลอดๆ แม้แต่ตัวแปรที่เป็น string ยกตัวอย่างเช่น

let text = "Hello, World";
console.log(text.length);

หากสังเกตุจะพบว่า text นั้นมี property ที่ชื่อ length อยู่ ทั่งๆ ที่เป็น string นั่นก็เพราะจริงๆ แล้วมันเป็น object และไม่ใช่แค่นั้น แม้แต่ number หรือ array เองก็ด้วย แต่อย่างไรก็ตามจะขอไม่นำ JavaScript ไปเปรียบเทียบกับ PHP ที่ซึ่งมีความเป็น Functional

สรุปว่าอย่างไร?

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


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