จะสัมภาษณ์นักวิทยาศาสตร์ธรรมชาติสำหรับตำแหน่งนักพัฒนาได้อย่างไร? [ปิด]


30

คำถามเดิม

ฉันได้สัมภาษณ์ บริษัท ของฉันแล้วส่วนใหญ่นักวิทยาศาสตร์คอมพิวเตอร์สำหรับตำแหน่งนักพัฒนา แต่ก็มีผู้ทดสอบและผู้จัดการโครงการด้วย ตอนนี้ฉันต้องเติมช่องว่างในกลุ่มการวิจัยของเราภายในแผนก R&D (หมายเหตุด้านข้าง: "การวิจัย" หมายความว่าเราพยายามที่จะแก้ปัญหาในโดเมนมืออาชีพ / ตลาดเฉพาะของเราโดยใช้ซอฟต์แวร์ในโครงการวิจัยร่วมกับมหาวิทยาลัย บริษัท อื่น ๆ ศูนย์วิจัย และองค์กรผู้ใช้ปลายทางไม่ใช่งานวิจัยด้านวิทยาศาสตร์คอมพิวเตอร์เราจะไม่แก้ปัญหา P = NP)

ตอนนี้เราเชิญคนที่ถือ MSc สาขาวิชาเคมี (มีวิชาฟิสิกส์มากมายใน CV ของเขาด้วย) ที่ไม่เคยเรียนวิชาวิทยาศาสตร์คอมพิวเตอร์มาก่อน ฉันได้พูดคุยกับเขาประมาณครึ่งชั่วโมงในวันทำงานในมหาวิทยาลัยท้องถิ่นและไม่ต้องสงสัยเลยว่าผู้ชายฉลาด เครื่องหมายของเขานั้นยอดเยี่ยมและเขาก็จบด้วยความแตกต่าง สำหรับวิทยาศาสตรบัณฑิตของเขาเขาจำเป็นต้องสอนการเขียนโปรแกรมด้วยตัวเองใน Mathematica และบอกฉันด้วยความเชื่อมั่นว่าเขาชอบเขียนโปรแกรมมาก นอกจากนี้เขายังแก้ไขปัญหาทางเคมีกายภาพบางอย่างที่ฉันอาจไม่เข้าใจโดยใช้ซอฟต์แวร์ของเขาเองซึ่งนำไปใช้ใน Mathematica สำหรับวิทยานิพนธ์ปริญญาโทของเขา มันมี GUI และขนาดที่น่าทึ่งของ 8,000 LoC ดูเหมือนว่าเขาจะถูกดึงดูดอย่างมากจากสิ่งที่เราทำในกลุ่มการวิจัยของเราและบอกตามตรงว่ามันค่อนข้างยากสำหรับ SME เช่นเราที่จะได้คนดี ฉันยังสนใจที่จะจ้างเขาเพราะเขาสามารถช่วยฉันในการเขียนข้อเสนอโครงการรายงานการนำเสนอผลงานและอื่น ๆ เขาอาจจะเหมาะกับทีมของเราเช่นกัน

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

แน่นอนฉันจะถามเขาว่ามันคืออะไรที่น่าสนใจเกี่ยวกับการเขียนโปรแกรม ฉันจะถามด้วยว่าเขายังคงเขียนซอฟต์แวร์วิทยาศาสตร์ธรรมชาติของเขาอย่างไรและเขาสร้างมันอย่างไร ฉันจะถามว่าเขาจัดการเพื่อให้ได้ทักษะและข้อมูลเกี่ยวกับการพัฒนาซอฟต์แวร์ที่เขาต้องการได้อย่างไร แต่มีอะไรอีกไหมที่ฉันจะถามได้? มีอะไรที่เป็นรูปธรรมมากขึ้นบางที? ฉันควรขอให้เขาอธิบายวิธีการแก้ปัญหาทางคณิตศาสตร์ของเขา?

