การเขียนโปรแกรมที่ไม่ดีเป็นเรื่องปกติในอุตสาหกรรมซอฟต์แวร์หรือไม่? [ปิด]


140

ฉันเพิ่งเริ่มงานแรกในฐานะนักพัฒนาซอฟต์แวร์เมื่อหนึ่งเดือนก่อน ทุกอย่างที่ฉันได้เรียนรู้เกี่ยวกับ OOP, SOLID , แห้ง , YAGNI, รูปแบบการออกแบบ, SRP , ฯลฯ สามารถถูกโยนออกไปนอกหน้าต่าง

พวกเขาใช้เว็บฟอร์ม C # .NET และทำเกือบทุกอย่างภายใน Code Behind ด้วยคลาสภายนอกน้อยมากซึ่งไม่ได้เรียกว่าออบเจ็กต์ พวกเขาใช้การควบคุมที่กำหนดเองและนำมาใช้ใหม่ เกี่ยวกับวัตถุเท่านั้นที่ใช้โดยEntity Framework พวกเขาใช้ Code Behinds ซ้ำสำหรับลูกค้าแต่ละราย พวกเขามีวิธีการที่ยาว 400 บรรทัดในการทำสิ่งของทุกประเภท สำหรับลูกค้าใหม่พวกเขาใช้ aspx และ aspx.cs และดึงรหัสลูกค้าออกและเริ่มเพิ่มรหัสเฉพาะลูกค้าใหม่

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

สิ่งนี้มีอยู่ทั่วไปในอุตสาหกรรมซอฟต์แวร์หรือไม่ ฉันจะมั่นใจได้อย่างไรว่าฉันอยู่เหนือ OOP และหลักการที่เกี่ยวข้อง ฉันฝึกฝนในเวลาว่างและฉันรู้สึกว่าฉันต้องทำงานภายใต้นักพัฒนาที่มีประสบการณ์มากขึ้นเพื่อให้ดีขึ้นที่ OOP


ฉันได้เปิดการสนทนาเกี่ยวกับชื่อในการแชท: chat.stackexchange.com/transcript/message/40126879#40126879โปรดเข้าร่วมฉัน
dcorking

1
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
วิศวกรโลก

คำตอบ:


263
  1. หลักการที่คุณอ้างถึงในคำถามของคุณเป็นเพียง ... หลักการ พวกเขาไม่ใช่เอกสารกฎหมายหรือคำสั่ง
  2. ในขณะที่ผู้คนที่สร้างหลักการเหล่านี้ฉลาดมากพวกเขาไม่ใช่ผู้มีอำนาจเด็ดขาด พวกเขาเป็นเพียงผู้คนที่นำเสนอข้อมูลเชิงลึกและคำแนะนำ
  3. ไม่มีวิธี "ที่ถูกต้อง" ในการเขียนโปรแกรม นี่คือหลักฐานตามข้อเท็จจริงที่ว่า "ยอมรับ" วิธีที่เราทำเปลี่ยนแปลงและยังคงเปลี่ยนแปลงอย่างรุนแรงตลอดเวลา
  4. การจัดส่งผลิตภัณฑ์มักจะมีความสำคัญมากกว่าการทำในสิ่งที่ "ถูกต้อง" นี่เป็นวิธีปฏิบัติที่แพร่หลายที่มีชื่อ: หนี้ทางเทคนิค
  5. สถาปัตยกรรมซอฟต์แวร์บางตัวที่ใช้งานทั่วไปไม่เหมาะ แนวทางปฏิบัติที่ดีที่สุดกำลังพัฒนาไปจากแอพพลิเคชั่นขนาดใหญ่เสาหินไปสู่ชุดของโมดูล

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

ดังนั้นคุณจะทำตามเส้นทาง "ถูกต้อง" เป็นเส้นทางที่มีหลักการอย่างไรเพื่อที่คุณจะได้โผล่ออกมาจากถิ่นทุรกันดาร?

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

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

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

1
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
yannis

ฉันจะได้รับข้อมูลเชิงลึกเหล่านั้นอย่างเป็นระบบว่าไม่มีคำแนะนำใด ๆ
Ooker

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

51

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

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

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

ใช่แล้ว: สิ่งที่คุณเรียนในมหาวิทยาลัยนั้นไม่ใช่เรื่องธรรมดาในหลาย ๆ ด้าน


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


2
@nocomprende: ไม่มีการชักชวน ... คุณหมายถึงการร่วมกันเป็นเรื่องธรรมดามากขึ้นและที่พิเศษคือน่าเสียดายที่พิเศษ? หรือว่าคนทั่วไปนั้นไม่ค่อยดีนัก? ก็ใช่
Peter A. Schneider

