ประสิทธิผลของ FizzBuzz และ Beyond [ปิด]


38

ในขั้นตอนการสัมภาษณ์เราขอให้ผู้สมัครทำ 'FizzBuzz' ทุกวันนี้เปอร์เซ็นต์ของผู้สมัครที่สามารถตอบได้อย่างถูกต้อง FizzBuzz เพิ่มขึ้นอย่างมาก - นี่อาจเป็นเพราะความนิยมบนเว็บ

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

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

สิ่งที่เราพบคือผู้สมัครกว่า 65% (ขนาดตัวอย่าง 38) ที่ผ่าน FizzBuzz ล้มเหลวอย่างสมบูรณ์ FizzBuzz v2.0 โดยปกติผู้สมัครเหล่านี้จะถูกตรวจพบในภายหลังในกระบวนการ แต่ดูเหมือนจะเป็นวิธีที่ดีในการตรวจสอบ พวกเขาในช่วงต้น

คำถามของฉันไม่เกี่ยวกับว่า FizzBuzz ล้าสมัยหรือไม่ แต่เป็นปัจจัยที่ทำให้ผู้สมัครจำนวนมากล้มเหลวในการตอบคำถาม FizzBuzz v2

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

คำถาม:

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

  1. พิมพ์เฉพาะ Fizz หากสตริงมีตัวอักษร A
  2. พิมพ์ Buzz เท่านั้นหากสตริงมีตัวอักษร B
  3. พิมพ์ BuzzBuzz เท่านั้นหากสตริงมีทั้ง A และ B
  4. พิมพ์เฉพาะ FizzFizz หากสตริงไม่มีทั้ง A และ B
  5. พิมพ์ FizzBuzz เท่านั้นหากสตริงมีเพียงหนึ่ง A และเพียงหนึ่ง B

คำถามทั่วไปที่ผู้สมัครถามคือ:

  • มันควรจะเป็นกรณีที่สำคัญ?
  • "ประกอบด้วย A และ B" หมายความว่า A ควรมาก่อน B หรือไม่
  • สิ่งที่ควรพิมพ์หากไม่ตรงกับคะแนน
  • จะเกิดอะไรขึ้นหากเงื่อนไขมากกว่าหนึ่งข้อสามารถพบได้

เราพบว่าผู้สมัครส่วนใหญ่ที่ประสบความสำเร็จในการตอบคำถามไม่ได้ถามอะไรเลยที่พวกเขาทำมันเหมือนกับว่าพวกเขาทำ FizzBuzz


26
ปล่อยให้คำถามเล็กน้อยคลุมเครือ ด้วยวิธีนี้คุณจะเห็นว่าลูกค้ารายใดมีโอกาสเพียงพอที่จะขอคำชี้แจง
Thomas Eding

17
คำตอบที่ถูกต้องสำหรับนักพัฒนาที่คาดหวังจะบอก BA เพื่อ 'แก้ไขความต้องการอันยิ่งใหญ่เหล่านี้'
Kirk Broadhurst

7
การปรับแต่ง FizzBuzz เป็นความคิดที่ดีในการกรองผู้สมัครที่ googled โซลูชัน ไม่จำเป็นแม้แต่จะทำให้ยากขึ้น ที่จริงแล้วฉันสงสัยว่า FizzBuzz ดั้งเดิมควรจะใช้คำต่อคำโดยทุก บริษัท ในโลก มันเป็นเพียงความเกียจคร้านในส่วนของ บริษัท ที่จะไม่ปรับแต่งมัน พวกเขาตระหนักถึงปัญหาแล้ว (ผู้สมัครตั้งโปรแกรมที่มีทักษะการเขียนโปรแกรมไม่เป็นศูนย์) และยังไม่สามารถทำการทดสอบที่ผู้สมัครดังกล่าว - มีทักษะการใช้ google ที่ดี - ไม่สามารถผ่านได้? WTF?
Viliam Búr

13
@ GradeinarPfeffernüsseผู้สมัครที่ไม่ถามคำถามจะสามารถทำแบบทดสอบนี้ได้สำเร็จอย่างไร เป็นไปไม่ได้เพราะข้อกำหนดนั้นขัดแย้งกัน แบบฝึกหัดนี้ก็ไม่สามารถทำได้!
Andres F.

