การเอาชนะการแก้ปัญหาช้าเนื่องจากความรู้ที่เพิ่มขึ้นของสิ่งที่อาจผิดพลาด [ปิด]


450

เรื่องนี้ทำให้ฉันหนักใจในบางครั้งและฉันจะขอขอบคุณผู้เชี่ยวชาญของผู้เชี่ยวชาญคนอื่น ๆ

พื้นหลังสั้น ๆ : ฉันเริ่มเขียนโปรแกรมเมื่อพ่อแม่ซื้อคอมพิวเตอร์เครื่องแรกของฉันในปี 1988 (ตอนอายุ 14 ตอนนี้ฉันอายุ 39 แล้ว) ฉันติดตามสองเส้นทางอาชีพอื่น ๆ ก่อนที่จะกลายเป็นโปรแกรมเมอร์มืออาชีพในที่สุดในปี 1997 สายผิดพลาดอย่างช้า ๆ บางที แต่นั่นเป็นวิธีที่มันเป็น ฉันยังคงมีความสุขกับตัวเลือกของฉันฉันรักการเขียนโปรแกรมและฉันคิดว่าตัวเองดีในสิ่งที่ฉันทำ

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

ตัวอย่างเล็กน้อย: มันเคยเป็นเพียง "โอเคเขียนไฟล์ที่นี่" ตอนนี้ฉันกังวลเกี่ยวกับการอนุญาตล็อคการทำงานพร้อมกันการทำงานของอะตอมทางอ้อม / เฟรมเวิร์กระบบไฟล์ต่าง ๆ จำนวนไฟล์ในไดเรกทอรีชื่อไฟล์ temp ที่คาดเดาได้คุณภาพของการสุ่มใน PRNG ของฉันการขาดแคลนพลังงานในช่วงกลาง การดำเนินงาน API ที่เข้าใจได้สำหรับสิ่งที่ฉันกำลังทำเอกสารที่เหมาะสม ฯลฯ ฯลฯ

กล่าวโดยย่อปัญหาได้เปลี่ยนไปจาก "ฉันจะทำสิ่งนี้" เป็น "สิ่งที่ดีที่สุด / ปลอดภัยที่สุดในการทำ"

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

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

ฉันใช้เวลาเกือบสองชั่วโมงต่อวันในการอ่านการพัฒนาใหม่เทคนิคใหม่ภาษาแพลตฟอร์มช่องโหว่ด้านความปลอดภัยและอื่น ๆ ปริศนาคือยิ่งฉันได้รับความรู้มากเท่าไหร่ฉันก็ยิ่งทำโครงการได้ช้าลงเท่านั้น

คุณจัดการกับสิ่งนี้ได้อย่างไร


126
บทเรียนสำคัญคือ: ทำตามข้อกำหนดไม่มากไปกว่านั้น ด้วยวิธีนี้คุณจะไม่พยายามใช้คุณลักษณะที่ไม่จำเป็น
mouviciel

19
คุณพิจารณาวิธีการพัฒนาแบบ Agile แทนที่จะเป็นแบบจำลองน้ำตก ส่งเรื่องใหญ่ก่อนและส่งส่วนที่เหลือซ้ำ ๆ นี่คือแนวคิดใหม่ แต่ช่วยลดความเสี่ยงและค่าใช้จ่าย
Satish

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

13
เมื่อคุณอ่านหนังสือเกี่ยวกับคุณภาพของรหัสชุดรูปแบบที่ดังกึกก้องอยู่ในขณะที่มันอาจมีค่าใช้จ่ายมากกว่าในการสร้างรหัสที่ดีในตอนแรกมันจะเสียค่าใช้จ่ายน้อยลงในระยะยาวเมื่อคุณคำนึงถึงการบำรุงรักษา
James Snell

6
"ทำสิ่งที่ง่ายที่สุดที่อาจเป็นไปได้" เมื่อคุณทำเช่นนั้นแล้วคุณตัดสินใจว่าคุณต้องกังวลเกี่ยวกับสิ่งอื่นใด
Wayne Werner

คำตอบ:


268

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

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

นอกเหนือจากนั้นคุณต้องรู้และยอมรับสำนวนเก่า: "สมบูรณ์แบบเป็นศัตรูของความดี"


