วันนี้เรามาคุยกันเรื่องการเขียนโปรแกรม เราควรเริ่มจากภาษาอะไรดีนะครับ โดยในปัจจุบันภาษาที่ใช้เขียนโปรแกรมมีอยูมากมายเช่นเวลาเขียนโปรแกรมทั่วไป ก็ 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 แต่เท็จจริงเป็นอย่างไรไม่ทราบ