มีเหตุผลหรือไม่ที่จะคาดหวังว่านักพัฒนาอาวุโสจะรู้ว่ารูปแบบการออกแบบของ OOP คืออะไร [ปิด]


26

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

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

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

เพิ่ม หลังจากอ่านคำตอบแล้วฉันควรให้คำอธิบายเล็กน้อย:

  • งานนี้สำหรับนักพัฒนา. NET ที่มีประสบการณ์ด้าน OOP / OOD
  • รหัสที่มีอยู่ใช้ชื่อคลาสที่ชอบIParameterGraphVisitorและIStorageFactoryในหลาย ๆ ที่
  • คุณจะถามผู้คนเกี่ยวกับประสบการณ์ในอดีตของพวกเขาด้วยการออกแบบ OO ที่พวกเขาสร้างขึ้นได้อย่างไรหากพวกเขาไม่มีคำศัพท์ที่จะอธิบายการออกแบบของพวกเขา นั่นคือสิ่งที่ฉันต้องการจะทำและสิ่งที่ฉันสามารถทำได้คือ "โปรดคุณวาดลำดับชั้นการออกแบบ / วัตถุของโครงการสุดท้ายของคุณบนไวท์บอร์ด"

27
รูปแบบเป็นสิ่งประดิษฐ์ชั่วคราว นั่นคือพวกเขาปรากฏผ่านการออกแบบที่ดี พวกเขาไม่ได้ "ใช้งาน" มีเหตุผลชื่อคือ "รูปแบบ" และไม่ใช่ "ข้อ จำกัด " หรือ "ข้อกำหนด" ดังนั้นคุณต้องการใครสักคนที่มีประสบการณ์การออกแบบ OO หรือคนที่มีประสบการณ์รูปแบบการออกแบบ? อดีตมีแนวโน้มที่จะรู้มากกว่า buzzwords
Michael K

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

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

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

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

คำตอบ:


67

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

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


2
+1 ฉันใช้โครงสร้างเหล่านี้มาก่อนที่ Gang of Four จะออกมาดังนั้นฉันมักจะมีปัญหาในการจดจำชื่อที่ได้รับ
dietbuddha

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

5
+1 ที่เกิดขึ้นกับฉันตลอดเวลา ก่อนหน้านี้ฉันอ่านบทความ wiki ในหัวข้อ "การพึ่งพาการฉีด" เพื่อดูว่าทำไมมันถึงได้รับความนิยมมากเพียงเพื่อจะพบว่ามันเป็นเทคนิคที่ฉันใช้มานานหลายปี แต่ไม่เคยตั้งชื่อเลย เหมือนกันกับ "state machine"
whatsisname

4
มันเป็นความคาดหวังที่สมเหตุสมผลหรือไม่สำหรับนักพัฒนาอาวุโสที่จะติดตามสิ่งที่เกิดขึ้นในสนาม รูปแบบมีมานานกว่า 15 ปีแล้วดังนั้นคุณแทบจะไม่สามารถเรียกพวกเขาว่า "ใหม่" อีกต่อไป ...
PéterTörök

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

25

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

นักพัฒนาอาวุโสควรมีประสบการณ์ก่อนหน้านี้กับรูปแบบการออกแบบหรือคุณจะบอกว่ารูปแบบการออกแบบนั้นเป็นหัวข้อง่ายๆที่ผู้พัฒนาที่ดีทุกคนสามารถเลือกพวกเขาในระหว่างการฝึกอบรม?

ประสบการณ์ IMO มีความสำคัญมาก ในทางทฤษฎีผู้พัฒนาที่ดีสามารถอ่านตามรูปแบบการออกแบบในหนังสือหรือแม้แต่บน Wikipedia และเข้าใจแนวคิดพื้นฐานใน 15 นาที อย่างไรก็ตามการใช้แนวคิดอย่างถูกต้องจะได้รับประสบการณ์ที่ยาก มันเป็นเรื่องง่ายที่จะหลงรักรูปแบบพยายามยัดมันลงไปในโค้ดทุกชิ้นที่เป็นไปได้ l'art pour l'art นอกจากนี้ยังง่ายต่อการยกเลิกพวกเขาที่พูดว่า "รูปแบบไม่มีกระสุนเงินเพียงแค่ใช้สิ่งที่ง่ายที่สุดซึ่งอาจเป็นไปได้" หาพื้นกลางระหว่างสองสุดขั้วโดยการเรียนรู้เวลาและวิธีการที่จะใช้รูปแบบในการแก้ปัญหาจริงและเมื่อไม่ใช้พวกเขาใช้เวลาหลายปีของประสบการณ์

