คุณอ่านรหัสของผู้อื่นได้อย่างไร? [ปิด]


23

โปรแกรมเมอร์ขั้นสูงเกือบทุกคนบอกว่ามันมีประโยชน์มากในการอ่านรหัสของผู้เชี่ยวชาญอื่น ๆ พวกเขามักจะแนะนำโอเพนซอร์ส

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

คำตอบ:


25

คุณอ่านหรือไม่

ใช่.

ถ้าคุณทำบ่อยแค่ไหน

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

และขั้นตอนในการอ่านรหัสคืออะไร

หนอ เปิดและอ่าน

นอกจากนี้ยังเป็นเรื่องยากสำหรับมือใหม่ที่จะจัดการกับ SVN - ไฟล์จำนวนมาก ทางออกคืออะไร?

เปิดและอ่าน จากนั้นอ่านเพิ่มเติม

มันไม่ง่าย. ไม่มีอะไรทำให้ง่าย ไม่มีถนนหลวงให้เข้าใจ มันใช้งานได้


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

1
@Sergey: "วิธีการกำหนดว่าเป็นรหัสที่ดีหรือไม่?" อ่านรหัส "ดี" เป็นเรื่องส่วนตัว หากเป็นประโยชน์และคุณสามารถเข้าใจได้ดี ถ้ามันสับสนหรือใช้งานไม่ได้จริง ๆ มันก็ไม่ดี มีคุณสมบัติคุณภาพหลายอย่างมากมาย: บำรุงรักษาได้ปลอดภัยปรับตัวได้ประสิทธิภาพสูง ฯลฯ ฯลฯ ฯลฯ รหัสสามารถดีที่หนึ่งและดีที่อื่น
S.Lott

7
ฉันไม่สามารถต้านทาน: osnews.com/images/comics/wtfm.jpg
Gary Willoughby

@Sergey - แม้ว่าจะเป็นรหัสที่ยิ่งใหญ่ที่สุดเท่าที่เคยเขียนมาถ้าคุณไม่สามารถอ่านได้ (เพราะระดับประสบการณ์ของคุณ) มันจะไม่ทำอะไรที่ดีให้คุณ แม้ว่าคุณจะเห็นว่ามันไม่ใช่การใช้เวลาอย่างคุ้มค่าที่สุด แต่คุณจะได้รับโค้ดที่เขียนไม่ดีดังนั้นคุณอาจเรียนรู้ความแตกต่างได้เช่นกัน เช่นเดียวกับ S.Lott กล่าวว่าต้องใช้เวลาและงาน
JeffO

ในขณะที่ฉันชื่นชมผู้ที่สามารถนั่งอ่านรหัสเหมือนที่พวกเขาอ่านนิยายฉันพบว่ามันน่าเบื่อบ้างในบางครั้ง ฉันได้ตระหนักว่าสำหรับฉัน 'รหัสการอ่าน' ไม่ได้อธิบายกิจกรรมที่ฉันทำจริง ๆ - วลีที่ดีกว่าสำหรับสิ่งที่ฉันทำคือ 'ความเข้าใจโค้ด' และเกี่ยวข้องกับการอ่านเอกสาร ฉันเขียนบทความยาว ๆ เกี่ยวกับการอ่านโค้ด - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

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

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

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


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

5

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

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

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


4

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


1
+1: ฉันด้วย // ครั้งหนึ่งฉันเคยมีหัวหน้าคนหนึ่งที่สังเกตเห็นการเปลี่ยนโฉมใหม่และกล่าวหาว่าฉันเสียเวลา เขาไม่เข้าใจ ช่างเป็นคนโง่
จิมจี

2

การจัดการกับ "กลุ่มไฟล์" ยากแค่ไหน? มันไม่ต่างจากตอนที่คุณเขียนโค้ดของคุณเองยกเว้นว่าคุณไม่มีความรู้เกี่ยวกับองค์กรของมันมาก่อนเว้นแต่จะมีการบันทึกไว้

หากคุณในฐานะโปรแกรมเมอร์ที่อ้างสิทธิ์ไม่สามารถหาโครงสร้างโครงการจาก "ไฟล์จำนวนมาก" ไม่ว่าจะเป็นโครงการที่มีการจัดระเบียบไม่ดีมากหรือคุณเป็นโปรแกรมเมอร์ที่ไม่เหมาะสม (หรือในกรณีที่รุนแรง)

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


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

0

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

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

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


0

หลังจากดูที่ "ขั้นแรกให้เริ่มที่ระดับสูงมุมมองที่เป็นรูปนก" เป็น @Berin Loritsch ที่คุณคับคั่งคุณสามารถมองหา unittests และ / หรือการทดสอบการรวมระบบหากมี

unittestsน่าสนใจเพื่อดูว่า (api-) รายละเอียดทำงานอย่างไร

การทดสอบมักจะให้ภาพรวมที่ดีเกี่ยวกับกระบวนการทางธุรกิจ

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