2. การวางโครงสร้างของโปรแกรมก่อนเริ่มเขียน
การวางโครงสร้างของโปรแกรม จริงๆ แล้วเป็นสิ่งที่สำคัญมาก และถือว่าเป็นหัวใจสำคัญของการหัดเขียนโปรแกรมเลยทีเดียว เพราะการจัดวางโครงสร้างของโปรแกรม จะช่วยให้มนุษย์อย่างเราๆ รู้จักการจัดลำดับ และคิดอย่างเป็นขั้นเป็นตอน ซึ่งหลายๆ ประเทศ ได้บรรจุหลักสูตร ให้เด็กๆ หัดเขียนโปรแกรมด้วย ก็เพราะเหตุผลนี้แหละครับ
แต่นักเรียน นักศึกษา ส่วนใหญ่ จะติดกับดักของตัวเอง ก็ตรงนี้แหละครับ
คือเราต้องเข้าใจนะครับว่า เวลาอาจารย์เขาสอน เขาก็ต้องเริ่มสอนจากเรื่องง่ายๆ ไม่ใช่ว่ายังไม่มีพื้นฐานอะไรเลย แล้วเขาจะพาเขียน image processing เขาก็ต้องเริ่มสอนจากเรื่องง่ายๆ ก่อนอยู่แล้ว
ขอบ่นนอกเรื่องนิดนึงนะครับ...
ผมไม่เข้าใจว่า ทำไมน้องๆ นักศึกษา ที่มาถามผม มักจะบอกว่า ตัวเองเพิ่งหัดเขียน ยังไม่มีพื้นฐานเลย แต่กลับเขียนโปรแกรม image processing ซึ่งมันไม่ใช่เรื่องง่ายๆ นะ แล้วก็มาบ่นว่ามันยาก เขียนไม่ได้ แล้วก็ใช้วิธีไปหา copy code ตาม internet มารัน แล้วก็ error คือ น้องๆ นักศึกษาควรจะรู้นะครับว่า แค่พื้นฐานเฉยๆ ตามหลักสูตร เขาก็สอนกัน 1 เทอมเต็มๆ ส่วนวิชา image processing เขาก็สอนกันอีก 1 เทอมเต็มๆ ถ้ามันง่ายขนาดที่ว่า ไป copy code คนอื่นมา แล้วแก้นิดๆ หน่อยๆ ก็รันได้ แล้วเขาจะเสียเวลาเรียนกันไปทำไม แล้วก็ใช่ว่าทุกคนที่เรียน จะเขียนได้นะ บางคนเรียนเป็นปี ยังเขียนไม่เป็นเลย ดังนั้นคิดจะทำอะไร ก็นึกถึงความเป็นจริงด้วย
เข้าเรื่องกันต่อครับ...
พออาจารย์เขาสอนเรื่องง่ายๆ อย่างเช่น ให้เขียนโปรแกรมบวกเลข ก็พากันข้ามขั้นตอนนี้ไปเลย เพราะมันเป็นเรื่องที่ง่ายมากสำหรับทุกคน ดังนั้น แทนที่จะได้เริ่มหัดในเรื่องง่ายๆ ก็กลายเป็นไม่ได้หัดอะไรเลย
งั้นเราลองมาดูกันนะครับ ว่าโปรแกรมบวกเลขธรรมดาๆ มันมีลำดับขั้นตอนการทำงานยังไง
ในรูปข้างบนนี้ เป็น flow chart การเขียนโปรแกรมบวกเลข 2 จำนวน โดยรับมาจากผู้ใช้งาน ซึ่งเราจะเห็นว่า แค่โปรแกรมง่ายๆ แค่นี้ ก็ยังมีการทำงานถึง 4 ขั้นตอนเลยทีเดียว
ในโปรแกรมที่ซับซ้อน จำนวนขั้นตอนก็จะมากกว่านี้ แต่ไม่ว่าโปรแกรมจะซับซ้อนขนาดไหน โครงสร้างของโปรแกรม ก็จะมีอยู่ 3 ส่วนเสมอ นั่นก็คือ
1. ส่วนรับค่า (input) ทำหน้าที่อ่านข้อมูลที่จะนำมาใช้คำนวณในโปรแกรม
2. ส่วนประมวลผล ทำหน้าที่คำนวณตามกระบวนการ หรืออัลกอริทึมที่เราได้วางแผนไว้
3. ส่วนแสดงผล ทำหน้าที่แสดงผลการคำนวณออกมาในรูปแบบต่างๆ ตามที่เราต้องการ
ซึ่งถ้าดูจาก flow chart ข้างต้น เราก็จะแบ่งได้ดังนั้น
1. ขั้นตอน "Read A" และ "Read B" อยู่ในส่วนรับค่า
2. ขั้นตอน "Calculate sum as A+B" อยู่ในส่วนประมวลผล
3. ขั้นตอน "Print Sum" อยู่ในส่วนแสดงผล
เวลาเราเขียนโปรแกรมจริงๆ ไม่มีคนมาคอยบอกเรานะครับว่า "ต้องเริ่มเขียนอะไรก่อน" หรือ "บรรทัดต่อไปจะเขียนอะไร" แล้วเราจะรู้ได้ยังไงละ? คำตอบก็คือ เขียนตาม flow chart นี่แหละครับ
งั้นเรามาลองดูกันนะครับว่า จาก flow chart ข้างต้น เราจะเขียนเป็น code ออกมาได้ยังไง
A = input('Enter number: '); % Read A B = input('Enter number: '); % Read B S = A+B; % Calculate Sum as A+B disp(S); % Print Sum
ดูง่ายๆ เองใช่ไหมละครับ แต่....
ถ้าเกิดเราไม่ได้เขียนเป็นลำดับขั้นตอนตามนี้ เช่น สลับเอา S ไปเขียนไว้บรรทัดแรก โปรแกรมก็จะ error ทันที (ไม่เชื่อก็ลองดูได้)
พอจะมองเห็นภาพไหมครับ ว่าการจัดวางโครงสร้างของโปรแกรมสำคัญอย่างไร ถึงแม้ว่าเราจะเขียนโค้ดถูกทุกบรรทัด แต่หากเราจัดวางโค้ดผิดพลาด โปรแกรมก็อาจจะ error ทำงานไม่ได้ หรือต่อให้ได้คำตอบออกมา ก็เป็นคำตอบที่ไม่ถูกต้อง
ดังนั้นอย่าเข้าใจผิดนะครับ ถึงแม้ว่าโปรแกรมจะรันได้ แต่ก็ไม่จำเป็นว่าคำตอบที่ได้จะถูกต้องเสมอไป
เวลาเราเขียนโปรแกรม ให้ระลึกไว้เสมอครับว่า...
"ถ้าป้อนขยะเข้าไป ก็ได้ขยะออกมาเหมือนเดิม"
จบหัวข้อที่ 2