112
ทำให้ฉันนึกถึง 'ดีเร็วถูกเลือกสอง' ​​- เมื่อคุณรู้น้อยกว่าคุณกำลังเสียสละใน 'ดี' และตอนนี้คุณรู้มากขึ้นคุณกำลังเสียสละใน 'รวดเร็ว'
sevenseacat

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

10
@Neil "ตรงเวลาประหยัดงบบน Mars เลือกสองอัน"
Dan Neely

5
@ Leonardo: ไม่รูปแบบของ Telastyn ถูกต้อง (และเป็นคำพูดที่ค่อนข้างเก่าดูYAGNIและ "ถ้ามันใช้งานได้ไม่ต้องแก้ไข"
mikołak

3
คำตอบนี้คือพล่าม ไปลองทำและบอกลูกค้าว่าคุณจะทำเพื่อ 40K แทน 20K แต่มีคุณภาพและความน่าเชื่อถือมากขึ้น 10 เท่า พวกเขาจะบอกคุณว่า: "งบประมาณของฉันคือ 20K และฉันไม่ต้องการคุณภาพนั้น" ในบางจุดคุณต้องยอมรับว่า 99% ของลูกค้าไม่สนใจคุณภาพและคุณภาพใด ๆ จะเป็นการลงทุนส่วนบุคคลของคุณ
Morg

179

เสียงเหมือนถึงเวลาที่คุณจะต้องเข้าร่วมด้านมืด: การจัดการ

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

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

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

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

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

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

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


9
ดังนั้นตามที่คุณตั้งใจสร้างข้อบกพร่องเป็นที่ยอมรับตราบใดที่พวกเขาเกิดขึ้นยากพอ?
scai

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

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

27
+100 สำหรับการปลดหนี้ทางเทคนิค เช่นเดียวกับ OP ฉันพยายามกำจัดหนี้ทางเทคนิคทั้งหมดแล้ว ฉันไม่เคยพิจารณาความคิดที่ว่าหนี้ทางเทคนิคเป็นเรื่องปกติจนกระทั่งดอกเบี้ยเริ่มฆ่าคุณ ตอนนี้ฉันเห็นแล้วว่าการจัดการหนี้มีความสำคัญมากกว่าการกำจัดหนี้ ฉันไม่เคยคิดถึงเรื่องนี้มาก่อนเลย (btw ฉันใช้เทคนิค pomodoro ด้วย)
adj7388

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

94

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

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

ตอนนี้ฉันเริ่มต้นด้วยคำเบิกความทางชีวประวัติ

บริบทนิดหน่อย ฉันอายุ 47 ปีฉันเริ่มเขียนโปรแกรมตอนอายุ 12 ใน 80 ในขณะที่อยู่ในโรงเรียนมัธยมฉันก็ทำงานเป็นโปรแกรมเมอร์เกมมืออาชีพนอกเวลา โดยพื้นฐานแล้วมันไม่ได้มีเงินจำนวนมากพอที่จะซื้อฮาร์ดแวร์ แต่ฉันสนุกกับมันและเรียนรู้มากมาย ตอนอายุ 18 ปีฉันเริ่มเรียนรู้วิทยาศาสตร์คอมพิวเตอร์อย่างเป็นทางการ

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

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

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

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

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

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

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

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

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

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

ตอนนี้ฉันกลับมาเป็นโปรแกรมเมอร์มืออาชีพและฉันเชื่อว่าฉันทั้งดีขึ้นและเร็วขึ้นด้วยความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับสิ่งที่ฉันทำ ฝึกซ้อม TDD ฉันอาจยังช้ากว่าตอนที่ฉันยังเป็นกระทิงอยู่เล็กน้อย (และทดสอบอะไรเลย) แต่ฉันก็ไม่กลัวการเปลี่ยนโครงสร้างและใช้เวลาในการดีบั๊กน้อยลง (เกือบจะไม่มีเวลาเลยทำให้น้อยกว่า 10% ของเวลา) )

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

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


22
+1 สำหรับ "มันเร็วกว่าที่จะเขียนสองสิ่งที่จะเขียนสิ่งที่สมบูรณ์แบบในครั้งแรก"
Brendan Long

2
+1 สำหรับการแบ่งปันเรื่องราวส่วนตัวซึ่งฉันคาดว่าจะเป็นที่รู้จักและมีประโยชน์สำหรับผู้ถาม
R. Schreurs

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

