มาตรฐานอะไรที่สามารถคาดหวังได้จากวิศวกรระดับบัณฑิตศึกษา / ผู้อยู่ใต้บังคับบัญชา? [ปิด]


38

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

บริบท:

ขณะนี้เรากำลังสรรหาตำแหน่งผู้พัฒนารุ่นใหม่ซึ่งทำงานใน C บน Linux เป็นหลัก

เป็นส่วนหนึ่งของกระบวนการเราต้องการผู้สมัครเพื่อทำการทดสอบรหัสให้สมบูรณ์ในช่วงเวลาว่างใน C

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

[แก้ไข]:

  • เราขอรหัสตรวจสอบข้อผิดพลาดรหัสคุณภาพการผลิตอย่างชัดเจน
  • เราจัดทำกรอบการทดสอบและสร้างสำหรับผู้สมัคร

[Update]:

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

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

อย่างไรก็ตามเราได้กำหนดมาตรการบางอย่างเพื่อให้กระบวนการสรรหามีประสิทธิผลมากขึ้นสำหรับเราและผู้สมัคร

โดยเฉพาะอย่างยิ่ง:

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

[อัพเดต 2015-07-09]: Andy Davis จาก Nujob ได้เขียนบทความที่น่าสนใจและเกี่ยวข้องในการใช้การทดสอบโค้ดจากมุมมองของผู้สมัครและบทความนั้นคุ้มค่าที่จะดู พบว่ามันนี่


29
อาจจะ...? พิจารณาว่าดูเหมือนว่าผู้คนจำนวนมากในโรงเรียนตอนนี้มีประสบการณ์ใน Java มากกว่าใน C หากผู้สมัครสดจากโรงเรียนและ 2/3 ของการเปิดรับการเข้ารหัสของพวกเขาคือ Java, C ของพวกเขาอาจไม่แข็งแรงพอที่จะผ่านคุณ ทดสอบ. แต่ถ้าพวกเขาเปิดเผยและเต็มใจที่จะเรียนรู้คุณจะพูดอะไร ท้ายที่สุดนี่คือตำแหน่งจูเนียร์ ...
FrustratedWithFormsDesigner

4
มันเป็นรหัสที่เขียนในการสัมภาษณ์บางทีอาจจะมีข้อ จำกัด ด้านเวลา อย่างน้อยฉันต้องแน่ใจว่าจะพูดถึงพวกเขาว่ารหัสของพวกเขาต้องไม่ประสบจากบัฟเฟอร์ล้น
Mansfield

4
ฉันสอง @FrustratedWithFormsDesigner ฉันเป็นนักพัฒนารุ่นเยาว์และครั้งเดียวที่ฉันต้องจัดการกับ C คืองานที่ได้รับมอบหมายในคลาสบนสถาปัตยกรรม CPU ในขณะเดียวกันฉันคิดว่าตัวเองค่อนข้างโอเคที่ C #, Java และ Ruby
Kevin - Reinstate Monica

4
กรอบการทดสอบรวมถึงการทดสอบที่ทำให้บัฟเฟอร์ล้นหรือไม่
FrustratedWithFormsDesigner

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

คำตอบ:


109

ฉันไม่คิดว่าคุณจะตั้งค่าบาร์สูงเกินไปฉันคิดว่าคุณอาจต้องการบาร์อื่น

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

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


1
+1 นั้นจริงและเป็นคำแนะนำที่ดี ในความเป็นจริงเราได้ขอให้ผู้สมัครตรวจสอบรหัสของพวกเขาเพื่อหาข้อผิดพลาดทำให้พวกเขามีเวลาเหลือเฟือที่จะทำเช่นนั้น แต่พวกเขากลับมาพร้อมกับการแก้ไขที่ผิดประเภทในบางกรณีทำให้รหัสแย่ลงโดยไม่แก้ไขข้อผิดพลาด ในที่แรก.
ราคา

15
@ ราคาค่อนข้างสาธิตที่แข็งแกร่งที่พวกเขาอยู่ในความเป็นจริงนักพัฒนาจูเนียร์ การหลีกเลี่ยงความผิดพลาดที่เห็นได้ชัดนั้นมาพร้อมกับการฝึกฝนและประสบการณ์
Tombatron

