Tricky logic puzzles - พวกเขามีประโยชน์จริง ๆ ในการประเมินทักษะการเขียนโปรแกรมหรือไม่? [ปิด]


88

ในการสัมภาษณ์ครั้งล่าสุดที่ฉันเข้าร่วมฉันถูกขอให้ไขปริศนาที่ฉันคาดว่าจะวัดปริมาณน้ำ blah ลิตรอย่างแม่นยำโดยให้ถังสองถังที่มีความจุ - blah และ blah ลิตรตามลำดับ ฉันไม่สามารถไขปริศนาได้ในเวลาที่กำหนด (~ 5 นาที)

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

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


20
ดูเหมือนตัวต่อปริศนา Die Hard 3 jug youtube.com/watch?v=lZ64IR2bz5o
JF Dion

64
ปัญหาใหญ่อย่างหนึ่งของคำถามดังกล่าวคือพวกเขามักจะวัดว่าผู้สมัครเคยเห็นปัญหานั้นมาก่อนหรือไม่และ "เคยเห็นปริศนาตรรกะมากมาย" ไม่ใช่เงื่อนไขการจ้างงานที่ดีจริง ๆ
David Thornley

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

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

10
ฉันจะถามสิ่งนี้ระหว่างการสัมภาษณ์ด้วยความหวังว่าจะได้ผู้สมัครที่ถามว่า "สิ่งนี้เกี่ยวกับการเขียนโปรแกรม WTF หรือไม่?" และให้ข้อเสนอก่อนที่จะออกจากที่จอดรถ
JeffO

คำตอบ:


97

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

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

โปรแกรมเมอร์ที่ดีทุกคนควรเป็นนักแก้ปัญหาซูโดกุหรือไม่? ฉันแน่ใจว่ามีมากมาย แต่มันไม่เหมือนสิ่งที่จำเป็นสำหรับความสามารถ

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

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


8
นี่คือมุมมองที่ผู้สัมภาษณ์ทุกคนต้องมี แก้ปัญหาในโดเมนของคุณและข้อสังเกตของคุณเกี่ยวกับความเครียดและคำถามที่ไม่คาดคิดอยู่เสมอ!
Chris

20
+1 สำหรับใน "โลกแห่งความจริง" คุณมีเวลามากกว่าห้านาทีในการหาคำตอบที่ดี!
Ant

7
ยังรักความจริงที่ว่าพวกเขามักจะถูกนำเสนอเช่นถ้าผู้สัมภาษณ์ต้นตอปัญหาและแก้ไขได้ด้วยตัวเอง :)
RyBolt

10
ฉัน lol จะยากที่excuse yourself to go to the restroom and never return!
Florian Margaine

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

56

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

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

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

แก้ไข:

บางครั้งหลังจากเขียนคำตอบนี้ฉันอ่านThe Computer Boys Take Over , ประวัติความเป็นมาของการใช้คอมพิวเตอร์ในยุค 50 และ 1960 เห็นได้ชัดว่าการฝึกถามของเล่นพัฒนาสมองและปริศนาของผู้สมัครสำหรับการเขียนโปรแกรมไปจนถึงปี 1950 สหรัฐฯกำลังพยายามทำระบบป้องกันภัยทางอากาศด้วยคอมพิวเตอร์และ IBM คาดว่าพวกเขาจะต้องการโปรแกรมเมอร์หลายพันคนเพื่อทำงาน คำตอบนั้นน่าตกใจและหวาดกลัว: มี "โปรแกรมเมอร์มืออาชีพ" เพียงไม่กี่คนในโลกนี้ มีการทดลองหลายวิธี: การทดสอบความถนัดทางนามธรรม, การหานักคณิตศาสตร์ในฐานะโปรแกรมเมอร์, การสรรหาผู้เล่นหมากรุกและนักแก้ปริศนาอักษรไขว้และการคัดกรองผู้สมัครที่มีปริศนาและของเล่นพัฒนาสมอง

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


49

