การออกแบบที่น่าเศร้าหรือการตัดสินใจเขียนโปรแกรมที่คุณทำ [ปิด]


57

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

ฉันแน่ใจว่านี่จะเป็นประโยชน์อย่างมากสำหรับโปรแกรมเมอร์คนอื่น ๆ โดยช่วยพวกเขาไม่ให้ตัดสินใจซ้ำ ๆ

ขอบคุณที่แบ่งปันประสบการณ์ของคุณ


19
ใช้เวลากับ SO มากเกินไป !! ;)
Mitch Wheat

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

1
สิ่งนี้อาจถูกทำให้เป็นวิกิชุมชน (มีกล่องเมื่อคุณแก้ไขโพสต์)

3
ฉันหวังว่าจะมีวิธีในการลงคะแนนเพื่อตอบโต้การปิด ลงคะแนนปิดไหม
Kieveli

5
เกิดอะไรขึ้นกับผู้มีสิทธิเลือกตั้งที่ปิดทั้งหมด? ดังนั้นถ้าไม่ใช่ CW ให้ผู้ถามได้รับการลงคะแนนเพื่อถามคำถาม ฉันสนใจหัวข้อนี้อย่างแท้จริง อย่าปล่อยให้ CW เข้าหาคำถามอัตนัยที่ดี Sheesh, SO เต็มไปด้วยผู้โหร "CW นี่"
syaz

คำตอบ:


73

ไม่สนใจYAGNIซ้ำแล้วซ้ำอีก ...


22
จริงสำหรับคนส่วนใหญ่ แต่ก็มีคนที่สามารถใช้ YAGNI ได้น้อยลง ไม่สุดขีดเป็นสถานที่ที่ดีที่สุดที่จะเป็น
คอนโซล 80x24

56

"จะทำในภายหลัง"
"ภายหลัง" ไม่เคยมา


8
ต่อมาไม่เคยมา

มันไม่เคยทำ

มีการกล่าวว่าหากคุณไม่มีเวลาทำตอนนี้อะไรทำให้คุณคิดว่าคุณจะมีเวลาแก้ไขในภายหลัง

4
เราเรียกสิ่งนี้ว่า "การวนซ้ำไม่เคย"
NotMe

10
ไม่มีสิ่งใดถาวรเท่ากับวิธีแก้ปัญหาชั่วคราว
dietbuddha

52

C ++, เพชรรูปมรดกหลายเสมือน คุณได้รับความคิด


19
ฉันต้องสร้างบัญชีใหม่เพื่อ
โหวตมัน

ใช่ ... ประสบการณ์ที่เจ็บปวด ...
35445 Ed Ed

ฉันเพิ่งมีเรื่องย้อนหลังที่น่าเกลียด
Neil N

1
@Jay จริง ๆ แล้วมันดูเหมือนความคิดที่ดีในเวลานั้น

6
ฉันไม่รู้ว่าหมายถึงอะไร แต่ฟังดูเจ็บปวด +1
The Disintegrator

44

การกำหนดค่าในแอปพลิเคชันนั้นดี การกำหนดค่ามากเกินไปเป็นฝันร้ายที่จะใช้และดูแลรักษา


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

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

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

สิ่งนี้เรียกว่า« spoftcoding »ซึ่งตรงข้ามกับ« hardcoding »
deadalnix

42

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

ฉันลงเอยด้วยการจัดการโหลดของตาราง (ผ่านตัวแบบ) และประสิทธิภาพไม่ดีเท่าที่ควรสำหรับตาราง


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

8
ฉันอาจเพิ่มการฟื้นฟูที่เป็นบวกแน่นอน

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

4
วิธีการของฉันสู่การทำให้ปกติเป็นแนวตรงไปข้างหน้าเสมอ ฉันมักจะทำให้เป็นมาตรฐานอยู่เสมอ แต่ถ้าฉันเห็นการเพิ่มประสิทธิภาพที่เป็นไปได้ของการแบนเล็กน้อย - ฉันจะทดสอบและสร้างมาตรฐานและในกรณีส่วนใหญ่จะจ่ายให้แบน
Eimantas

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