3
"สิ่งที่คุณเรียนรู้ในมหาวิทยาลัยนั้นไม่ใช่เรื่องธรรมดาในสนาม" - ดูเหมือนจะเป็นกุญแจสำคัญ ...
Brian Knoblauch

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

1
"ซอฟต์แวร์ที่เกี่ยวข้องกับความปลอดภัยขึ้นอยู่กับเครื่องมือที่ได้รับการตรวจสอบอย่างดี (ขณะนี้เรากำลังใช้คอมไพเลอร์ C ++ ที่ผ่านการตรวจสอบแล้วจากปี 1990)" ฟังดูล้ำสมัยสำหรับฉัน!
Hovercouch

1
@ PeterA.Schneider มันเป็นเรื่องตลกโง่ ๆ เกี่ยวกับวิธีการที่ทันสมัยในการสัตวแพทย์เครื่องมือของคุณ ;)
Hovercouch

16

พวกเขาใช้ C # .Net Webforms และทำเกือบทุกอย่างภายใน Code Behind ด้วยคลาสภายนอกน้อยมาก

มีคำอธิบายของคุณอยู่ตรงนั้น หากคุณไม่ทราบรหัสเว็บฟอร์มที่ออกนอกกรอบนั้นค่อนข้างตรงกันข้ามกับOOP, SOLID, DRY, YAGNI, รูปแบบการออกแบบ, SRP , ฯลฯ แม้แต่ตัวอย่างที่เป็นทางการของ Microsoft จากไม่กี่ปีหลัง จะทำให้คุณประจบประแจงในวันนี้

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

และนี่เป็นเรื่องที่พบได้บ่อยในพื้นที่เว็บฟอร์ม. NET btw


6
ยินดีที่ได้ตอบคำถามที่กล่าวถึงในกองเทคโนโลยี
jasonoriordan

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

1
ที่จริงแล้วเมื่อมีการสร้าง WebForm การปฏิบัติตามมาตรฐานอุตสาหกรรมแตกต่างกัน (หรือไม่มีอยู่) และแอปพลิเคชันที่มีอยู่แล้วจะไม่ได้รับการรีแฟคเตอร์เมื่อ "วิธีการใหม่ในการทำสิ่งใหม่ ๆ " เริ่มนำมาใช้ นั่นเป็นเหตุผลที่คุณเห็นรหัส WebForm จำนวนมากรกด้วยระเบียบ หลักการการเขียนโปรแกรมจะถูกตัดออกจากสแต็คเทคโนโลยีที่คุณใช้ดังนั้นพวกเขาสามารถนำไปใช้ได้แม้ใน WebForms, Cobol, Assembly หรืออะไรก็ตาม
BgrWorker

1
ใช่มันเป็นเรื่องจริง ViewState ของคุณมี MB เท่าใด ฉันคิดว่าตัวควบคุมฝั่งเซิร์ฟเวอร์มีแนวโน้มที่จะสนับสนุนตรรกะทางธุรกิจเข้าสู่ UI ถึงกระนั้นโปรแกรมเมอร์ก็ผิดอย่างมากที่จะเข้าร่วมกับ asp.net การเขียนโปรแกรมแบบแคปสินค้าลัทธิ ดังนั้น: เหตุการณ์มากมายที่วัตถุธุรกิจไม่สามารถเข้าสู่สถานะที่ถูกต้องได้ รถบัส วัตถุไม่สามารถโทรหากันเนื่องจากการเชื่อมต่อ UI จากนั้น: โอ้ดูสิ! เราสามารถทำงาน "ตัดการเชื่อมต่อ!" nyuck, nyuck, nyuck ปริมาณข้อมูลจริงทำให้แอปของคุณหยุดชะงักเนื่องจากคลาส asp.net ทำท่าว่าเป็นเครื่องมือฐานข้อมูล แต่เรากำลังบันทึกการเชื่อมต่อจากการสึกหรอ!
Radarbob

1
ทั้งหมดพูดจาโผงผางนี้เป็นจริง ... หัวใจเป็นความจริงอย่างยิ่ง ฉันได้เห็นสิ่งที่อธิบายไว้ในโพสต์นี้เกี่ยวกับแอปพลิเคชัน WebForms มากมันทำให้ฉันรู้สึกว่าแอปพลิเคชันเหล่านี้ดีกว่าสคริปต์ PHP บางตัวที่ถูกรวมเข้าด้วยกันโดยเด็กนักเรียนมัธยมคนหนึ่ง
Greg Burghardt

12

สิ่งนี้มีอยู่ทั่วไปในอุตสาหกรรมซอฟต์แวร์หรือไม่

