ผลผลิตที่ยอดเยี่ยมสำหรับโปรแกรมเมอร์ - การบัญชีสำหรับความแตกต่าง 10,000 เท่า? [ปิด]


19

ผู้ประกอบการกลึงยอดเยี่ยมสั่งค่าแรงของผู้ประกอบการกลึงโดยเฉลี่ยหลายครั้ง แต่ผู้เขียนโค้ดซอฟต์แวร์ที่ยอดเยี่ยมมีมูลค่า 10,000 เท่าของราคาซอฟต์แวร์เขียนโดยเฉลี่ย - บิลเกตส์

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


2
ฉันไม่แน่ใจว่าคำถามนี้เหมาะสำหรับ stackoverflow หรือไม่ แต่ฉันสนใจในการตอบกลับเช่นกัน
Austin Henley

18
ใบเสนอราคาบอกว่าอันที่ดีมีค่า 10k เท่าของราคาเฉลี่ยไม่มีอะไรเกี่ยวกับ "ประสิทธิภาพ" ที่นั่น
Oded

4
อันที่จริงโปรแกรมเมอร์ที่ดีอาจมีประสิทธิผลน้อยกว่าคนทั่วไป แทนที่จะทำ "งาน" ของเขาเขาทำสิ่งที่ดีกว่าที่อยู่นอกเรดาร์และอาจสร้างสายผลิตภัณฑ์ใหม่ทั้งหมดที่เลิกทำงานของโปรแกรมเมอร์ที่มีประโยชน์
hotpaw2

2
สิ่งหนึ่งที่ฉันมั่นใจคือคุณต้องการทั้งสองอย่างหากคุณต้องการสร้างสรรค์และรับ! @ # $ เรียบร้อยแล้ว
Erik Reppen

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

คำตอบ:


57

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

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

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

แก้ไข (ฤดูใบไม้ผลิ 2014): "Heartbleed"


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

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

10
+1 หากมูลค่าของนักพัฒนาซอฟต์แวร์ที่ดีคือ 100 จำนวนเท่าไหร่ที่มากกว่า -10
นิโคล

3
นอกจากนี้ยังมีปัญหาเรื่องอุปสงค์และอุปทาน เรย์มอนด์เฉิน: "ฉันเชื่อเพียงห้าคนในโลกที่จะเขียนโค้ดที่เป็นขั้นสูงนี้และฉันไม่ได้เป็นหนึ่งในพวกเขา - blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx " นี่เป็นความจริงอย่างยิ่งของการเข้ารหัสที่เกี่ยวข้องกับความปลอดภัยเนื่องจากปัญหาอาจเกิดขึ้นโดยไม่มีใครสังเกตเห็น (หรืออย่างน้อยก็ไม่มีใครสังเกตเห็นหมวกสีขาว) เป็นเวลาหลายปี Schneier ให้ความเห็นว่าโปรแกรมเมอร์ส่วนใหญ่สามารถเขียนอัลกอริทึมการเข้ารหัสซึ่งโปรแกรมเมอร์เองไม่สามารถทำลายได้ ฉันทราบว่าสิ่งนี้ไม่ได้บอกเป็นนัยถึงคนที่ดีกว่าไม่สามารถทำได้ ... เว้นแต่ผู้เขียนจะดีที่สุด
Brian

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

44

นักว่ายน้ำโอลิมปิกโดยเฉลี่ยสามารถว่ายน้ำได้ประมาณ 2.5 ไมล์ต่อชั่วโมงในระยะทางไกล

คนทั่วไป (ผู้ที่สามารถว่ายน้ำ) สามารถว่ายน้ำได้ในระยะทางประมาณ 1.5 ไมล์ต่อชั่วโมง

ซึ่งหมายความว่านักว่ายน้ำโอลิมปิกโดยเฉลี่ยสามารถว่ายน้ำในช่องแคบอังกฤษในเวลาประมาณ 8 ชั่วโมง

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

ยกเว้นว่าถ้าฉันนักว่ายน้ำโดยเฉลี่ยพยายามที่จะว่ายน้ำในช่องแคบอังกฤษทางเดียวที่ฉันจะข้ามไปได้คือถูกชะล้างบนฝั่งในอีกหนึ่งสัปดาห์ต่อมา

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


31

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

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


6
+1: น่าเสียดายที่ปัญหาทั่วไปไม่ได้รับการแก้ไขที่ถูกต้อง มันบ้าแค่ไหนที่มีวิธีแก้ปัญหาและเงื้อมมือบ่อยครั้งที่ "แก้ไข" ปัญหาที่เกิดขึ้นทันที แต่เกือบจะแน่ใจได้ว่าจะสร้างปัญหามากขึ้นในอีกไม่กี่สัปดาห์ "แต่ในอีกไม่กี่สัปดาห์เราจะปล่อยให้ตัวตนในอนาคตของเราจัดการกับปัญหาเหล่านั้นได้!"
Joachim Sauer

