มีคำถามว่า
เราจะฝึกแก้ไขปัญหาต่าง ๆ ในเชิงการเขียนโปรแกรมอย่างไรดี ?
มีขั้นตอนอย่างไรบ้าง ?
ต้องทำอะไรบ้าง ?
คำตอบง่าย ๆ สำหรับผมคือ
เป็นคำถามที่ยากมาก ๆ ไม่รู้เหมือนกัน
เพราะว่า ผมก็แย่มาก ๆ ในเรื่องนี้
แต่ก็มีคำแนะนำนิดหน่อยดังนี้ น่าจะพอเป็นแนวทางและมีประโยชน์บ้าง
ก่อนอื่นสำหรับการแก้ไขปัญหานั้น คือ การเข้าใจปัญหาก่อน
เนื่องจากผมเชื่อว่า ถ้าเราไม่เข้าใจปัญหาแล้ว เราก็ไม่สามารถแก้ไขปัญหาได้แน่นอน ดังนั้นเมื่ออ่านโจทย์ปัญหา เราต้องอ่านให้ครบ อย่าคิดไปเอง จากนั้นถ้าไม่เข้าใจ ให้ตั้งคำถาม จากนั้นค่อย ๆ หาคำตอบเพื่อให้กระจ่าง แต่ถ้าเข้าใจแล้ว แนะนำให้ลองอธิบายให้คนอื่นเข้าใจ เพื่อเป็นการทบทวนว่า เราเข้าใจมันจริง ๆ และถูกต้องหรือไม่ถ้าเราเข้าใจปัญหาแล้ว วิธีการแก้ไขจะตามมาเอง
เมื่อเข้าใจปัญหาแล้ว ให้เริ่มด้วยการแก้ไขปัญหาแบบ manual หรือคิดบนกระดาษนั่นเอง
ดูเหมือนเป็นเรื่องที่น่าเบื่อ ทำไมไม่เขียน code เลยละ ? แต่เป็นเรื่องที่สำคัญ ผมเชื่อว่า การเขียนบันทึกลงกระดาษหรือลงอะไรบางอย่าง มันช่วยทำให้เราเข้าใจมากยิ่งขึ้น ยิ่งมีข้อมูลตัวอย่างมาเสริมอีก จะยิ่งดีมาก ๆ โดยข้อมูลตัวอย่างนั้น ควรมีทั้ง normal case, conner case และ edge case เสมอ เพื่อช่วยทำให้มั่นใจว่า วิธีการแก้ไขปัญหาของเรามันถูกต้องและครอบคลุม แน่นอนว่าในขั้นตอนนี้เราเริ่มได้ขั้นตอนการคิดและแก้ไขปัญหาแล้ว ทำให้เราได้แผนที่นำทางแล้ว แต่เรายังสามารถปรับปรุงให้มันง่ายและสั้นลงได้อีกเมื่อทุกอย่างเริ่มเข้าที่เข้าทางก็เริ่มเขียน code สิ
หรือบางคนอาจจะเขียนพวก pseudo code ก่อนก็ได้ เนื่องจากเราอาจจะไม่ต้องมาเน้นในเรื่อง syntax ของภาษา แต่ไปเน้นที่ logic และขั้นตอนการทำงานแทน จากนั้นก็แปลงไปเป็น code จริง ๆ แน่นอนว่า ในขั้นตอนนี้เราจะเน้นไปที่ syntax ของภาษานั้น ๆ อย่างเดียว ว่าจะเขียน code อย่างไรในภาษาโปรแกรมที่เราเลือกมาแล้วเมื่อเขียน code เพื่อแก้ไขปัญหาของเราได้แล้ว
ก็อย่าลืมปรับปรุง code ให้มันดีขึ้นด้วย หรือ Clean Code นั่นเอง ทั้งเข้าใจได้ง่าย ทั้งงอ่านง่าย ทั้งทดสอบได้ง่าย ทั้งทำงานครอบคลุมในแต่ละกรณีจากนั้นก็เริ่มเข้าสู่การ review
ทั้ง review จากคนเขียน ทั้ง review จากเพื่อน ทั้ง review จากทีมสุดท้ายคงหนีไม่พ้นคือ การฝึก ฝึกและฝึก นะครับ
ฝึกแก้ไขปัญหาจากที่ได้บ้าง ? ยกตัวอย่างเช่น ขอให้สนุกกับการ coding ครับปล. ให้สังเกตุว่า ในแต่ละขั้นตอนเราจะเน้นที่เรื่องเดียวเท่านั้น