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

ว่าด้วยเรื่อง Software Craftsmanship

$
0
0

craftsman

craftsman จาก blog เรื่อง คำมั่นสัญญาของ Programmer ที่ดีทุกคน พึงปฏิบัติ มีคำถามว่า แล้ว Craftsmanship มันคืออะไร เป็นอย่างไร และ ต้องทำอย่างไรบ้าง ดังนั้น จึงนำมาสรุปไว้กันหน่อย

Software Craftsmanship คืออะไร ?

Craftsmanship is doing what you love and doing it right.
ไม่ว่าจะทำอะไรก็ตาม คุณต้องทำด้วยความรัก และ ทำในสิ่งที่ถูกต้องเสมอ ดังนั้นสิ่งที่คุณต้องคิด และ ทำก็คือ การฝึกฝน ฝึกฝน ฝึกฝน การลงมือทำจริง ๆ ด้วยตนเอง เพื่อให้กลายเป็นผู้เชี่ยวชาญในสิ่งที่คุณทำ
แต่จำไว้ว่า Craftsmanship มันไม่ใช่เป้าหมายของเรา แต่มันคือ วินัยที่ต้องกระทำไปตลอด

แล้วจะก้าวไปสู่ Craftsmanship ได้อย่างไร ?

สิ่งแรกสำคัญมาก ๆ คือ คำว่าคุณภาพของสิ่งที่ทำ (Quality) คุณภาพนั้นไม่สามารถต่อรองได้ คุณต้องทำให้ดีที่สุดเท่าที่จะทำได้ ( Your best, not the best ) สิ่งที่สอง คือ ต้องมีความเชื่อว่า จะต้องทำให้ดีขึ้นกว่าเดิมเสมอ ดังนั้น เมื่อเราเห็นสิ่งใด หรือ ไปทำอะไรก็ตาม เราจะหาทางเพื่อปรับปรุงสิ่งนั้นให้ดีขึ้นกว่าเดิม หยุดติ หยุดพูด แล้วลงมือทำให้มันดีขึ้นซะ ผลที่ได้ คือ สิ่งที่คุณทำอยู่มันจะดีขึ้นอย่างแน่นอน สิ่งที่สาม คือ ประสบการณ์ ประสบการณ์ และ ประสบการณ์ ประสบการณ์จากการลงมือทำ ประสบการณ์จากความผิดพลาด ประสบการณ์มันทำให้เราเห็นว่า สิ่งใดควรทำ สิ่งใดไม่ควรทำ สิ่งใดที่คือจุดอ่อน สิ่งที่ควรปรับปรุง แก้ไข ดังนั้น ถ้าอยากมีประสบการณ์ ต้องลงมือทำ คิดอย่างเดียว มันไม่ได้ช่วยอะไรนะ ดังนั้น Craftsmanship ประกอบไปด้วย
  • คุณภาพ (Quality)
  • ความเชื่อ ความหลงไหล (Passion)
  • ประสบการณ์ (Experience)

กลับมาเรื่องของ Software Craftsmanship กันต่อ

โดยที่มี Manifesto of Software Craftsmanship ด้วยนะ ว่าด้วยเรื่องของ Professional Software Development ควรที่จะ ฝึกฝนในการสร้างงานที่เต็มเปี่ยม 3 อย่างข้างต้น รวมทั้งยังสอนผู้อื่นอีกด้วย เพื่อให้ผลลัพธ์ที่ได้ คือ สิ่งที่มีคุณค่า ประกอบไปด้วย
Not only working software but also well-crafted software
ไม่ใช่เพียงส่งมอบ software ที่ทำงานได้เท่านั้น แต่ต้องเป็น software ที่มีคุณภาพสูง
Not only responding to change but also steadily adding values
ไม่ใช่เพียงพร้อมรับต่อการเปลี่ยนแปลงเท่านั้น แต่สิ่งที่เพิ่มเข้าไป ต้องเป็นสิ่งที่เพิ่มคุณค่าอีกด้วย
Not only individuals and interactions but also a community of professionals
ไม่ใช่เพียงการพูดคุย หรือ ทำงานเพียงส่วนตัว หรือ ทีมเท่านั้น แต่ยังต้องสร้างเป็น community ของ professional ขึ้นมา หลาย ๆ ที่จะเรียกว่า Community of Practice (CoP)
Not only customer collaboration but also productive partnerships
ไม่ใช่เพียงทำงานร่วมกับลูกค้าเท่านั้น แต่ยังต้องเป็นเพื่อน พันธมิตร ที่มีความร่วมมือร่วมใจกันอย่างดีอีกด้วย

