การพัฒนาความคิดมากกว่า


88

ฉันทำงานเป็นนักพัฒนาแอพมาเป็นเวลาหนึ่งปีครึ่งแล้ว (ไม่นานฉันก็รู้) และฉันเพิ่งได้รับโครงการใหญ่ครั้งแรกของฉัน

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

เขาบอกว่าฉันคิดมากที่จะทำภารกิจนี้และเพราะฉันไม่เคยจัดการโครงการขนาดนี้ก่อนที่ฉันจะใช้เวลามากเกินไปในการคิดรูปแบบการออกแบบ ในคำพูดที่ฉลาดของเขาเขาบอกฉันว่า "F * ck อนาคตสร้างเพื่อตอนนี้"

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

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


5
ดูเหมือนว่าจะเกี่ยวข้องกับการเข้ารหัสมากกว่าการออกแบบ
Balog Pal

22
ฉัน +1 เพียงเพื่อ "F * ck อนาคตสร้างตอนนี้" หากเขารู้สึกว่ารับรองข้อความนี้ฉันยินดีที่จะให้เครดิตเขาทุกครั้งที่ฉันเพิ่มลงในบันทึกการกระทำหลังจากที่ฉันทิ้งบางสิ่งบางอย่างที่ฉัน overengineered โง่ (ซึ่งเกิดขึ้นมากกว่าที่ฉันต้องการ)
เฮย์เล็ม

13
เตือนฉันถึงผู้ร่วมงานเก่าที่มักจะ "ชุบทอง" แอปของเขาด้วยคุณสมบัติมากเกินไปออกแบบยาเกินขนาดและสิ่งที่ไม่ได้อยู่ในความต้องการเลยเพียงแค่ "อวด" หรือ "เตรียมพร้อมสำหรับอนาคตที่ไม่มีวันมา" . คำถามที่น่าสนใจมาก :)
Jean-FrançoisCôté

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

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

คำตอบ:


112

กัปตันชัดเจนต่อการช่วยเหลือ!

ฉันจะเป็นกัปตันแจ่มแจ้งที่นี่และบอกว่ามีพื้นกลางที่จะพบ

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

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

สร้างตอนนี้ถ้า ...

  • โครงการกำลังจะถูกทิ้ง
  • โครงการมีอายุการใช้งานสั้น
  • โครงการไม่ควรมีส่วนขยาย
  • โครงการไม่ได้มีค่าผลกระทบความเสี่ยง (ส่วนใหญ่ในแง่ของภาพ)

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

ออกจากปัญหาทั่วไปในภายหลังหากจำเป็นและคุ้มค่ากับความพยายาม:

XKCD: ปัญหาทั่วไป

สร้างเพื่ออนาคตถ้า ...

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

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

แนวทาง

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

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

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

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

เพียงแค่สร้างสิ่งง่าย ๆ

Dilemmata

Overengineering

นี่คือโปรแกรมเมอร์ทั่วไปที่ตามมาเมื่อทำโครงการเช่นนี้หรือไม่?

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

การสร้างต้นแบบ / Quick-n-Dirty / Less เป็นมากกว่า

มันเป็นแนวโน้มทั่วไปที่จะบดตัวอย่างให้ได้โดยเร็วที่สุดหรือไม่?

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

Dilbert ในการจัดส่งต้นแบบโดยตรงกับการผลิต

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

เมื่อใดจึงควรใช้การสร้างต้นแบบ

มีคำแนะนำเกี่ยวกับการเป็นชนิดที่ดีที่สุดของโครงการที่จะใช้ต้นแบบ :

[... ] การสร้างต้นแบบนั้นมีประโยชน์มากที่สุดในระบบที่จะมีปฏิสัมพันธ์กับผู้ใช้จำนวนมาก

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

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

ในทางกลับกัน:

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

และถ้าคุณมีสัตว์ประหลาดสีเขียวรอบ ๆ อย่าลืมเก็บต้นแบบไว้ในงบประมาณ ...

ดิลเบิร์ตขยายระยะเวลาการสร้างต้นแบบ


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

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

7
ฉันเคยทำงานกับวิศวกรเครื่องกลที่วางไว้เช่นนี้: คุณต้องการผลิตภัณฑ์ของคุณภายใต้วิศวกรรมหรือวิศวกรรมมากเกินไปหรือไม่? นี่เป็นเพียงสองตัวเลือกเท่านั้น
Guy Sirton

1
@ SamtheBrand: ขอบคุณสำหรับการแก้ไขที่ยอดเยี่ยม ดีกว่ามาก
haylem

1
@Haylem: บางครั้งฉันคิดว่าการใส่ความคิดลงในการติดตามปัญหา (หากโครงการของคุณมีขนาดใหญ่พอที่จะมี) ให้ฉันลบออกจากด้านหลังของหัวของฉัน การรู้ว่าพวกเขาปรากฏตัวต่อผู้อื่นในบางวิธีทำให้ฉันรู้สึกว่าฉันไม่จำเป็นต้องกลับมายังพวกเขาในหัวของฉันตลอดเวลา (แม้ว่าจะมีการทรงตัวที่นั่นด้วย =])
afuzzyllama

54

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

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

