วันนี้เรามาคุยกันเรื่องการเขียนโปรแกรม เราควรเริ่มจากภาษาอะไรดีนะครับ โดยในปัจจุบันภาษาที่ใช้เขียนโปรแกรมมีอยูมากมายเช่นเวลาเขียนโปรแกรมทั่วไป ก็ C, C++, C#, Java, Visual Basic, Delphi และอื่นๆเป็นต้น ถ้าเขียนบนใช้บนเว็บก็มีพวก PHP, ASP, Python, Ruby, Javascript เป็นต้น
โดย ทั่วไปถ้าเราไปถามตามเว็บบอร์ดหรือใครๆมักได้รับคำแนะนำว่าควรเริ่มจากภาษา C เพราะในปัจจุบันภาษาใหม่ๆ มักจะมีรูปแบบ syntax เป็น C-Style คือมีความคล้ายคลึงภาษา C ดังนั้นเมื่อเราศึกษาภาษา C จนเชี่ยวชาญแล้วการไปเรียนต่อภาษาอื่นจึงไม่ใช่เรื่องยาก ยกเว้น Visual Basic กับ Delphi ที่ 2 ภาษานี้จะเหมือนกัน แต่ไม่เหมือนภาษา C ซึ่งผมเห็นว่าไม่จำเป็นเท่าไหร่นัก เพราะภาษา C นั้นค่อนข้างจะยุ่งยากพอสมควร ซึ่งภาษาใหม่ๆที่พัฒนามามีการพัฒนาให้ลดการยุ่งยากในเรื่องนี้ไปได้ เช่นตัวแปรชนิด String(สายอักขระ หรือข้อความต่างๆ) ที่มีใน Java, C++, C# แต่ใน C ไม่มี มีแต่ตัวแปรชนิด char(ตัวอักษร 1 ตัว) แต่ประกาศแบบ Array(แถวลำดับหรืออะไรหว่า ลืมชื่อภาษาไทย แต่ลักษณะคล้ายๆสายอักขระ แต่จำกัดขนาด) ซึงยุ่งยากต่อการใช้ เพราะมีการจำกัดขนาดเช่น เราประกาศตัวแปรรับได้แค่ 200 ตัว แต่ผู้ใช้ดันใส่มา 300 ตัว โปรแกรมก็มีโอกาศพังสูง ซึ่งภาษาใหม่ๆได้มีการแก้ปัญหานี้ด้วยตัวแปร String
แต่การเรียนภาษา C มีข้อดีคือ ฝึกกระบวนการคิดได้ดี เช่นการเขียนโปรแกรมหาคำๆหนึ่งในข้อความที่ได้รับเข้าไป โดยสมมุติว่าคำที่หามีขนาดไม่เกิน 10 ตัว และข้อความทั้งหมดมีขนาดไม่เกิน 200 ตัว
ภาษา C# เขียนดังนี้
using System; namespace C_TEST{ class Program{ public static void Main(string[] args){ string input; string find; Console.Write("String: "); input = Console.ReadLine(); Console.Write("Find: "); find = Console.ReadLine(); if(input.IndexOf(find) > -1){ Console.WriteLine("Found."); }else{ Console.WriteLine("Not found."); } } } }
แต่ถ้าเป็นภาษา C จะเขียนแบบนี
#include <stdio.h> int my_strlen(char *str){ int i = 0; while(str[i] !='\0'){ //ใช้ str[i] == 0 ก็ได้ i++; } return i; } int main(){ char str[201]; //ใช้กี่ตัว ต้องประกาศเพิ่ม 1 ตัว เพราะช่องสุดท้ายจะใช้เก็บ \0 เพื่อบอกว่าจบ String char find[11]; int len_str; int len_find; int i,j; int found = 0; int bool_in_loop = 0; printf("String: "); gets(str); printf("Find: "); gets(find); len_str = my_strlen(str); len_find = my_strlen(find); //ใช้ strlen ของ string.h ก็ได้ เป็นการนับว่ามีกี่ตัวอักษร for(i = 0;i<len_str;i++){ // วนให้ครบทุกตัว bool_in_loop = 1; //กำหนดให้ผ่านเงื่อนไข for(j=0;j<len_find;j++){ // วนเพื่อตรวจว่ามีคำที่หาไหม if(i+j >= len_str){ //ตรวจว่าไม่เกินความยาวของ String หลัก bool_in_loop = 0; //ถ้าเกิน ไม่ผ่าน break; //จบ Loop นี้ } if(str[i+j] != find[j]){ //ตรวจว่าตรงกันไหม bool_in_loop = 0; //ถ้าไม่ตรง กำหนดให้ไม่ผ่าน break; //จบ Loop นี้ } } if(bool_in_loop == 1){ //ตรวจว่าผ่านไหม found++; //ถ้าผ่าน ให้เพิ่มตัวนับ } } if(found == 0){ //ถ้าเจอไม่เจอ printf("Not found."); }else{ //ถ้าเจอ printf("Found."); } return 0; }
จะเห็นได้ว่า Code ยาวและยุ่งยากกว่ามาก ซึ่งถ้ามองในแง่การใช้ถือว่าเสียเวลาเขียน แต่ในแง่ของการฝึก เป็นการฝึกให้คิดได้ดีพอสมควร ต้องใช้ loop 2 ชัั้นเพื่อตรวจเลยทีเดียว แถมยังต้องกำหนดขนาดของ char array ด้วย
ดังนั้นผมเห็นว่าการที่เราจะเลือกเรียนภาษาใดๆ ควรเลือกให้เหมาะสมกับงานไปเลยดีกว่าครับ เช่น
- Java งานที่ต้องใช้แบบ Cross Platform(ใช้งานได้ทั้ง Windows Linux หรืออื่นๆ) และเขียนโปรแกรมบน Android ภาษานี้ผมว่ามันมีข้อเสียคือถ้ามี GUI มันจะทำงานได้ค่อนข้างช้า(หรือผมเขียนแย่เองหว่า)
- C# เขียนโปรแกรมใช้บน Windows เท่านั้น ทำงานได้เร็วกว่า Java ที่มี GUI แต่ถ้าต้องการเขียนแบบข้าม Platform ต้องใช้ GTK+ ช่วย ซึ่งทำให้ช้าลง
- C, C++ ใช้สำหรับงานที่ต้องการประสิทธิภาพสูงมากๆ เช่นพวกเกมส์ หรือโปรแกรมคำนวนใหญ่ๆ
- PHP, ASP, Javascript สำหรับเป็น Web Programmer โดยเฉพาะเลย
- ภาษาอื่นๆ ไม่รู้ครับ ที่ใช้หลักๆมีแค่นี้
ส่วนภาษา Visual Basic, Delphi นั้นไม่แนะนำให้เรียนครับ เพราะมันไม่ค่อยคล้ายภาษาอื่นๆ เวลาไปเรียนรู้ใหม่มันจึงยาก
อนึ่ง การเขียนโปรแกรมบน iOS (พวก iPhone, iPad) นั้นต้องใช้ภาษา Objective-C ซึ่งผมได้ยินมาว่า เหมือนต้องเรียนใหม่หมด คิดว่าไม่คล้าย C-Style แต่เท็จจริงเป็นอย่างไรไม่ทราบ