สอนงานน้องฝึกงาน

feature

ออกตัวก่อนว่าไม่เคยสอนงานจริงจังครับ เคยแต่ได้คุยบ้างนิด ๆ หน่อยๆ ครับ

ในออฟฟิศเก่าผมนี่ มีพนักงานสิบคน รับน้องฝึกงานมาหนึ่งคน ไม่ได้สอนงานอะไรเลยครับ จับโยนลงโปรเจคเลย 555 คือเราเป็นบริษัทเล็กแล้วก็ไม่มีใครว่าง ก็เลยจับโยนเข้าโปรเจคงานจริงที่จะเอาไปขายให้ลูกค้าเลยครับ (น้องฝึกงานคนนี้มีเงินเดือนนะครับ บอกก่อน) ก็เป็นการสอนงานแบบถีบลูกสิงโตตกภูเขานั่นเอง

ส่วนออฟฟิศปัจจุบันผมนี่ ใช้วิธีให้ทำโปรเจคที่ไม่เกี่ยวข้องกับโปรดักท์หลัก เป็นการให้ทำทูลที่มาช่วยให้ dev ทำงานได้สบายขึ้น (ส่วนทำไม dev ไม่ทำเองตั้งแต่แรกนี่ผมขออนุญาตไม่ออกความเห็นนะครับ 🙂 ) อย่างคนล่าสุดก็เพิ่งจบออกไปเมื่อวันศุกร์นี้เอง

ส่วนตัวผมมองว่าเวลาสองเดือนเป็นเวลาค่อนข้างน้อย ดังนั้นถ้าให้สอนงานตั้งแต่ศูนย์ยันทำงานได้เป็นโปรเลยมันก็คงยากล่ะนะครับ ขนาดคนที่เรียนจบแล้วเรายังต้องเทรนกันเลยว่าไหม (ที่ผมพูดถึงเมื่อครั้งที่แล้วน่ะครับ) ดังนั้นผมคิดว่า นอกจากโปรเจคที่ได้รับมอบหมายแล้ว เราก็ควรจะสอนเรื่องพื้นฐานที่จะช่วยให้เขาทำงานเป็นขึ้นมาจริง ๆ ได้สักเรื่องหนึ่งเหมือนกัน

และผมเชื่อพื้นฐานที่นักพัฒนาโปรแกรมควรจะมีก็คือ Version Control

Version Control

ผมคิดว่าผมเคยพูดไปแล้วว่าเวอร์ชันคอนโทรลคืออะไร แต่สำหรับคนที่ไม่รู้ มันก็คือการเก็บเวอร์ชันของงานของเราไปเรื่อย ๆ นั่นเอง

คิดว่าบางคนน่าจะเคยทำงานแบบนี้นะครับ

version control แบบทำมือ

ก็คือ การก็อปปี้แบ็คอัพไฟล์งานออกมาเป็นเวอร์ชัน ๆ เก็บไว้ตามเวลา บางครั้งเราอยากจะทดลองอะไรกับไฟล์งาน ก็สร้างโฟลเดอร์ออกมาทดลอง แล้วก็รวมกลับเข้าไปในโฟลเดอร์หลัก ฯลฯ

น้องฝึกงานคนที่ผมคุยด้วยล่าสุดทำแบบนี้เป๊ะเลยครับ ขนาดอุตส่าห์บอกว่า ลองศึกษาเรื่อง VCS มานะ นี่เป็นคำแนะนำเดียวที่ผมให้ไปเลยนะเนี่ย 555

การทำ Version Control ก็การทำแบบที่ว่านี้เป๊ะเลยครับ เพียงแต่ว่า ในปัจจุบันเราไม่ควรใช้วิธีการเก็บแยกโฟลเดอร์แบบนี้แล้ว เพราะว่า

  1. มันทำลำบาก ต้องปิดโปรแกรม เซฟงาน ก็อปปี้โฟลเดอร์ เปิดโฟลเดอร์ใหม่ …
  2. ถ้าทำผิด ทุกอย่างก็สูญ
  3. มีโอกาสที่จะทำงานกับไฟล์ผิดที่ เซฟทับงานเก่า แบ็คอัพหาย
  4. พอมีเวอร์ชันเยอะ ๆ เราก็งงเองว่า จะต้องใช้โฟลเดอร์ไหนกันแน่ ??

ซึ่ง ในปัจจุบันเราควรใช้ VCS อย่างเช่น subversion หรือ git (แล้วแต่อยากทำ centralize หรือ distributed แต่แนะนำให้ทำ distributed เพราะมันง่ายกว่าครับ) แทนการมาจัดการด้วยมือ ที่โอกาสเกิดหายนะนั้นสูงกว่ามาก

ทำไมผมถึงแนะนำให้สอนเรื่องนี้ในสถานที่ฝึกงาน

ข้อแรกเลย ในคอร์สของ Computer Science หรือ Computer Engineering เราแทบไม่มีการสอนเรื่องนี้ครับ อาจจะมีแซม ๆ อยู่สองบรรทัดในวิชาอย่าง Software Engineering (วิชานี้สอนกันแบบคร่าว ๆ ราว ๆ กับมองวงการนี้ในระดับห้าหมื่นฟุต เพราะรายละเอียดมันเยอะจนเปิดเป็นสาขาวิชาเฉพาะได้เลย) ทั้งๆ ที่ในชีวิตจริงนี่คือสิ่งที่โปรแกรมเมอร์จะต้องใช้อยู่ทุกวัน (ใครไม่ commit โค๊ดเลยในแต่ละวันนี้ ผมถือว่า productivity ท่านแย่มากเลยนะครับ) เป็นเรื่องปฎิบัติที่สำคัญมาก

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

ข้อที่สาม นักพัฒนาทุกคนจะต้องใช้งาน VCS อยู่แล้ว ยังไงก็เป็นเรื่องที่จะต้องเรียน ก็สอนไปเลยมันก็ไม่มีปัญหาอะไร และมันเป็นประโยชน์กับการใช้งานในการเรียนอีกด้วยเหมือนกัน (ทำโปรเจคก็ต้องเขียนโค๊ด ว่าไหมครับ

ดังนั้นผมว่า เรื่องนี้ สอน ๆ ไปเถอะ ใช้เวลาไม่นาน และก็ได้ผลลัพท์ดีขึ้น

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.