6
@MSalters คุณไม่สามารถถือว่า lex specialis เป็นสิ่งที่ผู้แต่งต้องการเพราะมันไม่ใช่ข้อสมมติฐานที่สมเหตุสมผลในโลกแห่งความเป็นจริง ดังนั้นแบบฝึกหัดนี้ไม่สามารถดำเนินการให้เสร็จสิ้นได้โดยไม่ต้องถามคำถามเกี่ยวกับความขัดแย้ง บางคนทำแบบทดสอบโดยไม่ถามคำถามก็ผิด
Andres F.

คำตอบ:


31

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

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

ส่วนของการทดสอบที่นี่คือลำดับความสำคัญของกฎ คุณไม่ได้ระบุ อินพุต "ABC" สามารถพิมพ์ Fizz, Buzz, BuzzBuzz หรือ FizzBuzz - หนึ่งในนั้นถูกต้อง

ผู้สมัครที่ฉันจะรับคือผู้ที่ได้รับมัน (ส่วนใหญ่) ถูกต้อง แต่ถามคำถามมากมายและในอุดมคติแล้วมีการ "หลบ" บนกระดานไวท์บอร์ด

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

เช่นเดียวกับ FIZZBUZZ ผลลัพธ์ของการทดสอบนี้ดีพอ ๆ กับการสังเกตของคุณเกี่ยวกับวิธีการรับผลลัพธ์ - ผลลัพธ์นั้นไม่เกี่ยวข้อง

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


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

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

7
พวกคุณทุกคนที่พบว่าการทดสอบเหล่านี้ไร้ประโยชน์กำลังพยายามทำมากเกินไปกับพวกเขา ... FizzBuzz และเพื่อนของมันมีอยู่เพียงเพื่อจุดประสงค์เดียว: เพื่อกำจัด 90% ของผู้สมัครที่ไม่รู้วิธีการโปรแกรมเลย
Robert Harvey

@RobertHarvey: ยกเว้นว่ามีคนที่สามารถตั้งโปรแกรมได้ แต่ ณ จุดหนึ่งจะมีปัญหากับ FizzBuzz ด้วยเหตุผลหลายประการ (ตัวเองเป็นหนึ่งในนั้น)
James P. Wright

3
@ JamesP การปฏิเสธเชิงลบที่ผิดเป็นปัญหาสำหรับผู้ให้สัมภาษณ์ไม่ใช่ผู้สัมภาษณ์ ตราบใดที่จำนวนของผลบวกปลอมนั้นต่ำพอที่การทดสอบเช่น FizzBuzz จะมีประโยชน์สำหรับผู้สัมภาษณ์
jk

27

คำว่า "เท่านั้น" ในความต้องการของคุณสร้างความขัดแย้งในทุกคำถาม

ดังนั้นคำถามของคุณจะรวบรวมความต้องการในการทดสอบภายใต้แรงกดดันคุณแน่ใจหรือไม่ว่าต้องการทดสอบทักษะที่รวมกัน

หากคุณต้องการทดสอบการรวบรวมความต้องการฉันขอแนะนำให้ทำหนึ่งในคำถามที่ไม่ชัดเจน หากคุณต้องการเปลี่ยน FizzBuzz ให้ลบความกำกวมออก

การจัดลำดับความสำคัญของกฎเกณฑ์ทางธุรกิจสามารถทำได้ด้วยความรู้เฉพาะของโดเมนเท่านั้นยกเว้นว่าคุณจะมีบริบทที่เรียบง่ายสำหรับสิ่งที่คุณกำลังทำ

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


6
คุณต้องการจ้างคนที่ไม่ได้ชี้แจงข้อกำหนดที่ไม่ชัดเจนเพราะเขา / เธอกลัวที่จะรบกวนใครบางคนโดยการถามคำถาม?
Hans-Peter Störr

2
@hstoerr อาจจะไม่ใช่ แต่การสัมภาษณ์เป็นสถานการณ์ที่กดดันอย่างมีเหตุผล
A. Gilfrin

