วิธีฝึกตัวเองให้หลีกเลี่ยงการเขียนรหัส“ ฉลาด” [ปิด]


75

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

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

ฉันจะทำอะไรได้บ้างที่จะต่อต้านการกระตุ้นให้เขียนรหัส“ ฉลาด”และเสียงกระดิ่งที่ฉันควรทำเมื่อใด

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


5
ปิดหัวข้อเล็กน้อย แต่thedailywtf.com/Articles/…

@Joe: นี่เป็นหัวข้อที่ดีมากขอบคุณ! ฉันได้อ่านบทความนี้แล้ว
Dan

33
แก้ไขข้อผิดพลาดรหัสฉลาดมาก ... ที่ควรทำเคล็ดลับ
Dan Olson

@ โจฐานข้อมูลของฐานข้อมูลลิงค์ในบทความนั้นจะตาย
jnewman

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

คำตอบ:


54

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

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

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

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

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

บางครั้งการตรวจสอบโดยเพื่อนเป็นวิธีที่ดีที่สุดในการดูงานของคุณเอง


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

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

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

2
พุทโธ่. ฟังดูน่าตื่นเต้น - ด้วยความหมายที่ดีและไม่ดีทั้งหมดที่คำนั้นนำมาด้วย :-) ขอให้โชคดีเพื่อน; ที่นี่หวังว่าคุณจะเป็นจุดเริ่มต้นของบางสิ่งบางอย่างที่ดี
BlairHippo

8
@BlairHippo: ฉันเพิ่งทำตามคำแนะนำของคุณสงบลงและขอให้เพื่อนร่วมงานที่ชี้ปัญหาที่ได้รับการแนะนำจากการเปลี่ยนแปลงของฉันเพื่อทำรีวิวอย่างไม่เป็นทางการกับฉันและเขาก็เห็นด้วย สิ่งนี้ยังช่วยในการลบความอึดอัดบางอย่างออกจากการสนทนาของเรา (เช่นใน "คุณเขียนโค้ดที่ซับซ้อนและฉันต้องแก้ไขมัน .. ") ขอบคุณ!
Dan

20

สิ่งที่ดีที่สุดที่ควรทำคือระลึกถึง Brian Kernighan ให้มากที่สุด:

“ การแก้จุดบกพร่องนั้นยากกว่าการเขียนโค้ดตั้งแต่แรก ดังนั้นถ้าคุณเขียนรหัสอย่างฉลาดที่สุดเท่าที่จะทำได้คุณจะไม่ฉลาดพอที่จะทำการแก้ไข”


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

13
+1 สำหรับจุดสูงสุดที่ลิงรหัสทุกคนควรรู้ด้วยใจ แต่ -1 ไม่ให้ OP เข้าใจถึงวิธีการใช้มันกับงานของเขา ดังนั้นทุกอย่างจึงไม่มีลูกศรคลิก
BlairHippo

2
คำพูดที่ยอดเยี่ยม แต่ไม่ใช่คำตอบสำหรับคำถามของ OP
Jim G.

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

2
-1: ไม่ตอบคำถามของ OP เพียงเล็กน้อย
Thomas Eding

15

โดยปกติจะมีวิธีแก้ไขปัญหาซอฟต์แวร์ที่สำคัญอย่างน้อยสามวิธี: วิธีที่ชัดเจนวิธีที่ไม่ชัดเจน (ฉลาด) และวิธีง่าย ๆ ที่ไม่ชัดเจน (สง่างาม) อ้างเกี่ยวกับผู้เขียนสามารถใช้ได้ที่นี่:

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

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

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


3
นั่นทำให้ฉันนึกถึงคำพูดของนักคณิตศาสตร์เก่า: "สำหรับทุกปัญหามีวิธีแก้ปัญหาที่ง่ายสง่างามและผิด"
Joris Timmermans

9

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


ฉันพยายามกำหนดสิ่งนี้ให้กับตัวเองทุกครั้งที่มีเวลา
jnewman

การเขียนการทดสอบหลังจากนั้นเป็นวิธีที่ดีในการสังเกตเห็นความผิดพลาดครั้งใหญ่ในโค้ดของคุณ มันเป็นการทบทวนตนเอง แต่ TDD เป็นวิธีที่ดีที่สุดถ้าคุณเริ่มต้นใหม่
Vanna

6

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

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

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

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

ฉันเสียใจที่ไม่เคยมีใจที่เปิดกว้างมาก่อนและหวังว่าฉันจะไม่ได้รับความเมตตาจากนักพัฒนารุ่นเยาว์ที่ฉลาดเช่นนี้

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

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


6

ถ้า 20% (% ของคุณอาจแตกต่างกันไป) หรือมากกว่าของสายการเพิ่มของคุณจะต้องมีเอกสาร - มันถึงเวลาที่จะย้อนกลับไปและคิดใหม่

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


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

@deadalnix: ไม่ใช่จุดที่ไม่ดี ฉันสงสัยว่า% ของฉันจะสูงกว่ามากที่สุดเพราะฉันมักจะเขียนโค้ดในภาษาแอสเซมบลีที่ตายแล้วและแมโครอย่างหนัก อ่านยากยิ่งขึ้นและการจ้างงานใหม่ทุกครั้งจะต้องเรียนรู้ langague จึงจำเป็นต้องมีการแสดงความคิดเห็นเพิ่มเติม
DKnight

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

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