36

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

ฉันเดาว่านี่เป็นรูปแบบหนึ่งของการเพิ่มประสิทธิภาพที่ไม่จำเป็นก่อนวัยอันควรและการเพิ่มประสิทธิภาพตาบอด ราวกับว่าใช้ถ่านตัวเดียวจะช่วยโลกวันนี้ นอกเหนือจาก Y / N booleans ในฐานข้อมูลที่ไม่รองรับ booleans / bits


+1 เราเพิ่งมีการประชุมเกี่ยวกับปัญหานี้มาก เรามาถึงข้อสรุปเดียวกัน
APC

ถ้าลูกค้าของคุณทำงานกับตัวย่อดังกล่าวและไม่ต้องการละทิ้ง

สำหรับระบบที่มีอยู่คุณต้องเข้ากันได้ (ฉันยังคงสร้าง Java enum ของค่าที่เหมาะสมโดยมี <code> MyEnum fromChar (char c) </code>) แน่นอน สำหรับการออกแบบใหม่อย่าไปที่นั่น!

ฐานข้อมูลบางตัวรองรับ enums ซึ่งทั้งกะทัดรัดและสามารถอ่านได้และยังรองรับค่าที่ไม่คาดคิด หากคุณสามารถใช้พวกเขา
46432 Bartel Bartel

2
เกือบจะไม่ดี: การใช้ชนิด BIT ใน MS SQL Server ก่อนที่จะค้นพบว่ามันไม่สามารถเป็นส่วนหนึ่งของดัชนีได้
finnw

32

ไม่พัฒนาData Access Layerที่เหมาะสมและมี sql ทุกที่ในรหัสของฉันเพียงเพื่อให้ได้สิ่ง "รวดเร็ว" และทำงาน ต่อมาเมื่อโครงการเริ่มขยายและความต้องการเปลี่ยนไปมันก็กลายเป็นฝันร้าย ฉันไม่รู้ว่า DAL คืออะไรในเวลานั้น

... ดีใจที่ฉันผ่านมาแม้ว่าฉันจะยังเห็นโปรแกรมเมอร์ที่มีประสบการณ์มากกว่า 20 ปีในการทำสิ่งนี้


16
จำไม่ได้ว่าฉันอ่านตรงไหน แต่มีความแตกต่างระหว่างประสบการณ์ 20 ปีกับประสบการณ์หนึ่งปีซ้ำ 19 ครั้ง
CaffGeek

@Chad: มันอยู่ที่ไหนสักแห่งในงานเขียนของ Joel Spolsky

+1: ใช่ และลองปรับโครงสร้างตรรกะทั้งหมดที่เชื่อมโยงกับ SQL นั้นอีกครั้ง ... ไม่ว่าจะเป็นอินไลน์ SQL แบบอิสระหรือ procs ที่เก็บไว้ [Yup - ฉันไม่กลัวสงครามศักดิ์สิทธิ์]
Jim G.

26

คิดว่าฉันสามารถเป็นสถาปนิกนักพัฒนาและ PM ทั้งหมดในโครงการเดียวกัน

นอน 2 เดือน 3 ชั่วโมงต่อคืนสอนฉันว่าคุณทำไม่ได้


15
ดังนั้นจงนอนหลับให้มาก ๆ ! โอ้รอ ... คุณหมายความว่าไม่ปกติ ... อืม I gotta รับฉันบางคนอื่น ๆ ในโครงการนี้ ...
Avid

ดูเหมือน PM คุณต้องมีการฝึกอบรมโดยประมาณ :)

21

การเลือก Microsoft Foundation Classes (MFC) สำหรับการเขียน Java IDE