3
@hstoerr: ปัญหาคือไม่มีคำตอบที่ถูกต้อง แต่มีคำตอบที่ผิดอย่างแน่นอน - ไม่ว่าผู้สัมภาษณ์จะไม่ชอบอะไร คุณต้องการให้ผู้ให้สัมภาษณ์ถามคำถามอีกคนหนึ่งอาจต้องการให้พวกเขาใช้วิจารณญาณและอีกคนอาจไม่เห็นความคลุมเครือใด ๆ เลยและมองถามคำถามว่าไม่สามารถเข้าใจคำแนะนำง่าย ๆ ได้ ลองพิจารณาจาก POV ของใครบางคนที่ได้รับการบอกกล่าวว่าคำตอบนั้นเป็นคำตอบของ "คนส่วนใหญ่" ที่ไม่ได้ถามคำถาม แต่ก็ตอบด้วยวิธีเดียวกัน จากนั้นคุณมีคนที่ได้รับมันคนที่ได้รับมันด้วยความช่วยเหลือและคนที่ไม่ได้รับ
jmoreno

16

เราพบว่าผู้สมัครส่วนใหญ่ที่ประสบความสำเร็จในการตอบคำถามไม่ได้ถามอะไรเลยที่พวกเขาทำมันเหมือนกับว่าพวกเขาทำ FizzBuzz

ด้วยความคลุมเครือของข้อกำหนดเราไม่สามารถทำ v2.0 ให้เสร็จได้อย่างถูกต้องโดยไม่ต้องถามคำถาม


2
+1 …ตามที่ระบุไว้ข้อกำหนดนั้นขัดแย้งกันดังนั้นอย่างน้อยที่สุดก็ต้องระบุ tie-break บางอย่าง
Konrad Rudolph

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

4
@Codism น่าเสียดายที่สัญชาตญาณของคุณในฐานะโปรแกรมเมอร์อาจเป็นสิ่งที่ตรงกันข้ามกับสิ่งที่ผู้ใช้ต้องการ
Stefan

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

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

4

หากคุณต้องการลบความกำกวมใด ๆ คุณสามารถเปลี่ยนข้อกำหนดเป็น:

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

  1. พิมพ์ "Fizz" หากสตริงมีอักขระ '$' และไม่มี '?'
  2. พิมพ์ "Buzz" หากสตริงมีอักขระ '?' และไม่มี '$'
  3. พิมพ์ "FizzBuzz" หากสตริงมีหนึ่ง '$' และ 'หนึ่ง' อย่างแน่นอน
  4. พิมพ์ "BuzzBuzz" หากสตริงมีหนึ่ง '$' และมากกว่าหนึ่ง '?'
  5. พิมพ์ "BuzzBuzz" ถ้าสตริงมีหนึ่ง '?' และมากกว่าหนึ่ง '$'
  6. พิมพ์ "FizzFizz" หากสตริงไม่มี '$' และไม่มี '?'

3

คำถามคลุมเครือเกินไปหรือไม่

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

ความเครียดของสภาพแวดล้อมการสัมภาษณ์ลดลงความสามารถในการคิดอย่างมีวิจารณญาณจนถึงจุดที่ไม่สามารถทำงานที่ไม่สำคัญเช่นนี้ได้หรือไม่?

เป็นไปได้มากว่าเป็นข้อบ่งชี้ของผู้สมัคร "ยัดเยียด" FizzBuzz: ความเครียดหรือไม่โปรแกรมนั้นง่ายมาก

ฉันคิดว่า FizzBuzz ที่ปรับเปลี่ยนนั้นไม่สามารถเทียบได้กับของเดิมเพราะโซลูชันที่เหมาะสมที่สุดนั้นแตกต่างกัน: แม้ว่าโซ่ของชิ้นส่วนif-then-elseยังคงเป็นที่ยอมรับ แต่ฉันคิดว่าโซลูชันบนโต๊ะนั้นเหมาะสมกว่าสำหรับปัญหานี้:

static string[,] FB = new string[3,3] {
    {"FizzFizz", "Buzz", "Buzz"}
,   {"Fizz", "FizzBuzz", "BuzzBuzz"}
,   {"Fizz", "BuzzBuzz", "BuzzBuzz"}
};
static string FizzBuzz(string str) {
    return FB[
        Math.Min(str.Count(c => c == 'a'), 2)
    ,   Math.Min(str.Count(c => c == 'b'), 2)
    ];
}

