Practice-deliberate-kindness-cartoon-final-cropped

ได้ยินคำว่า Deliberate Programming มานานพอสมควร
แต่ก็ไม่รู้ว่า จริงๆ แล้วมันคืออะไร
ดังนั้นจึงลองดูค้นหาข้อมูล พบว่า มันมาจาก Deliberate Practice
เป็นแนวปฏิบัติประกอบไปด้วย 8 ข้อ ดังนี้

  1. ต้องการสมาธิในการ focus ในสิ่งที่กำลังทำอย่าสูง หรือคือเข้าสู่สภาวะ flow
  2. เป็นแนวปฏิบัติ เพื่อปรับปรุงประสิทธิภาพการทำงานให้ดีขึ้นกว่าเดิม
  3. ต้องทำการปฏิบัติอย่างต่อเนื่อง
  4. ต้องทำซ้ำๆ
  5. ต้องการ feedback กลับมาอย่างต่อเนื่อง ซึ่งจำเป็นต้องการครู หรือ ผู้ชี้แนะ อื่นๆ เพื่อให้ได้ feedback ที่แตกต่างกัน
  6. ทำการกำหนดเป้าหมายไว้เสมอ
  7. เป็นแนวปฏิบัติเพื่อสะท้อนตัวเองออกมาว่าเป็นอย่างไร
  8. ต้องใส่ใจและระวังเกี่ยวกับผลที่ได้หลังจากการปฏิบัติและฝึกฝน

เมื่อกลับมามองในเรื่อง Deliberate Programming

เป็นการประยุกต์ Deliberate Practice มาเพื่อใช้ในการฝึก programming
ซึ่งผมแนะนำ 3 ข้อ จาก 8 ข้อ มาใช้ปฏิบัติ
เพื่อปรับปรุงประสิทธิภาพการ programming ให้ดีขึ้น และเร็วขึ้นกว่าเดิม ดังนี้

1.  การทำซ้ำ หรือ ปฏิบัติซ้ำๆ

ตัวอย่างเช่น การเล่นฟุตบอล
ทำไมนักบอลจะต้องฝึกการเตะบอล
การเลี้ยงบอล การจับบอล และอื่นๆ ซ้ำๆ ทุกวัน ?

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

ซึ่งในการ programming ก็เช่นกัน
คุณทำการฝึกบ้างหรือไม่
หรือไม่ก็ฝึกในงานจริงๆ เลย (On the job traniing) !! มันได้ได้ฝึกหรือไม่ ?

ตัวอย่าง การทำซ้ำสำหรับ programming เช่น
ถ้ามีการใช้ library หรือ framework ใหม่ๆ
แนะนำให้ลองทำ Hello world หลายๆ ครั้ง
และในแต่ละครั้งให้เปลี่ยนวิธีการสร้างไปเสมอ

ถ้าทำการพัฒนาระบบอยู่ เมื่อพัฒนา feature บางอย่างเสร็จ
แนะนำให้ลองเขียนมันใหม่อีกรอบ
เน้นย้ำว่าเป็นการเขียนใหม่ตั้งแต่ต้น
ไม่ใช่การ refactor code นะ

ลองแก้ไขปัญหาเดิมๆ ด้วยวิธีการใหม่ หรือกรอบการทำงานใหม่เสมอๆ
แล้วจะทำให้คุณมีมุมมอง และมีพัฒนาการที่ดีขึ้นมาก

2. ลองออกมาจาก Confort zone ของคุณบ้างสิ

เช่นการลองใช้ภาษา program ใหม่
การลองใช้เครื่องมือใหม่ๆ
การลองใช้ library ใหม่ๆ
การลองใช้ OS ใหม่ๆ

เมื่อทำการศึกษาสิ่งใหม่ๆ แล้วจะทำให้เห็นว่า
มีสิ่งอื่นๆ ที่สามารถช่วยเราสร้างบางสิ่งบางอย่างขึ้นมา
ได้ง่าย และรวดเร็วกว่าเดิมก็เป็นไปได้
และทำให้เรารู็จักวิธีการแก้ไขปัญหามากยิ่งขึ้น

มีประโยคหนึ่งที่น่าสนใจก็คือ

คุณลองตรวจสอบหน่อยว่า ในแต่ละงานคุณได้ศึกษาและเรียนรู้สิ่งใหม่ๆ อย่างน้อย 1 เรื่องหรือไม่ ?

3. พยายามหา feedback ในด้านลบ

ใช้เพื่อนำมาปรับปรุงตัวเองให้ดียิ่งขึ้น
เหมือนกับคำที่ว่า หวานเป็นลม ขมเป็นยา นั่นเอง

ตัวอย่างเช่น
การทำ pair programming กับบรรดาพวกเก่งๆ จะช่วยให้เราได้ feedback ที่ดี
การทำ code review ก็เช่นเดียวกัน

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

จะรู้ได้อย่างไรว่า ทำทั้งสามสิ่งนี้แล้วจะดีหรือไม่ ?
ลองดูง่ายๆ ว่า คุณเจ็บปวดกับมันไหม ถ้าใช่แสดงว่าคุณมาถูกทางแล้ว …

… Learn programming by doing, not by reading …