@Seattle CPlusPlus: ฉันยอมรับว่าเป็นเรื่องง่ายสำหรับปัญหาที่เรียบง่ายอาจเป็นไปได้ว่ารหัสอัลกอริทึมส่วนใหญ่ มันไม่ง่ายเลยเมื่อคุณต้องการได้โครงสร้างชั้นเรียนที่ดี กฎการปรับโครงสร้างจะไม่ไร้ประโยชน์ทั้งหมด
kriss

41

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

การเพิ่มขึ้นของข้อบกพร่องหรือการลดลงของ ETA

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

กล่าวอีกนัยหนึ่งความซับซ้อนของซอฟต์แวร์ขึ้นอยู่กับความสามารถของคุณในการควบคุมความคาดหวังของลูกค้า

เมื่อมีการใช้มุมมองนั้นจุดสำคัญสองจุดก็ชัดเจน:

  1. ความคาดหวังของลูกค้าจะต้องชัดเจน (ในรูปแบบใดก็ตาม);
  2. ความคาดหวังของลูกค้าสามารถปรับเปลี่ยนได้ตลอดเวลาและผ่านการเจรจาต่อรอง

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

การสร้าง F16 นั้นแตกต่างจากการสร้างเซสนาถึงแม้ว่าทั้งคู่จะบินได้


24

คำตอบง่ายๆคือ: ยอมรับมัน

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

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

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


4
นั่นเป็น "ความรู้สึกที่ฉันชอบ" เล็กน้อยในการเปรียบเทียบเชอร์โนบิลของคุณทำให้วันของฉัน ที่จริงผมหัวเราะออกมาดัง ๆ :)
Zilk

16

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

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


15

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

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

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


9

ดูเหมือนคุณจะตระหนักถึงแนวโน้มที่จะคิดทุกอย่างที่ผิดไป

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

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

จำไว้ว่า:

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

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


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

7

สิ่งเดียวที่ฉันเห็นคือ: "คุณกำลังมีค่ามากขึ้น"

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

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

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

ข้อเสนอแนะของฉันจะเน้นในส่วนนี้


7

เมื่อสงสัยว่าเป็นค่าเริ่มต้นการอ้างอิง Knuth ไม่ดี ...

"การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด"

นี่คือสิ่งที่ฉันอยากจะแนะนำเนื่องจากดูเหมือนว่าคุณมีปัญหาที่ฉันมีเป็นครั้งคราว ...

อะไรที่เหมาะกับฉัน ...

  1. เขียนการทดสอบหน่วยราวกับว่าทำรหัสทั้งหมดแล้ว
  2. จัดทำเอกสารส่วนต่อประสาน
  3. ใช้อินเตอร์เฟส

สิ่งที่คุณทำจริง ๆ :

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

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


ฟังดูเหมือน Uncle Bob ชาย SOLID
Warren P

6

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

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

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


จริงๆแล้วคุณเพิ่งนำตัวอย่างของเลวร้ายที่สุด: ซอฟต์แวร์เว็บที่ php noobs เป็นการแข่งขันอย่างเป็นทางการ ราคาเป็นปัจจัยที่สำคัญอย่างยิ่งและเมื่อฉันส่งมอบซอฟต์แวร์ที่มีคุณภาพสูงลูกค้าของฉันจะต้องจ่ายเงินสำหรับซอฟต์แวร์และฉันจะจ่ายสำหรับคุณภาพสูง
Morg

6

คิดเกี่ยวกับผลที่เกิดขึ้นจริงของบั๊กเทียบกับปัญหาอื่น ๆ ทั้งหมดที่ต้องแก้ไข

พิจารณาผลที่ตามมาของการสร้างโค้ดที่เขียนไม่ดี:

  1. ฐานข้อมูลทั้งหมดถูกทิ้งทุก ๆ เดือน หยุดทำงาน 48 ชั่วโมงขณะที่สำรองข้อมูลถูกกู้คืน
  2. บันทึกลูกค้าได้รับการเชื่อมโยงข้าม การสั่งซื้อมูลค่า $ 200 ถูกส่งไปยังลูกค้าผิดต่อเดือน
  3. คำสั่งซื้อติดอยู่ในสถานะที่ไม่ถูกต้องสัปดาห์ละครั้ง สั่งซื้อเรือ แต่คลังสินค้าจะต้องโทรไปยังฝ่ายช่วยเหลือทุกครั้งที่เกิดขึ้น
  4. สองสัปดาห์หรือมากกว่านั้นแอปขัดข้องและผู้ใช้ต้องป้อนข้อมูลอีก 2 นาที
  5. เดือนละครั้งแอพจะหยุดทำงานเมื่อเริ่มต้น ผู้ใช้จะต้องฆ่ากระบวนการและเริ่มต้นใหม่

อันแรกไม่สามารถยอมรับได้อย่างชัดเจน # 2 - # 5 อาจหรือไม่ขึ้นอยู่กับลักษณะของธุรกิจ # 2 - # 5 ต้องประเมินในบริบทของปัญหาอื่น ๆ ที่ธุรกิจกำลังเผชิญ

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


5

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

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


4

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

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

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

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


3

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

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

เริ่มแรกเป็นสถาปนิกเทคนิค -> สถาปนิกออกแบบ -> สถาปนิกองค์กร -> หัวหน้าสถาปนิกและอื่น ๆ

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

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

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


3

ตัวเลือกอื่นคือ: หยุดเขียนโค้ดแทนที่จะขายความเชี่ยวชาญของคุณในการระบุปัญหาล่วงหน้า

ในคำอื่น ๆ กลายเป็นที่ปรึกษา

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

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

มุ่งเน้นที่จุดแข็งของคุณ
(ถ้าเป็นสิ่งที่คุณชอบ ... )


2

คำแนะนำที่ดีที่สุดของฉันสำหรับคุณคือ: หน่วยการสร้าง

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

ไม่มีใครที่จะทันตามนั้นแน่นอนว่าไม่ใช่มือใหม่ที่ใช้ 80% ของเวลาในการดีบักโค้ดที่ล้มเหลวสำหรับกรณีมุมที่พวกเขาไม่เข้าใจ

ที่สำคัญที่สุดอย่าแก้ไขปัญหาที่เกิดขึ้นไม่ได้เช่นการอนุญาตที่ผิด

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

ในบางจุดคุณจะต้องไม่ยิงตัวเองที่เท้าแทนที่จะตรวจดูเสมอว่าคุณทำหรือไม่

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


1

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

พลังการประมวลผลของคอมพิวเตอร์ช้าลงบางทีอาจจะช้าลงซึ่งนำไปสู่ความต้องการที่จะแนะนำชิปแบบมัลติคอร์, ตัวเลขที่ใช้พลังงานจาก GPU, ความขนาน, ฯลฯ มีเพียงทรานซิสเตอร์จำนวนมากที่สามารถวางบนชิปได้

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

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

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


1

เช่นเดียวกับคุณฉันเริ่มเขียนโปรแกรมเมื่ออายุ 14 ปีและเมื่อฉันได้รับคอมพิวเตอร์เครื่องแรก (แม้ว่าฉันจะเรียนมาสองสามเดือนแล้วก็ตาม) อย่างไรก็ตามตอนนี้ฉัน "เท่านั้น" 33 ตอนนี้ :-)

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

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

อาวุธที่มีคำตอบเหล่านี้คนที่มีประสบการณ์จะไม่มีปัญหาในการตัดสินใจอย่างชาญฉลาด ;-)

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


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

0

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


0

ในคำพูดของ Edsger Dijsktra:“ ถ้าการดีบั๊กเป็นกระบวนการลบข้อบกพร่องของซอฟต์แวร์การเขียนโปรแกรมจะต้องเป็นขั้นตอนการใส่มันเข้าไปด้วย” คุณเพิ่งทำสิ่งต่อไปน้อยกว่า เป็นเพียงคำถามของการเรียนรู้ที่จะใช้เวลาในการเขียนโค้ดให้ถูกต้อง ฉันยังเป็นนักเขียนโปรแกรมที่ค่อนข้างใหม่ (อ่าน 20ish) และฉันหวังว่าจะสามารถเขียนโค้ดบางอย่างได้ทันที การวางแผนหนึ่งชั่วโมงและการเข้ารหัส 10 นาทีนั้นดีกว่าการวางแผน 10 นาทีการเข้ารหัสหนึ่งชั่วโมงและการดีบั๊กสามครั้ง

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