Friday, March 13, 2015

7 เทคนิคการสัมภาษณ์งานสำหรับ "โปรแกรมเมอร์"


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

เห็นน้องๆ หลายคนใกล้ที่จะเรียนจบมหาลัยกันแล้ว ซึ่งส่วนใหญ่พอถามว่ากลัวอะไร ก็บอกว่ากลัวสัมภาษณ์งานมาเป็นอันดับ 1 เลย

ในฐานะที่เคยผ่านการสัมภาษณ์มากว่า 30 บริษัท (ผมทำงาน 6 บริษัทในรอบ 10 ปี) และก็เคยสัมภาษณ์เด็กด้วยตัวเองบ่อยครั้ง ก็มีข้อแนะนำสำหรับการสัมภาษณ์ไว้ดังนี้ฮะ


1. ฝึกเขียนโปรแกรมบนกระดาษ


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

แต่ที่เคยเห็นเด็กหลายคนมาสัมภาษณ์งาน พอเจอโจทย์ที่ให้เขียนโปรแกรมบนกระดาษ ก็ถึงกับอ้าปากค้าง เกาหัว คิดอะไรไม่ออกไปนานเลยทีเดียว

หลายคนจำ Syntax ไม่ได้, หลายคนเคยใช้แค่ auto complete ช่วย, บางคนรีบเขียน แล้วก็ลบแล้วลบอีก

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


2. หาข้อมูลเก่งแค่ไหน


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

Google, Stack Overflow, Github, Wiki หรือแม้แต่คู่มือ Reference ใช้เป็นกันแค่ไหน ?

ผมเคยเจอน้องคนนึง บอกว่าใช้ Stack Overflow เป็นประจำ ตั้งคำถามเองด้วย และถึงขั้นไปช่วยตอบคำถามเลยก็มี โอ้โห แทบจะขอคว้าตัวมาเลย

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



3. ทดสอบ Logic ในการคิด


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

วิธีการทดสอบ Logic มีได้หลากหลายวิธีมาก บางบริษัทให้คำถามปลายเปิด บางบริษัทให้โจทย์คณิตศาสตร์ บางที่ก็ให้อธิบายเรื่องที่คาดไม่ถึง

ผมเคยสมัครตำแหน่งโปรแกรมเมอร์ที่กูเกิล และโดนถามว่า "สมมุติถ้าโปรแกรมที่คุณเขียนอยู่นี้ มีคนใช้เพิ่ม 3 เท่าในทันที คุณจะแก้ปัญหายังไง ?", "อธิบายความหมายของ Search Engine ใน 3 ประโยคให้เด็กเข้าใจ"

คือคำถามพวกนี้ ไม่ได้ต้องการคำตอบที่ชัดเจน แต่ต้องการฟังว่าเราคิดยังไงกับเรื่องเหล่านี้

เทคนิคนึงที่ช่วยได้เวลาเจอคำถามแนวนี้ คือให้คิดให้ดีก่อนตอบ อย่ารีบ ให้พูดในสิ่งที่อยู่ในหัวเราทีละขั้นตอนออกมา ผมคิดว่าถ้าต้องทำสิ่งนี้ จะต้องเริ่มจาก 1, 2, 3 แล้วก็ต่อด้วย 4 แต่ถ้าเจอปัญหา A ก็ต้องใช้ B ช่วย ... อะไรแบบนั้น


4. ภาษาอังกฤษ ... พูดที ตายทั้งบาง


80% ของนักศึกษาไทยมีปัญหาด้านการพูดภาษาอังกฤษ โดยเฉพาะเวลาที่ตื่นเต้นนี่เข้าขั้นชิบหายวายป่วงกันทั้งบาง

ผมเคยเจอหลายคนมากที่มาสัมภาษณ์งาน แล้วฝึกซ้อมภาษาอังกฤษมาอย่างดีแค่การแนะนำตัว "มายเนมอิส ... ไอ แกร ดู เอท ฟรอม ..."

ครั้งนึงผมเคยไปสัมภาษณ์งานที่ Accenture และถูกถามเรื่องทั่วไปมากว่า "ช่วยเล่าเรื่องสมัยเด็กให้ฟังหน่อย เป็นคนยังไง ชอบอะไรเป็นพิเศษ" โอ้โห ไอ้เราก็โม้แหลกเลย เล่าเรื่องตัวเองนี่ถนัดมาก

แต่พอเล่าจบ คนสัมภาษณ์ก็บอกว่า "เอาล่ะ ที่พูดมาทั้งหมดนั้น ช่วยเล่าใหม่เป็นภาษาอังกฤษหน่อย" อ่าว ชิปหายละครับงานนี้ อารมณ์เหมือนโดนการ์ดเทพตอนท้ายเกม พลิกกระดานตบเข้าอย่างจัง

ผมเชื่อว่าเด็กไอทีส่วนใหญ่ ไม่มีปัญหาด้านการอ่านหรือฟังภาษาอังกฤษกันอยู่แล้ว เล่นเกมมาตั้งแต่เด็ก อ่าน Text ตั้งแต่มหาลัย แต่การพูดคุยนี่แหล่ะคือตัวปัญหาใหญ่

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


5. รู้จักศัพท์และการแก้ปัญหาในเชิง Programming


"ถ้าคุณเจอโจทย์แบบนี้ จะแก้ปัญหาด้วยวิธีการเขียนโปรแกรมแบบไหน ?"

