จากประสบการณ์ของฉันใน บริษัท ของฉันที่ฉันสัมภาษณ์หลายครั้งมีโอกาสดีที่ผู้สัมภาษณ์ไม่มีเบาะแสเกี่ยวกับวิธีการทำอย่างถูกต้อง ดังนั้นพวกเขาจึงจัดทำชุดคำถามทางเทคนิคและคำนวณคะแนนจากนั้นทำประวัติย่อของคุณ อย่างไรก็ตามสิ่งนี้มีข้อเสียมากมายและไม่ควรทำด้วยเหตุผลดังต่อไปนี้:
คุณถามความรู้จุด หากโปรแกรมเมอร์ไม่เคยทำอะไรในพื้นที่นั้นเขา / เธออาจจะยังเป็นเพื่อนร่วมงานที่ยอดเยี่ยม แต่ก็ไม่รู้คำตอบนั้น ในทางตรงกันข้าม: ถ้ามีคนเตรียมสัมภาษณ์และพบคำตอบของคำถามนั้นในเน็ตคุณจะได้คำตอบที่ถูกต้อง แต่บุคคลนั้นอาจไม่มีเบาะแสเกี่ยวกับหัวข้อจริงเลยก็ได้
คนกังวลในการสัมภาษณ์งาน สมองมีคุณสมบัติที่ยอดเยี่ยมนี้ในการปิดพื้นที่ระดับสูง ๆ หลายอย่าง (เช่นตรรกะ) หากอยู่ในความตื่นตระหนกซึ่งหมายความว่า: หากคุณประหม่าคุณอาจไม่ได้คุณภาพคำตอบที่คุณต้องการในสถานการณ์แบบวันต่อวัน บางคนสามารถจัดการกับสถานการณ์ที่เครียดเช่นการสัมภาษณ์หลายคนไม่สามารถ
ด้วยคำตอบเดียวที่ถูกต้องคุณจะต้องทดสอบทักษะของบุคคลเพื่อค้นหาคำตอบนั้น นี่เป็นทักษะอย่างหนึ่งที่เพื่อนร่วมงานต้องการ แต่ไม่ใช่ทักษะที่จำเป็นเพียงอย่างเดียว ดังนั้นคำถามหนึ่งหรือสองข้อควรเพียงพอที่จะทดสอบความรู้นั้นและจากนั้นจึงสอบถามทักษะอื่น ๆ การสัมภาษณ์ที่มีคำถามการแก้ปัญหาเท่านั้นจะทดสอบทักษะเดียวกันซ้ำแล้วซ้ำอีก
คำถามภารกิจการเขียนโปรแกรมที่ดีคืออะไร
คำถาม "คุณสามารถเขียนโปรแกรมสั้น ๆ " ที่โด่งดังเหล่านั้นมีปัญหาใหญ่ที่โปรแกรมเมอร์ส่วนใหญ่ไม่สามารถเขียนรหัสบรรทัดเดียวโดยไม่ต้อง IDE ช่วยพวกเขา แต่นั่นก็คือในสถานการณ์การทำงานประจำวันไม่มีปัญหาเลยเพราะโปรแกรมเมอร์มักมี IDE ของเขาคอยช่วยเหลือเขาอยู่เสมอ ดังนั้นการถามสิ่งต่าง ๆ เช่น "ค้นหาข้อผิดพลาด", "เขียนรหัส 50 บรรทัดที่ทำ ... " หรือแม้แต่คำถามง่ายๆที่ต้องคำนึงถึงว่าผู้สมัครไม่มีเครื่องมือของเขา (IDE, Google)
ตัวอย่างเช่นฉันสามารถตอบคุณโดยทั่วไปคำถามใด ๆ ภายใน 1 นาทีถ้าฉันมี Google ช่วยฉัน แต่ไม่มีการเชื่อมต่ออินเทอร์เน็ตฉันดูเหมือนจะทำอะไรไม่ถูก ฉันเรียกว่าความทรงจำที่เอาต์ซอร์ซนั้นมาแทนการขัดขวางฉันมันช่วยให้ฉันจดจ่อกับสิ่งที่สำคัญจริงๆ - การทำความเข้าใจกลไกการซ้อนทับ - เพราะสิ่งอื่น ๆ สามารถค้นหาได้ แต่อย่าถามฉันเกี่ยวกับรายละเอียดจาก API แบบสุ่มใด ๆ เพราะฉันไม่รู้พวกนั้นฉันมี Google อยู่แล้ว
ที่กล่าวมาคำถามงานเขียนโปรแกรมที่ดีไม่ควรมุ่งเน้นไปที่การรู้จัก API หรือทักษะการเขียนโค้ดพิเศษยกเว้นว่านี่เป็นข้อกำหนดที่แน่นอนสำหรับงาน สามารถรับความรู้ได้ดังนั้นจึงเป็นการดีกว่าที่จะค้นหาว่าบุคคลนั้นมีความรู้ได้ดีเพียงใดกว่าจะถามว่าเขา / เธอรู้อะไรอยู่แล้ว
คำถามที่ดีสำหรับงานเขียนโปรแกรมควรสั้นเรียบง่ายสามารถเขียนโค้ดได้ในทุกภาษาโดยมีโค้ดเพียงไม่กี่บรรทัดและโดยเฉพาะอย่างยิ่งควรบอกคุณให้มากที่สุดเกี่ยวกับวิธีการทำงานของบุคคลและค้นหาคำตอบ ตัวอย่าง:
"เขียนฟังก์ชั่นในภาษาที่คุณเลือกซึ่งจะใช้อาร์เรย์ของจำนวนเต็มและสั่งซื้อใหม่ในลักษณะที่จำนวนเต็มแรกเป็นค่าสุดท้ายจากนั้นค่าสุดท้ายจะเปลี่ยนไปตามลำดับ"
สิ่งแรกที่ผู้สมัครควรถามในตอนนี้คือ: "ขออภัย ... คุณช่วยอธิบายงานได้ไหม" เพราะโปรแกรมเมอร์ไม่ได้รับคำอธิบายที่ชัดเจนเกี่ยวกับสิ่งที่ต้องทำ ตามด้วยคำอธิบายว่ารหัสในคำถามควรทำการเปลี่ยนแปลงด้านซ้ายของเนื้อหาของอาร์เรย์ด้วยการเพิ่มการล้นที่ด้านขวา
งานนี้ง่ายมากผู้ที่สำเร็จการศึกษาระดับรูปแบบการเขียนโปรแกรมควรจะตอบคำถามได้อย่างถูกต้อง สิ่งนี้คำนึงถึงว่าโปรแกรมเมอร์ต้องทำงานโดยไม่ต้องใช้เครื่องมือของเขาและการเป็นกังวลจะลดความสามารถในการคิดอย่างมีเหตุผล อย่างไรก็ตามมันยังบอกคุณว่าผู้คนแก้ปัญหาได้อย่างไรจากคำถามที่ตั้งคำถามและจากวิธีที่ผู้คนเข้าหามันเพียงเพราะการเปลี่ยนแปลงซ้ายขัดต่อสัญชาตญาณ 'ซ้ายไปขวา' ทั่วไปและบังคับให้ผู้คนคิด วินาที.
มีคำตอบที่เป็นไปได้มากมายสำหรับคำถามนี้ดังนั้นการมองอย่างใกล้ชิดถึงวิธีการพัฒนารหัสเป็นส่วนสำคัญไม่ใช่ว่าโซลูชันจะทำงานได้จริงหรือไม่ ผู้สมัครสอบเป็นโมฆะหรือไม่? โอเวอร์โฟลว์ถูกเก็บไว้อย่างไร? มีการใช้การวนซ้ำหรือการตั้งค่า mem หรือไม่? ผู้สมัครตรวจสอบความถูกต้องของรหัสอย่างไร คำถามง่ายๆข้อนี้จะบอกประวัติทั้งหมดเกี่ยวกับการทำงานของบุคคลนั้น
คำถามความรู้ทั่วไปที่ดีคืออะไร
คำถามที่ดีนั้นง่ายต่อการตอบขอคำตอบในวงกว้าง (เรียกว่า 'คำถามเปิด') และให้คุณเรียนรู้มากที่สุดเกี่ยวกับผู้สมัครเท่าที่จะทำได้ในเวลาอันสั้น
ตัวอย่าง:
(ถามโปรแกรมเมอร์ C ++): "คุณรู้ภาษาอื่นที่อยู่นอกเหนือจาก C ++ หรือไม่"
นี่เป็นคำถามระดับเริ่มต้นซึ่งจะช่วยให้ผู้สมัครมีโอกาสพอที่จะประกันตัวออกไปได้ในขณะนี้หากเขาไม่ทราบอะไรเกี่ยวกับหัวข้อที่ถาม A 'ไม่' ในตอนนี้ดีกว่าที่จะทรมานเขา / เธอด้วยคำถามอีกหลายข้อที่เขา / เธอทุกคนต้องตอบด้วย: "ขออภัยฉันไม่รู้อะไรเลยเกี่ยวกับเรื่องนี้"
ฉันจะบอกคุณก่อนว่าภาษาอื่น ๆ ที่บุคคลนั้นรู้จักคุณเรียนรู้ว่าความสนใจของบุคคลนั้นคือการได้รับมุมมองที่กว้างขึ้นของโลกการเขียนโปรแกรมหรือถ้าคุณมีใครสักคนที่มีภาษาเอกพจน์เพียงอย่างเดียว ) ดู
(ถัดไปจากนั้นสมมติว่าเขารู้ Java):อะไรคือความแตกต่างสามอันดับแรกระหว่าง C ++ และ Java ในที่คุณรับรู้?
นี่เป็นคำถามเปิดที่ให้คำตอบมากมายดังนั้นผู้สมัครมีโอกาสดีที่จะหาอย่างน้อยสามคน การขอ (ความเห็นส่วนตัว) สามอันดับแรกไม่เพียง จำกัด คำตอบที่เป็นไปได้เท่านั้น แต่ยังบังคับให้ผู้สมัครเรียงลำดับตามความสำคัญ ยังเป็นเรื่องง่ายที่จะตอบ
นี่เป็นคำถามง่าย ๆ ที่ทดสอบความรู้เชิงลึกเกี่ยวกับภาษาการเขียนโปรแกรมที่แตกต่างกันมากมาย ความรู้ในหัวข้อเหล่านี้ลึกซึ้งเพียงใด จากคำตอบเหล่านั้นคุณสามารถบอกได้มากมายเกี่ยวกับความรู้และความเข้าใจที่แท้จริงของกลไกการซ้อนของภาษาการเขียนโปรแกรม บุคคลนั้นใช้เวลากับรายละเอียดที่สกปรกมากเพียงใดหรือถ้าเขา / เธอเป็นเพียงคนที่เชื่อมโยงฟังก์ชั่น API ต่าง ๆ เข้าด้วยกันโดยไม่มีเงื่อนงำจริงเกิดขึ้นใต้สิ่งเหล่านั้น
แนวคิดของคำถามระดับเริ่มต้นตามด้วยคำถามเชิงลึกอย่างง่ายนี้สามารถใช้สำหรับหัวข้ออื่น ๆ ได้เช่นกัน ในรูปแบบนี้เสมอ: คำถามการประกันตัว, คำถามการตรวจสอบ, คำถามเชิงลึก ตัวอย่างอื่น (จากการสัมภาษณ์ Java):
- "คุณจะให้คะแนนประสบการณ์การพัฒนาแบบมัลติเธรดอย่างไร?"
- "โปรดระบุสิ่งที่คุณคิดว่าเป็นสิ่งสำคัญที่สุดสามอันดับแรกที่ควรพิจารณาเมื่อพัฒนาแอพพลิเคชั่นแบบมัลติเธรด"
- "โปรดตั้งชื่อคลาสสามคลาสจาก Java API ที่สามารถช่วยคุณในการพัฒนาแอปพลิเคชันเหล่านั้นและให้คำอธิบายสั้น ๆ เกี่ยวกับสิ่งที่พวกเขาใช้สำหรับ"
คำถามสามข้อเหล่านี้จะบอกคุณได้มากกว่าคำถามทางเทคนิคใด ๆ ที่ผู้สมัครรู้จริง ๆ เกี่ยวกับหัวข้อเหล่านั้นในขณะที่มีความยุติธรรมที่จะตอบคำถามเมื่อพิจารณาถึงประเด็นความรู้และระดับความเครียด
ดังนั้นในครั้งต่อไปที่มีคนถามคุณ 20 ข้อในการเข้ารหัสคำถามคุณรู้ว่าเขาหรือเธอไม่มีความคิดในการสัมภาษณ์คนอย่างถูกต้อง ;)