3
Owwww นั่นจะทำให้สมองของฉันเจ็บ
เกร็ก D

2
นั่นไม่ใช่การตัดสินใจที่ไม่ดีในปี 1999 AWT น่าเกลียดและช้าในตอนนั้น
finnw

finnw - อย่างน้อยก็ยังน่าเกลียด!
Niklas H

20

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

ผล:

  • เจ็บปวดกว่าการเพิ่มการบันทึกใหม่
  • ค่าใช้จ่ายเพิ่มเติมสำหรับการแปล
  • บันทึกจะอ่านยากขึ้นในภายหลัง

อุ่ย


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

1
ให้ฉันเดาอเมริกันของคุณ และถ้าไม่คุณพูดภาษาอังกฤษได้เท่านั้น ใช้ความเป็นสากลที่รายการบันทึกใหม่เป็นภาษาอังกฤษหากมีภาษาอื่นให้คุณแสดงภาษาของผู้ใช้ คำแนะนำ: การใช้รหัสข้อผิดพลาดช่วยที่นี่เพราะหมายความว่าคุณสามารถ grep / scan บันทึกได้ไม่ว่าจะใช้ภาษาใด

2
@Jacob: ฉันเป็นคนอังกฤษ แต่พูดภาษาอังกฤษได้เท่านั้น แต่สำหรับ บริษัท ที่ฐานวิศวกรรมทั้งหมดอยู่ในประเทศอังกฤษดังนั้นการมีไฟล์บันทึก (ซึ่งมีวัตถุประสงค์เพื่อการวินิจฉัยไม่ใช่ข้อมูลที่ผู้ใช้มองเห็นได้) ในภาษาอื่นอาจเป็นการสิ้นเปลืองทรัพยากร ฉันยอมรับว่าการใช้รหัสข้อผิดพลาดแทนข้อความช่วยให้สามารถทำการแปลได้ทันที แต่ก็ยังทำงานได้มากกว่าแค่การใช้ภาษาเดียวในการเริ่มต้น มันเป็นเรื่องของการลดงานโดยการระบุว่าสิ่งที่ฟังดูมีประโยชน์จริง ๆ แล้วจะไม่ให้คุณค่าที่สำคัญใด ๆ
Jon Skeet

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

1
+1 ภาษาอังกฤษเป็นภาษากลางของการเขียนโปรแกรม การแปลเป็นเพียงการเพิ่มเลเยอร์เพิ่มเติมที่คุณต้องการเลเยอร์น้อยและชัดเจนที่สุดเท่าที่จะเป็นไปได้


19

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


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

2
UML เป็นการดีที่จะพูดคุยกันระหว่างสมาชิกในทีม แต่เมื่อพูดถึงการออกแบบแล้วนำไปใช้ตามการออกแบบมันจะจบลงอย่างไม่ดี นี่เป็นความฝันบางอย่างของ บริษัท บางแห่ง แต่การเขียนซอฟต์แวร์ที่ไม่เหมาะสมนั้นไม่ได้ผล +1!
deadalnix

17

การเชื่อว่าลูกค้ารู้ว่าสิ่งที่พวกเขาต้องการแล้วทำมากเกินไปก่อนที่จะตรวจสอบกับพวกเขา


15

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


นั่นเป็นทั้งเรื่องตลกและน่าเศร้า :)

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

3
ฉันไม่ได้ใช้เท็มเพลตหรือรหัสทั่วไปอื่น ๆ เลย ข้อผิดพลาดคือการเปลี่ยนรหัสทั่วไปเป็นภาษาภายในภาษา

ฉันได้เห็นสิ่งที่แน่นอนนี้ทำในปี 2004! ตรรกะทางธุรกิจทั้งหมดแผ่กระจายไปทั่วตารางการกำหนดค่าสิบห้าตารางด้วยความพยายามในการอบหลายครึ่งที่ "ภาษา" แบบไดนามิกที่ส่งออกไปเพื่อการวัดที่ดี (ดูกฎที่สิบของ Greenspun)!