คุณต้องวางแผนและวางแผนมาก แต่อย่าทำทุกอย่างพร้อมกัน ไม่ต้องทำอะไรเลยในตอนแรก ฉันอยากเห็นบางคนสร้างโครงการใหญ่ครั้งแรกของพวกเขาเช่นนี้:

  1. ออกแบบและพูดคุยเล็กน้อย
  2. เขียนมัดรหัสที่ทำบางสิ่งบางอย่าง
  3. รับรู้ปัญหาและการเข้ารหัส STOP
  4. จริงจังกับการออกแบบและหยุดกังวลเกี่ยวกับการสูญเสียโมเมนตัมหรือโค้ดโมโจของคุณและเพิกเฉยต่อผู้จัดการโครงการ (คุณกำลังช่วยเขา / เธอชอบ)
  5. รับโครงการภายใต้การควบคุม แก้ไขความยุ่งเหยิงของคุณ ตรวจสอบให้แน่ใจว่าทุกคนเข้าใจแผน ทำให้โครงการอยู่ภายใต้การควบคุม

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

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


1
+1 doing your bosses a favorถึงแม้ว่าพวกเขาจะไม่คิดเช่นนั้น
superM

2
+1 โพสต์ที่ยอดเยี่ยม แน่นอนว่ามันเป็นผู้จัดการที่ดีที่ตระหนักว่าการออกแบบที่ดีนั้นจำเป็นต้องซึมผ่านและนี่ไม่จำเป็นต้องเกี่ยวข้องกับแป้นพิมพ์!
Robbie Dee

Argg ถ้าเพียงฉันอ่านคำตอบนี้ก่อนที่ฉันจะเริ่ม! ขอบคุณและสำหรับคนที่เพิ่งเริ่มต้นในอุตสาหกรรมนี้ฉันรักเส้นโค้งการเรียนรู้ที่บ้าคลั่งเหล่านี้!
sf13579

2
+1 สำหรับYou have to plan and plan a lot, but don't do it all at once.
Rafael Emshoff

2
@Geek: โมโจไหลโซน ... หรืออะไรก็ตามที่เกินบรรยาย / อินเทรนด์ / ทันสมัยอย่างใดอย่างหนึ่งอาจเลือกที่จะอธิบายถึงสถานะของการผลิต
haylem

24

โปรแกรมเมอร์มักจะสร้างสิ่งที่ใช้งานได้ในขณะนี้โดยไม่คิดถึงอนาคตหรือไม่?

ใช่.

พวกเขาควรทำเช่นนั้น?

เลขที่

ดูเหมือนว่า "การคิดถึงอนาคต" เป็นการละเมิดหลักการออกแบบที่กำหนดไว้เช่นKISSและYAGNIซึ่งอ้างว่าไม่ควรนำสิ่งที่ไม่ต้องการไปใช้ในตอนนี้

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

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


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

13

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

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

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


1
นอกจากนี้ยังมีสาเหตุอื่นที่ทำให้คิดล่วงหน้า: ฟังก์ชั่นที่คุณพัฒนาไม่เหมาะกับการวิ่งหนึ่ง ดังนั้นคุณอาจแยกมันออกมาปลอมหรือคุณปฏิเสธที่จะใช้งานฟังก์ชั่นใด ๆ ที่คุณไม่สามารถทำให้เสร็จได้ภายในการวิ่งครั้งเดียว
Giorgio

+1 สำหรับการกล่าวถึงการปรับโครงสร้างใหม่ ฉันไม่อยากจะเชื่อเลยว่าไม่มีคำตอบอื่นใดที่พูดถึงเรื่องนี้ YAGNI จะทำงานได้ต่อเมื่อคุณ refactor
Ian Goldby

7

นี่คือโปรแกรมเมอร์ทั่วไปที่ตามมาเมื่อทำโครงการเช่นนี้หรือไม่?

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

ทุกอย่างง่ายเกินไปที่จะคิดว่าแอพควรทำสิ่งนี้และทำสิ่งนั้นให้ถูกทางอย่างหนาแน่น

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

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

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


6

เขาบอกว่าฉันคิดมากที่จะทำภารกิจและเพราะฉันไม่เคยจัดการโครงการขนาดใหญ่แบบนี้ฉันจึงใช้เวลามากเกินไปในการคิดรูปแบบการออกแบบ ในคำพูดที่ฉลาดของเขาเขาบอกฉันว่า "F * ck อนาคตสร้างเพื่อตอนนี้"

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

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

มันเป็นเพ้อฝันและชีวิตไม่ได้ทำงานในลักษณะนี้

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

นักพัฒนาอาวุโสทุกคนสามารถวิจารณ์ตำหนิและบ่น - และส่วนใหญ่ทำ!

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

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

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

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

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


1
+1 สำหรับการกล่าวถึงภัยพิบัติของผู้ให้คำปรึกษาหลอกในอินเทอร์เน็ต
FolksLord

5

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

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

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


3

มีเหตุผลที่ดีบางประการในการฟังคำแนะนำเพื่อหยุดการวางแผนและเริ่มการเข้ารหัส

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

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

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

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

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

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

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


-6

แสดงรหัสของคุณและฉันจะบอกคุณว่าคุณเป็นใคร

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

คุณกำลังกลายเป็นสิ่งที่คุณรหัส

รหัสของคุณคือโปรแกรมสำหรับชีวิต

โปรแกรมเมอร์ที่เขียนโค้ดไม่ดีเหมือนนักเต้นบัลเลต์ในคลับเปลื้องผ้า

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

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


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

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