พบบ่อยมาก เกี่ยวกับความเหมือนกันของช่างประปาที่ทำลายช่างประปาช่างไม้ที่ส่งขยะหรือช่างตัดเสื้อราคาถูกสร้างชุดที่ไม่เหมาะสม คือมนุษย์ทุกคน

มีเหตุผลที่ดีว่าทำไมสิ่งนี้เกิดขึ้น: คนที่ไม่ได้รับการฝึกฝนจริง ๆ (หรือไม่กระตือรือร้น) ต้องใช้บางสิ่งภายใต้ความกดดัน

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

หรือบางคนที่ยอดเยี่ยมในโดเมน แต่ไม่ใช่โปรแกรมเมอร์อาจแฮ็กแอปพลิเคชั่น VBA เป็นต้นเพราะดูเหมือนจะเป็นเรื่องง่ายในตอนแรก

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

ฉันจะมั่นใจได้อย่างไรว่าฉันอยู่เหนือ OOP และหลักการที่เกี่ยวข้อง ฉันฝึกฝนในเวลาว่างและรู้สึกว่าฉันต้องการทำงานภายใต้นักพัฒนาที่มีประสบการณ์มากขึ้นเพื่อให้ดีขึ้นที่ OOP

มีสองคำตอบที่เป็นไปได้:

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

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

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

ที่นำไปพัฒนาที่มีการฝึกอบรมให้คุณได้ค่อนข้างเรียนรู้สิ่งที่อยู่ในตรงทางนี้ ...


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

@nocomprende คุณกำลังแสดงความคิดเห็นของคุณฉันไม่ได้บ่งบอกถึงสิ่งที่คุณเขียน แต่อย่างใด ฉันอธิบายเหตุผลสำหรับความจริงที่ OP สังเกตเห็น
AnoE

ฉันแค่คิดต่อไปเกี่ยวกับคำถามของ Kurt Vonnegut จากGod Bless You Mister Rosewater : "ผู้คนในนรกกำลังทำอะไร?

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

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

11

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

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

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

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


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

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

1
@JanHudec ฉันเป็นผู้ชายฉันรู้สึกเหมือนฉันอยากมีน้องเล็ก ๆ จากวิทยาลัยมากกว่าหนึ่งในประสบการณ์กว่า 20 ปีที่คนพูดถึงโปสเตอร์ดั้งเดิม
Mikey Mouse

9
@ MikeyMouse จริงมีหลายคนที่ไม่มีประสบการณ์ 20 ปี แต่มีประสบการณ์มากกว่า 20 เท่า 1 ปี และพวกเขาสะกดปัญหาใหญ่มาก
Jan Hudec

".. หลักการปีเตอร์ .. "; โดยเฉพาะอย่างยิ่งในหน่วยงานรัฐบาลซึ่งเป็นปรากฏการณ์ที่มีสติมากขึ้น ฉันเรียกมันว่าโปรแกรมการจัดการสายเลือด ในขณะที่มักจะมีความสมดุลของ coders ดี / ไม่ดีสยองขวัญคือเมื่อ MIP บังคับความไร้ความสามารถอีกครั้ง ปีต่อมาเมื่อ jr บางอย่าง โปรแกรมเมอร์ตอนนี้หัวหน้าแผนกซึ่งจะไม่ส่งเสริมใครดีกว่าพวกเขาคนดีและความคิดออกหรือถูกบังคับ ร้านค้ากลายเป็นกรณีตะกร้าไร้ความสามารถ; ติดอยู่ใน "ความคิดรังสีพื้นหลังส่วนที่เหลือ" ของการเขียนโปรแกรมบนเมนเฟรมคอมพิวเตอร์ในวัฒนธรรมของการเข้ากัน
Radarbob

7

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

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

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

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

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


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

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

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

1
มันจะไปอีกครั้งได้อย่างไร รหัสถูกเขียนครั้งเดียวและอ่านหลาย ๆ ครั้ง เขียนความคิดเห็นและคุณจะประหยัดเวลาในระยะยาว @BgrWorker ฉันคิดว่ามันขึ้นอยู่กับบุคคลนั้น ฉันเขียนอัลกอริธึมเป็นประจำและฉันคิดว่าพวกเขาสมควรได้รับความคิดเห็น (ล่าสุดเป็นนักแยกวิเคราะห์คณิตศาสตร์ที่เป็นสัญลักษณ์ ... ต้องการความเห็นอย่างแน่นอน)
27

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

2

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


ความล้มเหลวมักจะไม่ใช่ตัวเลือกอย่างใดอย่างหนึ่ง

1

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

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

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

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

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