พวกเขามีประโยชน์หรือไม่ ไม่ไม่ได้จริงๆ ครั้งหนึ่งพวกเขาเคยพบเห็นบ่อยครั้งที่ Microsoft พวกเขาถึงกับเรียกว่า "คำถามของ Microsoft" และมีหนังสือที่เขียนเกี่ยวกับพวกเขาสิ่งนี้เป็นหนังสือที่อ่านได้ค่อนข้างดีจริงๆ ..

มี 2 ​​ปัญหากับพวกเขา ประการแรกหากผู้สมัครทำการวิจัย (และอ่านหนังสือ) พวกเขาจะรู้จักพวกเขาต่อไปและอย่างที่สองแม้ว่าพวกเขาจะสามารถแก้ปัญหาได้แสดงให้เห็นว่ามันจะเป็น dev / test / PM ที่ดี

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

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


26

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

ประวัติความเป็นมาของคำถามเหล่านี้ในฐานะการฝึกการสัมภาษณ์เริ่มต้นด้วยWilliam Shockleyในปี 1950 พวกเขาเป็นคำถามทั่วไปในการสัมภาษณ์ของ Silicon Valley ที่ผู้สัมภาษณ์ถามเพราะผู้สัมภาษณ์คนอื่นกำลังทำอยู่ (และพวกเขาอาจรู้บางสิ่งที่ผู้สัมภาษณ์คนนี้ไม่รู้) Shockley ตั้งใจให้พวกเขาทดสอบสติปัญญาและคำถามที่เกี่ยวกับถัง 2 อันนั้นเป็นหนึ่งในการทดสอบ IQ Stanford Binetดั้งเดิมในปี 1916

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

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


3
+1 ไม่เห็นด้วยกับย่อหน้าสุดท้าย!
missingfaktor

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

17

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

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

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

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

  1. การตั้งค่าภาษาโปรแกรมภาษาใดของคุณ? ทำไม?
  2. วิธีจัดการกับข้อยกเว้นได้อย่างไร
  3. ประโยชน์ของการออกแบบเลเยอร์เป็นตำนานไม่ใช่หรือ
  4. การบูรณาการอย่างต่อเนื่องเป็นภาระต่อประสิทธิภาพหรือไม่?
  5. ใครก็ตามที่เขียนรหัสควรเป็นเจ้าของมันใช่ไหม
  6. คุณต้องทำอย่างไรเพื่อให้ได้ "ไหล"
  7. รายงานข้อบกพร่องควรรวมอยู่ในแผนโครงการอย่างไร
  8. ...

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

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


คำตอบที่ยอดเยี่ยม Offtopic: คำถามตัวอย่างของคุณ # 3 ทำให้ฉันอยากรู้อยากเห็น ฉันสนใจที่จะทราบความคิดเห็นของคุณเพิ่มเติมเกี่ยวกับการออกแบบเลเยอร์
missingfaktor

2
@missingfaktor # 3 ตามที่ระบุไว้เป็นคำถามเคล็ดลับเพื่อจุดประกายการสนทนาเกี่ยวกับสิ่งที่ทำอย่างรวดเร็วเมื่อเทียบกับสิ่งที่ทำถูกต้อง # 4 และ # 5 เหมือนกัน # 7 น่าจะเป็นที่ยากที่สุดและเหมาะสำหรับบทบาทความเป็นผู้นำเท่านั้น
Apalala

1
@missingfaktor ฉันอีกครั้งให้คำตอบสำหรับคำถามอื่น บทความวิกิพีเดียบทความนี้ลิงก์ที่เกี่ยวข้องและลิงก์ภายนอกให้ข้อมูลมากมายเกี่ยวกับสาเหตุที่การแยกข้อกังวลมีความสำคัญยิ่งต่อการออกแบบและสร้างระบบที่ซับซ้อน: en.wikipedia.org/wiki/Modularity
Apalala

