Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

นักพัฒนาต้องหัดแบ่งปัญหาใหญ่ ๆ เป็น ปัญหาเล็ก ๆ

$
0
0

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

ดังนั้นในฐานะนักพัฒนา software มาฝึกการแบ่งปัญหากันบ้าง

มาเริ่มกันเลย
ปล. สิ่งต่าง ๆ ที่จะแนะนำนี้ ต้องฝึกและลงมือทำอย่างเป็นประจำนะครับ
ก่อนที่จะแบ่งปัญหาใหญ่ ๆ ออกเป็นปัญหาเล็ก ๆ นั้น จำเป็นต้องเข้าใจภาพรวมของปัญหา ที่สำคัญรายละเอียดของปัญหาเราก็ต้องเข้าใจเช่นกัน แต่เราไม่สามารถทำสองเรื่องพร้อมกันได้ เพราะว่าความสามารถของคนเรามีจำกัด ดังนั้นเราจำเป็นต้องทำทีละอย่าง ดังนี้ ขั้นตอนที่ 1 ทำให้มั่นใจว่า เราเข้าใจปัญหาจริง ๆ แค่พูดออกมามันไม่เพียงพอ เพราะว่าต้องแสดงออกมาให้เห็นเป็นรูปธรรมที่จับต้องได้ เช่น เขียนออกมาในกระดาษ เขียนข้อจำกัดต่าง ๆ ที่เรารู้ เขียนในสิ่งที่เราไม่รู้ แต่น่าจะช่วยหรือมีประโยชน์ต่อการแก้ไขปัญหา ขั้นตอนที่ 2 เขียนออกมามันเข้าใจยาก ลองวาดปัญหาออกมาเป็นภาพดีไหม เป็นภาพง่าย ๆ เช่น flow, tree เป็นต้น เพื่อทำให้เข้าใจได้ง่ายขึ้น ช่วยทำให้เห็นปัญหาและปัญหาย่อย ๆ ต่าง ๆ ได้ง่ายขึ้น แต่ถ้าเขียนแล้วจะไม่สามารถแบ่งกลุ่มของปัญหาได้ นั่นเป็นการบอกว่า เรายังไม่เข้าใจปัญหาดีพอ ดังนั้นกลับไปขั้นตอนที่ 1 เลย แต่ถ้าสามารถแบ่งกลุ่มของปัญหาได้แล้ว ให้ทำการเลือกเพียง 1 ปัญหามาทำการแก้ไข ขั้นตอนที่ 3 ทำความเข้าใจกับปัญหาย่อยที่เลือกมา จากนั้นทำตามขั้นตอนที่ 2 เพื่อลงรายละเอียดของปัญหา เพื่อแบ่งปัญหาเป็นปัญหาย่อย ๆ อีก และจะหยุดทำเมื่อ ปัญหาย่อย ๆ นั้นมันชัดเจน หรือ ไม่จำเป็นต้องแบ่งอีกต่อไปแล้ว จากนั้นจึงลงมือแก้ไขปัญหาเล็ก ๆ นั้นไปเรื่อย ๆ
ซึ่งเป็น input ของการขับเครื่องการพัฒนาด้วยการทดสอบ นั่นคือคุณต้องคิดเข้าใจ แบ่งปัญหา จากนั้นลงมือแก้ไขปัญหาเล็ก ๆ ไปเรื่อย ๆ โดยที่ยังเข้าใจในภาพรวมของปัญหาอยู่เสมอ
เมื่อแต่ละปัญหาถูกแก้ไขแล้ว ผลรวมที่ได้จะแก้ไขปัญหาใหญ่เอง วิธีการแบบนี้มันคุ้น ๆ เหมือน Divide and Conquer หรือไม่นะ แสดงดังรูป

เมื่อลงมือแก้ไขปัญหานั้น สิ่งที่ต้องทำประกอบไปด้วย

  • เขียนปัญหาหรือคำถาม พร้อมทั้งคำตอบที่คาดหวัง
  • สร้างสมมุติฐานขึ้นมา ว่าจะแก้ไขอย่างไรได้บ้าง (Creative Thinking)
  • คาดการผลจากสมมุติฐานสิว่าจะได้อะไรออกมาบ้าง
  • ลงมือการทำและทดสอบตามสมมุติฐาน จากนั้นบันทึกผลจากการลงมือทำ (Test and Coding)
  • ทำซ้ำไปจนกว่าปัญหาหรือคำถามจะได้คำตอบที่ถูกต้อง

ในการลงมือทำและทดสอบ ก็ต้องมีรู้และเข้าใจในเครื่องมือด้วย

ทั้ง OS ที่ใช้ ทั้ง Keyboard ที่ใช้ ทั้ง Editor/IDE ที่ใช้ ทั้ง command line ที่ใช้ ทั้งภาษาโปรแกรมที่ใช้ ทั้ง framework และ library ที่ใช้ และอื่น ๆ ที่เกี่ยวข้องอีกมากมาย ต้องใช้เครื่องมือเหล่านี้ให้เกิดประโยชน์สูงสุด นั่นคือการเลือกเครื่องมือให้เหมาะสมกับงานนั่นเอง แต่จะรู้ได้อย่างไร ? ก็ต้องฝึกใช้หลาย ๆ ตัวไงละ เพื่อทำให้รู้และเข้าใจความสามารถ ข้อจำกัดนั่นเอง ขอให้สนุกกับการ coding ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles