ฉันควรทำอย่างไรเมื่อรหัสของฉันมีกลิ่น


13

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


15
ใช้ยาดับกลิ่น;)
Pemdas

6
และอาจจะเป็นยาฆ่าเชื้อ / ยาฆ่าแมลงกำจัดแมลง :-)
สตีเฟ่น C

3
กินกระเทียม คนอาจจะสังเกตเห็นกลิ่นปากของคุณมากขึ้น
Mateen Ulhaq

4
และตอนนี้คุณมี: codereview.stackexchange.comซึ่งคุณสามารถขอความช่วยเหลือเกี่ยวกับตัวอย่างรหัสของคุณได้
LRE

1
เปิดหน้าต่าง ... โอ้เดี๋ยวก่อน ...
Mchl

คำตอบ:


18

คำแนะนำเล็กน้อย:

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

  2. เรียนรู้และศึกษารูปแบบซอฟแวร์ รูปแบบซอฟต์แวร์ได้รับการทดลองและวิธีการพิสูจน์แล้วสำหรับการปฏิบัติงานทั่วไปและเป็นที่รู้จัก

  3. ศึกษาและทำความเข้าใจโครงสร้างข้อมูล เรียนรู้การใช้งานที่เหมาะสมและคุณสมบัติด้านประสิทธิภาพสำหรับโครงสร้างข้อมูลแต่ละประเภท

  4. รู้ภาษาการเขียนโปรแกรมของคุณดีจุดแข็งและจุดอ่อนของมันและวิธีการใช้คุณสมบัติที่ดีที่สุด

คุณไม่จำเป็นต้องรู้ทั้งหมดนี้ในครั้งเดียว แต่คุณควรศึกษามันทั้งหมดเมื่อเวลาผ่านไป


12

คำแนะนำของฉันคือหยุดกังวล

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

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

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


+1 สำหรับโค้ดที่ออกแบบมาไม่ดีจะดีกว่าโค้ดที่ไม่ได้เขียนดีมาก!
GrandmasterB

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

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

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

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

3

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


โทรดี! การรู้ว่าบางสิ่งที่ดีกว่านี้เป็นการเริ่มต้นที่ดี
ozz

2

ฉันควรจะลองและเรียนรู้ทุกสิ่งเล็กน้อยในครั้งเดียวหรือไม่?

ฉันหวังว่าไม่ ในอีกทางหนึ่งคุณควรเรียนรู้และปรับปรุงตลอดเวลา

อ่านหนังสือเรียนหลักสูตรรับคุณสมบัติทำงานและคุณควรปรับปรุง


2

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

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

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


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

2

ลองดูที่หนังสือRefactoring: การปรับปรุงการออกแบบของรหัสที่มีอยู่โดย Martin Fowler สิ่งแรกที่คุณควรทำคือปรับรหัสของคุณใหม่เพื่อปรับปรุงความสามารถในการอ่านรหัสและลดความซับซ้อนเพื่อปรับปรุงความสามารถในการบำรุงรักษาของมัน

เมื่อคุณ refactor รหัสของคุณคุณจะได้ใช้รูปแบบการออกแบบ , รหัสห่อหุ้มเซลล์แสงอาทิตย์ฯลฯ

นี่คือหนึ่งในหนังสือที่ดีที่สุดที่ฉันเคยอ่านเกี่ยวกับหัวข้อนี้ มันมีสูตรอาหารที่มีประโยชน์มากมาย


2

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

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

  • การออกแบบที่ดีจะนำแนวคิดจำนวนเล็กน้อยกลับมาใช้ใหม่ตลอดทั้ง codebase (อุดมคติคือแนวคิดหนึ่ง แต่ในทางปฏิบัติคุณอาจต้องการอีกสองสามข้อ)
  • การออกแบบที่ดีจะทำให้ง่ายต่อการทราบตำแหน่งที่จะแก้ไขปัญหา (หลักการ DRY, หลักการ SRP)
  • การออกแบบที่ดีจะมีการรายงานข้อผิดพลาดที่ดี (เกี่ยวข้องกับประเด็นข้างต้น แต่ถูกเรียกออกมาเป็นรายการแยกต่างหากเพราะเป็นแง่มุมที่มักถูกมองข้าม)

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


1

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

นอกจากนี้รูปแบบการออกแบบเป็นสิ่งที่ต้องรู้ - คิดเกี่ยวกับมันความคิดทั้งหมดของการมีรูปแบบคือการแก้ปัญหาที่รู้จักกันโดยไม่ต้องคิดค้นล้อหรือเขียนโค้ดบั๊กกี้

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


0

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

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


0

คำแนะนำของฉันคือการใช้กลิ่นแต่ละอย่างอย่างจริงจังและพยายามแก้ไข มีหนังสือดีๆมากมายในหัวข้อ (โค้ดสะอาดและ GOOS เป็น IMHO ที่ดีที่สุด) แต่มากกว่าหนังสือไปที่การประชุมเพื่อฟังและพูดคุยกับผู้อื่นและในชุมชนออนไลน์ (รายชื่อผู้รับจดหมายกลุ่ม) ยังดีกว่าลองเข้าร่วม xxug ในพื้นที่ของคุณ (dotnetug, jug, xpug ฯลฯ ) หรือพบหนึ่ง

พูดคุยกับโปรแกรมเมอร์คนอื่น ๆ เป็นวิธีเดียวที่ฉันรู้ว่าจะต้องปรับปรุงจริงๆ (เว้นแต่คุณจะโชคดีพอที่จะทำงานร่วมกับโปรแกรมเมอร์คนอื่นโดยเฉพาะ)

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