1
คุณไม่ได้หมายถึงภาษาโคบอลมากกว่า FORTRAN หรือ
finnw

15

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

หากคุณได้เข้ารหัสทุกอย่างตรงตามข้อกำหนดปัจจุบันในขณะที่เอาชนะใครก็ตามที่บอกว่า ด้วย YAGNI ตะลุมพุกของคุณ - จากนั้นความต้องการเปลี่ยนไปอย่างมาก (แต่เป็นไปตามที่คาดการณ์ไว้อย่างสมเหตุสมผล) นั่นอาจเป็นความแตกต่างระหว่างการปรับตัว 2 สัปดาห์กับการปรับตัว 20 นาที

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

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


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

ฉันต้องการจัดการกับ YAGNI มากกว่าอึนั้น

ดังนั้นคุณคิดว่าคุณควรใช้เวลา 2 สัปดาห์ล่วงหน้า?
finnw

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

3
สเตฟานตัวอย่างแสดงให้เห็นถึงความกะล่อนและการใช้วลีที่ไม่เหมาะสมซึ่งเป็นประเด็นของฉัน แห้ง (กับ OAOO ตัวแปร) นอกจากนี้ยังเป็นหลักการที่ดี แต่ที่แยกจากกันมาก: c2.com/cgi/wiki?OaooBalancesYagni อย่างไรก็ตามฉันไม่สามารถหาสิ่งใดก็ได้เพื่อสนับสนุนการอ้างสิทธิ์ของคุณว่า "DRY เป็นส่วนหนึ่งของ YAGNI" มัสตาร์ดเข้ากันได้ดีกับฮอทด็อก แต่นั่นไม่ได้หมายความว่ามัสตาร์ดเป็นส่วนหนึ่งของฮอทด็อก หากคุณสามารถชี้แจงอาจมีการอ้างอิงบางทีฉันจะเข้าใจ
คอนโซล 80x24

15

ทรัพยากรมนุษย์ที่ไร้ความสามารถ