มีเหตุผล. ขอบคุณมาก! :-) อีกครั้งคำตอบที่ยอดเยี่ยม ทำให้ได้คะแนนที่ดีมากมายที่ไม่ได้กล่าวถึงในคำตอบอื่น ๆ ที่นี่
missingfaktor

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

13

พวกเขาสามารถเป็นประโยชน์ในการประเมินทักษะการแก้ปัญหาซึ่งเป็นหนึ่งในประเด็นสำคัญของการเขียนโปรแกรม

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

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


1
ฉันทำสิ่งเดียวกันขณะสัมภาษณ์ผู้คนนับไม่ถ้วน ประเด็นของคำถามคือดูว่าพวกเขาทำงานตรงไปยังวิธีแก้ปัญหาหรือไม่หากพวกเขาได้รับคำตอบที่ถูกต้อง คุณสามารถสังเกตเห็นโปรแกรมเมอร์ที่ดีได้อย่างรวดเร็วเพียงแค่เฝ้าดูกระบวนการนี้
Dave Wise

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

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

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

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

8

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


5

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

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

โดยส่วนตัวฉันไม่แน่ใจว่าฉันต้องการงานกับ บริษัท ที่ยังคิดว่าตรรกะมีความสำคัญมากกว่าทักษะการเขียนโปรแกรมภาคปฏิบัติ

ข้อจำกัดความรับผิดชอบ: ฉันเก่งในด้านตรรกะไขปริศนาและอาจไม่ได้เริ่มต้นทำงานประเภทนี้หากไม่มีเหตุผลนี้


2

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

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


1

การเขียนโปรแกรมไม่ได้เกี่ยวกับการเขียนบรรทัดของรหัส แต่เป็นการแก้ปัญหาสำหรับและจากบุคคลอื่น (ลูกค้าผู้ใช้ ฯลฯ )

มันเกิดขึ้นว่าสำหรับโปรแกรมเมอร์ทางออกที่ใช้รูปแบบของโปรแกรม

ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องมีความสามารถในการแก้ปัญหาและทำไมจึงมีการทดสอบ

ที่ถูกกล่าวว่าฉันไม่แน่ใจว่าการแก้ปริศนาที่ยุ่งยากเป็นวิธีที่ดีที่สุดในการประเมินใครบางคน


1

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

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

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

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

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


โดย palindromes คุณหมายถึงปัญหาที่ยากมากในการค้นหาสตริงย่อย palindrome ที่ยาวที่สุดในสตริงอินพุตในเวลาเชิงเส้นหรือไม่? :-)
b_jonas

1

สองคะแนน:

  1. การเขียนโปรแกรมส่วนใหญ่แตกต่างจากการไขปริศนา มันถูกอธิบายอย่างสมบูรณ์โดย Steve McConnell ที่ "Code Complete":

    อะไร? คุณไม่จำเป็นต้องฉลาดหลักแหลม? ไม่คุณทำไม่ได้ ไม่มีใครฉลาดพอที่จะเขียนโปรแกรมคอมพิวเตอร์ การทำความเข้าใจโปรแกรมเฉลี่ยอย่างสมบูรณ์นั้นต้องการขีดความสามารถที่เกือบจะไร้ขีด จำกัด ในการดูดซับรายละเอียดและความสามารถที่เท่ากันเพื่อให้เข้าใจได้ทั้งหมดในเวลาเดียวกัน วิธีที่คุณมุ่งเน้นความฉลาดของคุณมีความสำคัญมากกว่าความฉลาดที่คุณมี ดังที่กล่าวไว้ในบทที่ 5 ในการบรรยายรางวัลทัวริงปี 1972 Edsger Dijkstra ได้เสนอบทความเรื่อง“ The Humble Programmer” เขาอ้างว่าการเขียนโปรแกรมส่วนใหญ่เป็นความพยายามที่จะชดเชยขนาดกะโหลกที่ จำกัด ของเราอย่างเคร่งครัด คนที่ดีที่สุดในการเขียนโปรแกรมคือคนที่รู้ว่าสมองของพวกเขามีขนาดเล็กแค่ไหน พวกเขานอบน้อม คนที่เลวร้ายที่สุดในการเขียนโปรแกรมคือคนที่ปฏิเสธที่จะยอมรับความจริงที่ว่าสมองของพวกเขาไม่เท่ากับงาน อัตตาของพวกเขาทำให้พวกเขาเป็นโปรแกรมเมอร์ที่ยอดเยี่ยม ยิ่งคุณเรียนรู้ที่จะชดเชยสำหรับสมองขนาดเล็กที่ดีของคุณเป็นโปรแกรมเมอร์คุณจะ ยิ่งคุณถ่อมตัวมากเท่าไหร่คุณก็ยิ่งพัฒนาเร็วขึ้นเท่านั้น

  2. ปริศนาดังกล่าวจะเป็นประโยชน์ในระหว่างการสัมภาษณ์ แต่เฉพาะในกรณีที่ผู้สัมภาษณ์ที่มีลักษณะในกระบวนการที่ไม่ส่งผลให้ตัวเอง

แต่ความนึกคิดปริศนาควรซับซ้อนกว่าและเกี่ยวข้องกับการเขียนโปรแกรม (เช่นโครงการ 2 ชั่วโมงขนาดเล็ก) ในความคิดของฉัน สิ่งที่ผู้สัมภาษณ์เป็นคนและไม่มี "ทักษะการสัมภาษณ์" ที่สมบูรณ์แบบ


คุณช่วยพูดสิ่งที่ผิดกับคำตอบของฉันได้ไหมถ้าคุณโหวต -1 โปรด
klm123

1
+1 เพราะเป็นคำตอบที่ดี ฉันจะอัปเกรดมันเป็นอย่างอื่นเพียงเพื่อยกเลิกการลงคะแนนที่ไม่ได้อธิบาย
missingfaktor

0

มีสองวิธีที่แตกต่างกันในการตรวจสอบปัญหาดังกล่าว:

  1. รู้จักวิธีแก้ไขปัญหาก่อนหน้า ในภาพยนตร์ ... ตายยากด้วยการล้างแค้น ... อธิบายเรื่องนี้ให้ฉันฟัง ... เป็นตัวอย่างของการรู้วิธีแก้ปัญหาสำหรับกรณีที่ blahs เป็น 4,3 และ 5 ตามลำดับ บางคนจะสามารถเคาะความรู้ภายในของพวกเขาเกี่ยวกับวิธีแก้ไขปัญหาในอดีตและปรับเปลี่ยนได้ตามต้องการ นี่คือสิ่งที่ฉันเชื่อว่าผู้สัมภาษณ์คาดหวังซึ่งอาจเป็นหรือไม่เป็นความคิดที่ดี

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

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


0

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

OTOH ฉันคิดว่าปัญหาการเขียนโปรแกรมมีประโยชน์มากกว่า


0

คุณต้องจำไว้ว่าไม่มีทางที่จะรู้ได้อย่างแน่นอนว่าใครบางคนจะเก่งในงาน โดยเฉพาะอย่างยิ่งงาน CS เนื่องจากความท้าทายมากมายที่งานอาจมีในร้านไม่สามารถคาดการณ์ได้

ดังนั้นนายจ้างที่มีศักยภาพจะต้องเดาผลการดำเนินงานในอนาคตของคุณ

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

โปรดจำไว้ว่ามันเป็นเกมที่คาดเดาและความจริงก็คือทุกสิ่งที่เท่าเทียมกันของเราจะจ้างคนที่สามารถแก้ปริศนาเหล่านั้นได้มากกว่าที่ไม่สามารถทำได้

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


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

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

ฉันคิดว่าคุณสามารถเห็นความคล้ายคลึงกันระหว่างปัญหาฝากข้อมูลและพูดการเขียนซอฟต์แวร์เพื่อทำงานให้สำเร็จในขณะที่ใช้ดิสก์ในจำนวนที่น้อยที่สุดหรือการร้องขอ http
8steve8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.