ออกตัวก่อนว่าไม่เคยสอนงานจริงจังครับ เคยแต่ได้คุยบ้างนิด ๆ หน่อยๆ ครับ
ในออฟฟิศเก่าผมนี่ มีพนักงานสิบคน รับน้องฝึกงานมาหนึ่งคน ไม่ได้สอนงานอะไรเลยครับ จับโยนลงโปรเจคเลย 555 คือเราเป็นบริษัทเล็กแล้วก็ไม่มีใครว่าง ก็เลยจับโยนเข้าโปรเจคงานจริงที่จะเอาไปขายให้ลูกค้าเลยครับ (น้องฝึกงานคนนี้มีเงินเดือนนะครับ บอกก่อน) ก็เป็นการสอนงานแบบถีบลูกสิงโตตกภูเขานั่นเอง
ส่วนออฟฟิศปัจจุบันผมนี่ ใช้วิธีให้ทำโปรเจคที่ไม่เกี่ยวข้องกับโปรดักท์หลัก เป็นการให้ทำทูลที่มาช่วยให้ dev ทำงานได้สบายขึ้น (ส่วนทำไม dev ไม่ทำเองตั้งแต่แรกนี่ผมขออนุญาตไม่ออกความเห็นนะครับ 🙂 ) อย่างคนล่าสุดก็เพิ่งจบออกไปเมื่อวันศุกร์นี้เอง
ส่วนตัวผมมองว่าเวลาสองเดือนเป็นเวลาค่อนข้างน้อย ดังนั้นถ้าให้สอนงานตั้งแต่ศูนย์ยันทำงานได้เป็นโปรเลยมันก็คงยากล่ะนะครับ ขนาดคนที่เรียนจบแล้วเรายังต้องเทรนกันเลยว่าไหม (ที่ผมพูดถึงเมื่อครั้งที่แล้วน่ะครับ) ดังนั้นผมคิดว่า นอกจากโปรเจคที่ได้รับมอบหมายแล้ว เราก็ควรจะสอนเรื่องพื้นฐานที่จะช่วยให้เขาทำงานเป็นขึ้นมาจริง ๆ ได้สักเรื่องหนึ่งเหมือนกัน
และผมเชื่อพื้นฐานที่นักพัฒนาโปรแกรมควรจะมีก็คือ Version Control
Version Control
ผมคิดว่าผมเคยพูดไปแล้วว่าเวอร์ชันคอนโทรลคืออะไร แต่สำหรับคนที่ไม่รู้ มันก็คือการเก็บเวอร์ชันของงานของเราไปเรื่อย ๆ นั่นเอง
คิดว่าบางคนน่าจะเคยทำงานแบบนี้นะครับ
ก็คือ การก็อปปี้แบ็คอัพไฟล์งานออกมาเป็นเวอร์ชัน ๆ เก็บไว้ตามเวลา บางครั้งเราอยากจะทดลองอะไรกับไฟล์งาน ก็สร้างโฟลเดอร์ออกมาทดลอง แล้วก็รวมกลับเข้าไปในโฟลเดอร์หลัก ฯลฯ
น้องฝึกงานคนที่ผมคุยด้วยล่าสุดทำแบบนี้เป๊ะเลยครับ ขนาดอุตส่าห์บอกว่า ลองศึกษาเรื่อง VCS มานะ นี่เป็นคำแนะนำเดียวที่ผมให้ไปเลยนะเนี่ย 555
การทำ Version Control ก็การทำแบบที่ว่านี้เป๊ะเลยครับ เพียงแต่ว่า ในปัจจุบันเราไม่ควรใช้วิธีการเก็บแยกโฟลเดอร์แบบนี้แล้ว เพราะว่า
- มันทำลำบาก ต้องปิดโปรแกรม เซฟงาน ก็อปปี้โฟลเดอร์ เปิดโฟลเดอร์ใหม่ …
- ถ้าทำผิด ทุกอย่างก็สูญ
- มีโอกาสที่จะทำงานกับไฟล์ผิดที่ เซฟทับงานเก่า แบ็คอัพหาย
- พอมีเวอร์ชันเยอะ ๆ เราก็งงเองว่า จะต้องใช้โฟลเดอร์ไหนกันแน่ ??
ซึ่ง ในปัจจุบันเราควรใช้ VCS อย่างเช่น subversion หรือ git (แล้วแต่อยากทำ centralize หรือ distributed แต่แนะนำให้ทำ distributed เพราะมันง่ายกว่าครับ) แทนการมาจัดการด้วยมือ ที่โอกาสเกิดหายนะนั้นสูงกว่ามาก
ทำไมผมถึงแนะนำให้สอนเรื่องนี้ในสถานที่ฝึกงาน
ข้อแรกเลย ในคอร์สของ Computer Science หรือ Computer Engineering เราแทบไม่มีการสอนเรื่องนี้ครับ อาจจะมีแซม ๆ อยู่สองบรรทัดในวิชาอย่าง Software Engineering (วิชานี้สอนกันแบบคร่าว ๆ ราว ๆ กับมองวงการนี้ในระดับห้าหมื่นฟุต เพราะรายละเอียดมันเยอะจนเปิดเป็นสาขาวิชาเฉพาะได้เลย) ทั้งๆ ที่ในชีวิตจริงนี่คือสิ่งที่โปรแกรมเมอร์จะต้องใช้อยู่ทุกวัน (ใครไม่ commit โค๊ดเลยในแต่ละวันนี้ ผมถือว่า productivity ท่านแย่มากเลยนะครับ) เป็นเรื่องปฎิบัติที่สำคัญมาก
ข้อที่สอง เพราะว่าระบบ VCS มันจะช่วยให้เราทำงานได้เร็วขึ้น และป้องกันความเสียหายของเราได้ อย่างที่บอกว่า version control ก็พอจะทำด้วยมือได้ แต่มันไม่มีประสิทธิภาพ และโอกาสการมีปัญหาก็สูงด้วย ถ้าเราใช้ VCS จะทำให้เราทำงานได้อย่างมั่นใจมากขึ้น เพราะเรารู้ว่าถึงเราจะทำเวอร์ชันปัจจุบันพังเราก็ยังมีของเก่าที่ใช้งานได้ ไม่ใช่ว่าต้องมาซ่อมของใหม่ให้ใช้ได้ ซึ่งเป็นการเสียเวลา
ข้อที่สาม นักพัฒนาทุกคนจะต้องใช้งาน VCS อยู่แล้ว ยังไงก็เป็นเรื่องที่จะต้องเรียน ก็สอนไปเลยมันก็ไม่มีปัญหาอะไร และมันเป็นประโยชน์กับการใช้งานในการเรียนอีกด้วยเหมือนกัน (ทำโปรเจคก็ต้องเขียนโค๊ด ว่าไหมครับ
ดังนั้นผมว่า เรื่องนี้ สอน ๆ ไปเถอะ ใช้เวลาไม่นาน และก็ได้ผลลัพท์ดีขึ้น