สัมภาษณ์งานที่ Microsoft(2)

posted on 09 Aug 2010 00:11 by house in IT
อีกไม่กี่วันต่อมา ผมก็ได้รับเมล์ยืนยันจากทาง HR เรื่องนัดสัมภาษณ์ครั้งถัดไป คราวนี้ ไมโครซอฟต์ จัดสัมภาษณ์สี่รอบในวันเดียวกัน โดยเริ่มตั้งแต่บ่ายโมง เมื่อถึงวันที่กำหนด ก็ย่างเท้าไปที่ออฟฟิศ แจ้งว่ามาสัมภาษณ์งาน ซึ่งก็จะถูกจัดให้ไปนั่งรอในห้องประชุม ผนังข้างหนึ่งมีไวท์บอร์ดและปากกาพร้อม ไม่นานเกินรอ ผู้สัมภาษณ์คนแรก ก็ถือโน้ตบุ้ค เดินเข้ามานั่งตรงข้าม

ผู้สัมภาษณ์คนแรก เป็นชาวต่างชาติครับ ชื่อซันเจ น่าจะมีเชื้อชาติทางอินเดียอยู่พอควร หลังการแนะนำตัวเล็กน้อย ซันเจ ตั้งคำถามไปถึงแรงจูงใจในการเข้าร่วมกับไมโครซอฟต์(ไม่ยาก บิลเกตต์ เป็นไอดอลผมตั้งแต่อายุ 14)  หลังจากนั้นก็เริ่มเข้าประเด็นของการควบคุมคุณภาพซอฟแวร์(QA) กระบวนการพัฒนา การใช้ Unit test และ Automate Testing การแก้ปัญหาความขัดแย้งของฟีเจอร์/เวลา/และความต้องการลูกค้า ซันเจให้เขียนฟังชันต์ง่ายๆในรูปแบบของรีเคอซีฟให้ดูฟังชันต์หนึ่ง พร้อมทั้งถามว่าในกรณีปกติจะใช้รีเคอซีฟในกรณีใด(สมองช็อต ตอบไปว่านึกไม่ออก เวลาจะใช้มันก็ลอยมาเองเป็นรีเคอซีฟ) คุยสบายๆสนุกๆ เกือบๆชั่วโมง ก็เป็นอันจบการสัมภาษณ์ รอบนี้ มีเวลาให้พักแป็ปนึง ก่อนที่คนที่สองจะมาสัมภาษณ์ต่อ

คนถัดมา เป็นฝรั่งร่างสูง มาในชุดเสื้อยืด กางเกงยีน แนะนำตัวเองว่าชื่อแบรนดอน ซึ่งไม่พูดพล่ามทำเพลงครับ แบรนดอนเริ่มจากคอนเซ็ปต์พื่้นฐานของ OOP , Multiple/Single Inheritant แล้วก็ตั้งโจทย์ให้ลองทันที(เอามาลงด้วย เผื่อใครอยากลอง) โดยสร้างสถานการณ์สมมุติดังนี้
1. มีอุปกรณ์สองชนิด คือ tablet(มี function runApp) กับ mobile(มี function makeCall)
2. มีสามยี่ห้อ คือ nokia(function getSimbianVersion) , apple(function getIOSVersion), WinMobile(function GetWinMobileVersion) 

จากสถานการณ์นี้จะพบว่ามีอุปกรณ์ได้ทั้งหมด 2*3 = 6 แบบ และแต่ละแบบจะมีสองฟังชันต์(ตามเจ้าของแบรนด์ และ ชนิดอุปกรณ์)

แบรนดอนต้องการให้ ออกแบบโครงสร้างคลาส(design pattern) ที่จะทำให้ implement function ทั้ง 5 ฟังชันต์เพียงครั้งเดียว และคลาสปลายทางทั้งหกคลาส นำไปใช้ได้ ทั้งนี้ ต้องเป็น single inheritant และ ห้ามมีฟังชันต์เกินหรือขาดในคลาสปลายทาง
(นอกจากเรื่องนี้แล้วก็มีให้ทดลองออกแบบ UI นิดๆหน่อยๆ ซึ่งช่างมันเหอะ)
ช่วงท้ายแบรนดอนปล่อยของครับ คือเอาเทคนิคการดีไซน์คลาสแพทเทิร์นที่ใช้ๆอยู่มาพูดให้ฟัง ซึ่งน่าประทับใจทีเดียว
หลุดจากแบรนดอนมาแบบเอ๋อๆ(สมองเริ่มโอเวอร์โหลด) ก็มาเจอคนที่สาม เป็นคนไทยครับ

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

คนสุดท้าย เป็นการสัมภาษณ์ที่มันส์ที่สุดของวันนี้(ของแบรนดอนเรียกว่าตื่นตาตื่นใจมากกว่า) คนสัมภาษณ์คือพี่เอก เปิดเกมด้วยการให้เขียนฟังชันต์ง่ายๆ เกี่ยวกับการตรวจสอบว่าในอาเรย์มีตัวเลขที่ซ้ำกันหรือไม่ หลังจากเขียนเสร็จ ให้แก้โน่นแก้นี่อยู่พักหนึ่ง ก่อนเริ่มให้ออกแบบระบบการส่งข้อมูลที่สามารถปรับเปลี่ยนข้อมูลที่จะส่งได้อิสระ เพิ่มลดชนิดของข้อมูล รูปแบบตัวดำเนินการ และ เซอร์เวอร์ปลายทางได้ โดยไม่จำเป็นต้อง deploy system ใหม่ 
โจทย์นี้สนุกเป็นอย่างมาก เพราะเริ่มจากความต้องการง่ายๆ(ส่งแพ็คเก็ตชุดเดียวกันให้เซอร์เวอร์หลายชุด) แล้วค่อยๆยากขึ้น(มีการดำเนินการที่แตกต่างกัน สำหรับแต่ละเซอร์เวอร์/ ขอให้เพิ่มเซอร์เวอร์ได้อิสระ/สลับการดำเนินการได้อิสระ/เพิ่ม-ลด เซอร์เวอร์, ตัวดำเนินการได้อิสระ,  ต้องทำ hot update ได้ , etc.)  การชี้นำความคิดด้วยการค่อยๆเพิ่มความซับซ้อนของสถานการณ์ทำให้เราเห็นมุมมองใหม่ๆในการออกแบบที่ไม่เห็นมาก่อน

สี่รอบ สี่ชั่วโมงเศษๆ ที่ล้ามาก แต่สนุกจริงๆ ตอนเดินออกมานี่คิดว่าถึงไม่ได้งาน แต่แค่มาฟังแบรนดอนพูด กับมาทำโจทย์ข้อสุดท้ายนั่นก็คุ้ม และ สนุกสุดๆแล้ว