ชุมชนเทคโนโลยีกำลังมีการถกเถียงกันอย่างเข้มข้นเกี่ยวกับว่าผู้สมัครงานควรใช้ constraint solvers เช่น MiniZinc หรือ Z3 ในการแก้ปัญหาอัลกอริทึมที่ซับซ้อนในระหว่างการสัมภาษณ์งานด้านเทคนิคหรือไม่ แทนที่จะเขียนโซลูชันแบบดั้งเดิมตั้งแต่เริ่มต้น
การถกเถียงครั้งนี้เริ่มขึ้นจากการสะท้อนของนักพัฒนาคนหนึ่งที่สอบตกในการสัมภาษณ์สำหรับปัญหา coin change ที่มีชื่อเสียง แทนที่จะเขียนโซลูชันแบบ dynamic programming พวกเขาเสนอว่าปัญหา LeetCode ที่ยากหลายข้อสามารถแก้ได้ง่ายๆ โดยใช้ constraint solvers ซึ่งเป็นเครื่องมือเฉพาะทางที่ออกแบบมาสำหรับปัญหาการหาค่าเหมาะสมทางคณิตศาสตร์
Constraint Solvers ยอดนิยมที่ถูกกล่าวถึง:
- MiniZinc - ภาษาโมเดลลิ่ง constraint ระดับสูง
- Z3 - เครื่องมือพิสูจน์ทฤษฎีบทและ constraint solver ของ Microsoft
- OR-Tools - ชุดเครื่องมือการหาค่าเหมาะสมที่สุดของ Google
- DPLL - solver แบบกำหนดเองที่สามารถพัฒนาได้ในโค้ดประมาณ 30 บรรทัด
ข้อโต้แย้งที่สนับสนุน Constraint Solvers
ผู้สนับสนุนโต้แย้งว่า constraint solvers แสดงถึงทักษะการแก้ปัญหาในทางปฏิบัติที่ไม่ได้ถูกใช้ประโยชน์เต็มที่ในการพัฒนาซอฟต์แวร์ในโลกแห่งความจริง เครื่องมือเหล่านี้เก่งในการจัดการปัญหาการหาค่าเหมาะสมที่ซับซ้อนซึ่งมีข้อจำกัดหลายประการ โดยมักจะต้องใช้โค้ดเพียงไม่กี่บรรทัดเมื่อเทียบกับอัลกอริทึมแบบกำหนดเองที่ยาวเหยียด
สำหรับปัญหาเช่นการหากำไรสูงสุดจากการซื้อขายหุ้นที่มีข้อจำกัดหลายประการ หรือการหาสี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดในฮิสโตแกรม constraint solvers สามารถให้โซลูชันที่สวยงามซึ่งทั้งถูกต้องและปรับเปลี่ยนได้ตามความต้องการที่เปลี่ยนแปลง เมื่อมีการเพิ่มข้อจำกัดใหม่ให้กับปัญหาที่มีอยู่ โซลูชันจาก constraint solver มักจะต้องการการปรับเปลี่ยนเพียงเล็กน้อย ในขณะที่อัลกอริทึมแบบดั้งเดิมอาจต้องเขียนใหม่ทั้งหมด
Constraint solvers เป็นเครื่องมือทางคณิตศาสตร์ที่หาคำตอบของปัญหาที่กำหนดโดยชุดของกฎและข้อจำกัดโดยอัตโนมัติ
การตรวจสอบความเป็นจริงในการสัมภาษณ์
อย่างไรก็ตาม นักพัฒนาและผู้สัมภาษณ์ที่มีประสบการณ์หลายคนคัดค้านแนวทางนี้ ความกังวลหลักคือการสัมภาษณ์ด้านเทคนิคมีจุดประสงค์เพื่อประเมินกระบวนการคิดในการแก้ปัญหาของผู้สมัคร ทักษะการสื่อสาร และความสามารถในการแยกย่อยปัญหาที่ซับซ้อน ไม่ใช่เพียงแค่ความรู้เกี่ยวกับเครื่องมือเฉพาะทาง
จุดประสงค์ของปัญหาเหล่านี้คือการทดสอบความฉลาดของคุณ การนำเสนอโซลูชันที่ไม่ฉลาดโดยใช้ constraint solvers แสดงให้เห็นว่าคุณมีประสบการณ์และคุณรู้จักหัวข้อเฉพาะทาง แต่มันไม่ได้แสดงความฉลาดใดๆ
นักวิจารณ์ยังชี้ให้เห็นข้อจำกัดในทางปฏิบัติ: constraint solvers มักมีประสิทธิภาพการทำงานที่คาดเดาไม่ได้และอาจมีปัญหากับชุดข้อมูลขนาดใหญ่ที่อัลกอริทึมแบบดั้งเดิมจัดการได้อย่างมีประสิทธิภาพ สำหรับปัญหาที่มีตัวแปรหลายล้านตัว constraint solvers ทั่วไปอาจช้าจนไม่สามารถใช้งานได้หากไม่มีฮาร์ดแวร์ที่ทรงพลัง
ตัวอย่างการเปรียบเทียบประสิทธิภาพ:
- ปัญหา Coin Change: อัลกอริทึม Greedy ล้มเหลวสำหรับเหรียญมูลค่า [10, 9, 11] ในการทอนเงิน 37 เซนต์ (ใช้ 10 เหรียญ เทียบกับวิธีที่เหมาะสมที่สุด 4 เหรียญ)
- การซื้อขายหุ้น: อัลกอริทึมแบบดั้งเดิม O(n) เทียบกับ O(n²) เทียบกับแนวทาง constraint solver
- ขนาดใหญ่: Constraint solver ประสบปัญหาความยากลำบากกับตัวแปร O(10⁶) หากไม่มีฮาร์ดแวร์ที่มีประสิทธิภาพสูง
ความแตกต่างจากประสบการณ์
รูปแบบที่น่าสนใจเกิดขึ้นจากการอภิปรายของชุมชน: นักพัฒนาที่มีประสบการณ์รายงานว่าบริษัทที่มีความเป็นผู้ใหญ่และมั่นคงมักจะให้ปัญหาที่เป็นประโยชน์ในทางปฏิบัติและเป็นมิตรต่อการอภิปราย มากกว่าปัญหาอัลกอริทึมแบบบริสุทธิ์ ในขณะที่บริษัทเล็กหรือที่มีความเป็นผู้ใหญ่น้อยกว่ามักพึ่งพารูปแบบ LeetCode ที่จำมาเป็นอย่างมาก
นักพัฒนาอาวุโสบางคนแสดงความหงุดหงิดกับความไม่สอดคล้องกันนี้ โดยสังเกตว่าประสบการณ์หลายทศวรรษของพวกเขาในการสร้างระบบจริงดูเหมือนจะมีค่าน้อยกว่าการจำเทคนิคอัลกอริทึมเฉพาะ สิ่งนี้ทำให้บางคนหลีกเลี่ยงการจ้างงานแบบดั้งเดิมโดยสิ้นเชิง โดยเลือกงานสัญญาจ้างแทนที่พวกเขาสามารถแสดงคุณค่าผ่านโซลูชันที่ส่งมอบแทนที่จะเป็นผลการสัมภาษณ์
การหาจุดสมดุล
การตอบสนองที่สร้างสรรค์ที่สุดแนะนำแนวทางที่สมดุล: ผู้สมัครที่สามารถแก้ปัญหาโดยใช้อัลกอริทึมแบบดั้งเดิมและจากนั้นแสดงความรู้เกี่ยวกับ constraint solvers เป็นโซลูชันทางเลือกมักจะสร้างความประทับใจให้กับผู้สัมภาษณ์มากที่สุด สิ่งนี้แสดงทั้งทักษะการแก้ปัญหาพื้นฐานและความตระหนักรู้เกี่ยวกับเครื่องมือสมัยใหม่
ความตึงเครียดที่แฝงอยู่สะท้อนถึงคำถามที่กว้างขึ้นเกี่ยวกับสิ่งที่การสัมภาษณ์ด้านเทคนิคควรจะวัดจริงๆ ในขณะที่อุตสาหกรรมยังคงพัฒนาต่อไป การถกเถียงระหว่างการทดสอบความรู้อัลกอริทึมเทียบกับการใช้เครื่องมือในทางปฏิบัติยังคงไม่มีข้อสรุป โดยมีข้อโต้แย้งที่ถูกต้องในทั้งสองฝ่าย
อ้างอิง: Many Hard Leetcode Problems are Easy Constraint Problems