คุณจะถามคำถามอะไรแทนความสามารถในการออกแบบของพวกเขา

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

  • อะไรคือข้อเสียของรูปแบบการออกแบบ (โดยทั่วไปและอย่างที่พวกเขากล่าวถึงอย่างชัดเจน)
  • เมื่อไม่ใช้พวกเขาและทำไม?

ปรับปรุง

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


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

1
@Aidan จุดดีที่นั่นถึงฉันนี่คือรูปแบบที่ผิด นั่นเป็นอีกวิธีหนึ่งที่ประสบการณ์และการฝึกฝนนั้นขาดไม่ได้เช่นในการแยกแยะความแตกต่างระหว่างรูปแบบเดียวกันกับรูปแบบที่แตกต่างกันสองแบบ
PéterTörök

1
+1 ใครก็ตามที่เรียกตัวเองว่า dev .NET ระดับสูงควรจะสามารถตั้งชื่อรูปแบบที่ชัดเจนอย่างน้อยสองชื่อและใช้งานได้ มันเป็นเรื่องของการสื่อสารและกล่องเครื่องมือถ้าไม่มีอะไรอื่น
techphoria414

ผมเคยอ่าน 3 ครั้งและยังไม่สามารถบอกได้ว่าวรรคแรกคือถ้อยคำหรือไม่
briddums

@briddums อะไรทำให้คุณคิดว่ามันเป็นการเสียดสี?
PéterTörök

10

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


14
เพื่อความยุติธรรม OO เป็นเพียงหนึ่งในวิธีการที่โดดเด่นในช่วงชีวิตของคุณ มีจำนวนของคนที่มีองศาของพวกเขาก่อนที่จะถูก Java เป็นภาษาที่ใช้ในวิทยาลัย มีผู้คนมากมายที่ไม่ได้อยู่ในโลก OO
unholysampler

2
@unholysampler: แน่นอน แต่ฉันคิดว่ามันเป็นตำแหน่ง OOP ที่กำลังพูดถึง
Anto

1
@unholysampler: ฉันหวังว่าฉันจะมีชีวิตอยู่ในเวลานั้น .. ฉันไม่สามารถยืนมองเห็นอะไรเลยนอกจากจาวาที่ uni <_ <
poke

10

ในการสัมภาษณ์คุณควรถามสิ่งที่สำคัญที่ผู้สมัครต้องรู้เพื่อทำงาน

หากพวกเขาต้องรู้ชื่อของรูปแบบที่พวกเขามาจากแก๊งสี่นั้นเป็นข้อกำหนดที่ถูกต้อง

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

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


4

ขึ้นอยู่กับพื้นที่ความเชี่ยวชาญของพวกเขา ฉันไม่คิดว่านักพัฒนา C แบบฝังจะรู้เรื่องลวดลายการออกแบบมาก หากเรากำลังพูดถึงนักพัฒนา Java หรือ. NET พวกเขาควรคุ้นเคยกับรูปแบบการออกแบบและโดยเฉพาะอย่างยิ่งวิธีที่จะไม่นำไปใช้กับพวกเขา


2
+1 สำหรับการไม่ดำเนินไปกับผู้ออกแบบ patters :)
Zaky German

จุดดี. เพิ่มคำอธิบายให้กับคำถาม สำหรับนักพัฒนา. NET ที่มีประสบการณ์โครงการเป็นอย่างน้อยในภาษา OO
nikie

4

