เรายังรู้ไม่ถึง เศษหนึ่งส่วนล้าน ในหนึ่งเปอร์เซนต์ ของสิ่งที่มีอยู่ในโลกนี้
( Thomas Edison – นักประดิษฐ์คิดค้น ชาวอเมริกัน 1847 – 1931 )
การจะสร้างโปรแกรมขึ้นมาโปรแกรมหนึ่ง แน่นอนว่ามันจะต้องถูกเขียนมาจากภาษาคอมพิวเตอร์...ว่าแต่ เราจะเลือกภาษาไหนมาใช้กับงานที่เรากำลังจะสร้างล่ะ?
สำหรับมือใหม่ที่อยากจะเขียนโปรแกรมหรือสร้างชิ้นงานอะไรของตัวเองนั้น การเลือกภาษา Programming Language นั้นเป็นปัญหาแน่นอน
แค่เดินไปที่ชั้นขายหนังสือก็ต้องตกใจกับชื่อภาษาอะไรก็ไม่รู้มากมายเต็มไปหมดเช่นสายภาษาตระกูล C พอเดินไปอีกหน่อยก็เจอ C++ ตามด้วย C# แถมยังไม่พอ เจอ VC# พวก .NET ตามมาอีก แถมถ้าอยากจะเขียนเว็บ ก็เจอ php asp javascript เอ๊ะ แล้วมันตัวเดียวกับหนังสือ Java ที่วางไว้ข้างๆ รึเปล่านะ?
ยิ่งสมัยนี้ ยุค Mobile App. เฟื่อฟู ทั้ง Android iOS WindowsPhone ฯลฯ ซึ่งแต่ละค่ายก็ใช้ภาษาต่างกันไป
แล้วสำหรับมือใหม่จะรู้มั้ยเนี่ยว่าภาษาอะไรเป็นยังไง
แล้วทำไมต้องมีหลายๆ ภาษา?
คำตอบที่ชัดเจนที่สุดก็คือ ไม่มีภาษาไหนที่ทำได้ทุกอย่างสมบูรณ์ได้ (ส่วนเหตุผลรองก็คือบริษัทที่ทำภาษาพวกนั้นขึ้นมาต้องการส่วนแบ่งการตลาด ถ้าใช้ภาษาของคู่แข่งก็สู้เขาไม่ได้น่ะสิ)
แล้วอย่างนี้ ภาษาไหนดีสุด?
ภาษาที่เราชอบนั่นแหละดีที่สุด (ไม่ได้กวนนะครับ) ใครชอบภาษาไหนก็จะบอกว่าภาษาอื่นๆ ที่ตัวเองไม่ถนัดเนี่ยใช้ยาก ไม่ดี มีปัญหาเยอะ
มันก็คล้ายๆ ก็มีความเป็นสาวกอยู่นิดหน่อยนั่นแหละ
สำหรับคนที่
ค่อนข้างเชี่ยวอยู่แล้วคือเขียนเป็นหลายภาษา
การเลือกภาษาไหนอยากจะเป็นปัญหาเล็กน้อยเท่านั้นเพราะสามารถจับจุดเด่นของ
ภาษานั้นๆ ออกมาใช้ได้โดยไม่ยาก และเรื่อง ไวยากรณ์ หรือ syntax
ของภาษาก็ไม่ใช่เรื่องที่คนพวกนี้กังวลเสียเท่าไหร่เพราะความสามารถในการปรับตัวไปอีกภาษาไม่ใช่ปัญหาอะไรเท่าไหร่เลย
มีภาษาใหม่ๆ เกิดขึ้นตลอด...
แม้คอมพิวเตอร์จะมีประวัติมาไม่นานเท่าไหร่ (ยังไม่ถึงร้อยปีเลย) แต่ระหว่างนั้นก็เกิดเรื่องมากมาย หลังจากภาษาคอมพิวเตอร์แรกเกิดขึ้นมาเพื่อให้มนุษย์สั่งงานเครื่องจักรได้ ก็มีการพัฒนาต่อมาเรื่อยๆ ไม่มีหยุด ผ่านการลองผิดลองถูกมาหลายครั้ง (ปัจจุบันก็ยังเป็นอยู่)
ดังนั้นจะขอแนะนำว่าภาษาไหนเป็นยังไงบ้าง แต่จะขอบอกไว้ก่อนว่าคนเขียนก็ไม่ได้เกิดทันพวกภาษาโบราณๆ สักเท่าไหร่ (ฮา)
Assembly
นิยามสั้นๆ: อ่านไม่ค่อยรู้เรื่อง เขียนยาก แต่ทำให้เข้าใจหลักคอมพิวเตอร์
ขอสามคำ: ซับ-ซ้อน-เกิ๊น!
ระดับความชอบ: ★
00000030 B9FFFFFFFF mov ecx, -1 .loop: 00000035 41 inc ecx 00000036 803C0800 cmp byte [eax + ecx], 0 0000003A 75F9 jne .loop .done: 0000003C C3 ret
ถือว่าเป็นต้นตระกูลของภาษาคอมทั้งหมดเลยก็ว่าได้ ภาษานี้ถือว่าเป็นภาษาระดับต่ำ นั่นแปลว่ามันแทบจะเป็น ภาษาเครื่อง หรือ machine code อยู่แล้ว (อาจจะเคยได้ยินที่บอกว่าคอมพิวเตอร์เข้าใจแค่ 1 กับ 0 เท่านั้น )
แอสเซมบลีก็คล้ายๆ กับการแหลงรหัส 1010101001 ให้เป็นตัวย่อภาษาอังกฤษที่คนอ่านพอรู้เรื่องได้ขึ้นมาหน่อย เช่น จะย้ายค่า 10 เข้ารีจิสเตอร์ก็สั่งว่า mov AX,10 หรือพูดง่ายๆ มันแต่ทำให้โปรแกรมเมอร์ทำงานง่ายขึ้นแทนที่จะต้องไปอ่านโค้ดแบบ DF C4 00 A6 อะไรแบบนี้
หลายคนมีความเชื่อว่าภาษานี้มันทำงานเร็วที่สุด มีประสิทธิภาพสูงสุด และแม้จะใช้ภาษาอื่นยังไงก็ต้องแปลมาเป็นภาษาเครื่องในตอนสุดท้ายอยู่ดี
ตามทฤษฎีมันก็ถูกแหละนะ มันเป็นเรื่องจริงแต่ตกบางที่สำคัญอย่างไป...นั่นคือ
Assembly เป็นภาษาที่มี Productivity ต่ำติดดิน
Productivity อืม...ถ้าอธิบายตรงๆ เลยมันก็คือความเร็วในการ เขียนงานให้เสร็จ นั้นแหละ
ทำงานเสร็จคืออะไร?
เช่น ถ้าคุณจะเขียนโปรแกรมแก้สมการอะไรขึ้นมาโปรแกรมนึง โปรแกรมที่มาจากภาษา Assembly อาจจะคำนวณผลให้คุณได้ใน 10 วินาที แต่ถ้าเป็นโปรแกรมที่มาจากภาษาระดับสูงอย่าง Java หรือ VB มันอาจจะต้องใช้เวลาซัก 100 วินาที
ก็ดูดีนี่นา?
แต่ว่าถ้าคุณใช้เวลาเขียนโปรแกรมจากภาษาระดับสูงสัก 1 ชั่วโมง คุณอาจจะต้องเผื่อเวลาสำหรับ Assembly สักครึ่งวันกว่าๆ แล้วล่ะ เนื่องจากภาษานี้มันเขียนยาก ต้องมีความรู้เรื่อง Architecture (ภาษาไทยเรียก สถาปัตยกรรมคอมพิวเตอร์ แปลตรงตัวมากมาย) หรือ microprocessor ของคอมพิวเตอร์เป็นอย่างดี แล้วที่สำคัญคือมันเขียนไม่สนุกเลยทำให้โปรแกรมเมอร์ไม่มีความกระตือรือร้นในการทำงาน
ข้อเสียที่ร้ายแรงอีกอย่างของ Assembly คือ CPU หน่วยประมวลผลหลักของคอมของเรานี่แหละ
คือ เรื่องมันมีอยู่ว่า CPU แต่ละยี่ห้อหรือแม้แต่ยี่ห้อเดียวกับแต่คนละรุ่นจะมีรีจิสเตอร์หรือ Architectureไม่เหมือนกันซึ่งมันทำให้คุณต้องเขียนใหม่ทุกครั้งที่จะเอา โปรแกรมของคุณย้ายไปทำงานเครื่องอื่น
แน่นอนว่ามันไม่เหมาะกับมือใหม่อย่างยิ่ง หรือพวกโปรแกรมเมอร์ที่เขียนมานานแล้วก็ใช่ว่าจะจำเป็นต้องรู้ซะเมื่อไหร่ ส่วนใหญ่ภาษานี้แทบจะเลิกใช้กันแล้วในการทำโปรเจคใหญ่ แต่เก็บเอาไว้สำหรับพวกนักศึกษาวิทยาศาสตร์คอมพิวเตอร์ที่จะเรียนมันเพื่อ เข้าใจระบบการทำงานของคอมพิวเตอร์ให้ดียิ่งขึ้นและพวกที่ต้องมีการเขียนโปรแกรมติดต่อกับ Hardware เพราะยิ่งภาษา (software) มีระดับต่ำเท่าไหร่ก็จะยิ่งคุยกับเครื่อง (hardware) ได้ง่ายเท่านั้น
FORTRAN
นิยามสั้นๆ: ไม่เคยเขียน
ระดับความชอบ: ---
READ INPUT TAPE 5, 501, IA, IB, IC 501 FORMAT (3I5) IF (IA) 777, 777, 701 701 IF (IB) 777, 777, 702 702 IF (IC) 777, 777, 703 703 IF (IA+IB-IC) 777,777,704 704 IF (IA+IC-IB) 777,777,705 705 IF (IB+IC-IA) 777,777,799 777 STOP 1 799 S = FLOATF (IA + IB + IC) / 2.0 AREA = SQRT( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) * + (S - FLOATF(IC))) WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + 13H SQUARE UNITS) STOP END
ภาษาเก่าแก่ตัวนึงในโลกโปรแกรมมิ่ง (ตัวนี้เราไม่เคยเขียนนะ เกิดไม่ทัน) ถือว่าเป็นภาษาระดับสูงตัวแรกๆ เลยทีเดียว เกิดขึ้นมาตั้งแต่ช่วงปี 1950 โน้น...ชื่อภาษาเป็นการรวมคำระหว่างคำว่า FORmular กับ TRANslator มันทำงานบนเครื่องเมนเฟรมแต่หลังๆ มานี่ก็มีคอมไพเลอร์ออกมาใหม่ๆ มากขึ้นทำให้มันมาทำงานบน PC ธรรมดาสามัญได้แล้ว ส่วนมากใช้เขียนโปรแกรมประยุคต์ทางคณิตศาสตร์เพราะมันมีประสิทธิภาพในการคำนวณสูงมาก (เขาว่ากันมางั้นนะ)
BASIC / Pascal
นิยามสั้นๆ: เข้าใจง่ายมาก แต่ทำไรไม่ค่อยได้ เอาไว้เพื่อการศึกษา
ระดับความชอบ: ★
if a > b then WriteLn('true') else WriteLn('false'); for i := 1 to 10 do WriteLn('for loop: ', i); while a <> b do WriteLn('while loop'); repeat a := a + 1 until a = 100; case i of 1 : Write('one'); 2 : Write('two'); 3,4,5: Write('more') end;
ทั้งสองภาษานี้เป็นภาษาที่ค่อนข้างจะเบสิก ไวยากรณ์ของภาษาใช้คำภาษาอังกฤษทำให้อ่านง่าย แม้กับคนที่ไม่เคยเขียนโปรแกรมมาก่อนถ้ามีคนเขียนเป็นมาอธิบายให้ว่าตรงนี้คืออะไร ตรงนี้ใช้ทำอะไรก็จะเข้าใจได้เร็วมาก ส่วนมากใช้ในวงการการศึกษาให้นักเรียนเข้าใจคอนเซ็ปของการเขียนโปรแกรมได้ง่ายๆ แต่ถ้าพูดถึงความสามารถแล้วก็ทำไรไม่ค่อยได้
โดยส่วนตัวไม่เคยเขียน แต่โค้ดในภาษาพวกนี้ก็สามาระอ่านเข้าใจได้ว่ามันทำอะไรตรงไหน
C/C++
void main(){ if( a > b ){ printf("true"); } else{ printf("false"); } for(i = 0; i < 10; i++){ printf("for loop %d", i); } while(a != b){ scanf("%d", &a); } return 0; }
ภาษาซี หนึ่งในภาษาที่ได้รับความนิยมสูงสุดในการเอามาสอนโปรแกรมมิ่งให้มือใหม่หัดเขียน สุดยอดภาษาที่มีความคล่องตัวสูงมากที่สุดตัวนึงที่มีการคิดกันขึ้นมา
โปรแกรมจากภาษาซีไม่มีระบบการคือทรัพยากรเครื่องแบบอัตโนมัติ
Java
import java.io.*; class MyClass{ public static void main (String[] args) throws java.lang.Exception{ BufferedReader r = new BufferedReader (new InputStreamReader (System.in)); String s; while (!(s=r.readLine()).startsWith("42")) { System.out.println(s); } } }
กำลังเขียนใหม่อยู่ รอแป๊ปนะ