ความแตกต่างระหว่างโซลูชันที่ทำงานและไม่ทำงานกับปัญหาที่แทบจะเป็นไปไม่ได้เช่นแนวทางขององค์กรที่รอดชีวิตเทียบกับล้มละลายหรือมีอะไรบางอย่างระเบิดในห้องแล็บและฆ่าวิศวกรทุกคน (เรื่องราวแนวทีวีละครคลาสสิค ... ) ฯลฯ .
hotpaw2

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

9

ฉันจะพยายามจัดการเรื่องนี้ในแง่ของความแตกต่าง:

วิศวกรที่ดีจะทำสิ่งต่อไปนี้ได้ดีกว่าคนทั่วไป:

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

เมื่อนำมารวมกันสิ่งเหล่านี้จะช่วยให้ บริษัทประหยัดเงินจำนวนมากในเวลาในการพัฒนาและทำให้บริษัท มีเงินจำนวนมากในโอกาสพิเศษ


4

โปรแกรมเมอร์ที่ยอดเยี่ยมมักจะไม่เพียง "รับส่วนแบ่งคุณสมบัติข้อบกพร่องและการตรวจสอบ" เพื่อรับค่าจ้าง บางครั้งพวกเขาลาออกและเริ่มต้น บริษัท ของตัวเองหรือเข้าร่วมเริ่มต้นหรือเริ่มโครงการ skunkworks ใหม่หรือในสมัยก่อนอาจเข้าร่วมห้องปฏิบัติการ R&D ท้องฟ้าสีฟ้าที่มีชื่อเสียงระดับประเทศและคิดค้นผลิตภัณฑ์บางอย่างที่ไม่มีใครคิดว่าพวกเขาต้องการแม้แต่ หรือคิดว่าเป็นไปได้ที่จะทำกับซอฟต์แวร์ก่อนที่ความเข้าใจทักษะและเหงื่อของโปรแกรมเมอร์ที่ยอดเยี่ยม

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

จะเกิดอะไรขึ้นกับการเริ่มต้นใช้งานซอฟต์แวร์เป็นครั้งคราว: เผยแพร่สู่สาธารณะเป็นล้าน ๆ ล้าน / พันล้านหรือได้รับจาก Google หรือ Facebook และอื่น ๆ สำหรับจำนวนที่คล้ายกันไม่ค่อยเกิดขึ้นกับผู้ประกอบการกลึง (แม้ว่าผู้ก่อตั้ง บริษัท เทคโนโลยี Silicon Valley ที่ประสบความสำเร็จอย่างน้อยหนึ่งคนจะมีการกลึงในห้องเครื่องของเขา)


4
".... จะเปิดเผยต่อสาธารณชนในล้าน / พันล้าน, ..... " แม้จะมีสำนวนสื่อที่ไม่ค่อยเกิดขึ้นสำหรับวิศวกรซอฟต์แวร์เช่นกัน สำหรับทุกคนที่ "ทำให้" หลายพันคนตกอยู่ในความสับสนและ / หรือไปแม้ว่าหนึ่งรอบ VC มากเกินไปและกลับไปทำงาน 9-5 วันโดยไม่มีอะไรมากไปกว่ารสชาติขมในปากของพวกเขา ...
mattnz

1
@ แมตต์: ด้วยอาจจะดีกว่า 10,000 ต่อ 1 เล็กน้อยที่ไปพร้อมกับค่า 10,000X ที่โปรแกรมเมอร์อ้างว่า
hotpaw2

3

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

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


3

ฉันคิดว่ามีหลักฐานเชิงประจักษ์ที่สนับสนุนคำพูดของเกทส์ ฉันจำการอ่านได้ (แม้ว่าฉันจะไม่จำแหล่งที่มา) ว่าในการพิมพ์พูลความแตกต่างในเอาต์พุต (สามารถวัดได้ง่ายสำหรับพูลการพิมพ์) ระหว่างค่าในเปอร์เซ็นไทล์ที่ 5 และเปอร์เซ็นไทล์ 95% นั้นคล้ายกับ 3 ถึง 1 หลังจากใช้ซอฟต์แวร์ประมวลผลคำอัตราส่วนก็เพิ่มขึ้นเป็น 10 หรือ 20 ต่อ 1 เพราะผู้ที่สามารถใช้คุณสมบัติขั้นสูงของซอฟต์แวร์ได้รับความได้เปรียบมากขึ้น

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

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


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