เขียนโปรแกรมไม่เป็น แต่ต้องคัดเลือกโปรแกรมเมอร์เข้าทีม
เมื่อวันก่อนมีน้องที่เป็น Project Manager โทรมาขอคำแนะนำเรื่องจะจ้างโปรแกรมเมอร์ใหม่เข้าทีม
แต่ความท้าทายคือในทีมไม่มีใครที่มีประสบการณ์เรื่องเขียนโปรแกรมเลย จะคัดเลือกคนยังไงดี
หลังจากคุยเสร็จ ก็รู้สึกว่านี่เป็นปัญหาสากลที่น่าจะมีหลายๆคนเจออยู่ แม้แต่คนที่เขียนโปรแกรมเป็น ถ้าต้องคัดเลือกคนที่ในด้านที่เราไม่มีทักษะทางด้านนั้นๆ (เช่น เขียน Frontend เป็นหลัก แต่ต้องช่วยทีมจ้าง Backend Developer หรือ Infra) เรื่องนี้ก็น่าจะยากอยู่ ยิ่งถ้านึกภาพว่าผมต้องไปสัมภาษณ์งานเพื่อคัดเลือกจ้าง Project Manager ผมเองก็คงไปไม่ถูกเหมือนกัน
ผมเอาเรื่องนี้มานั่งตกตะกอนอยู่หลายวัน แทนที่จะมานั่งลิสต์เป็นข้อๆแห้งๆ รู้สึกว่าถ้ายกเคสของน้องเค้ามาเลยน่าจะทำให้เข้าใจวิธีคิดได้ง่ายกว่า เนื่องจากโจทย์ประเภทนี้ไม่ได้มีคำถามและคำตอบที่ตายตัว หากเข้าใจวิธีคิด ก็น่าจะเอาไปประยุกต์กับกรณีของตัวเองได้
ก็เลยเป็นที่มาของบทความนี้ครับ
1. กำหนด Requirement ชัดเจนว่าเราอยากได้โปรแกรมเมอร์ประเภทไหน มีทักษะอะไรบ้าง
ให้เป็นข้อแรกเลย เพราะโปรแกรมเมอร์มีหลากหลายประเภทมาก อย่างน้องที่มาถามนี่ถือว่าทำการบ้านมา เค้าพอเข้าใจว่าโปรแกรมเมอร์มีฝั่ง Frontend กับ Backend ซึ่งใช้เทคโนโลยีที่ต่างกัน นอกจากนี้ก็มี Full-stack ด้วย
ใครที่ยังไม่เข้าใจศัพท์พวกนี้ อยากให้ลอง Google เพิ่มเติมดูนะครับ
น้องเค้ามีเป้าชัดเจนว่าอยากจ้าง Full-stack เพราะทีมสามารถจ้างได้แค่คนเดียว ซึ่งก็เหมาะกับงานของเค้าเพราะต้องการ Web Application ที่ไม่ได้ซับซ้อนหรือต้องสเกลใหญ่มาก ไม่มีความจำเป็นที่งานจะต้องใช้ Specialist ในด้านใดด้านหนึ่ง
ในกรณีที่ต้องดูแลระบบที่มีอยู่แล้ว เทคโนโลยีเดิมจะเป็นตัวกำหนดเลยว่าต้องจ้างคนที่เขียนภาษาอะไร (เช่น C#, Java, JavaScript, ฯลฯ) แต่ในกรณีนี้ น้องเค้าต้องการคนมาสร้างระบบใหม่ จึงไม่ได้มีเงื่อนไขด้านภาษาหรือเทคโนโลยี
ส่วนที่น่าสนใจคือน้องเค้าทำงานใน Corporate ขนาดใหญ่ มีคนที่เกี่ยวข้องกับโปรเจ็คมาก ซึ่งแต่ละคนก็จะมีเป้าหมายส่วนตัวที่ต่างกัน เค้าเลยต้องการ Soft skill ที่ค่อนข้างสูงด้วย โปรแกรมเมอร์ที่จ้างมาจะต้องคุยกับคนเยอะ และต้องโน้มน้าวคนที่เกี่ยวข้องเพื่อให้โปรเจ็คเดินไปได้สะดวก แม้ว่าตัวน้องเองจะสามารถช่วยเรื่องนี้ได้ในฐานะ Project Manager แต่ก็จะต้องพึ่งโปรแกรมเมอร์คนนี้ในการ~~สู้รบตบมือ~~เจรจากับเหล่า Architect ในด้านของ Technical ด้วย
อีกเรื่องคือองค์กรของน้องเริ่มมีการเปลี่ยนแปลงเพื่อนำ Agile, DevOps และ Microservices Architecture เข้ามาในบริษัท เรื่องพวกนี้เลยเป็นหนึ่งใน Requirement สำคัญที่จะต้องมีจากโปรแกรมเมอร์คนนี้
พอผ่านขั้นตอนนี้ไป เราจะเริ่มเป็นภาพแล้วว่าเราต้องการโปรแกรมเมอร์แนวไหน เวลาส่งให้ Recruiter หาคน เค้าจะได้ช่วยกรองให้ได้ดีขึ้น และเวลาสัมภาษณ์ ทีมก็จะได้มีทิศทางชัดเจนด้วยว่าจะเช็คอะไร
ส่วนหนึ่งที่อยากให้สังเกต คือหลังจากลิสต์รายการทั้งหมดแล้ว เราจะเห็นภาพของคนคนนี้ชัดขึ้น ไม่ใช่แค่อยากได้ “Full-stack Developer”
ข้อมูลพวกนี้จะมีประโยชน์กับรีครุตเตอร์ แนะนำให้บอกเค้าให้ละเอียดที่สุดครับ จะช่วยกรองคนออกไปได้มาก ไม่ต้องเสียเวลามาสัมภาษณ์คนที่ไม่ใช่ชัวร์ๆ
2. หาคนที่มีความรู้ด้านนั้นมาสัมภาษณ์
หลังจากเข้าใจความต้องการเรียบร้อย คำแนะนำแรกที่ผมให้กับน้องเค้าคือ
“ถ้าทีมไม่มีคน แถวนั้นทีมข้างๆมีโปรแกรมเมอร์ที่เก่งๆไหม จะได้ให้เค้ามาเช็ค Technical Skill ให้”
สมมติว่าเราจะจ้างนักบัญชี เราคงไม่ให้ผู้จัดการฝ่ายขายมาเป็นคนสัมภาษณ์ใช่ไหมครับ?
แต่กลับกลายเป็นว่า เรามักจะเอาผู้จัดการที่ไม่เคยเขียนโค้ดมาสัมภาษณ์โปรแกรมเมอร์กัน
ฝั่ง Project manager เองอาจจะเช็คเรื่องความสามารถการเรียนรู้ การเจรจาต่อรอง การแก้ปัญหา การทำงานร่วมกับคนอื่น หรือแม้แต่ความเหมาะสมกับวัฒนธรรมองค์กร
แต่ทักษะเฉพาะทางอย่างการเขียนโปรแกรม อันนี้ต้องให้ผีมาเห็นผีด้วยกันเอง
เสร็จแล้วเอาข้อมูลจากทั้งสองด้านมาใช้ในการตัดสินใจ
แต่ผีก็ไม่ได้เห็นผีด้วยกันหมด อย่างกรณีที่น้องเค้ายกตัวอย่างมา เค้าต้องการคนที่เป็น Senior ในระดับหนึ่ง จะให้เอาโปรแกรมเมอร์ Junior มากๆมาสัมภาษณ์เลยก็คงไม่เหมาะ ต้องหาคนที่มีความรู้มากกว่า หรือใกล้ๆกันมาสัมภาษณ์
อย่างไรก็ตาม เคสของน้องนี้มีกรณีที่น่าสนใจมาก คือเค้าไม่สามารถให้ทีมข้างๆช่วยได้ด้วยเหตุผลทางการเมือง เราเลยต้องมีข้อต่อไป
3. ทำการบ้านเกี่ยวกับหัวข้อที่ต้องคุย
ถ้าต้องสัมภาษณ์เอง อย่างแรกที่สำคัญที่สุด คือต้องคุยกับโปรแกรมเมอร์ให้รู้เรื่องครับ
เราต้องคุยในหัวข้อของเค้า ด้วยศัพท์ต่างๆที่เราไม่ถนัด ถ้าไม่เตรียมตัวอะไรไปเลยจะงงมาก กลายเป็นสัมภาษณ์แล้วไม่ได้อะไร
อย่างกรณีนี้ ควรจะอ่านไปก่อนว่า Agile, DevOps, Microservices พวกนี้คืออะไร Best Practices ที่นิยมทำกันมีอะไรบ้าง
ส่วนเรื่องพวกชื่อเทคโนโลยีหรือเฟรมเวิร์คต่างๆที่เค้าเขียนไว้ใน Resume อย่างน้อยก็ต้องรู้ว่าเอาไว้ใช้ทำอะไร ตรงนี้จะหาข้อมูลที่เขียนให้เข้าใจง่ายๆยากมาก ผมแนะนำว่าให้ถามเพื่อนที่เป็นโปรแกรมเมอร์ ให้เค้าอธิบายแบบให้คนทั่วไปฟังเข้าใจ
แต่ต่อให้เราเข้าใจ เราจะทดสอบความรู้พวกนี้ได้อย่างไร เพราะอีกฝ่ายมีความรู้มากกว่า?
4. ดูที่หลักฐานมากกว่าลมปาก
ถ้าเราไม่มีวิธีเช็คความรู้ วิธีที่ใกล้เคียงที่สุดคือหาหลักฐาน (หรือผลงาน) ที่เราสามารถเข้าใจได้มาเช็คแทนครับ
ไม่ว่าเค้าจะพูดอะไรมา ตั้งสมมติฐานไว้ก่อนว่า
“Incompetent unless proven with evidence” – ทำไม่ได้ถ้าไม่มีหลักฐานว่าทำได้
เวลาเช็คหลักฐานพวกนี้ เช็คด้วยนะครับว่าเค้าทำจริงๆแค่ส่วนไหน บางทีเค้าอาจจะทำแค่ส่วนที่เล็กๆก็ได้
กรณีของนี้ ต้องการ Full-Stack
ส่วน Frontend นี้น่าจะมีหลักฐานให้ดูชัดเจนเลย ก็จะง่ายหน่อย แต่ต้องระวังเรื่องของคุณภาพของงาน เช็คด้วยว่าเวลาเขียนโค้ด เค้าคิดถึงเรื่องการดูแลโค้ดหลังส่งมอบแค่ไหน มีเขียนเทสต์รึเปล่า คนถัดไปมาทำงานจะเข้าใจโค้ดพวกนี้ได้ยังไง
บางกรณี หลักฐานอาจจะไม่สามารถจับต้องได้
วิธีหนึ่งคือลองเลือกงานที่ตัวเองเคยทำกับโปรแกรมเมอร์มาก่อน แล้วรู้สึกว่าเข้าใจปัญหานั้นๆดี เสร็จแล้วลองยกมาถามเค้าดู อาจจะใช้เทียบกันได้คร่าวๆว่าโปรแกรมเมอร์คนนี้แก้ปัญหานั้นได้ดีแค่ไหน แต่ก็อีกแหละครับ อธิบายได้นี่ไม่ได้แปลว่าเขียนโค้ดได้
หรือถ้าบางคนอ้างถึงงานที่เราดูผลชัดเจนไม่ได้ เช่น Optimize backend performance ได้ 50% กรณีนี้ก็ไม่มีทางเลือก ต้องถามเจาะให้ลึกแล้ววิเคราะห์ดูว่าเค้ารู้จริงแค่ไหน เช่น
- ปัญหาที่พยายามแก้คืออะไร ความยากอยู่ที่ตรงไหน
- ปัญหานี้ใช้เวลานานแค่ไหนในการแก้ และสร้าง Impact ให้กับระบบทั้งระบบได้แค่ไหน (เพื่อทำความเข้าใจขนาดของปัญหา ปกติคนที่ได้แก้ปัญหาขนาดใหญ่ๆมักจะต้องมีความสามารถสูงในทีม)
- แก้ไขปัญหานี้ด้วยวิธีอะไร
- ทำไมถึงเลือกแก้ไขด้วยวิธีนี้ มีวิธีอื่นไหม
- คิดว่าโปรแกรมเมอร์คนอื่นจะแก้ปัญหานี้ได้เหมือนกันไหม เพราะอะไร
ถ้าเจอคนที่ไม่รู้จริง เค้าจะไม่สามารถตอบคำถามที่ลงลึกได้ เวลาสัมภาษณ์จะรู้สึกได้ถึงความกระอักกระอ่วนเวลาตอบ
พูดกันตรงๆ กรณีพวกนี้ ถ้าคนสัมภาษณ์ไม่เคยทำโปรเจ็คที่เกี่ยวข้องกับเรื่องพวกนี้เลย จะเข้าใจยากมากครับ ต้องตอบได้ลึกแค่ไหนก็จะบอกไม่ถูก
งั้นลองข้อถัดไปกัน เผื่อจะช่วยได้
5. เช็ค Reference
ข้อสุดท้าย ถ้ามีส่วนสำคัญที่เราวัดไม่ได้ แต่สำคัญจริงๆ อาจจะต้องใช้วิธีเช็คกับ Reference จากที่ทำงานเก่าๆของเค้าครับ
หลังจบการสัมภาษณ์ อาจจะขอ Contact จากที่ทำงาน 2-3 ที่มา (เราเป็นคนเลือกเลยครับว่าที่ไหน อย่าให้เค้าเลือกเอง)
เก็บข้อมูลจากการสัมภาษณ์ให้ดีๆว่าเค้าทำงานอะไรบ้าง แล้วนำไป Cross-check กับ Reference ของเค้า ดูว่าตรงกับที่เล่าให้ฟังระหว่างสัมภาษณ์รึเปล่า โดยเฉพาะผลลัพธ์ว่าเป็นอย่างไร เสร็จแล้วไป
สรุป
หวังว่าจะพอเห็นภาพมากขึ้นนะครับ
การจะจ้างคนที่มีความรู้ในเรื่องที่เราไม่รู้เป็นเรื่องที่ยากมากครับ เราเองก็ไม่มีคฑาวิเศษที่จะช่วยอะไรได้ วิธีการที่ดีที่สุดก็คือการกำหนดความต้องการของเราให้ชัดเจน แล้วให้โปรแกรมเมอร์ที่มีประสบการณ์ช่วยเช็คความรู้ด้านเทคนิค
หากไม่ได้ ก็ใช้วิธีเช็คจากผลงาน หรือ Reference เอา วิธีพวกนี้จะยากและใช้เวลามากกว่า แต่หากต้องการคัดคนให้ดีจริงๆ เลือกผิดไม่ได้เหมือนในกรณีนี้ ก็ต้องละเอียดหน่อยครับ