เรื่องที่ 7 ที่นักพัฒนาควรรู้ และ เข้าใจก็คือ Step Back and Automate, Automate, Automate
หรือมาทำความเข้าใจกับคำว่าอัตโนมัติในการพัฒนา software กันใหม่สักหน่อยนะ
พบว่านักพัฒนาชอบทำงานในรูปแบบเดิมๆ อยู่อย่างตลอดเวลา
ทั้งๆ ที่มันสามารถลดเวลาในการทำงานลงได้อีก แต่ไม่ยอมทำ
มันแปลกดีนะ !!
ในการทำงานกับบรรดานักพัฒนา
มักจะมีเรื่องแปลกๆ ให้พบเจอประจำ
ตัวอย่างเช่น
ถ้าเราถามนักพัฒนาว่า ใน module นี้มี code กี่บรรทัด ?
- บางคนอาจจะ copy code ทั้งหมดไปไว้ในโปรแกรมจัดการข้อความ เพื่อให้ความสามารถในการนับจำนวนบรรทัด (ไม่คิดว่าจะมีคนทำอีกนะ)
- บางคนอาจจะใช้ command line เพื่อนับจำนวนบรรทัด
- บางคนอาจจะใช้เครื่องมือเกี่ยวกับ Static Analysis เพื่อนับจำนวนบรรทัด
และมักจะทำแบบนั้นในทุกๆ ครั้งที่เราถาม เช่นทุกๆ สัปดาห์ ทุกๆ เดือน เป็นต้น
ในขั้นตอนการ deploy ระบบงานไปยัง production server
มักต้องทำการ click หลายครั้งเพื่อ deploy ระบบงาน
ซึ่งนักพัฒนาคิดว่า มันไม่ใช่สิ่งที่ดีนักใช่ไหม ? แต่ก็ทนทำไป เพราะว่า …
ดังนั้นน่าจะคิดสร้าง script การทดสอบ และ deploy ขึ้นมา
เพื่อให้สามารถทำงานซ้ำอยู่อย่างบ่อยๆ ได้
โดยไม่จำเป็นต้องใช้การ click มากๆ อีกแล้ว
ทำไมนักพัฒนาชอบทำสิ่งเดิมๆ ซ้ำๆ กันนะ ?
แปลกนะ !!
ทำไมนักพัฒนาถึงไม่ลองหยุดทำ หยุดคิด
ว่าถึงเวลาต้องมาพูดหรือสร้างการทำงานแบบอัตโนมัติได้แล้วนะ
หรือว่า นักพัฒนาอาจจะมีแนวคิดที่ผิดๆ เกี่ยวกับการทำงานแบบอัตโนมัติหรือเปล่านะ ?
1. เข้าใจผิดว่า ต้องทำเพียงเฉพาะการทดสอบเท่านั้น (Automated Testing)
แน่นอนว่า การทำสอบที่แจ่มๆ ต้องสามารถทำงานแบบอัตโนมัติได้สิ
แต่เดี๋ยวก่อนนะ !!
ในส่วนงานอื่นๆ ที่คุณทำซ้ำแล้วซ้ำเล่าล่ะ ทำไมไม่ให้มันทำงานแบบอัตโนมัติบ้างล่ะ เช่น
- การดึงข้อมูลจาก Version Control System
- การ compile/build code ในระบบงาน
- การ packaging ระบบงาน
- การสร้างเอกสาร
- การ deploy ระบบงาน
- การสร้างรายงานต่างๆ
ถ้าคุณทำให้ส่วนการทำงานเหล่านี้ ทำงานแบบอัตโนมัติได้
มันจะดี เร็ว และ มีความน่าเชื่อถือ สูงมากเลยนะครับ
2. เข้าใจผิดว่า ฉันมี IDE ไงล่ะ ดังนั้นไม่จำเป็นต้องมีระบบทำงานแบบอัตโนมัติหรอกนะ
คุณเคยเจอปัญหานี้หรือไม่ ?
- ฉันสามารถทำการดึง code ล่าสุดบนเครื่องฉันได้
- ฉันสามารถทำการ build/compile code บนเครื่องฉันได้
- ฉันสามารถทำการทดสอบระบบงานบนเครื่องฉันได้
- ฉันสามารถทำการติดตั้งระบบงานบนเครื่องฉันได้
แต่เครื่องของคนอื่นๆ ในทีมพัฒนา ไม่สามารถทำงานอะไรได้เลย !!
เนื่องจาก IDE ใหม่ๆ ในสมัยนี้มีความสามารถมากมาย (พร้อมกับการบริโภคทรัพยากรเยอะมาก)
แต่สิ่งที่มักขาดหายไปก็คือ IDE แต่ละเครื่องแต่ละคนในทีมมี configuration ที่แตกต่างกัน !!
ดังนั้นทีมควรทำการ configuration ของ IDE ให้เหมือนกัน
ประกอบกับมีเครื่องมือ Build automation เพื่อช่วยทำการ build ระบบงานแบบอัตโนมัติ
ทำให้ทุกคนในทีมสามารถทำงานได้เหมือนกัน
ตัวอย่างเช่น
- ภาษา Java ใช้งาน Apache Maven, Gradle เป็นต้น
- ภาษา PHP ใช้งาน composer, Phing, Phix เป็นต้น
3. เข้าใจผิดว่า ต้องเรียนรู้เครื่องมือใหม่ๆ แปลกๆ เพื่อที่จะสร้างระบบอัตโนมัติขึ้นมา
โดยปกติเราสามารถสร้างระบบอัตโนมัติด้วยพวก shell script, window command line ได้เลย
มันเป็นเทคโนโลยีที่อยู่กับเรามานานมากๆ ไม่ใช่เครื่องมืออะไรที่ใหม่เลย
หรือถ้าต้องการทดสอบระบบงานบน web ก็ใช้เพียง Selenium และ iMacro เท่านั้นเอง
4. เรื่องสุดท้าย แต่เป็นตลกร้ายก็คือ ฉันไม่มีเวลาทำหรอกนะ !!
ถ้าคุณไม่สามารถเรียนรู้ได้ทั้งหมด ก็ให้เรียนรู้เท่าที่จำเป็นในตอนนั้นแทนสิ
ตัวอย่างเช่น
เมื่อมีงานหนึ่งมาให้ทำ ลองคิดดูก่อนสิว่า งานนั้นมันสามารถทำงานแบบอัตโนมัติได้หรือไม่
ถ้าได้ ให้ทำการศึกษาบางเรื่อง หรือ เครื่องมือบางตัว ที่สามารถสร้างการทำงานแบบอัตโนมัติขึ้นมาได้
ไม่จำเป็นต้องศึกษาทั้งหมดนะครับ เฉพาะที่จำเป็นต่องานนั้นๆ เท่านั้น ไม่ต้องเผื่อเหลือเผื่อขาด
ให้คุณทำการศึกษา หรือ สร้าง ตั้งแต่เริ่มต้นพัฒนาระบบงานนะครับ
เนื่องจากมันจะง่ายต่อการสร้าง และ แก้ไขปัญหา
และถ้าผลลัพธ์จากระบบงานทำงานแบบอัตโนมัติมันดี มีประโยชน์
ก็น่าจะเป็นสิ่งที่ดี และ คุ้มค่าต่อการลงทุนเพิ่มเติมใช่ไหมครับ
ดังนั้น
ลองกลับไปดูงานที่คุณทำหน่อยว่า มีส่วนการทำงานอะไรที่คุณต้องทำซ้ำๆ อยู่บ่อยครั้ง
ถ้ามี ถึงเวลาที่คุณต้อง หยุดทำ หยุดคิด
เพื่อสร้างระบบการทำงานแบบอัตโนมัติขึ้นมาแทนได้แล้วนะ
ปล. ถ้างานอะไรมันไม่สามารถทำงานแบบอัตโนมัติได้ หรือ ลงทุนเยอะ หรือ สิ่งที่ได้รับไม่คุ้ม ก็อย่าไปทำให้เสียเวลานะครับ