สมมติว่าคุณกำลังมองหาผู้อาวุโสใน OOP คำตอบก็คือใช่ รูปแบบการออกแบบเป็นศัพท์ของภาษา OOP

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

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


3

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

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

รูปแบบการออกแบบถูกค้นพบแล้วอธิบายเพื่อให้เรามีภาษากลางที่ใช้สื่อสารการตัดสินใจในการออกแบบ

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


3

เหมาะสม แน่นอน จำเป็น ไม่

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

ใช่นักพัฒนาหลายคนใช้รูปแบบการออกแบบโดยไม่รู้ตัว

นั่นไม่ใช่เหตุผลที่ฉันถามคำถาม

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

พวกเขายังช่วยในกระบวนการ refactoring การดูรหัสหนึ่งอาจทำให้รูปแบบของรูปแบบโรงงานบางรูปแบบ แต่รูปแบบของโรงงาน GoF นั้นทนต่อการทดสอบของเวลา นั่นเป็นสาเหตุที่รูปแบบของโรงงานไม่ใช่ YET ANOTHER fp (การปรับแต่งวงล้อไม่เหมาะกว่า Joel ในซอฟต์แวร์มีข้อเสียมากมายในการทำเช่นนั้น)

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


2

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

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


2

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


1

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


1

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

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

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

เช่นเดียวกับคลาส Peopleware ที่พูดถึงการจ้างนักเล่นปาหี่โดยไม่ขอให้พวกเขาเล่นปาหี่ - เพียงเพราะพวกเขาบอกว่าพวกเขาไม่ได้มีความหมายอะไรมาก .. ลองพวกเขา


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

มันไม่สำคัญเลยว่ามันจะเป็นอะไรมันอาจจะเป็นอะไรที่เรียบง่ายเหมือน "ออกแบบเกมโยนเหรียญให้ฉัน" รอดูว่าพวกเขาทำอะไรกับมัน จากนั้นเพิ่มข้อกำหนดเพื่อสำรวจสิ่งที่คุณสนใจเช่น: คุณจะเปลี่ยนสิ่งนี้อย่างไรเพื่อให้: ทดสอบได้ | พกพา ใช้เป็นบริการ | ใช้งานได้สำหรับ UI ของ | ทำงานบนเว็บ ... ฯลฯ
Stephen Bailey

0

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


0

แน่นอนพวกเขาควรรู้รูปแบบ แต่ไม่จำเป็นต้องเป็น buzzwords

ตัวอย่างเช่น MVC มีทางเลือกที่คล้ายกันมากเช่น PAC, 3 ระดับ ไม่กี่ปีที่ผ่านมาคำศัพท์ยอดนิยมอีกคำสำหรับ MVC คือ "รุ่น 2" จริง ๆ แล้วฉันรู้จักนักพัฒนาที่ดีมากที่รู้จักรูปแบบนั้นอย่างสมบูรณ์แบบ แต่ไม่ทราบว่า buzzword ปัจจุบันสำหรับ MVC นั้นเป็นอย่างไร


0

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

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


0

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

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

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


0

ฉันนึกถึงนักพัฒนาอาวุโสที่ไม่รู้เกี่ยวกับรูปแบบการออกแบบในสถานการณ์ต่อไปนี้:

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

-2

ทำไมนักพัฒนาซอฟต์แวร์ในสภาพแวดล้อมที่ไม่ใช่ OO ควรรู้เกี่ยวกับรูปแบบการออกแบบ OO ฉันทำงานในร้านค้าที่ทำเฉพาะ Cobol, PL / SQL เท่านั้น, Progress 4GL และอื่น ๆ หลักการออกแบบ OO นั้นไม่เกี่ยวข้องฉันคาดหวังว่าผู้อาวุโสในสภาพแวดล้อมเหล่านั้นจะมีความรู้ที่เกี่ยวข้องกับสภาพแวดล้อมเหล่านั้นไม่ใช่การออกแบบ OO รูปแบบ

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


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

unix / linux เขียนด้วย 'C' มันเต็มไปด้วยรูปแบบ OO และอีกมากมายในหนังสือ gof
ctrl-alt-delor

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

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