วิธีในการทำลาย“ กลุ่มอาการของโปรแกรมเมอร์ที่สมบูรณ์แบบ” [ปิด]


16

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

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

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


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

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

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

ไม่มีโปรแกรมเมอร์ที่สมบูรณ์แบบ คุณอาจพบคนที่มีประสบการณ์และมีรายละเอียดที่มีแรงผลักดันและความปรารถนาในการพัฒนาทักษะของเขา / เธอ - คุณอาจเรียกพวกเขาว่า "go Getters" ...
Yusubov

"ฉันต้องทำตามกฎ" ... และมีปัญหาของคุณ "แนวทางปฏิบัติที่ดีที่สุด" กฎ arent เป็นข้อเสนอแนะตามประสบการณ์โดยรวม หากคุณปฏิบัติต่อพวกเขาเป็นกฎที่ไม่สามารถแตกหักได้ฉันจะเห็นรากของความเครียดของคุณ
GrandmasterB

คำตอบ:


21

จัดลำดับความสำคัญ สิ่งแรกก่อน มุ่งเน้นไปที่สิ่งที่สำคัญ

ลำดับความสำคัญของคุณอาจแตกต่างกัน แต่โดยทั่วไปคุณควรใส่ใจกับ:

  • รหัสที่ถูกต้อง
  • รหัสบำรุงรักษา
  • รหัสสะอาด
  • รหัสเรียบง่ายสง่างาม
  • รหัสที่มีประสิทธิภาพ

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

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

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

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

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

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


9
การเพิ่มประสิทธิภาพที่ดีที่สุดคือโปรแกรมที่นำโปรแกรมของคุณจากสภาวะที่ไม่ทำงานสู่สภาวะการทำงาน
deadalnix

1
@deadalnix คำแนะนำที่สมบูรณ์แบบ! มันง่ายมากชัดเจนมาก แต่ก็เป็นจริงในทุกรหัส
zxcdw

7
+1 ฉันต้องการพิจารณาวางบำรุงรักษาดังกล่าวข้างต้นที่ถูกต้อง เพราะคุณภาพของรหัสที่สามารถบำรุงรักษาได้ทั้งหมดก็คือการทำให้ถูกต้องเป็นเรื่องของความพยายามตามสมควร;)
back2dos

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

2
@HLGEM แน่นอนในบางสาขาลำดับความสำคัญอาจจะกลับรายการทั้งหมด ตัวอย่างเช่นในบางครั้งฉันเขียนและรหัสแอสเซมบลีวิศวกรย้อนกลับซึ่งได้รับการเขียนภายใต้ข้อ จำกัด ขนาดและความเร็วสูง (ผลิตภัณฑ์ demoscene) ในสถานการณ์เช่นนี้แม้แต่ความถูกต้องของโปรแกรมอาจถูกตั้งคำถาม - รหัสชิ้นส่วนจำนวนมากที่ทำงานผิดปกติได้ดีมาก (ตัวอย่างภาพและเสียงที่สวยงามตามรหัสที่ไม่ถูกต้องเป็นต้น)
zxcdw

6

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

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


+1 ฉันชอบส่วน .. "ความพยายามครั้งแรกของคุณ" ดีพอ "เว้นแต่จะพิสูจน์เป็นอย่างอื่น"
Rushino

ที่สองและ upvoted คำแนะนำทองคำอย่างแน่นอน!
zxcdw

4

ฉันคิดว่ายาแก้พิษที่ดีที่สุดคือเตือนตัวเองว่าวิธีปฏิบัติที่ดีที่สุดและกฎการรักษาความสะอาดของรหัสนั้นไม่มีอยู่เพื่อประโยชน์ของพวกเขาเอง

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

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


2

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

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


1

ทำอย่างอื่นรอบ ๆ

แทนที่จะเป็น "สิ่งที่สามารถทำได้ดีกว่า" ค้นหา "อะไรที่ทำให้ฉันโกรธ" จนกระทั่งไม่มีอะไรทำ


4
"หนังสือไม่เสร็จสิ้นเมื่อไม่มีสิ่งใดสามารถเพิ่มได้อีก แต่เมื่อไม่มีสิ่งใดสามารถลบออกได้" - Code Complete
Jonathan

จริงๆแล้วมันเป็นการถอดความจาก Saint-Exupéryตลก ๆ ว่าเขาจะมีความน่าเชื่อถือน้อยลงได้อย่างไร
scrwtp

1

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


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

1

ทำให้มันทำงานทำความสะอาดทำให้มันเป็นของแข็ง

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

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

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


0

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

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


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