เพื่อความชัดเจน: ฉันไม่ได้มองหาความรู้ในภาษาหรือสแต็คเทคโนโลยีโดยเฉพาะ เราเป็น. NET shop ในการพัฒนาผลิตภัณฑ์ แต่ฉันต้องการมีทางเลือกฟรีสำหรับโครงการวิจัยของเรา ดังนั้นฉันจึงสนใจในความสามารถในการเรียนรู้สิ่งที่จำเป็นจริง ๆ

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

อัปเดตเพื่อสะท้อนคำตอบที่ให้ไว้จนถึง 2011-12-01

ฉันตอบรับอะไรและทำไม

ขอบคุณสำหรับคำตอบของคุณพวกเขาส่วนใหญ่มีประโยชน์มากฉันจึงโหวตขึ้นมาก! ถึงแม้ว่าคำตอบทอมสไควร์ได้รับการโหวตมากที่สุด, ฉันจะยอมรับคำตอบที่ได้รับจากเจ้าชาย Goulash แน่นอนว่า Tom ถูกต้องตามวัตถุประสงค์ แต่คำตอบของ Prince นั้นมีประโยชน์มากกว่าสำหรับฉันและฉันตรวจสอบคำถามที่พบบ่อยว่านี่เป็นเกณฑ์ในการยอมรับคำตอบ

สิ่งที่ฉันจะถามเขาในระหว่างการสัมภาษณ์

  • ฉันจะให้เขาอธิบายงานมอบหมายง่ายๆเช่นตัวอย่างในThe Camel Has Two Humps ที่ Chris Burt-Brown พูดถึง

  • ฉันจะขอให้เขาอธิบายขั้นตอนการควบคุมขั้นสูงเพิ่มเติมบางอย่างอาจเป็นในรูปแบบกราฟิก

  • ฉันจะตรวจสอบความเข้าใจของการเรียกซ้ำโดยใช้ตัวอย่างคณิตศาสตร์

  • ฉันจะให้เขาอธิบายอัลกอริทึมของตัวเลือกของเขาในภาษาธรรมชาติ

  • ฉันจะให้เขาอธิบายวิธีการแก้ปัญหาทางคณิตศาสตร์ของเขาโดยเฉพาะอย่างยิ่งฉันจะขอแบบจำลองกระบวนการของเขาการใช้เครื่องมือโครงสร้างของรหัสและซอฟต์แวร์โดยทั่วไปเช่นเดียวกับชั้นนามธรรมที่แตกต่างกัน

  • เพื่อตรวจสอบแรงจูงใจของเขาฉันจะขอความหลงใหลในการพัฒนาซอฟต์แวร์ของเขา

  • ฉันจะถามเขาว่าเขารู้หรือไม่ว่าเขาจะต้องเรียนรู้เกี่ยวกับการพัฒนาซอฟต์แวร์ระดับองค์กร โดยเฉพาะอย่างยิ่งฉันต้องการเปลี่ยนการอภิปรายไปในทิศทางของการทำงานเป็นทีมการเขียนโปรแกรมจับคู่ TDD เนื่องจากฉันคาดหวังว่าเขาจะไม่ได้รู้อะไรมากมายเกี่ยวกับเรื่องนี้หลังจากทำงานใน MSc ของเขาเพียงอย่างเดียว

ดูเหมือนว่ามันจะเป็นการสัมภาษณ์ที่ยาวนาน;)

อัพเดทหลังการสัมภาษณ์ 2011-12-09