ขนาดของปัญหาพื้นที่3x3ไม่ใช่2x2ดังนั้นมันแมปไปยังตารางได้อย่างง่ายดายกว่า FizzBuzz ดั้งเดิม ที่จริงแล้วฉันพบวิธีแก้ปัญหาแบบตารางสำหรับปัญหา FizzBuzz ดั้งเดิมที่เข้าใจยาก

private static string[] FB = new[] {"{0}", "Fizz", "Buzz", "BizzBuzz"};
public static void Main() {
    for (var i = 1 ; i <= 100 ; i++) {
        Console.WriteLine(FB[(i%5==0?2:0)+(i%3==0?1:0)], i);
    }
}

2

สองสิ่งที่นี่:

  1. ใช่ฉันคิดว่าคนส่วนใหญ่เพียงแค่เดือดเป็นฟองเดือดแล้วก็สะดุดเมื่อพวกเขาพยายามที่จะขยาย
  2. ลองดู: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html มันอธิบายได้ดีว่าคุณจะแก้ปัญหาเรื่องฟองโดยใช้ abstractions ที่เหมาะสมได้อย่างไร

ยกเว้นว่าเขาไม่เคยไปถึงระดับที่เหมาะสมของสิ่งที่เป็นนามธรรม เขาเข้ามาใกล้กับพระ แต่ฉันคิดว่ามันซับซ้อนเกินไป รายการคีย์ / ค่าอย่างง่ายที่มีเงื่อนไขตรงไปตรงมาในตอนท้ายนั้นง่ายพอที่จะทำในภาษาใดก็ได้ที่ซับซ้อนกว่า BrainFuck
jmoreno

2

เราพบว่าผู้สมัครส่วนใหญ่ที่ประสบความสำเร็จในการตอบคำถามไม่ได้ถามอะไรเลยที่พวกเขาทำมันเหมือนกับว่าพวกเขาทำ FizzBuzz

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

ฉันอ่าน fizzbuzz v2.0 นี้แล้วฉันจะถามเกี่ยวกับข้อกำหนด # 3 และ # 5 ที่นั่น ฉันไม่รู้เกี่ยวกับคนอื่น แต่ฉันพบในด้านวิศวกรรมฉันไม่ต้องการความคลุมเครือใด ๆ ดังนั้นฉันจึงถามคำถาม เพราะต่อมาลงบรรทัด (รหัสและทั้งหมด) ฉันไม่ต้องการที่จะหาฉันต้องทำให้สมมติฐานและมันผิด


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

2

บางทีวิธีที่ง่ายที่สุดในการหลีกเลี่ยงความคลุมเครือคือการแสดงตัวอย่าง:

"A" ส่งคืน "Fizz" "aAbA" ส่งคืน "Fizz" "B" ส่งคืน "Buzz" "aBbB" ส่งคืน "Buzz" "AB" ส่งคืน "FizzBuzz" "ABaabb" ส่งกลับ "BuzzBuzz" "" ส่งกลับ "FizzFizz" "ab "ส่งคืน" FizzFizz "


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

2

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

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

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

และอย่าคิดว่าทุกคนต้องการใช้ไวท์บอร์ดหรือเขียนด้วยลายมือได้อย่างสบาย ๆ พวกเราบางคนพิมพ์ตั้งแต่เราอายุ 12 (ขอบคุณ Space Quest มาก) ฉันไม่สามารถแม้แต่จะคิดในใจด้วยปากกาหรือปากกามาร์คเกอร์ 20-freaking-13 มันมีกระดานไวท์บอร์ดอยู่แล้ว? เมื่อผู้คนยื่นปากกาและกระดาษมาให้ฉันและขอให้ฉันทำแบบทดสอบรหัสมันยากที่จะระงับเสียงหัวเราะ


1

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

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

BTW: ฉันคิดว่ามันแปลกที่คุณกำลังพูดถึง "ทางออกที่ถูกต้อง" หากคุณตอบคำถามเช่นนั้นการพิมพ์ "Fizz", "Buzz", "BuzzBuzz" หรือ "FizzBuzz" อย่างถูกกฎหมายถ้าคุณได้รับ "AB" ดังนั้น IMHO ที่ทางออกใด ๆ ที่ไม่มีคำถามที่ถามคือผิดธรรมดา

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