ทุกคนที่อ่านบทความนี้ คงทราบและเข้าใจความหมายของ โปรแกรมคอมพิวเตอร์ กันดีอยู่แล้ว แต่ว่าเพื่อความสมบูรณ์ของเนื้อหา ผมจะขอสรุปไว้ตรงนี้สักเล็กน้อย โปรแกรมคือสิ่งที่อยู่ในคอมพิวเตอร์ และเวลาที่เราใช้คอมพิวเตอร์นั้น อันที่จริงแล้วสิ่งที่เราใช้ก็คือโปรแกรม โดยโปรแกรมจะเป็นตัวรับคำสั่งจากเราซึ่งเป็นผู้ใช้ เพื่อไปสั่งงานให้คอมพิวเตอร์ประมวลผล หรือทำงานจริงๆ อีกทีหนึ่ง หรือว่าบางที่โปรแกรมอาจจะไม่ได้รับคำสั่งจากผู้ใช้โดยตรง แต่ว่ารับข้อมูลจากโปรแกรมตัวอื่นๆ โปรแกรมบางตัวอาจจะมีลักษณะเหมือนกับตัวกลาง ที่เป็นศูนย์กลางรับส่งข้อมูลจากโปรแกรมหลายๆ ตัว โปรแกรมบางตัวอาจจะคอนดูแลฮาร์ดแวร์บางอย่าง ฯลฯ
จะเห็นได้ว่าโปรแกรมนั้นมีด้วยกันมากมายหลากลักษณะ ประโยชน์งานต่างๆ กันไปตามแต่ประเภท แต่ว่าทั้งนี้ ในการที่จะสร้างโปรแกรมขึ้นมาซักตัวนั้น เราต้องมีพื้นฐานอะไรบ้าง? เราต้องทำยังไงบ้าง? นี่คือสิ่งที่เราได้เห้นกันในบทความต่อๆ ไป
เราอาจจะเคยได้ยินคำว่า การเขียนโปรแกรม หรือ การพัฒนาโปรแกรม มาบ้าง ซึ่งทั้งมองอย่างแล้ว โดยหลักการก็คือ การสร้างโปรแกรมขึ้นมาสักตัว เพื่อจุดประสงค์การใช้งานอย่าง ตามที่ผู้เขียนโปรแกรมต้องการ แต่ว่าทั้งนี้ การเขียนโปรแกรม ไม่ใช่ว่าจู่ๆ จะลงมือเขียนได้เลย หรือว่ามีความคิดว่าอยากเขียนโปรแกรมเพื่องานแบบนั้นแบบนี้ แล้วจะลงมือเขียนได้เลย มันมีอะไรในการเขียนโปรแกรม มากกว่าการลงมือเขียนโปรแกรมจริงๆ มากมายนัก ซึ่งผมจะขอยกตัวอย่างเชิงเปรียบเทียบง่ายๆ ในส่วนถัดไป
ว่าด้วย การเขียนโปรแกรม
อย่างที่กล่าวไปแล้วเมื่อครู่ การเขียน/พัฒนาโปรแกรม ก็คือการ "สร้าง" โปรแกรมขึ้นมาตามความต้องการของเรา ซึ่งเริ่มต้นมาจากความต้องการ หรือจินตนาการ ว่าต้องการให้เป็นอย่างไร แต่ว่าเพียงเท่านั้น เพียงพอหรือไม่? เพื่อให้เข้าใจง่ายขึ้น เราลองมามองการสร้างโปรแกรม ในเชิงเปรียบเทียบกับสิ่งที่ค้อนข้างเป็นเรื่องทั่วไป และสามารถทำความเข้าใจได้ง่ายกันดูครับ
มองซ้าย มองแบบคนเรียนวิทย์ – การสร้างสิ่งของ/สิ่งก่อสร้าง
ก่อนอื่นเราลองมามองอย่างคนเรียนสาบวิทย์กันก่อน นั้นคือ ลองมองการเขียนโปรแกรมให้เป็นเหมือนกับการสร้างอะไรซักอย่าง เช่นตึกรามบ้านช่อง ศูนย์การค้า รถยนต์ ฯลฯ โดยในที่นี้ ขอยกตัวอย่างการสร้างสิ่งก่อสร้างเป็นหลัก
การสร้างสิ่งก่อนสร้างเหล่านี้ไม่ใช่ว่าอยู่ดีๆ อยากจะสร้าง ก็สามารถสร้างได้ทันที หากแต่ว่าต้องให้สถาปนิกทำการออกแบบ และแก้แบบกันเป็นปีๆ เพื่อให้แบบที่ออกมาตรงตามความต้องการ ได้ประโยชน์ใช้สอยตามความต้องการ ฯลฯ มากที่สุด และเมื่อทำการออกแบบเรียนร้อยแล้ว ก็ใช่ว่าจะลงมือทำได้ตามแบบนั้นเลย เพราะว่ายังต้องเอาไปใช้วิศวกร ทำการเขียนพิมพ์เขียว คำนวณสิ่งต่างๆ ค่าของแรงต่างๆ กำหนดชนิดของวัสดุอุปกรณ์ ฯลฯ เพื่อให้สิ่งก่อสร้างมีความแข็งแรง คงทน ต่อเติมเพิ่มแต่งได้ในอนาคตเมื่อต้องการ และมื่อสร้างเสร็ตเป็นรูปร่างแล้ว ยังอาจจะต้องให้นักตกแต่งภายใน ทำการออกแบบต่างๆ อีกรอบ เพื่อประโยชน์ใช้สอยภายใน รูปลักษณ์ ฯลฯ ถ้าสิ่งก่อสร้างของเราเป็นบ้านหลังเล็กๆ กระบวยการที่ว่านี้ก็จะกินเวลาไม่มากเท่าไหร่ หรือว่าในปัจจุบันก็มีบ้านกึ่งสำเร็จรูป ที่เมื่อเลือกแบบบ้านแล้วก็เกือบจะปลูกสร้างได้เลย และใช้คนที่ก่อสร้างไม่มากนัก แต่ว่าถ้าเป็นสิ่งก่อสร้างที่ใหญ่ขึ้นมาระดับอพาทเม้นท์ กระบวนการดังกล่าวก็กินเวลามากขึ้น และใช้คนในการก่อสร้างมากขึ้น ถ้าเป็นตึกระฟ้า ก็ยิ่งนานขึ้นและใช้คนมากขึ้นตามลำดับ และไม่ว่าคนที่ทำการก่อสร้างจะเก่งขนาดไหน ถ้าแบบที่เขียนไว้ตั้งแต่ตอนแรกไม่ดี หรือว่าผิดพลาด ก็ยากที่จะสร้างให้ดีได้ หรือว่าในกรณีที่แบบตอนแรก เขียนไว้ในลักษณะไม่เผื่อการต่อเติมหรือแก้ไขในอนาคต การต่อเติมหรือแก้ไขนั้นๆ ก็จะทำได้ยาก
และที่น่าสนใจก้คือ การออกแบบและความรู้ที่เราใช้ในการสร้างอะไรอย่างใดอย่างหนึ่งนั้น ไม่สามารถใช้กับการออกแบบ และการสร้างสิ่งอื่นๆ ได้เสมอไป เช่น ถ้าเราต้องการสร้างสิ่งก่อสราง เราต้องการความรู้ทางวิศวโยธา แต่ว่าถ้าเราต้องการเครื่องใช้ไฟฟ้า เราก็ต้องการความรู้ของทางวิศวกรรมไฟฟ้า ถ้าเป็นเครื่องบิน ก็วิศวกรรมการบิน ตลอดจน Aerodynamices ต่างๆ มากมาย นั้นก็คือ เราต้องการความรู้พื้นฐานในสิ่งที่เราต้องการสร้าง นั่นเอง และสิ่งที่พูดถึงไปนั้น ก็ยังคงสามารถนำมากล่าวได้เสมอ นั้นคือ การสรางเครื่องบินโบอิ้ง 747 นั้นใช้เวลาในการออกแบบและวิศวกรรม ตลอดจนใช้คนในการก่อสร้างมากกว่าเครื่องบินของเล่นต่างๆ
การมองแบบนี้ทำให้เราเข้าใจการสร้างโปรแกรมขึ้นได้อย่างไร? อดใจสักนิด เรามาลองมองอีกด้านนึง ซึ่งต่างจากแนวคิดข้างต้นกันดูดีกว่า
มองขวา มองแบบคนเรียนศิลป์ – การเขียนนิยาย
เมื่อตอนต้นเรามองการเขียนโปรแกรม ในเชิงการก่อสร้างสิ่งต่างๆ ไปแล้ว ตอนนี้เราลองมามองอีกมุมหนึ่ง โดยมองการ เขียนโปรแกรม เหมือนกับการ เขียนนิยาย กันบ้าง
การเขียนนิยายชักเรื่องนั้น แน่นอนว่าไม่ใช่ว่าแค่เราอยากเขียน ก็สามารถเขียนได้ ไม่ว่าคนที่เขียนจะมีพรสรรค์เท่าไหร่ ก็ยังจำเป้นต้องวางโครงเรื่องคร่าวๆ กำหนดตัวละครต่างๆ สถานที่ต่างๆ อย่างคร่าวๆ กำหนดสิ่งที่อยากจะสื่อ ว่าเรื่องนี้ควรจะเป็นไปในแนวไหน มีเนื้อหาแบบไหน เนื้อเรื่องจะพลิกไปในทางใด ฯลฯ นิยายยิ่งยาวเท่าไหร่ การวางโครงเรื่องให้เหมาะสมในทุกส่วนยิ่งมีส่วนสำคัญมากเท่านั้น ไม่งั้นเราจะเจอสิ่งที่พบได้ง่ายๆ ในละครทีวิเมืองไทย นั้นคือการ ยืดเรื่อง เมื่อละครได้รับความนิยม และทำให้ละครเรื่องนั้นน่าเบื่อ ไม่น่าคิดตาม สาเหตุก็เนื่องมาจากเนื้อเรื่องเดิม ไม่ได้รับการวางไว้ให้สามารถต่อเติมในจุดนั้นๆ ได้ง่ายๆ ทำให้การต่อเริม เพื่อยืดเรื่อง ไม่สามารถทำได้ดีและน่าสนใจ แต่ว่าถ้าเราต้องการเขียนเรื่องสั้น การเขียนโครงเรื่องต่างๆ ก้จะลดน้อยลงไปตามอัตราส่วน
นอกจากนี้ ความรู้พื้นฐานในเรื่องที่เราต้องการเขียน ก็เป็นสิ่งสำคัญไม่ใช่น้อย เช่นนิยาย/ภาพยนต์เกี่ยวกับอวกาศและเทคโนโลยีชื่อดังเรื่อง 2001: Space Odyssey นั้นใช้ความรู้เกี่ยวกับอวกาศตลอดจนฟิสิกส์ค่อนข้างมาก รวมถึงจินตนการในการสื่อออกมาและการคาดการณ์อนาคตจากพื้นฐานของอะไรหลายๆ อย่างด้วย ในขณะที่นิยายของ Tom Clancy นั้นมักจะมีเรื่องของแผนการต่างๆ และเงื่อนงำต่างๆ ทางทหารเข้ามาเกี่ยวข้อง ซึ่งแน่นอนต้องหาข้อมูลกันมาอย่างดี และผู้เรื่องราวกันอย่างดี
แต่ว่าทั้งนี้และทั้งนั้น ใช่ว่าเรื่อราวทุกเรื่องที่เราอยากจะแต่ง จะต้องยาวระดับนิยายหรือภาพยนต์แต่อย่างใด เราอาจจะต้องการแต่แค่การ์ตูนสั้นๆ สามช่องจบเหมือนกับขายหัวเราะ เราก็ต้องวางเนื้อหาและสิ่งที่ต้องการสื่อเช่นกัน
เอาล่ะครับ ได้เวลากลับมามองดูสิ่งที่เป็นหัวใจของบทความนี้ นั้นคือการเขียนโปรแกรมกันต่อ ลองมาดูกันว่าการที่เรามองทั้งสองด้านนี้แล้ว เอามาเชื่อมโยงกับการเขียนโปรแกรมอย่างไร ในตอนหน้าครับ ……
เรียบเรียงบทความโดย Rawitat Pulam
บทความฉบับนี้เป็นไปตามข้อกำหนดของ GNU Free Documentation License 1.2. เท่านั้น