ฝึกงาน/จบใหม่ โปรแกรมเมอร์สัมภาษณ์อะไรกัน

cover

ช่วงนี้ได้สัมภาษณ์บ่อยๆ

พอดีว่าพักหลังๆ มานี้ เริ่มโดนไล่ไปช่วยสัมภาษณ์งาน ก็เลยได้มีโอกาสถามคนอื่นๆ ว่าเวลาเค้าสัมภาษณ์นี้ มองหาอะไรในตัวแคนดิเดทกัน ขอพูดถึงระดับเด็กจบใหม่กับเด็กฝึกงานก่อน ถ้ามีโอกาสได้สัมภาษณ์ซีเหนี่ยจะเอามาเล่าเพิ่มเติมวันหลังนะครับ ในส่วนนี้ผมจะเล่าถึงเฉพาะส่วนของ technical interview เท่านั้น เนื่องจากตัวผมเองสัมภาษณ์แค่รอบ coding เลยศึกษามาแค่นี้ 5555 ขั้นตอนการเตรียม resume หรือว่าการเขียน cover letter ก็คือไม่รู้อะไรเลย ปกติพวกนี้เป็นกระบวนการของทาง HR เค้า เราไม่ก้าวก่าย

ความสามารถในการเรีนยรู้

เริ่มจากเด็กฝึกงาน คำตอบส่วนใหญที่ได้ก็คือ เค้าจะดูว่าคนๆนี้ มีความสามารถในการเรียนรู้แค่ไหน เนื่องจากว่าเค้าต้องการคนที่มาช่วยงานง่ายๆที่ไม่มีเวลามาทำกัน และเด็กฝึกงานจะอยู่กันไม่นาน แค่สองหรือสามเดือน เพื่อให้ได้ผลลัพธ์จึงต้องเป็นคนที่เรียนรู้เร็วพอสมควร ไม่งั้นทำไม่เสร็จ ครึ่งๆกลางๆ กลายเป็นว่าที่ลงทุนไปกับน้องฝึกงานก็ไม่ได้ใช้อีก สิ่งที่ใช้วัดเรื่องนี้ก็คือ คุณเคยทำงานที่ไม่ใช่การบ้านหรือโปรเจคหรือไม่ เพราะการจะทำอะไรพวกนี้ได้ 75% เป็นความรู้ที่ไม่ได้มีอยู่ในห้องเรียน ศึกษาเอาเองทั้งนั้น ถ้าทำออกมาแล้วมีผลงานที่ใช้ได้ ก็คือการันตีได้ระดับหนึ่งแล้วว่าคุณมีปัญญาเรียนรู้ด้วยตัวเองในระดับหนึ่ง ไม่ต้องมานั่งประกบคอยบอกคอยสอน ทุกคนไม่ว่างมาช่วยตลอดเวลา

เชาว์ในการแ้กปัญหา

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

แพสชัน

ส่วนตัวผมจะให้น้ำหนักข้อนี้มากกว่าสองข้อที่ผ่านมา เพราะมันสามารถบันดาลให้เกิดประสบการณ์ที่แตกต่างจากแคนดิเดทที่ไม่มี สิ่งที่ใช้วัดแพสชันก็คือ side project (อีกแล้ว) จะโง่แค่ไหนก็ได้ จะง่อยแค่ไหนก็ได้ แค่มีผลลัพธ์ที่ใช้ได้ก็คือที่สุด พวกนี้คุณจะต้องผ่านการเสิช google และ stack overflow มานับไม่ถ้วน บักเป็นร้อย รันไม่ได้เป็นวันๆ คุณจะได้กระบวนการทำงาน แนวทางการแก้ไขปัญหา ถึงแม้จะคนละเฟรมเวิร์คคนละภาษาคือใช้ได้หมด อาจจะเป็นเกมก็ได้ เป็นเว็บโคลนก็ได้ เป็นของที่มโนขึ้นมาเพื่อการเรียนรู้เฟรมเวิร์คก็ได้ เป็นเว็บสนองตัณหาก็ได้ เช่น อวดแมว ช่วยโลก สร้างเงิน แล้วแต่ การที่จะทำให้เสร็จสักโปรเจคนึง คุณต้องทุ่มเทแรงกายแรงใจ สมมุติว่าทำขำๆ สัปดาห์ละสี่ชั่วโมง เดือนละสิบหกชั่วโมง หนึ่งเทอมคุณมีชั่วโมงบินมากกว่าคนอื่น 64 ชั่วโมงแล้ว ตีเป็นหน่วยกิตก็สี่หน่วยกิตเท่ากับหนึ่งวิชาเลยนะ

ความสามารถในการดีบัก

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

การสื่อสาร

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

วิธีเตรียมตัว

ผมจะแนะนำเป็นข้อๆประมาณนี้แล้วกัน ไม่ใช่สูตรตายตัว แต่มันช่วยให้เรามีโอกาสมากขึ้น

  • พักผ่อนให้เพียงพอ การง่วงนอนอ่อนล้าทำให้สมองทำงานช้าลงนะ
  • ฝึกทำโจทย์เยอะๆ อย่างเช่น hackerrank, leetcode, หรือ programming.in.th อะไรพวกนี้ก็ได้
  • ถ้ามีประสบการณ์กับเฟรมเวิร์คก็ดี ช่วยลดเวลาออนบอร์ดได้ ยิ่งถ้ารู้ถึงแก่นภายในว่าหลักการทำงานคือะไรได้นี่คือติดดาวเลย บางคนทำงานมาสี่ห้าปียังไม่รู้ ใช้อย่างเดียว
    • frontend ก็ react, vue ไรงี้
    • backend ก็เช่น .net, spring boot, node
  • ความรู้พื้นฐานบางทีก็อาจจะโดนถาม data structure, design pattern

สรุป

หา side project ทำซะ สร้างเสริมประสบการณ์เขียนโค้ด