ในฐานะวิศวกรซอฟต์แวร์การอ่านโค้ดของผู้อื่นมีความสำคัญแค่ไหน?


25

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


1
คุณรู้สึกว่าคุณเข้าใจโค้ดเมื่อมีการอธิบายให้คุณฟังหรือคุณเพิ่งเรียนรู้จากการลองผิดลองถูก?
JeffO

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

เพิ่งอ่านบทความเช้านี้ที่ทำให้ฉันนึกถึงคำถามนี้ ทำไมการทำงานกับ Chrome จึงทำให้ฉันพัฒนาเครื่องมือสำหรับการอ่านซอร์สโค้ด
Eric King

นี่เป็นคำถามที่ยอดเยี่ยม! ฉันมีคำถามติดตาม: หากคุณทำงานด้วยตัวเองเป็นหลักในรหัสของคุณเอง (เช่นเป็นโปรแกรมเมอร์ทางวิทยาศาสตร์ในโครงการขนาดเล็ก) คุณจะหารหัสที่ดีในการอ่านได้อย่างไร สิ่งนี้เคยถูกถามมาก่อน: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

1
สำเนาที่เป็น

คำตอบ:


49

มันเป็นสิ่งสำคัญ

วิธีที่คุณพัฒนามันคือการเขียนโค้ดของคุณเอง (มากมาย) และใช่การดิ้นรนอ่านรหัสของคนอื่น

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

มันเป็นไปตามที่คุณควรจะอ่านรหัสที่ดี

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

คุณควรศึกษาอัลกอริทึมและโครงสร้างข้อมูล

ข้อสรุป: คุณควรพยายามเขียนโค้ดที่นักพัฒนาซอฟต์แวร์รายอื่นสามารถเข้าใจได้ง่าย


7
ข้อสรุป: เริ่มง่ายๆโดยพยายามเขียนโค้ดที่คุณสามารถเข้าใจได้อย่างง่ายดาย :-)
gnasher729

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

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

15

มันสำคัญมาก

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

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

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


7

มันเป็นทักษะที่สำคัญขึ้นอยู่กับลักษณะเฉพาะของที่ทำงานของคุณมันอาจจะสำคัญกว่าการเขียนโค้ดเอง

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


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

4

มีทักษะที่แตกต่างทั้งในการอ่านและการเขียนโค้ด

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

สำหรับการอ่านและการเขียน ใช่การอ่านเป็นสิ่งจำเป็น
Maxims เล็กน้อยที่ช่วยพวกเราหลายคนด้วย:

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

ตกลง. นั่นคือทั้งหมดที่ดี ตอนนี้ถึงสิ่งที่คุณอาจประสบอยู่

OMG, codebase ขนาดใหญ่ที่น่าประหลาดใจนี้มีซอร์สโค้ดและคลาสนับหมื่น ๆ บรรทัดที่มีความยาวหลายร้อยบรรทัดพร้อมการพึ่งพาบ้าและทุกครั้งที่ฉันพยายามทำตามสิ่งที่ฉันต้องรักษา 10 ระดับในหัวของฉัน ฯลฯ ฯลฯ
คุ้นเคยกับเสียง ? ใช่. หายใจเข้าลึก ๆ. ผ่อนคลาย. เป็นเรื่องปกติ มันเป็นสิ่งที่ระบบการผลิตทำขึ้นมา ผู้คนรอดชีวิต (และเฟื่องฟู) ในสถานการณ์ที่ไม่อาจเข้าใจได้เพราะ:

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

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

1

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

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

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

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


0

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

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

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

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


0

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

คุณบอกฉันว่าฉันสามารถทำงานของฉันได้โดยไม่ต้องอ่านรหัสของคนอื่นอย่างรวดเร็ว หากคุณไม่สามารถอ่านรหัสของคนอื่นได้แสดงว่าคุณติดอยู่อย่างสมบูรณ์ที่สุด

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