@deadalnix - รหัสที่สมบูรณ์แบบไม่เคยเป็นทางออกในทางปฏิบัติในโลกแห่งความเป็นจริง
JeffO

4

ฉันไม่สามารถต้านทานการลองอะไรที่ฉลาดได้

ดังนั้นฉันจึงทำมันในโครงการของเล่นที่บ้านเวลาของฉันเอง

เมื่อสิ่งแปลกใหม่สึกหรอ - ปัญหาได้รับการแก้ไข


3

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

ถ้าฉันจะให้พิมพ์รหัสนี้ให้กับคนที่ไม่เคยทำงานในโครงการ / รหัสพวกเขาจะสามารถอ่านและอธิบายกลับมาให้ฉันฟังก์ชั่นอะไร (หลังจากให้บริบทสั้น ๆ )? ถ้าไม่ฉันต้องอธิบายมากแค่ไหน? ฉันจะอธิบายเรื่องนี้กับคนที่รับ CS101 ได้อย่างไร

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


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

2

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

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

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


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

@BlairHippo HA! "ตรวจสุขภาพขั้นสุดท้าย" ฉันชอบสิ่งนั้น
ฟิลิป

2

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

มีกรอบการฉีดโอเพ่นซอร์สพึ่งพาในการทำงานที่เพิ่งขอExpressionความรู้เคล็ดลับมีF #และช่วงของงานที่ยอดเยี่ยมอย่างใดอย่างหนึ่งอาจต้องการที่จะลอง

หากคุณเข้าสู่วิชาคณิตศาสตร์ (และเป็นผู้ไม่เชื่อเรื่องภาษา ) มีProject Eulerสำหรับคุณ

สุดท้าย แต่ไม่ท้ายสุดในโลก. NET มีMono Projectที่มีพื้นที่มากมายที่ต้องการความสนใจจากนักพัฒนาบางคนค่อนข้างซับซ้อน วิธีการเกี่ยวกับการบริจาคไปยังแหล่งที่มาคง .NET เครื่องมือรหัสวิเคราะห์เปิด ? มีการวิเคราะห์ของ IL ที่เกี่ยวข้องรวมถึงเรื่องระดับสูง Jb Evainทำงานกับสิ่งที่น่าสนใจเสมอไม่ว่าจะเป็น Cecil reflection library, Expressionsupport หรือ. decompiler. NET

หากไม่มีสิ่งใดเหมาะสมให้เริ่มกรอบการเยาะเย้ยของคุณเอง :-)


2

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

ไม่

นี่คือหนึ่งในเหตุผลที่ฉันมักจะพูดว่ามันเป็นสิ่งที่ดีเมื่อนักพัฒนาใหม่ได้รับการโยนลงไปในระเบียบใหญ่ของรหัส speghetti ที่ไม่มีเอกสารเพื่อรักษาและ refactor มันจะสอนพวกเขาถึงความเป็นจริงของการรักษารหัส 'ฉลาด' ที่พวกเขาไม่ได้เขียนและหวังว่าจะปลูกฝังความเห็นอกเห็นใจผู้ที่ยากจนซึ่งจะต้องแก้ไขรหัสของพวกเขา 5 ปีนับจากนี้


ฉันคิดว่านี่น่าจะทำให้พวกเขาผิดหวังและคิดว่ารหัสของพวกเขาจะดีกว่าและสง่างามกว่า noobs ผู้เขียนระเบียบนี้ ไม่มีใครเขียนรหัสด้วยความตั้งใจที่จะทำให้มันยากที่จะรักษา
sara

2

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

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

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

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

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

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

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

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


1

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

แก้ไขในแง่ของ -1:

ดวงจันทร์จำนวนมากที่ผ่านมาฉันอยู่ในสถานการณ์เดียวกัน - ฉันมีเจ้านายคนหนึ่งที่จะประจบประแจงทุกครั้งที่ฉันใช้ตัวชี้ใน Delphi หรือ 'with build' อีกคนหนึ่งที่ขู่ว่าจะยิงฉันถ้าฉันไม่หยุด booleans ทั้งหมดของฉัน ด้วย 0-1 และใช้ตัวแปรตัวอักษรเดียวทุกที่

ฉันเรียนรู้เพราะฉันถามว่าทำไมและพวกเขาจึงมีปัญหาในการอธิบายเพราะพวกเขาคิดว่าฉันอาจจะมีค่ากับบางสิ่งบางอย่าง - ฮ่า ๆ ....


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

1

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

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

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


0

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

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

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

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


-2

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

  • โปรแกรมเมอร์ในทางปฏิบัติ
  • รหัสเสร็จสมบูรณ์
  • ทำความสะอาดรหัส

และอื่น ๆ ขึ้นอยู่กับเทคโนโลยีที่คุณใช้


-2

แค่จำไว้ว่าYAGNI - คุณไม่ต้องการมันหรอก

โปรแกรมเมอร์ไม่ควรเพิ่มฟังก์ชันการทำงานจนกว่าจะเห็นว่าจำเป็น ...

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

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

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

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