ขอขอบคุณอีกครั้งสำหรับคำตอบที่ดีของคุณ เขาผ่านการสัมภาษณ์ด้วยสีที่บิน ฉันไม่เคยพอใจกับผู้สมัครมากขึ้น โซลูชัน Mathematica ของเขาดูเหมือนจะมีโครงสร้างค่อนข้างดี เขาสามารถอธิบายได้ว่าเขาใช้ฟังก์ชั่นการเรียงลำดับที่สูงขึ้นได้อย่างไรแม้ว่าเขาจะไม่รู้ว่าสิ่งเหล่านี้ถูกเรียกเช่นนี้ เขาตอบคำถามการเรียกซ้ำตามคณิตศาสตร์ของฉันตลอดจนการมอบหมายอย่างง่ายและควบคุมสิ่งต่าง ๆ จากThe Camel Has Two Humps. เมื่อเขาอธิบายอัลกอริทึมบางอย่างที่ฉันได้เรียนรู้มากมายเกี่ยวกับการปรับแบบไม่เชิงเส้น;) นอกจากนี้เขายังพูดอย่างตรงไปตรงมาว่าแน่นอนเขาไม่สามารถรับประกันได้ว่าเขาจะสามารถเรียนรู้สิ่งต่าง ๆ เกี่ยวกับการพัฒนาซอฟต์แวร์มืออาชีพ แต่เขาเชื่อมั่นว่าเขาเก่งในการเรียนรู้แนวความคิดใหม่ ๆ ด้วยตัวเองและสนใจในการพัฒนาซอฟต์แวร์ เขายังถามถึงเทคโนโลยีสแต็คของโครงการเขาจะถูกนำไปใช้กับคนแรกเพื่อดูที่บ้าน เขาสงสัยเกี่ยวกับการเขียนโปรแกรมคู่และการทำงานเป็นทีมด้วย ตอนนี้ฉันหวังว่าจะมีการสรุปสัญญาจ้างงาน


9
ฉันพบว่ามันยอดเยี่ยมมากที่ บริษัท ยินดีจ้างคนที่ไม่มีความรู้ด้านเทคโนโลยีที่พวกเขาใช้ ฉันหวังว่าฉันจะพบ บริษัท ของคุณก่อนที่ฉันจะทำสิ่งที่ฉันทำเพื่ออาชีพของฉัน!
NoChance

Emmad: นั่นคือสิ่งที่ฉันพยายามอธิบายและตั้งใจด้วย "meta-competence" ผลประโยชน์ของ บริษัท ของฉันอยู่ที่ไหนตอนนี้ฉันจ้างโปรแกรมเมอร์ C # ที่ยอดเยี่ยมซึ่งไม่สามารถ (หรือเต็มใจ) เรียนรู้ Scala / Lift เมื่อจำเป็น? และพูดตามตรง: จริงๆแล้วมันค่อนข้างยากที่จะได้คนดี ๆ ในเยอรมนี โดยเฉพาะอย่างยิ่งเมื่อคุณเป็น SME ที่ไม่ได้อยู่ในเมืองที่ทันสมัยอย่างพวกเรา
สิลาส

2
ขอให้เขาทำวิจัยเล็กน้อยเกี่ยวกับโฟลว์การควบคุมอย่างง่ายและเทคนิคขั้นพื้นฐานอื่น ๆ ในภาษาเฉพาะ จากนั้นเมื่อเขาเข้ามาขอให้เขาแก้ปัญหาโดยใช้สิ่งเหล่านั้น
Darren Young

2
ฉันได้ทำงานร่วมกับนักวิทยาศาสตร์บางคนที่หันมาพัฒนาในตำแหน่งปัจจุบันของฉัน IMHO พวกเขามีแนวโน้มที่จะดีมากในด้านการแก้ปัญหาของการพัฒนาและไม่ค่อยดีนักในการเขียนโค้ดที่รักษาได้ด้วยหลักการ OO ที่ดี หากคุณต้องการให้เขาทำมากกว่าเขียน 'เครื่องมือที่รวดเร็วและสกปรก' คุณอาจต้องมีนักพัฒนาดั้งเดิมที่ทำงานกับเขา
Jordan Bentley