34
@ ราคา: เขาพูดเพื่อหารือเกี่ยวกับข้อผิดพลาดเฉพาะกับพวกเขา; อย่าพูดว่ามีข้อผิดพลาดและขอให้พวกเขากลับไปหาคุณ หารือเกี่ยวกับข้อผิดพลาดแบบเรียลไทม์ - ให้คำแนะนำ (หมายเลขบรรทัดหรือคำอธิบายและฟังก์ชันและขอให้พวกเขาให้หมายเลขบรรทัด) จากนั้นถามว่าจะป้องกันได้อย่างไร เป้าหมายไม่ใช่รหัสทดสอบที่ปราศจากข้อผิดพลาด แต่เป็นความเข้าใจที่ดีเกี่ยวกับจุดแข็งและจุดอ่อนของผู้สมัคร
jmoreno

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

67

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

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

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


1
ฉันยังคงเป็น 'วิศวกรซอฟต์แวร์จูเนียร์' อย่างเป็นทางการด้วยประสบการณ์ 2 ปีทั้งหมด! พื้นหลังของฉันไม่ได้อยู่ใน CS หรือ SW Engineering (อยู่ในสาขาฟิสิกส์) ฉันจะไม่เต็มใจส่งโค้ดที่ segfaults บนอินพุตใด ๆ ตอนนี้หรือเมื่อฉันถูกคัดเลือก
ราคา

31
การแก้ไขคุณจะไม่จงใจส่งรหัสที่ segfaults ในการป้อนข้อมูลใด ๆ หากคุณเพิ่งอ้างว่าคุณไม่เคยเขียนข้อบกพร่องกว่าเสียใจที่รบกวนคุณ John Carmack
จิมมี่ฮอฟฟา

Harg! backpedal! นั่นไม่ใช่ข้อเรียกร้องที่ฉันทำ ฉันปล่อยโค้ดบั๊กกี้บางอันแย่กว่ารหัสอื่น ๆ แต่ไม่มีใครที่ดูเหมือนตัวอย่างแรกของสิ่งที่ไม่ควรทำเมื่อคุณ google สำหรับ "buffer overflow"
ราคา

เรายังจัดทำกรอบการทดสอบสำหรับโค้ดรวมถึงการทดสอบที่เรียกใช้การโอเวอร์โฟลว์!
ราคา

@ ราคาเมื่อคุณพูดว่าคุณให้กรอบการทดสอบคุณได้เตรียมเครื่องมือเช่น valgrind เพื่อทดสอบปัญหาหน่วยความจำหรือไม่?
BЈовић

15

ฉันเห็นปัญหาเล็กน้อยที่นี่

ข้อแรกคือสมมติว่าบัณฑิตวิทยาศาสตร์คอมพิวเตอร์โดยเฉลี่ยรู้ดีอะไร พวกเขาทำไม่ได้ ค่อนข้างตรงไปตรงฉันประหลาดใจเมื่อฉันเห็นจบการศึกษาด้านวิทยาศาสตร์คอมพิวเตอร์ที่รู้วิธีการติดตั้งและการติดตั้งVisual Studio Heck ฉันเพิ่งทำงานกับคนที่อ้างว่ามีประสบการณ์มากกว่าห้าปีในการเขียนรหัสNETของ Microsoft ที่ไม่สามารถรู้ได้ว่าTFSคืออะไรหรือเชื่อมต่ออย่างไร

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

สิ่งที่เราวัดได้คือประมาณ 70% ของผู้ที่ได้รับการทดสอบไม่เคยกลับมาหาเรา ประมาณ 15% ของสิ่งที่ไม่ได้รวบรวมโดยทั่วไปเกิดจากข้อผิดพลาดทางไวยากรณ์ที่โจ่งแจ้ง (ตัวอย่างเช่นขาดหายไป;) คอมไพล์อีก 10% แต่ไม่สามารถทำการกระทำที่ต้องการได้

ทำให้เหลือ 5% ณ จุดนี้เราไม่ได้พิจารณาถึงเงื่อนไขเช่นการป้อนอักขระอัลฟาเป็นอินพุตเมื่อต้องการตัวเลข มันเป็นเพียงการให้ชุด X ที่มี จำกัด อย่างมากเนื่องจากอินพุตนั้นแอ็พพลิเคชันทำเอาต์พุตที่เหมาะสม นอกจากนี้ตัวเลขเหล่านี้มาจากผู้สมัครประมาณ 500 คนในช่วงสี่ปีที่ผ่านมา: เราเก็บสถิติไว้เพราะเราต้องการทราบ

หากเราต้องพิจารณาโครงสร้างของรหัสและเทคนิคการเขียนโค้ดเชิงป้องกันเช่นการกำจัดทรัพยากรที่ไม่มีการจัดการหรือการใช้try .. catchคำสั่งอย่างเหมาะสมแล้วแทบจะไม่มีใครผ่านไปได้

