นี่ใช้ TypeScript เวอร์ชั่น nightly ใน VS Code มาหลายเดือน พบว่ามันเสถียรมากๆ ทั้งๆ ที่เป็นการเอาโค้ดเวอร์ชั่น master มาปล่อยทุกคืน แต่อะไรจะแทบไม่มีปัญหาเลยขนาดนั้น เขาทำกันยังไงนะ

…พอดีกับวันก่อน ได้อ่าน Blog ของ Uri Shaked ที่โชว์วิธีแก้คอมไพเลอร์ TypeScript แบบสนุกๆ(opens new window) เป็นบล็อคที่ Inspiring มากๆ ว่าการลงไปลองเล่นกับพวก Compiler ของ TypeScript มันก็ไม่ได้ยากหรือน่ากลัวอย่างที่คิด

…เลยเกิดไอเดีย วันนี้ก็เลยลองไปแก้โค้ด TypeScript เล่นๆ ดูบ้าง(opens new window) พอ CI รันเท่านั้นแหละ หายสงสัยเลยว่าทำไมมันเสถียรขนาดนั้น มีเทสต์อยู่ 70,000 กว่าเคส ทั้งหมดรันเสร็จใน 15 นาที

…ใน Contributing Guideline เขามีกฏอยู่ว่า ทุกๆ PR ที่เข้ามา ควรจะมีอย่างน้อย 1 เทสต์ที่ไม่ผ่าน ถ้าไม่มีการแก้โค้ดนี้

At least one test should fail in the absence of your non-test code changes

…ตอนแรกก็คิดว่า “โอย เหนื่อยละ กว่าจะแก้โค้ดจนได้ผลลัพธ์ที่ต้องการได้นี่ยังไม่พอ ต้องมาทำเทสต์เพิ่มอีก ถึงจะส่ง PR ได้…” แต่ไหนๆ ก็ไหนๆ ละ ลองดูละกัน

…แต่แล้วก็พบว่าโปรเจค TypeScript นี่ เขียนเทสต์ใหม่เพิ่มเข้าไปนี่ง่ายมากๆ เลย… คือแก้โค้ดให้การทำงานมันพังนิดหน่อย มันก็ฟ้องมาละ ว่าเทสต์ไหนเฟลบ้าง แค่นี้ก็รู้ละว่าถ้าอยากใส่เทสต์เพิ่ม ต้องไปใส่ที่ไฟล์ไหน มี Helper function ต่างๆ สำหรับการสร้างเคสเพิ่มเติม ให้เรียบร้อย แทบไม่ต้องมานั่งเขียนโค้ด Arrange-act-assert ซ้ำๆ ทุกครั้งที่เพิ่มเคสใหม่เข้าไปเลย

…ในโค้ดเบสที่ไม่ยอมลงทุนสร้าง Testing infrastructure ที่ทำให้การเขียนเทสต์เป็นเรื่องง่ายจนถึงขั้นที่เขียนเทสต์เพิ่มเข้าไปง่ายและเร็วกว่าการมาไล่เทสต์มือเอง ถ้าไม่ลงทุนตรงนั้น แล้วจะเห็นว่าคนในทีมเอาแต่เทสต์มือ แล้วไม่เขียนเทสต์เพิ่มกัน ก็คงไม่ใช่เรื่องแปลก

…นักพัฒนาก็เหมือนกัน ถ้าไม่ได้ลงทุนในการพัฒนาฝีมือการเทสต์ของตัวเอง จนถึงขั้นที่เขียนเทสต์แล้วประหยัดเวลากว่าการมาเทสต์เองทุกรอบ (กล่าวคือเวลาที่ใช้ลงไปกับการเขียนเทสต์ สามารถคืนทุนกลับมาได้ภายในวันเดียวกัน) ถ้าไม่ได้ลงทุนตรงนั้น ก็คงไม่แปลกถ้านักพัฒนาคนนั้นจะเลือกไม่เขียนเทสต์แล้วให้เหตุผลว่ามันกินเวลา ไม่คุ้ม


(ป.ล. ทั้งนี้ทั้งนั้น ไม่ได้อยากจะสื่อว่าจะให้ถึงขั้นเจียดเวลาส่วนตัวมาฝึกจนเหลือเวลาพักผ่อนไม่เพียงพออะไรแบบนั้นนะครับ…

…ผมเองถ้าทำงานสัปดาห์ละ 40 ชั่วโมงก็คงจะเหนื่อยมากๆ แล้วก็คงไม่มีเวลามาเล่นอะไรพวกนี้เหมือนกัน… จริงๆ ปกติก็จะแบ่งเวลางานบางส่วนมาฝึกเรื่องพวกนี้แหละ … จริงๆ ก็ไม่บางส่วนหรอก หลายส่วนเลย เหลือลงกับตัวงานจริงๆ แค่ ~20–30 ชั่วโมงต่อสัปดาห์ แต่ก็ให้เหตุผลไปว่าถ้าไม่ทำแบบนั้นก็คงมาอยู่จุดนี้ไม่ได้

…และจริงๆ ก็มีอยู่ช่วงนึงที่เลือกเอาเงินเดือนตัวเองแลกไปประมาณ ~20~30% ซึ่งก็ไม่ได้ซีเรียสมาก เพราะเข้าใจว่าหลายๆ เรื่องมันก็พิสูจน์ด้วยคำพูดอย่างเดียวไม่ได้น่ะแหละ… ตอนนี้คิดว่าคืนทุนแล้ว และหลายๆ Side-project ก็ได้ประสบการณ์กลับมาประยุกต์ใช้กับงานที่ทำงานอยู่ได้จริงๆ~)