2
ฉันเป็นผู้ชายคนนี้ค่อนข้างมาก ฉันมีภูมิหลังทางฟิสิกส์ / เคมีและฉันได้พัฒนาแบบจำลอง / รหัสจำนวนมากพร้อมกับโครงการด้าน (บางครั้งซับซ้อนและประสบความสำเร็จ) จำนวนมาก การปรับเปลี่ยนหลักที่ฉันต้องทำในสภาพแวดล้อมการพัฒนาแบบมืออาชีพนั้นเกี่ยวข้องกับวิธีการพัฒนาและการทำงานเป็นทีม ตรวจสอบให้แน่ใจว่าเขาเข้าใจสิ่งที่ต้องใช้ในการทำงานร่วมกันกับซอฟต์แวร์ ตรวจสอบให้แน่ใจว่าเขาเข้าใจวิธีการที่พวกคุณใช้ (การรวม TTD / ที่ขัดแย้งกันแบบนั้น) และสิ่งที่ทำงานกับพวกมันหมายถึงผลลัพธ์ของเขา
drxzcl

คำตอบ:


21

ฉัน biassed ที่นี่มากเพราะฉันเริ่มต้นเป็นนักพัฒนาซอฟต์แวร์ไม่กี่ปีที่ผ่านมากับปริญญาเอกในสาขาฟิสิกส์ แต่ประสบการณ์การเขียนโปรแกรมน้อยมาก (เทียบเท่ากับหลักสูตรระดับปริญญาตรีใน Fortran) เห็นได้ชัดว่ามันขึ้นอยู่กับประเภทของซอฟต์แวร์ที่คุณกำลังพัฒนา แต่มุมมองของฉันคือทักษะการเขียนโปรแกรมนั้นง่ายต่อการรับโดยทุกคนที่มีทักษะทางวิทยาศาสตร์ / การแก้ปัญหาครึ่งทางที่ดี ฉันไม่ได้ตั้งใจว่าจะเป็นการดูถูกนักเขียนโปรแกรมตลอดชีวิตที่เรียนวิทยาศาสตร์คอมพิวเตอร์: แน่นอนว่ามีด้านเทคนิคที่ต้องฝึกฝนอย่างจริงจังเพื่อที่จะเป็นผู้เชี่ยวชาญ (เช่นมัลติเธรดและสถาปัตยกรรมระดับต่ำมาก) แต่ฉันคิดว่านั่นเป็น ไม่ใช่ตำแหน่งที่คุณพยายามเติม

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

บรรทัดล่างคือ: ตรวจสอบผู้สมัครสำหรับทักษะที่คุณจ้างเขาไม่ใช่เพื่ออุดมคติที่คุณหวังว่าเขาจะประสบความสำเร็จ


2
การได้ทำงานกับโปรแกรมเมอร์ที่เคยเป็นนักวิทยาศาสตร์ไม่ใช่แค่รายละเอียดระดับต่ำที่พวกเขาไม่รู้ แต่ยังเป็นสิ่งที่อยู่ในระดับสูงมาก แน่นอนว่า YMMV แต่มันเป็นการขาดความลึกโดยทั่วไปนั่นคือปัญหา ไม่ใช่ว่างานทุกงานจะต้อง ...
Donal Fellows

1
@ DonalFellows: ฉันไม่สงสัยเลยว่านักพัฒนาที่มีการฝึกอบรมเฉพาะสามารถขาดความรู้ทั้งในเชิงกว้างและเชิงลึก ขึ้นอยู่กับบทบาทและจำนวนของการฝึกอบรมภายใน บริษัท ที่เสนอ
Prince Goulash

1
@ DonalFellows: เนื่องจาก OP มีความสนใจในการกำหนดความสามารถของผู้สมัครที่จะเรียนรู้ไม่ใช่ความรู้ปัจจุบันของเขา ...

2
@ DonalFellows: อย่างที่ฉันพูดก่อนหน้านี้เนื่องจาก OP มีความสนใจในการกำหนดความสามารถของผู้สมัครในการเรียนรู้ไม่ใช่ความรู้ปัจจุบันของเขา ...