ถ้าใครตอบว่าเขียนโปรแกรมแบบ If Else แล้วก็ If Else ต่อด้วย If Else คร๊าบบบ อาจจะถูกมองแปลกๆ ได้

การแก้ปัญหาในเชิงเขียนโปรแกรมมีเทคนิคและวิธีมากมาย แต่ละวิธีก็มีศัพท์เฉพาะของตัวเอง

รู้จัก Breadth First Search, Depth First Search, Sort, Linear, Design Pattern ฯลฯ แล้วหรือยัง

เวลาทำงานจริงๆ โปรแกรมเมอร์คุยกันด้วยภาษาพวกนี้ ผมเคยต้องประชุมกับทีมงานที่อังกฤษเพื่อออกแบบโปรแกรมตัวหนึ่ง ฝั่งโน้นแนะนำมาว่าลองใช้ Design Pattern ตัวนี้ในการออกแบบสิ แล้วแก้เฉพาะส่วนนี้ ให้คล้ายกับอีก Pattern นึงน่าจะดี

ภาษาเหล่านี้เป็นภาษาสากล และต้องใช้จริงในการทำงาน เราควรจะรู้จักเรื่องพวกนี้ไว้บ้าง ไม่ใช่เรียนจบแล้วก็คืนอาจารย์กลับไป


6. ทำงานเป็นทีมได้หรือเปล่า


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

เวลาสัมภาษณ์งานส่วนใหญ่เรามักต้องเจอกับ Project Manager หรือ Senior Developer ซึ่งเป็นหัวหน้าเราอีกที สิ่งที่คนเหล่านี้กลัวที่สุดไม่ใช่ปัญหาเรื่องเทคนิค แต่เป็นปัญหาเรื่องคน โดยเฉพาะการทำงานร่วมกัน

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

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

ทุกคนที่ร่วมสัมภาษณ์ด้วย บอกตรงกันว่า "เลือกคนที่สองเข้าทำงาน"


7. เรียกเงินเดือนเท่าไหร่ดี ?


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

ซึ่งจากประสบการณ์ก็พอจะมีข้อแนะนำตามนี้
  • เสิร์ชกูเกิลชื่อบริษัทที่เราจะไปสัมภาษณ์ ตามด้วยคำว่า "เงินเดือน" เพื่อสืบหาฐานเงินเดือนของที่นี่
  • บางบริษัทมีค่า Certify ให้ เช่นใบละ 2,500 บาท แต่ถ้าบริษัทไหนไม่มี ก็ลองบวกเข้าไปจากฐานเงินเดือน ยิ่งบริษัทที่รับโปรเจ็คลูกค้ามาทำ ใบ Certify ของเราจะมีค่ามาก เพราะช่วยในการขายงานได้ด้วย
  • ภาษาที่เราเขียน ถ้าเป็นภาษาที่ใครๆ ก็เขียนกัน เงินเดือนก็จะระดับมาตรฐาน เช่น Java, PHP
  • แต่ถ้าเราดันเป็นภาษาระดับหาคนทำยาก ก็เรียกเงินได้สูง เช่น C++, ABAP (SAP)
  • เขียนแอพบนมือถือ จะเป็น iOS หรือ Android ถ้ามีพอร์ทว่าเคยทำแอพมาด้วยตัวเอง หรือมีแอพอยู่แล้วใน App Store โอกาสเรียกเงินเดือนมากกว่าปกติก็จะมีตามไปด้วย
  • ปริญญาโทแทบไม่มีผลกับงานโปรแกรมเมอร์ และก็ไม่เห็นมีบริษัทไหน Require วุฒิปริญญาโทสำหรับโปรแกรมเมอร์
  • ภาษาอังกฤษมีผลมากในกรณีที่ทำบริษัทข้ามชาติทั้งหลาย แต่ถ้าบริษัทคนไทย ก็มักใช้ผ่านด่านสัมภาษณ์งานมากกว่า
  • ถ้างานที่สมัครเป็นลักษณะ Outsource ควรตีบวกเงินเดือนเข้าไปเยอะๆ งานพวกนี้เงินดี แต่ชีวิตจะเหนื่อยยาก และต้องไปทำงานบริษัทลูกค้าหลายๆ แห่ง
สุดท้ายสิ่งที่อยากฝากคือ จะเห็นว่าสิ่งที่ใช้ในการสัมภาษณ์งานนั้น ไม่ใช่เรื่องที่เราสามารถเตรียมตัวได้ภายใน 3-4 วัน เช่น ภาษาอังกฤษ, ผลงานที่เคยทำมา, การทำงานเป็นทีม

เรื่องพวกนี้ต้องฝึกกันเป็นเดือนๆ บางอย่างก็เป็นปี ซึ่งถ้าเรารู้อยู่แล้วว่า การทำงานในสายนี้ต้องใช้ความสามารถอะไรบ้าง ก็ควรฝึกเสียตั้งแต่ "วันนี้"

ถ้าน้องยังเรียนอยู่ อย่าใช้เวลา 4 ปีเรียนอย่างเดียว ลองไปเข้าชุมนุมชมรม ลองทำกิจกรรม มีโอกาสฝึกด้านภาษาอังกฤษเยอะๆ ลองเข้าประกวดแข่งขันดูบ้าง โอกาสมีอยู่รอบตัว ขึ้นอยู่กับว่าเราจะคว้ามันไว้รึเปล่า

อ่านเพิ่ม - 5 สิ่งที่เจ้านายควรเข้าใจ "โปรแกรมเมอร์" ให้มากกว่านี้





0 comments: