คุณประเมินทักษะการออกแบบเชิงวัตถุอย่างไร [ปิด]


11

ข้อมูลเชิงลึกหรือคำถามประเภทใดที่จะนำคุณไปสู่การกำหนดทักษะ OOAD ของบุคคล


ถามพวกเขาว่าพวกเขาจุดฉันของพวกเขา
งาน

คำตอบ:


10

คุณสามารถแสดงการออกแบบ OO แบบครึ่ง ๆ ของปัญหาง่าย ๆ และหารือเกี่ยวกับสิ่งที่มันทำสิ่งที่ดีและไม่ดีเกี่ยวกับมันไม่ว่ามันจะยืดหยุ่นเพียงพอสิ่งที่ควรปรับปรุงและวิธีการ

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

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


ฉันชอบวิธีการสัมภาษณ์นี้ซึ่งเป็นการสนทนามากกว่าคำถามและคำตอบ
Rohan Monga

5

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

ตัวอย่างที่ดีที่ Steve Yegge พูดถึงในหนึ่งในบล็อกโพสต์ของเขาคือขอให้บุคคลนั้นสร้างโมเดลวัตถุสำหรับ XML


คุณจะให้ฉันเชื่อมโยง :)
Rohan Monga

1
@bronzebeard - ที่นี่คุณไป - sites.google.com/site/steveyegge2/... อันที่จริงเขาพูดเกี่ยวกับการสร้างแบบจำลอง OO HTML - แต่ฉันคิดว่า XML สามารถเป็นรุ่นที่รุนแรงของคำถามที่ :)
talonx

4

การมีความรู้ที่ดีของรูปแบบการออกแบบที่ได้รับความนิยมสูงสุดสามารถพิสูจน์ได้ว่าผู้สมัครได้ค้นหาวิธีแก้ไขปัญหาการออกแบบของเขา

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

การถามเขาตัวอย่างการใช้ประสบการณ์ที่ผ่านมาอาจช่วยได้เช่นกัน


นั่นคือการทดสอบการรู้ว่าการโอเวอร์โหลดทำงานใน C # อย่างไร แต่แทบจะไม่ทดสอบทักษะการออกแบบ OOAD
281377

ของคุณถูกต้องสมบูรณ์ ฉันอ่านคำถามของคุณเร็วเกินไปฉันเปลี่ยนมัน

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

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

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

3

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


2

จะขอให้เขาเขียนวัตถุธุรกิจคลาสและอินเทอร์เฟซ / วิธีการสำหรับห้องหรือเอนทิตีเสมือนอื่น ๆ


2

ถ้าเป็นไปได้ขอรหัสตัวอย่าง

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

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


1

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

แม้ว่าหนังสือรูปแบบการออกแบบหนังสือเล่มนี้เต็มไปด้วยปัญหาของ OOP :-)


ฉันไม่เกี่ยวกับสิ่งนี้ทำให้ตัวอย่างทั้งหมดในหนังสือมีเฉพาะรูปแบบการออกแบบหนึ่งหรืออีกแบบหนึ่ง หากคุณมีความรู้ทางทฤษฎีเพียงพอคุณจะสามารถคิดออกและนั่นไม่ได้สะท้อนการประยุกต์ใช้ในทางปฏิบัติ
Rohan Monga

1

เริ่มจากง่าย ๆ : มีอะไรเกี่ยวกับ OOP บ้าง

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

ทำให้พวกเขามีปัญหา

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

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

เมื่อถึงเวลาที่คุณพูดคุยจบแล้ว

  1. ตัวควบคุม (สิ่งนั้นที่ทำให้เกิดเหตุการณ์การเปลี่ยนแปลงและประเมินการตอบกลับ)
  2. ผู้สังเกตการณ์ (ผู้ตรวจสอบความถูกต้องตอบสนองต่อเหตุการณ์การเปลี่ยนแปลง)
  3. กลยุทธ์ (ตัวตรวจสอบความถูกต้องแต่ละตัวแสดงวิธีที่แตกต่างกันในการพิจารณาว่าอินพุตนั้นถูกต้องหรือไม่)

คุณจะมีความคิดที่ดีถ้าพวกเขาเข้าใจ OOD

ให้พวกเขามีปัญหาเดียวกันอีกครั้ง แต่คราวนี้ขอการออกแบบที่แตกต่าง

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

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


1

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

ใช่คุณสามารถขอให้พวกเขานั่งลงและวาด UML ใช่คุณสามารถถามพวกเขาค้นหาคำถามเกี่ยวกับการใช้งาน OOP เฉพาะเพื่อดูว่าพวกเขาสามารถ

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


†มีความคุ้นเคยอย่างลึกซึ้งและไม่มีการเชื่อมต่อกับการใช้รหัส: ครอบครัวใช้ห้องน้ำในตอนเช้า ทำอาหารเย็น เส้นทางรถบัสไปทำงาน การประกอบรถยนต์


0

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

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


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