แน่นอนคำถามคือทำไม?

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

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

ดังนั้นสิ่งที่เราจะทำ?

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


2
เห็นด้วยทั้งหมดที่นี่ฉันได้เรียนรู้เพิ่มเติมใน 2 1/2 ปีในอุตสาหกรรมของฉันแล้วฉันเคยเรียนในวิทยาลัย ฉันเรียนรู้สิ่งนี้อย่างเจ็บปวดหลังจากที่ฉันได้ฝึกงานครั้งแรกในฐานะนักพัฒนาเว็บในขณะที่ยังเรียนหนังสืออยู่
Ryan

5
ตอนนี้ฉันต้องการลองทดสอบการเขียนโปรแกรมของคุณ ..
Akash

1
จริงๆ? ประสบการณ์การติดตั้งซอฟต์แวร์เฉพาะและความสามารถในการให้สิ่งที่เว็บเซิร์ฟเวอร์ทำในสิ่งที่คุณกำลังมองหา หากใครบางคนสามารถจัดการกับการเขียนระบบปฏิบัติการมือถือพวกเขาสามารถเรียนรู้วิธีการใช้งานเว็บเซิร์ฟเวอร์
Michael Shaw

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

2
@ChrisLively: ฉันไม่เห็นว่าสิ่งเหล่านี้เป็นปัญหาใหญ่ ไม่ใช่ว่าเรามีสนามเล็ก ๆ ที่เคลื่อนที่ช้า การเรียนรู้เกี่ยวกับงานกำลังจะเกิดขึ้น ฉันคิดว่าคุณอาจมีจุดดีที่นี่ แต่ตัวอย่างไม่น่าเชื่อถือ หากมีปัญหากับหลักสูตร CS การเพิ่ม "วิธีการติดตั้ง Visual Studio 101" และ "พื้นฐานของ Webservers 101" จะไม่สามารถแก้ไขได้ (ฉันชอบความคิดของชั้นเรียน "การเขียนโปรแกรมการป้องกัน")
Michael Shaw

5

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

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

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

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

เกี่ยวกับฉัน:

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

4

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

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

ไม่ใช่ความคิดทั่วไปที่นักพัฒนารุ่นน้องที่รู้น้อย แต่เต็มใจและสามารถเรียนรู้และปรับปรุงได้มีค่ามากกว่านักพัฒนารุ่นเยาว์ที่รู้มากกว่า แต่ผู้ที่ไม่สามารถหรือจะไม่พัฒนา

ดังที่กล่าวไว้ในหนึ่งในความคิดเห็นของคุณคุณกล่าวว่าคุณได้ทำการทดสอบที่จะชี้ให้เห็นถึงบัฟเฟอร์ล้นในรหัสของพวกเขาหากพวกเขาได้ใช้พวกเขา ดังนั้นคำถามที่ใหญ่กว่าก็คือทำไมพวกเขาไม่ทำการทดสอบ


3

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

อย่างไรก็ตามในการทดสอบรหัสฟรีฟอร์มประดิษฐ์ฉันจะไม่ชอบการละเมิดอย่าง sprintf เวลาน้อยเกินไป (สันนิษฐานว่า) อย่ามัว แต่คิดมากเกินไปกระตุ้นให้บางสิ่งบางอย่างทำงานได้


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

@JimmyHoffa ใช่เพิ่งอ่านบรรทัดแรกของคุณแก้ไข "Absolute no-go" ของฉันแล้ว ประเด็นของคุณควรค่าแก่การพิจารณา จนถึงตอนนี้ฉันสามารถใช้และประเมินโปรแกรมเมอร์ทุกคน แต่มีหนึ่งคดีเกี่ยวกับวิญญาณและ "คนโกหก" หนึ่งคน
Joop Eggen

@JoopEggen: ฉันค่อนข้างแน่ใจว่า "Psychic" ไม่ใช่คำที่คุณต้องการ มิฉะนั้นพวกเขาควรจะสามารถอ่านใจของคุณ ... ;)
NotMe

2

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

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

  • องค์กรของคุณสามารถดึงดูดผู้ที่สามารถเขียนรหัสการทำงานได้หรือไม่?

  • เป็นกระบวนการการพัฒนาของคุณแข็งแรงพอที่ดังกล่าวว่าคนที่สามารถเกือบจะเขียนโค้ดสามารถเขียนโค้ดการทำงานด้วยความช่วยเหลือของการทบทวนและการทดสอบการสนับสนุน?

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

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