- โจทย์เขียนโปรแกรมเกี่ยวกับฐานข้อมูลที่ผมได้รับในปี 2013 จาก MemSQL (ปัจจุบันคือ SingleStore)
→ "จงเพิ่มคำสั่ง mult ที่มีลักษณะคล้าย incr / decr ให้กับ Memcached ซึ่งเป็น key-value store ผมให้เวลา 1 ชั่วโมง"
- คำถามนี้เป็นโจทย์สัมภาษณ์เทคนิคที่ยอดเยี่ยม เพราะมันแบ่งผู้สมัครออกได้อย่างชัดเจนเป็น 3 ประเภท
- ประเภท 0 : คนที่ตกใจกับการต้องไปแก้โค้ดจริง ๆ แม้ในความเป็นจริงคงไปไม่ถึงขั้นนี้อยู่แล้ว แต่ก็ไม่ควรจ้าง
→ ตอนนั้น MemSQL พัฒนาด้วย C++11 ดังนั้นการไปแตะ Memcached ที่เขียนด้วย C จึงสอดคล้องกับจุดประสงค์มาก
- ประเภท 1 : คนที่เห็นโจทย์แล้วพูดว่า "การคูณคือการบวกซ้ำ ๆ งั้นก็น่าจะวนใช้ของเดิมได้! แต่ต้องจัดการ lock ด้วย..."
→ สุดท้ายวกวนอยู่นาน ทำโค้ดที่ใช้งานได้ไม่สำเร็จ และแน่นอนว่าไม่ได้รับการจ้างงาน
- ประเภท 2 : คนที่พูดว่า "การคูณก็เหมือนการบวก ยกเว้นตรงที่ที่ใช้
+ ต้องเปลี่ยนเป็น *" แล้วก็ Copy&Paste และเปลี่ยน + เป็น * ได้อย่างรวดเร็ว
→ คนในกลุ่มนี้มีโอกาสสูงมากที่จะถูกจ้าง
- ผู้สมัครที่ดีที่สุด... เพราะยังมีเวลาเหลือมาก พวกเขาจึงสามารถขัดเกลาผลงาน ตรวจความสม่ำเสมอของ formatting ใส่ unit test หรือแม้แต่ทบทวน "การตัดสินใจด้านการออกแบบ" ได้
บทสรุป
- เหตุผลที่ผมชอบโจทย์เขียนโปรแกรมนี้ ก็เพราะมันเป็นภาพย่อส่วนของการเขียนโปรแกรมจริง
- เวลาต้องดูแลโค้ดเบสขนาดใหญ่ ย่อมมีทั้งโค้ดที่เราเข้าใจไม่หมด หรือสำนวนการเขียนที่ไม่จำเป็นปะปนอยู่
- ปัญหานี้เหมาะกับการสัมภาษณ์มาก เพราะมีคำตอบที่ถูกต้องอยู่เพียงแบบเดียว คือเปลี่ยน
bool incr เป็น int opcode
- ตอนนี้มีคำสั่งคำนวณเลขคณิตอยู่ 2 คำสั่ง (
incr/decr) และต้องขยายมันให้เป็น 3 คำสั่ง
- โจทย์นี้ถูกออกแบบมาอย่างดีเพื่อคัดกรองผู้สมัครที่ไม่ผ่านคุณสมบัติ และพาผู้สมัครที่มีคุณสมบัติเหมาะสมไปสู่เส้นทางที่สดใส
3 ความคิดเห็น
ประเด็นสำคัญน่าจะอยู่ที่ว่าจะหาชุดโค้ดที่เกี่ยวข้องได้อย่างรวดเร็วแค่ไหน
ฉันคิดว่านี่ดีกว่า เพราะไม่ใช่การเขียนโปรแกรมขึ้นมาใหม่ทั้งหมดตั้งแต่ศูนย์ แต่เป็นการเพิ่มฟีเจอร์ให้กับโค้ดที่มีอยู่แล้วอยู่แล้ว (แถมยังเป็นโปรเจกต์โอเพนซอร์สที่เป็นที่รู้จักดีและถูกใช้อย่างแพร่หลายอยู่แล้วด้วย)
ใน HN ก็เป็นไปตามคาด.. คนที่เป็นคนตั้งคำถามสัมภาษณ์ต้นฉบับโผล่มาเปิด AMA เองเลยนะ
https://news.ycombinator.com/item?id=31065143