เพิ่มเติมจาก VDO เรื่อง Craftsmanship and Ethics

โดยคุณ Robert C. Martin ได้พูดถึงสิ่งต่าง ๆ ที่นักพัฒนา software ที่ดี และ Professional programmer ควรปฏิบัติ เพื่อปรับปรุงตัวเราเอง อธิบายไว้ว่า สิ่งที่นักพัฒนา software สร้างออกไปคือ code ดังนั้น ถ้าต้องการปรับปรุงอย่างแรกเลยก็คือ ปรับปรุง code ซึ่งเราควรปรับปรุงเล็ก ๆ และ บ่อย ๆ แล้วเราจะพบว่า code ของเรามันดีขึ้นอยู่เสมอ แต่โชคไม่ดีสำหรับโลกของการพัฒนา software ที่เรามักจะทำการแก้ไข และ ปรับปรุง code ให้ดีขึ้น เมื่อเราเจอว่ามันแย่ (ส่วนใหญ่ใช้เวลานานมากกว่าจะเจอ) ซึ่งมันคือปัญหาที่ใหญ่มาก ๆ สำหรับการพัฒนา software ลองถามตัวเราเองสิว่า มีกี่ครั้งที่ code แย่ ๆ มันทำให้เราทำงานได้ช้า ? เชื่อเถอะว่า เยอะ !! คำถาม แล้วทำไมเราเขียน code แย่ ๆ เหล่านั้นขึ้นมากันล่ะ ? ตอบได้เลยว่า เราไม่มีเวลาที่จะเขียน code ให้เร็วนะสิ !! ปัญหาที่แท้จริงของเรา คือ เราพยายามไปหา code แย่ ๆ หลังจากที่เขียนไปแล้วนาน ๆ เช่น วันพรุ่งนี้ สัปดาห์หน้า เดือนหน้า หรือ ปีหน้า สาเหตุที่ต้องแก้ไข เพราะว่า code เหล่านั้นมันทำให้เราทำงานได้ช้าลง !! แต่การแก้ไขที่แท้จริง คือ ต้องแก้ไขเดี๋ยวนี้ ณ ตอนนี้ ไม่ต้องรอแก้ไข หรือ ทำทำให้มันเสร็จไปก่อน นี่คือสิ่งที่นักพัฒนา software ที่ดีต้องทำ อย่าลืมว่า Later == Never ซึ่งใน VDO ได้แนะนำแนวคิด และ แนวปฏิบัติ ให้มากมาย โดยส่วนใหญ่จะเป็นแนวปฏิบัติที่อยู่เบื้องหลังของ Agile practice และ Extreme Programming (XP) ไม่ว่าจะเป็น
  • Short Iteration development
  • Pair programming
  • Test-Driven Development (TDD)
  • Clean code
  • หลีกเลี่ยง Big Design Up Front (BDUF)
  • Increase improvement
  • Don’t write bad code
  • 100% code coverage แต่ห้ามเอามาเป็น KPI นะ !!
  • Avoid debugging
  • Use good tools
  • No Grand Redesigns หรือ อย่า Rewrite นั่นเอง
  • Continuous Integration
  • Align Authority with Responsibility
  • Manual Test Scripts are Immoral !!
  • QA Should Find Nothing
ปิดด้วยประโยคง่าย ๆ แต่สำคัญ คือ
The only way to go fast is to go well. (Go fast Go well) แปลง่าย ๆ ว่า มีทางเดียวเท่านั้นที่คุณจะไปได้เร็ว คือ ทางที่ดี

สุดท้าย Love your craft everyday นะครับ

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

Viewing all articles
Browse latest Browse all 1997

Trending Articles