2
@ Mark Bannister: นักวิทยาศาสตร์ที่ดีสามารถเรียนรู้ได้นั่นไม่ใช่คำถามที่มีประโยชน์ที่นี่ คำถามที่มีประโยชน์มากขึ้นก็คือถ้านักวิทยาศาสตร์จะเรียนรู้สิ่งที่เขาหรือเธอต้องรู้ นั่นเป็นปัญหาบุคลิกภาพมากกว่า นักวิทยาศาสตร์รู้หรือไม่ว่าเขาหรือเธอไม่รู้เกี่ยวกับวิศวกรรมซอฟต์แวร์?
David Thornley

37

ฉันจะตรวจสอบได้อย่างไรว่าเขาจะได้รับทักษะการเขียนโปรแกรมที่ต้องการหรือไม่

คุณไม่สามารถ เป็นไปไม่ได้ที่จะทดสอบทักษะที่เขายังไม่มี คุณต้องใช้วิจารณญาณบนพื้นฐานของสติปัญญาและทัศนคติของเขา ในที่สุดมันจะมีความเสี่ยงเสมอ

จากประสบการณ์ส่วนตัวฉันบอกได้เลยว่ามันเป็นไปได้ที่จะเปลี่ยนจากวิทยาศาสตร์มาเป็นโปรแกรม โดยพื้นฐานแล้วทั้งคู่ใช้สมองของคุณในการไขปริศนาที่ซับซ้อน


8
+1 สำหรับ "โดยทั่วไปพวกเขาจะใช้สมองในการไขปริศนาที่ซับซ้อน"
joshin4colours

1
เกิดอะไรขึ้นกับคุณ? จ้างผู้ชายคนนั้นเพราะสวรรค์! จำไว้ว่าโปรแกรมเมอร์เป็นเพียงผู้ประกอบการกลึงที่มีเทคโนโลยีสูง เขากระตือรือร้นฉลาดและรู้จักวิชาเคมีมากมาย หากคุณไม่จ้างเขาในครั้งต่อไปที่คุณไปจ้างใครสักคนหนึ่งปีจากนี้คุณจะเตะตูดของคุณที่คุณไม่ได้
Pete Wilson

1
ไม่ยากที่ผู้สำเร็จการศึกษา CS อาจจะเขียนโปรแกรมมาตั้งแต่อายุ 13 ปีหรือมากกว่านั้น ตามเวลาที่พวกเขาเข้าวิทยาลัยพวกเขาเป็นโปรแกรมเมอร์ระดับกลางโดยส่วนใหญ่ ไม่ได้หมายความว่าพวกเขาไม่ได้เรียนรู้อะไรจากองศาของพวกเขา การเขียนโปรแกรมเป็นเรื่องง่าย ... วิทยาการคอมพิวเตอร์ / วิศวกรรมนุ่มไม่ใช่ นี่ไม่ใช่ว่าพวกเขาจะไม่สามารถมีส่วนร่วมและเป็นสมาชิกที่มีค่า ... แต่นั่นหมายความว่าพวกเขาอาจจะไม่เคยมีพื้นฐาน CS เดียวกัน
user606723

6

ฉันไม่มีแหล่งข้อมูลรองที่ยืนยันกระดาษนี้ดังนั้นฉันจึงไม่สามารถรับรองได้ แต่:

อูฐมีสอง Humps
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

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


