สิ่งที่เราต้องการก็คือ "ภาษา" ครับ
ในการสื่อสารของมนุษย์ เราสื่อสารกันด้วยภาษา ซึ่งภาษาภาษาหนึ่งก็จะมีคำ โครงสร้าง ไวยกรณ์ที่เป็นที่เข้าใจในกลุ่มมนุษย์ที่ใช้ภาษานั้น ภาษาทางคอมพิวเตอร์ก็เช่นกันครับ เราใช้ภาษาที่ถูกสร้างขึ้นโดยเฉพาะ เพื่อสื่อสารกับคอมพิวเตอร์ ไม่ว่าเราจะสั่งให้คอมพิวเตอร์ทำอะไรก็ตาม เราก็จะสั่งการด้วยการเขียนคำสั่งเป็นภาษาที่คอมพิวเตอร์นำไปตีความได้ ภาษาที่เราใช้เขียนคำสั่งหรือเขียน "โปรแกรม" ให้กับคอมพิวเตอร์ เรียกว่า ภาษาโปรแกรม (Programming language) ครับ
ภาษาโปรแกรมก็มีด้วยกันหลากหลายภาษาเช่นเดียวกับภาษามนุษย์ครับ แต่ละภาษาก็จะมีรูปแบบแตกต่างกันไปและมีความเหมาะสมในงานที่ไม่เหมือนกัน เช่นภาษาหนึ่งอาจจะเหมาะสำหรับเขียนโปรแกรมสำหรับคอมพิวเตอร์ส่วนบุคคล ภาษาหนึ่งเหมาะสำหรับเขียนเว็บ อีกภาษาอาจจะเหมาะกับงานทางวิทยาศาสตร์ ซึ่งตรงนี้เราจะค่อย ๆ ทำความเข้าใจได้มากขึ้นเมื่อเริ่มเรียนเขียนโปรแกรมกันครับ
การแบ่งกลุ่มของภาษา
ภาษาโปรแกรม (Programming language) ถูกแบ่งเป็น 3 กลุ่มครับ คือ ภาษาเครื่อง (Machine language), ภาษาแอสเซมบลี (Assembly language) และ ภาษาระดับสูง (High-level language) ทั้งนี้ขึ้นอยู่กับเกณฑ์ในการแบ่งด้วยนะครับ ตำราบางเล่มอาจแบ่งเป็น ภาษาระดับต่ำ - ภาษาระดับสูง ก็ไม่ผิด หรืออาจจะใช้เกณฑ์ที่แตกต่างไปจากนี้โดยสิ้นเชิง เดี๋ยวเราจะมาทำความเข้าใจกับภาษาเหล่านี้กันครับ
ภาษาเครื่อง (Machine language) หมายถึงภาษาที่ CPU สามารถเข้าใจได้โดยตรงครับ เราอาจจะพอทราบกันอยู่แล้วว่าเครื่องคอมพิวเตอร์ประมวลผลด้วยระบบสัญญาณ 0 / 1 ทำให้ภาษาเครื่องเลยต้องเป็น 0/1 ตามไปด้วยครับนั่นหมายความว่า ไม่ว่าเราจะให้คอมพิวเตอร์ทำงานอะไร เราก็สั่งมันด้วยเลขศูนย์กับเลขหนึ่งเท่านั้น โปรแกรมของเราก็อาจจะออกมาหน้าตาประมาณ
1: 11100001 01101000
2: 00010110 01000001 10001011
ความน่าปวดหัวของมันก็คือ กว่าคุณจะให้มันทำอะไรสักอย่าง แทบคลั่งเลยทีเดียวครับ เพราะต้องเข้าไปยุ่งวุ่นวายกับหน่วยความจำ รีจิสเตอร์ และอื่น ๆ อีกสารพัด แถมคำสั่งทุกอย่างยังอยู่ในสภาพของเลขฐานสองอีกต่างหาก คนหัวใสบางคนจึงเห็นว่าขืนให้ชาวโลกเขียนโปรแกรมกันแบบนี้ กว่าเราจะได้โปรแกรมเครื่องคิดเลขดี ๆ ออกมาใช้ บางทีเอาเวลาไปดีไซน์ลูกคิดดี ๆ ออกมายังจะดีกว่า จึงเป็นที่มาของภาษากลุ่มถัดไปครับ
ภาษาแอสเซมบลี (Assembly language) เป็นภาษาที่พัฒนาขึ้นมาเพื่ออำนวยความสะดวกให้โปรแกรมเมอร์มากขึ้นครับ คำสั่งในภาษานี้จะเริ่มมีความเป็นภาษามนุษย์ขึ้นมาบ้าง เช่น หากคุณต้องการสั่งให้ "เคลื่อนย้ายข้อมูล จากเซลล์เมโมรี่ไปยังรีจิสเตอร์" (ถ้าไม่เข้าใจว่ารีจิสเตอร์กับเซลล์เมโมรี่คืออะไรก็ไม่เป็นไรครับ ไม่ใช่ประเด็น) ด้วยภาษาเครื่องเราอาจจะต้องสั่ง "10110011" แต่ด้วยภาษาแอสเซมบลี เราจะใช้คำสั่ง "MV" แทนเป็นต้น (ประมาณ move หรืออะไรทำนองนั้น) แล้วต่อจากนั้น คอมพิวเตอร์จะใช้ "ตัวแปลภาษาแอสเซมบลี" หรือ Assembler เพื่อแปลงภาษาแอสเซมบลีให้เป็นภาษาเครื่องที่คอมพิวเตอร์เข้าใจ นี่คือตัวอย่างส่วนหนึ่งของโปรแกรมในภาษาแอสเซมบลีครับ
1: MV, 0, SUM
2: MV NUM, AC
แต่ถึงกระนั้น ก็ยังดูยากอยู่ดี จริงมั้ยครับ เพราะแม้ว่าโค้ดโปรแกรมจะอ่าน/เขียนง่ายขึ้น แต่ถึงอย่างไรเราก็ต้องไปวุ่นวายกับฮาร์ดแวร์ระดับลึก ๆ อยู่ดี (เรามักเรียกภาษาที่ทำงานใกล้ชิดกับฮาร์ดแวร์มาก ๆ ว่า "ภาษาระดับต่ำ") ถึงทำให้เกิดการพัฒนาภาษากลุ่มที่สามที่เราจะให้ความสนใจมากที่สุดครับภาษาระดับสูง (High-level language) ภาษากลุ่มนี้จะหลีกหนีจากฮาร์ดแวร์มากขึ้น การเขียนคำสั่งต่าง ๆ ก็จะคล้ายกับการสั่งด้วยภาษามนุษย์นี่แหละครับ อยากจะให้รับข้อมูลก็สั่งให้มันรับข้อมูล อยากจะบวกก็สั่งให้มันบวก ไม่ต้องไปนั่งสั่งเคลื่อนย้ายข้อมูลทีละไบต์ ๆ โยนไปโยนมาระหว่าง CPU กับเมโมรี่ บลา ๆ
ภาษาระดับนี้มีหลายสิบหลายร้อยภาษาเลยครับ เช่น C/C++ (ที่เราจะเรียนกัน) Pascal, C#, Java, PHP, Python, Ruby, Perl, BASIC..... ซึ่งเมื่อเราเขียนโปรแกรมด้วยภาษาเหล่านี้แล้ว เราจะต้องมีโปรแกรมที่ทำหน้าที่แปลภาษาเหล่านี้ ให้กลายเป็นภาษาแอสเซมบลี (ซึ่งก็จะแปลไปเป็นภาษาเครื่องต่ออีกที) เพื่อให้คอมพิวเตอร์สามารถเข้าใจได้ครับ
ตัวอย่างโปรแกรมบวกเลขง่าย ๆ เขียนด้วยภาษาที่ชื่อ "Python" ครับ
1: num1 = int(input())
2: num2 = int(input())
3: result = num1 + num2
4: print(result)
จะเห็นว่าการสั่งงานจะเข้าใจไม่ยากนักครับ รับข้อมูลก็สั่งให้มัน input จะบวกก็สั่งให้มันบวก จะแสดงผลก็สั่ง print มันออกมา (print ไม่ได้หมายถึง print ใส่กระดาษออกมานะครับ เป็นคำสั่งให้แสดงผลบนหน้าจอเฉย ๆ) ถ้าตอนนี้ยังไม่เข้าใจก็ไม่เป็นไรครับ เดี๋ยวเริ่มเรียนเขียนโปรแกรมจริง ๆ กันสักพัก ก็จะเข้าใจมากขึ้นพูดมาซะยาว สรุปเราจะเรียนอะไรกันล่ะเนี่ย
ภาษาที่เราจะเรียนมีชื่อว่า "ภาษาซี" (C language) ครับ เป็นภาษาที่อาจจะจัดให้เป็นระดับสูงก็ได้ เพราะมีการสั่งงานด้วยภาษาที่ใกล้เคียงกับภาษามนุษย์ แต่ในขณะเดียวกันก็มีความสามารถของภาษาระดับต่ำ คือสามารถติดต่อกับฮาร์ดแวร์ได้ดี บางคนจึงจัดให้มันเป็นภาษา "ระดับกลาง" ครับ ภาษาซีเป็นภาษาที่เก่าแก่พอสมควร (ใครสนใจประวัติ ลองหาจากหนังสือหรืออินเตอร์เน็ตดูนะครับ) แต่ก็ยังได้รับความนิยม เพราะทำงานได้เร็วและหลากหลาย บางคนถึงกับพูดว่าเขียนภาษาซีเป็นก็เขียนโปรแกรมได้แทบทุกอย่าง อีกทั้งยังเป็นต้นแบบของภาษาอื่น ๆ อีกหลายภาษา ทำให้หากเข้าใจภาษาซี ก็จะช่วยให้เรียนภาษาอื่น ๆ ได้รวดเร็วขึ้นครับ
ถึงตรงนี้คิดว่าน่าจะเข้าใจเรื่องของภาษาโปรแกรมกันมากขึ้น บทต่อไปจะพูดถึงการเรียนภาษาซีให้ได้ผล และการนำไปต่อยอดกันนะครับ