พยายามทำสิ่งที่ถูกและดีกับคนผิด!
แม้ว่าพวกเขาจะอยู่ในบทบาทของอีโก้ PM ที่ฟุ่มเฟือย (ซึ่งค่อนข้างบ่อยเกินไปโดยเฉพาะใน บริษัท ใหญ่ ๆ


1
ฉันเข้าใจความเจ็บปวดของคุณ :(

13

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


13

ใช้บริการการรวมเซิร์ฟเวอร์ SQL (SSIS)

ฉันไม่ต้องการมันกับศัตรูที่เลวร้ายที่สุดของฉัน

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

เป็นสถานการณ์ที่เลวร้ายมากหากคุณมีเวลาน้อยกว่า 48 ชั่วโมงในการเขียนแพ็กเกจ SSIS ของคุณใหม่ในรหัส. NET POCO ของแท้หรือพลาดกำหนดเวลาเป้าหมายของคุณ

มันทำให้ฉันประหลาดใจที่ฉันสามารถเขียนแพคเกจ SSIS สามชุด (ซึ่งใช้เวลาสองเดือนในการทดสอบและพัฒนา) ภายใน 12 ชั่วโมงในรหัส. NET บริสุทธิ์ด้วย OLEDB Adapters และตัวปรับเปลี่ยน SQL

SSIS ไม่สามารถแจกจ่ายได้และจะไม่ดำเนินการแพคเกจจากเครื่องไคลเอนต์หากไม่มีใบอนุญาต SQL Server ติดตั้งอยู่ (เฉพาะ DTSPipeline.dll) นี่จะเป็นการดีที่ได้ทราบล่วงหน้า ฉันเห็นข้อจำกัดความรับผิดชอบในขณะนี้ (ในการพิมพ์ดี) บน MSDN ไม่ดีเมื่อคุณมีรหัสตัวอย่างทั่วอินเทอร์เน็ตโดยใช้รหัสเครื่อง SQL-LICENSED เท่านั้น โดยทั่วไปคุณต้องสร้างบริการเว็บที่จะพูดคุยกับเซิร์ฟเวอร์ SQL ของคุณเพื่อเรียกใช้แพคเกจ SSIS ของคุณโดยทางโปรแกรม คุณไม่สามารถเรียกใช้งานได้จากรหัส pure .NET ยกเว้นว่าคุณมีใบอนุญาต SQL ติดตั้งอยู่ในเครื่องที่ใช้งาน มันไม่สมจริงแค่ไหน? Microsoft คาดหวังให้ใช้ SSIS จากเครื่องที่ต้องติดตั้งเซิร์ฟเวอร์ SQL หรือไม่ ช่างเป็นเรื่องสมบูรณ์สิ้นสองเดือนแล้ว

บริษัท ของฉันจะไม่ใช้ SSIS อีกครั้งเพราะงานพิมพ์ขนาดเล็ก "gotcha"


บางทีคุณควรหลีกเลี่ยงการใช้ซอฟต์แวร์ "fine-print" โดยสิ้นเชิง! ยกตัวอย่างเช่น ETL IDE แบบโอเพ่นซอร์ส

+1: ใช่ ประสบการณ์การพัฒนา SSIS ก็เป็นฝันร้ายเช่นกัน อาจมีวิธีที่ดีกว่าอย่างน้อยครึ่งโหลในการแสดง ETL
Jim G.


10

การโยนไข่อีสเตอร์ 'ตลก' ลงในรหัสที่ฉันเขียนก่อนจะไปพักผ่อนเป็นเวลา 2 สัปดาห์ ฉันคิดว่าฉันจะเป็นคนเดียวที่อ่านมันเมื่อฉันกลับมามันจะทำให้ฉันหัวเราะหึๆและพร้อมที่จะเขียนมันอีกครั้ง

เจ้านายของฉันไม่ประทับใจเมื่อเขาตรวจดูขณะที่ฉันไม่อยู่และเขาก็รู้สึกประทับใจน้อยลงเมื่อหนึ่งใน 'ไข่อีสเตอร์' หนึ่งที่เกี่ยวข้องกับใบหน้าของเขาการ์ตูนตลกใน ASCII

mmmmmm ...


1
IMO นั่นคือ "คุณทำได้ดีมาก!"

18
เมื่อเร็ว ๆ นี้ฉันถูกล้อเลียนโดยทีมของฉันเพื่อติดตามข้อความเช่น "addin 'th'value (p) t'yer table!" ฉันบอกว่าดูพวกเขาทำให้ฉันทำงานใน Talk Like A Pirate Day พวกเขาสมควรได้รับสิ่งที่พวกเขาได้รับ

3
Arr บันทึกของคุณจะเป็นแบบ 'คีล!

10

การใช้ชุดรูปแบบ ASP.Net เมื่อโฟลเดอร์ CSS 'ol ปกติ' จะทำได้ดี


ฮ่า ๆ ๆ นั่น!

1
คำตอบนี้อาจย่อให้เล็กลงเป็น "Using ASP.NET"
finnw

สกินมีประโยชน์สำหรับการตั้งค่าเริ่มต้น CssClass
ต่ำสุด

8

การใช้ถนนอย่างรวดเร็วเพื่อให้โค้ดทำงานได้ดีกว่าถนนที่ถูกต้อง (เป็นบิตทั่วไป แต่เราจะเรียกมันว่า abstraction ดังนั้นจึงเป็นคำตอบที่ 'ถูกต้อง')


7

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

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

ดังนั้นฉันจึงให้สิ่งที่พวกเขาขอ อย่างน้อยที่สุดมันทำงานได้ดี แต่ฐานข้อมูลได้รับการออกแบบแปลก ๆ :

  • การปรับสภาพที่ไม่จำเป็นจำนวนมาก ระเบียนเดียวที่มี 5 หรือ 10 เขตข้อมูลจะถูกแบ่งข้าม 3 หรือ 4 ตาราง ฉันสามารถจัดการกับมันได้ แต่โดยส่วนตัวแล้วฉันอยากดึงฟิลด์ 1: 1 ทั้งหมดมาไว้ในตารางเดียว

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

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

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

  • คีย์ต่างประเทศมักจะไปที่ตารางมากกว่าหนึ่งตารางเช่นคีย์ต่างประเทศที่ลงท้ายด้วย "M" อาจเชื่อมโยงไปยังตารางบัญชีการค้าของเราในขณะที่คีย์ต่างประเทศที่ลงท้ายด้วย "A" อาจเชื่อมโยงไปยังตารางบัญชีอัตโนมัติของเรา มันจะง่ายกว่าในการแยกข้อมูลออกเป็นสองตาราง MortageData และ AutoInsuranceData

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


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

7

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


+1: ใช่ - ฉันเคยไปที่นั่น ... และทันทีที่ฉันรู้ว่า n00bs จะไม่อัปเกรดฉันเริ่มวางแผนการหลบหนีของฉันเพื่อเป็นทุ่งหญ้าสีเขียว
Jim G.

และฉันก็เพิ่งเกษียณในเดือนหน้า!
เถาวัลย์

6

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

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


Ahhh ความสุขของการประดิษฐ์ล้อใหม่! :-) มันสนุก.

ฉันเรียกมันว่าข้อบกพร่องโดยเจตนาเพียงเพื่อให้คุณสามารถปรับปรุงในการทำซ้ำครั้งต่อไป
whatnick

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

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

6

ไม่ใช่ตัวเลือกวิธีการของฉัน แต่สร้าง XSLT เพื่อแปลงไฟล์ XML ตามแถวเป็นรายงาน HTML ตามคอลัมน์

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

ในที่สุดฉันก็ถูกแทนที่ด้วยสคริปต์ C # ขนาดเล็กซึ่งทำสิ่งเดียวกัน


ฉันก็ทำอย่างนั้นเช่นกัน ฉันใช้เครื่องมือสร้างเทมเพลตอีเมลโดยใช้ XSL และพบว่าอ่านและดูแลรักษาได้ยาก
TrueWill

อ๋อ แทนที่ต้นไม้ใหญ่ของไฟล์ XSLT ด้วยฟังก์ชั่น VB.NET ง่ายๆ น่าพอใจมากโดยเฉพาะอย่างยิ่งเมื่อคำขอการเปลี่ยนแปลงลูกค้าครั้งต่อไปที่มาพร้อมจะเป็นไปไม่ได้ที่จะทำใน XSLT

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

6

พยายามที่จะใช้เทคโนโลยีใหม่ทั้งหมด (เพื่อเรียนรู้เทคโนโลยีใหม่) แม้ว่ามันจะต้องใช้ doent ..


5

ฉันใช้เวลาไม่นานในการประเมินรูปแบบธุรกิจ ฉันทำสิ่งที่ลูกค้าถาม แต่ 6-12 เดือนต่อมาเราทั้งคู่มาถึงข้อสรุปว่าควรทำแตกต่างกัน


4

การออกแบบโดยไม่มีข้อกำหนด


3
สเปคไม่สามารถใช้ได้เสมอ

ควรจะ "ใช้งานโซลูชันโดยไม่ถามลูกค้าว่าเป็นสิ่งที่พวกเขาต้องการ"; ซึ่งมักจะหมายความว่าคุณทำตามข้อกำหนด
dietbuddha

3

ฉันนำส่วนย่อยของแอปพลิเคชันไปใช้ตามข้อกำหนด

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

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