ตอนที่แล้วจาก : อะไรคือโปรแกรม และการเขียนโปรแกรม ตอนที่ 1
หันกลับมา… มองการเขียนโปรแกรม
เมื่อเราได้มองซ้ายมืองขวาแล้ว เราก็คงพบว่า ทั้งการก่อสร้าง ทั้งการเขียนนิยาย มีคอนเซปท์ที่ค่อนข้างคล้ายกันมากที่เดียว และถ้าเราเทียบกับการสร้างโปรแกรมแล้ว เราจะได้อะไร ?
หาคิดเป็นการเขียนโปรแกรม เราจะพบว่าโปรแกรม ก็คือการที่เราสรางอะไารซักอย่างขึ้นในคอมพิวเตอร์ หรือว่าการเขียนนิยายสักเล่มขึ้นมาในคอมพิวเตอร์ การสร้างโปรแกรมขึ้นมาสักตัวนั้น ต้องการจินตนาการ, ความคิดพื้นฐาน และคอนเซปท์อื่น ๆเบื้องต้นมากมาย ว่าเราต้องการอะไร เมื่อสเร็จแล้วจะสามารถทำอะไรได้บ้าง และต่อไปก็คือ การวิศวกรรมซอฟต์แวร์ ซึ่งเป็นการเขียนพิมพ์เขียวของตัวโปรแกรมของเรา เพื่อให้ออกมามีความเสถียรภาพ แก้ไขได้ง่าย ต่อเติมได้ตามความต้องการ ฯลฯ และนอกจากนี้ ยังขึ้นอยู่กับขนาดของโปรแกรมอีกด้วย คือเมื่อสร้างโปรแกรมที่มีขนาดใหญ่ขึ้นนั้น ต้องใช้เวลาออกแบบต่าง ๆ นานขึ้น บางโปรแกรมต้องแก้แบบกันไม่รู้กี่เที่ยว กว่าจะได้ลงมือเขียนจริง ๆ และการสร้างนั้น มักจะทำเป็นทีมหลาย ๆ คน ยิ่งโปรแกรมที่มีขานดใหญ่เท่าใด ก็ยิ่งใช้คนมากเท่านั้น แต่ละคนแบ่งหน้าที่กันอย่างชัดเจน และนอกตากนี้แล้ว ถ้าแบบตอนแรกของโปรแกรมถูกวางไว้ไม่ดี ก็ยากที่จะสามารถพัฒนาโปรแกรมที่ดีได้แน่นอน
นอกจากนี้ ความรู้พื้นฐานกับโปรแกรมหรือระบบที่ต้องการสร้างเป็นสิ่งสำคัญ และจำเป็นที่เราต้องรู้และทำความเข้าให้ดี ๆ จะกล่าวว่า ความรู้พื้นฐานเหล่านี้เป็นส่วนหน่งของ แบบแปลนพื้นฐานของสิ่งก่อสร้าง หรือว่า โครงเรื่องพืนฐานของนิยาย ก็ไม่ผิดนัก ซึ่งขอยกตัวอย่างโปรแกรมบางประเภท และความรู้พื้นฐานบางส่วนเท่านั้น ซึ่งมีดังนี้
-
โปรแกรมที่ทำการจำลองการเดินทางของแสง จำเป็นต้องเข้าใจ Electromagnetics (Maxwell’s equations) และ Finite Defference method เป็นอย่างน้อยที่สุด
-
การจำลองของไหลในท่อน้ำ อาจจะใช้ Navier-Stoke’s equations กับ Finite Elements methods
Voice recognition program อาจจะต้องใช้ความรู้ Pattern recognition, Signal processing ตลอดจนเรื่องอื่นๆ ที่เกี่ยวข้อง -
โปรแกรมแต่งภาพ ก้ต้องรู้เรื่องพวก Image processing ต่างๆ ตลอดจน Compression techniques ต่าง ๆ
3D Modeling ก็ต้องเข้าใจคณิตศาสตร์ของ Bazier curve, B-Spilne, NURB, Ray tracing หรือว่าเร็วๆ นี้ก็ Photon mapping -
โปรแกรมเพื่อทำการดู Pattern ใน DNA sequence ก็จำเป็นต้องรู้เกี่ยวกับเรื่องของ DNA เบื้องต้นด้วย
การเขียนเกมปรแกรม อาจจะต้องรู้ A*Path-finding, Collision detecting, การประยุกต์ใช้ DSP-Tree ฯลฯ -
ฯลฯ
เป็นต้น หรือว่าแม้แต่การพัฒนาส่วนประกอบใหม่ ๆ ของระบบเดิม ๆ เช่น
-
การเพิ่มตัวป้องกันเมลขยะ หรือ Spam mail ในโปรแกรมรับ e-mail ก็ตาม อาจจะใช้ความรู้พวก Machine learning, Pattern recognition, Rule discovery ฯลฯ ต่าง ๆ มากมาย
-
การทำ On-line e-Commerce นั้นก็อาจจะใช้ Machine learning เข้ามาช่วยกันกับ Data clustering และ selt-organizing Map เพื่อแนะนำสินค้าให้กับลูกค้า
-
การเขียนโปรแกรมเพื่อควบุคมระบบ Network แบบอัตโนมัติ จำเป็นต้องรู้ Network Flows และ Optimization theory
-
ฯลฯ
ซึ่งจะเห็นได่ว่า การเขียนโปรแกรมเหล่านี้นั้น ถ้าไม่มีความรู้และความเข้าใจพื้นฐานในสิ่งที่เราต้องการเขียนในระดับหนึ่งแล้ว ก็คงไม่สามารถทำได้ หรือว่าแม้ทำได้ก็ปราศจากความรู้เหล่านี้ ก็คงจะไม่มีประสิทธิภาพมากนัก ตลอดจนความผิดพลาดก็เป็นไปได้สูง นอกจากนั้นความรู้เบื้องต้นในแต่ละเรื่อง หลายครั้งไม่สามารถที่จะใช้งานข้ามไปข้ามมาในเรื่องอื่น ๆ ได้ ไม่ว่าแนวความคิดพื้นฐานจะใกล้เคียงกันแค่ไหนก็ตาม
ภาษาและการเขียนโปรแกรม
การเขียนนิยาย เราใช้ภาษาใดภาษาหนึ่ง (ภาษาไทย, ภาษาอังกฤษ ฯลฯ) ในการเขียนบอกให้ตัวละครไปตามสถานที่ต่าง ๆ ในการเขียนบทสนทนา ในการเขียนบรรยายฉาก และเขียนในสำนวณต่าง ๆ กันไปแล้วแต่ผุ้เขียนแต่ละคน
สำหรับการเขียนโปรแกรมนั้น ก็คือการเขียนคำสั่งเพื่อให้คอมพิวเตอร์ทำงานตามที่เราต้องการ อย่างที่ได้กล่าวถึงไปแล้วข้างต้น และเช่นเดียวกับการเขียนนิยาย ที่เราใช้ภาษาที่คนอ่านเข้าใจ การเขียนโปรแกรมคอมพิวเตอร์ ก็คือการเขียนคำสั่ง โดยใช้ภาษาที่คอมพิวเตอร์ สามารถเข้าใจได้ ซึ่งนั้นก็คือ ภาษาเครื่อง (Machine Language) นั่นเอง แต่ว่าทั้งนี้ ภาษาเครื่องนั้นยากต่อการทำความเข้าใจมาก จึงได้มีการพัฒนาภาษารับดับสูง (High-level Language) ขึ้นมามากมายหลายภาษา เพื่อให้คนสามารถเขียนโปรแกรมได้ง่ายขึ้น และใช้โปรแกรมที่เรียกกว่า คอมไฟเลอร์ (Compiler) ทำการแปลเป็นภาษาที่เครื่องเข้าใจอีดต่อหนึ่ง โดยภาษาระดับสูงที่เป็นที่รู้จักกันโดยทั่วไปก็คือ C, C++, Pascal, Java ฯลฯ นอกจากนี้ยังมีอีกหลายภาษาที่ไม่เป้นที่รู้จักกันมากเท่ากับภาษาเหล่านี้ แต่ว่าก็เป็นภาษาที่สำคัญ และมีบทบาทในงานหลายอย่าง เช่น Lisp, OcaML, Python, Perl, Hashell ฯลฯ โดยภาษาเหล่านี้จะมีจุดเด่น และจุดด้อนแตกต่างกันไป
เรียบเรียงบทความโดย Rawitat Pulam
บทความฉบับนี้เป็นไปตามข้อกำหนดของ GNU Free Documentation License 1.2. เท่านั้น