/ BasicKnowledge

เขียนโปรแกรม vs ทำโจทย์เลข

การเขียนโปรแกรมคือการแก้ปัญหา เฉกเช่นเดียวกับการทำโจทย์เลข เพราะมันคือการแก้ปัญหา มันจึงต้องมีขั้นตอน มีข้อมูลตั้งต้น และผลลัพธ์


ในตอนเด็กๆ มีวิชาเรียนหนึ่งที่หลายๆ คนเกลียดกันมาก และในทางกลับกันก็มีอยู่บางคนที่ชอบมันมากเช่นกัน ใช่ครับ ผมกำลังพูดถึงวิชาคณิตศาสตร์ หรือวิชาเลขนั่นแหละครับ ผมเชื่อว่าทุกคนก็เคยคงคิดเหมือนผมว่าทำไมถึงเน้นกันนักหนา มีทั้งเลขหลัก เลขเสริม สัปดาห์ละหลายคาบเรียน โตไปก็ไม่ได้ใช้ เมื่อคุณนึกถึงวิชาคณิตศาสตร์ สิ่งที่คุณเห็นมันจะหน้าตาแบบนี้

sin(x + y) = sin(x) cos(y) + cos(x) sin(y)

โอ้วว มันคืออัลไลกันอะไรกัน??? ตอนนี้ผมขอให้คุณลองทบทวนดูอีกครั้งว่าคุณได้อะไรจากการเรียนคณิตศาสตร์บ้าง หลับตาลงแล้วค่อยๆ คิดดูนะครับ…

เอาล่ะตอนนี้ คุณอาจจะได้คำตอบบ้างแล้ว ว่าคุณได้อะไรบ้าง แล้วเอามาใช้ในชีวิตประจำวันได้อย่างไร ผมไม่รู้หรอกว่าคุณคิดยังไงอยู่ แต่ผมจะขอแชร์สิ่งที่ผมคิด

"คณิตศาสตร์ คือศาสตร์ว่าด้วยการหาองค์ประกอบที่ขาดหายไปของกระบวนการแก้ปัญหา"

ครับ ผมกำลังจะบอกว่า สิ่งที่เราได้จากวิชาคณิตศาสตร์นั้นไม่จำเป็นต้องอยู่ในรูปของตัวเลข หรือสูตรอะไรเลย แต่มันคือสิ่งเรียบง่าย อย่างวิธีการแก้ปัญหา มันเป็นวิชาที่สอนให้คุณคิดเป็นลำดับขั้น สอนให้คุณตั้งโจทย์ หรือหาทางออกของปัญหา

ผมขอยกการแก้สมการง่ายๆ ขึ้นมาเพื่ออธิบายสิ่งที่ผมเรียกว่าลำดับขั้นตอน

x + 5 = 2x

x + 5 – x = 2x – x

5 = x

x = 5

หลายๆ คนคงเกิดคำถามกับการแก้สมการที่ผมยกตัวอย่าง ในสมการที่ 2 ผมเขียนว่า ให้ – x ออกทั้งสองฝั่งของสมการ มันอาจจะไม่เหมือนกับที่บางคนเรียนมา ว่าถ้าต้องการกำจัดพจน์ไหน ก็ย้ายมันไปอีกฝั่งซะ แล้วกลับเครื่องหมาย บวก เป็น ลบ คูณ เป็น หาร ใช่ครับ ผมก็เรียนมาแบบนั้น แต่นั่นมันไม่ได้อธิบายวิธีการแก้ปัญหาเลย คุณจะไม่รู้ว่ามันมาได้อย่างไร แล้วทำไมอาจารย์บางท่านถึงสอนแบบนั้นล่ะ? ผมก็ไม่รู้เช่นกัน แต่อย่างน้อยมันก็พอจะบอกได้ว่า อาจารย์คนนั้นไม่ใส่ใจกับการเติมเต็มความคิดทางการแก้ปัญหาให้กับนักเรียน

ผมบอกว่าคณิตศาสตร์ คือศาสตร์ว่าด้วยการหาองค์ประกอบที่ขาดหายไปของกระบวนการแก้ปัญหา นั่นหมายถึง ถ้าคุณมีโจทย์ คุณก็ต้องหาวิธรการ กับผลลัพธ์ ถ้าคุณมีผลลัพธ์ คุณก็ต้องหาโจทย์ และวิธีการ นี่แหละครับคือปัญหาที่เราพบในชีวิตจริง เราอาจจะไม่รู้เลยว่าเราได้ข้อมูลส่วนไหนมา สิ่งที่เราต้องทำก็แค่หาส่วนที่เหลือให้ครบ แค่นั้นเอง

ในทางโปรแกรมก็เข่นกัน คุณอาจจะเริ่มจากโจทย์ วิธีการ หรือผลลัพธ์ก็ได้ เช่น คุณบอกว่า “ผมต้องการพิมพ์อักษรลงบนคีย์บอร์ด แล้วให้อักษรนั้นปรากฏขึ้นบนจอแสดงผม ด้วยฟอนต์ที่ผมต้องการ” คุณจะพบว่า ประโยคข้างต้นบอกโจทย์มาชขัดเจนเลย และมันยังผลลัพธ์มาด้วย คุณแค่หาวิธีการใส่อักษรที่พิมพ์และการใช้ฟอนต์กับอักษรนั้น คุณอาจจะเขียนเป็นขั้นตอนแบบหยาบๆได้แบบนี้

(1) read input text

(2) apply font to text

(3) show it on screen

การเขียนโปรแกรมทำให้คุณเห็นปัญหาที่ลึกเข้าไปอีก เมื่อคุณพิจารณาดูขั้นตอนการ read input text มันก็จะเกิดคำถามว่า จะรับข้อมูลที่ผู้ใช้พิมพ์ได้อย่างไร ใช้วิธีไหน นี่คือโจทย์ใหม่ของคุณที่ต้องตอบให้ได้

(1) wait for keyboard event

(2) read keyboard event

(3) get key

(4) goto (1) and repeat until key = enter

นี่คือบางคำตอบของคำถามเมื่อสักครู่ ที่ผมพูดว่าบางคำตอบก็เพราะคุณสามารถทำวิธีอื่นให้ได้ผลลัพธ์แบบเดียวกัน เช่นเดียวกับเวลาคุณทำโจทย์คณิตศาสตร์เลย

นี่แหละครับการเขียนโปรแกรม มันไม่ต่างอะไรกับที่คุณพบเจอในชีวิตเลยใช่ไหม ขอให้คุณลองมองปัญหาต่างๆ ให้ละเอียดขึ้น ให้ชัดเจนขึ้น แล้วมีความสุขกับการแก้สิ่งเหล่านั้น บทความนี้อาจจะดูเครียดแล้วไร้สาระไปสักนิด แต่นั่นเป็นปัญหาของคุณครับ 5555