3
หลังจากอ่านกระดาษฉันเชื่อว่าจำได้ว่าฉันอ่านเพิ่มเติมเกี่ยวกับการศึกษานี้ในขณะที่ผ่านมา ไม่พบมันอีกครั้ง :( แก้ไข: มันถูกกล่าวถึงใน Coding Horrorขอบคุณสำหรับการเตือน
Silas

คุณเอาชนะฉันไปแล้วฉันกำลังจะตอบด้วยลิงก์ Coding Horror link @Silas ที่เพิ่มเข้ามา
Izkata

5

ฉันจะตรวจสอบว่าเขาจะได้รับทักษะการเขียนโปรแกรมที่ต้องการได้อย่างไร?

มันง่ายมาก ให้ทักษะแก่เขา

ตอนนี้นั่นไม่ใช่คำตอบที่น่าพอใจมาก แต่ให้ฉันทำอย่างละเอียด

ฉันมาเขียนโปรแกรมหลังจากทำงานวิศวกรรมโยธามา 3 ปี นั่นเป็นพื้นหลังที่มั่นคงในวิชาฟิสิกส์และคณิตศาสตร์ประยุกต์ ไม่ใช่คณิตศาสตร์เชิงทฤษฎีที่ระดับ CS จะให้ แต่มันมีค่าบางอย่าง สิ่งที่ฉันวาดจากประสบการณ์ด้านวิศวกรรมเป็นพื้นหลังที่มั่นคงในการแก้ปัญหา ทุกคนที่มีภูมิหลังทางคณิตศาสตร์ได้ชื่นชมแนวคิดของความสง่างามแล้วเมื่อพูดถึงวิธีแก้ปัญหา พวกเขาได้รับการศึกษาเรื่องการปรับสภาพใหม่แล้วเนื่องจากพวกเขาใช้เวลาในการเกาไก่ถึงหกหน้าและแปลงเป็นหลักฐานครึ่งหน้าอันสง่างามสำหรับการส่ง

ใครก็ตามที่เรียนฟิสิกส์ได้พัฒนาวิธีการที่ใช้งานง่ายในการปูด้วยกันด้วยวิธีการแก้ปัญหาจากกรอบพื้นฐาน

และการเขียนโปรแกรมนอกเหนือจากทักษะเหล่านี้คืออะไร? - ภาษาสำนวนรูปแบบและกรอบ ง่ายต่อการสอน มันเป็นปัญหาในการแก้ที่คุณทำไม่ได้ หากคุณสามารถให้คำแนะนำในด้านเหล่านี้ได้คุณจะพบกับนักพัฒนาที่ดี

คำถามจะกลายเป็น "คุณรอให้เขาเร่งความเร็วได้นานแค่ไหน"

TL; DR; คุณสามารถสอนการพิมพ์ คุณไม่สามารถสอนสมาร์ทได้


+1, คำตอบที่ดีมาก ฉันหวังว่าผู้คนจะมีมุมมองที่เปิดกว้างมากขึ้นเกี่ยวกับอาชีพ: การมีระดับคณิตศาสตร์ไม่ได้หมายความว่าคุณไม่สามารถเขียนโปรแกรมเพื่อหาเลี้ยงชีพได้ การเรียนรู้ที่จะเรียนรู้เป็นทักษะที่สำคัญของ IMO
K.Steff

2

ฉันมีวิทยาศาสตรบัณฑิตสาขาวัสดุศาสตร์ แต่ทำงานทุกอย่างในการพัฒนาซอฟต์แวร์

ฉันอยากจะแนะนำว่าผู้สมัครของคุณอาจจะไม่มีปัญหากับการเขียนโปรแกรมและอัลกอริธึมพื้นฐาน แต่เมื่อพูดถึงข้อกำหนดทางวิศวกรรมมากขึ้นเขาอาจต้องการคำแนะนำบางอย่าง โดยที่ฉันหมายถึงการสร้างรหัสของเขาดีไม่มีฟังก์ชั่น 500 บรรทัดการทดสอบอย่างมีประสิทธิภาพการออกแบบเพื่อประสิทธิภาพ ...

ส่วนใหญ่สามารถสอนได้ แต่คุณอาจต้องการออกแบบคำถามบางข้อเพื่อให้เข้าใจ


2

นอกจากนี้เขายังแก้ไขปัญหาทางเคมีกายภาพบางอย่างที่ฉันอาจไม่เข้าใจโดยใช้ซอฟต์แวร์ของเขาเองซึ่งนำไปใช้ใน Mathematica สำหรับวิทยานิพนธ์ปริญญาโทของเขา มันมี GUI และขนาด 8,000 LoC ที่น่าทึ่ง

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

  • ความสามารถหลัก - ผู้สมัครไม่เข้าใจตรรกะของโปรแกรมพื้นฐานการควบคุมการไหลโครงสร้างข้อมูลพื้นฐาน
  • ความสามารถขั้นสูง - ผู้สมัครเข้าใจการเขียนโปรแกรมเชิงวัตถุและการออกแบบโครงสร้างข้อมูลขั้นสูงส่วนต่อประสานคลาสนามธรรมหรือไม่
  • ทักษะการแก้ปัญหา - หากมีปัญหาผู้สมัครแสดงให้เห็นถึงทักษะการแก้ปัญหาที่มั่นคง

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


2

การพูดในฐานะบัณฑิตสาขาวิศวกรรมการบินและอวกาศกลายเป็นโปรแกรมเมอร์มันแน่นอนว่าเป็นไปได้ที่จะกระโดดจากวิทยาศาสตร์ธรรมชาติสู่การเขียนโปรแกรม อย่างไรก็ตามได้รับการเตือนความสามารถในการแก้ปัญหาไม่ได้มีความสัมพันธ์กับความสามารถในการเขียนโค้ดเสมอไป คุณดูเหมือนจะตระหนักถึงสิ่งนี้และนั่นเป็นสิ่งที่ดี

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

ระวังความสามารถในการแก้ปัญหาทางวิทยาศาสตร์ใน Mathematica / MatLab / อะไรก็ตามที่ไม่ได้แปลว่าเขาสามารถเขียนรหัสที่ดีได้ มันหมายถึงว่าเขาสามารถใช้หลักการการเขียนโปรแกรมขั้นพื้นฐาน (บางครั้งพื้นฐานมาก) โดยปกติแล้วถ้า / อื่นงบ การเรียนรู้ที่จะเป็นโปรแกรมเมอร์ที่ดีมักจะให้ทั้งความมุ่งมั่นส่วนตัวและนายจ้างกับใครบางคนในขั้นตอนนี้ คำเตือน:ฉันได้พบกับคนที่ฉลาดมากที่เคยเป็น / เป็นวิศวกรที่ดีที่ไม่สามารถเขียนโปรแกรมออกจากถุงกระดาษและโดยสุจริตไม่สามารถเข้าใจพื้นฐานภาษาขั้นพื้นฐานได้

ประสบการณ์ส่วนตัว

ฉันจบการศึกษาจากโรงเรียนด้วยปริญญาวิศวกรรมและประสบการณ์การเขียนโปรแกรมเล็กน้อยภายใต้เข็มขัดของฉัน ฉันทำงานกับ C จำนวนน้อยมาก, MatLab และ VB + Access บางส่วน ฉันใช้เวลาเรียนประมาณ 3 เดือนในการเรียนรู้ที่จะเป็นประโยชน์อย่างแท้จริงในฐานะโปรแกรมเมอร์ในร้าน VB.NET ฉันใช้เวลาอีก 9 เดือนกว่าจะมีความเชี่ยวชาญอย่างเต็มที่ อย่างไรก็ตามฉันสามารถใช้ความมั่นใจอย่างยุติธรรมในระดับที่บอกว่าทักษะการแก้ปัญหาของฉันดีกว่า 99% ของโปรแกรมเมอร์คนอื่น ๆ ที่ฉันได้พบในงานของฉัน นายจ้างของฉันถือว่าฉันเป็นหนึ่งในทรัพย์สินที่มีค่ามากขึ้นอย่างต่อเนื่อง

ข้อสรุป

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


ขอบคุณสำหรับการตอบกลับของคุณ. มันเป็นการยืนยันความคิดส่วนใหญ่ของฉัน ฉันแค่ต้องการเพิ่มว่าฉันได้พบกับนักวิทยาศาสตร์คอมพิวเตอร์จำนวนมากทำงานเป็นนักพัฒนาและสถาปนิกมานานหลายปีซึ่ง IMO ก็ไม่สามารถเขียนรหัสที่ดีได้เช่นกัน แม้แต่บางคนที่เขียนบทความทางเทคนิคเกี่ยวกับการเขียนโปรแกรม บรรทัดด้านล่าง: beeing progammer ดีเสมอคุณจะต้องอ่านหนังสือจำนวนมากเรียนรู้ภาษาที่แตกต่างกันและอื่น ๆ ... ไม่ว่าสิ่งที่ชนิดของการศึกษาระดับปริญญาคุณเป็นเจ้าของ
สิลาส

1

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


1

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

สุจริตฉันค่อนข้างมั่นใจว่าคุณจะไม่ได้รับข้อมูลนี้จากการสัมภาษณ์หนึ่งหรือสองชั่วโมง ให้การมอบหมายการเขียนโปรแกรมใน C # (บางอย่างไม่เชิงเทคนิคเกินไป) และแก้ปัญหาหนึ่งหรือสองสัปดาห์ นั่นควรจะเป็นเวลาที่เพียงพอในการเรียนรู้พื้นฐานของภาษาสำหรับคนที่ได้เรียนรู้การเขียนโปรแกรมด้วย Mathematica แล้ว จากนั้นทำการตรวจสอบโค้ดกับเขาและตัดสินใจบนฐานนั้น


1

คุณอาจดูวิธีปฏิบัติสำหรับการเขียนโปรแกรมในสภาพแวดล้อมทางวิทยาศาสตร์หรือไม่? (บน Stack Overflow) เพื่อรับทราบว่าวัฒนธรรมการเขียนโปรแกรมของวิทยาศาสตร์ธรรมชาติมีลักษณะอย่างไร ด้วยวิธีนี้คุณอยู่ในฐานะที่จะเปรียบเทียบการเตรียมการของเขากับเพื่อนร่วมงานของเขา

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

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


0

แผนกอื่นที่ฉันทำงานใช้การทดสอบมาตรฐานของเรา งานแรกคือการย้อนกลับคำในสตริงในสถานที่ จากนั้นใช้รหัสนั้นเพื่อกลับลำดับของคำในสตริงยังคงอยู่ แทนที่จะใช้ภาษาโปรแกรมพวกเขามีผู้สมัครออกแบบอัลกอริทึมบนกระดาษและเรียกใช้พวกเขาโดยใช้บอร์ด Scrabble


0

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


0

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

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

ถามสิ่งที่พวกเขาใช้สำหรับการควบคุมเวอร์ชัน (git / hg / svn / cvs / bzr ฯลฯ ) พวกเขาเคยสร้างรหัสหรือใช้โปรแกรมดีบั๊กหรือไม่และถ้าเป็นอย่างนั้นหรือกลยุทธ์การดีบั๊กแบบใด

หากพวกเขาล้มเหลวในการทดสอบนี้และคุณต้องการรหัสที่ดีจากการเดินทางให้ข้ามคนนี้ มิฉะนั้นจ้างพวกเขาแนะนำพวกเขาอ่านหนังสือวิศวกรรมซอฟต์แวร์บางอย่าง (เช่น Code Complete) นอกเหนือจากการเขียนโปรแกรมทั่วไป / หนังสือ CS

(สำหรับบันทึกฉันยังเป็นนักวิทยาศาสตร์ทางกายภาพหันโปรแกรมเมอร์)


-3

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


8
-1 คำถามคือเกี่ยวกับวิธีการสัมภาษณ์เขาไม่ใช่วิธีที่จะทำให้เขาหยุดต้องการตำแหน่ง
Peter Taylor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.