Skip to Content
软件工程基础
book

软件工程基础

by Nathaniel Schutta, Dan Vega
October 2025
Beginner to intermediate
392 pages
3h 56m
Chinese
O'Reilly Media, Inc.
Content preview from 软件工程基础

第二章 阅读 代码

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

代码被阅读的频率远高于被编写的频率。

Python 创建者 Guido van Rossum

尽管编程教学的方式如此,软件工程师花费在阅读代码上的时间远多于编写代码。在大多数初学者编程课程中,你立即跳入编写代码,专注于核心语言概念和惯用法,却未意识到你绝不会以类似方式学习波兰语或葡萄牙语。学术项目往往从零开始,而实战开发者却总在历经多年演变形成的代码框架中工作——第六章将对此进行深入探讨。

随着代理式编程(或称聊天导向编程)的兴起,1阅读代码对软件工程师的重要性将日益凸显。即便非你首选,你终将面对非亲手编写的代码。请放心,存在诸多技巧助你应对陌生代码。本章将剖析阅读代码的挑战根源,并提供简化流程的实用建议。

应对现有代码的挑战

无论你如何学习编程,很可能都曾在 绿地开发这片乐土中度过大部分时光——在那里你能体验从零开始的纯粹工作,不受既有成果的束缚。然而在职业生涯中,你几乎不可能再遇到从空白编辑器构建应用的机会。作为实战软件工程师,你将主要从事的棕地开发——在现有代码库的限制下工作,日复一日地处理遗留代码。

当要求解决涉及现有代码的问题时,你实际要应对四个层面的挑战。

首要任务是理解待解决的业务问题。而开发者所处的领域要求极高!软件正在吞噬世界,这意味着软件工程师面临着日益复杂的业务挑战;那些所谓的"低垂果实"早已被摘尽。

其次,你必须站在前任开发者的视角审视问题,这往往是软件开发中最具挑战性的环节。不同开发者解决问题的方式各异,每个人都有自己的习惯和倾向。或许你的前任偏爱某种你不太熟悉的功能式编程风格。或许他们运用了你陌生的设计模式,或调用了你未曾接触过的库。无论你是否认同其方法,解决特定问题本就有多种途径。

第三,现有代码可能缺乏恰当的抽象层次。其模型设计或许过于泛化,未能准确捕捉领域细节;也可能前任开发者混淆了两个概念,或在更合适的模式存在时强行采用偏好的模式。无论如何,可能需要进行大规模重构才能提升代码可读性。

第四,如同考古学家般,你往往需要层层剥离技术债务——那些 陈旧的技术与方法,如今可能已被视为反模式。随着时间推移,编程语言与最佳实践不断演进,2你必须透过代码诞生的时代背景来审视它。甚至仅凭框架或语言特性的使用(或缺失),就能像"碳年代测定法"般推断代码年代!Spring这类框架历经多年演进,常为同一问题提供多种解决方案。所谓"正确"的实现方式,本就在时间长河中不断更迭。

更棘手的是,你几乎总要面对层层叠加的补丁。或许前任开发者未能完全理解问题本质,或许他们未能及时掌握能大幅简化工作的语言新特性。也可能前任开发者持有AI编码助手的高级许可证,每天能生成两万行代码。再加上"快速修复"的典型要求,你可能要花整个下午才能破解一个方法。

处理现有代码的技术挑战显而易见,难怪它常被列为开发者最不愿面对的任务。但这种抗拒不仅源于技术问题,更涉及认知偏见 。

认知偏见

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

基于Python的DevOps

基于Python的DevOps

Noah Gift, Kennedy Behrman, Alfredo Deza, Grig Gheorghiu

Publisher Resources

ISBN: 0642572274962