《Working Effectively With Legacy Code》译序

2024-03-22 17:18

本文主要是介绍《Working Effectively With Legacy Code》译序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

修改代码之三十六计

                                               by 刘未鹏

 

六六三十六,数中有术,术中有数。阴阳燮理,机在其中。机不可设,设则不中。

                                                     —— 《三十六计》

 

一本好的技术书籍一般有两种情况,一是介绍一些新奇而有趣的技术,二是能将现有的技术阐述或概括得通透淋漓。然而其实还有第三种——既非介绍新奇的技术,也非阐述既有技术。而是将大量被长期实践所证明了的各种技术手法囊括至一起,看来琳琅满目五花八门,但又各有各的用武之地。这样的书一般较少见,因为需要长期的积累和时间的洗礼。

 

本书正是这样一本书。

 

说实话,对于这样一本由“鲍勃大叔”亲自作序,Amazon上书评篇篇都是五星加夸赞的书,我这个译者反倒有点遑于置评了。要想知道这本书为什么填补了一项重要的空白(在Kent Beck的《测试驱动开发》、Martin Fowler的《重构:改善既有代码的设计》、Robert C. Martin的《敏捷软件开发:原则、模式与实践》等重磅炸弹投下之后),可以看Michael Feathers的前言。要想知道这本书为什么值得你放在书架上,可以看鲍勃大叔的序。要想知道读者怎么认为,可以看Amazon上的书评。

 

所以,与其画蛇添足,不如随手摘来Amazon上的一些书评片段:

 

“大多数软件开发方面的书籍都是关于原生开发的:教你如何从无到有创建出一个新的应用来。然而实际情况却是,真正身处业界往往大部分时候面对的却是既有代码:添加特性、寻找bug,以及重构别人写的代码。因此书籍跟实践这两个世界就产生了不平衡,而本书正是在平衡这两个世界上迈出了漂亮的一步。”

 

Feathers用简洁清晰的代码示例漂亮地阐述了我们面对的各种问题场景…书中的代码示例跟我在实际工作中常常遇到的那些问题代码非常相近…”

 

“总的来说,这本书写得非常漂亮,将一个以前很少被涉及但很重要的主题作了极好的阐述。”

 

“我想在接下来的几年中我都会时常把这本书从书架上拿下来翻阅。”

 

那么,请带上这只妙计锦囊吧,enjoy

 

 

最后,感谢刘江编辑容忍我一而再的拖稿,让我得以在繁忙的一年仍能够认真译完这本好书。感谢父母一直以来的支持和鼓励。

          刘未鹏

          072

          于 南京

 


这篇关于《Working Effectively With Legacy Code》译序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835788

相关文章

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

Eclipse或MyEclipse中Java Working Set管理项目

随着学习JAVA的时间的越来越久,项目也越来越多,Eclipse或MyEclipse界面中显示一堆! 每次工作使用到的项目肯定不会太多...... 每次从这么大数量的工程当中找到自己要使用的, 必须大规模的滚动滚动条...... 图片一   Project Explorer中:    图片二:Package Explorer中: 这样就好找很多了,分类放!

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

Behind the Code:与 Rakic 和 Todorovic 对话 OriginTrail 如何实现 AI 去中心化

原文:https://www.youtube.com/watch?v=ZMuLyLCtE3s&list=PLtyd7v_I7PGnko80O0LCwQQsvhwAMu9cv&index=12 作者:The Kusamarian 编译:OneBlock+ 随着人工智能技术的飞速发展,一系列前所未有的挑战随之而来:模型的衰退与互联网的潜在威胁愈发明显。AI 的增长曲线可能因训练过程中的瓶颈而趋于平

冒泡排序和鸡尾酒排序(code)

昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一、冒泡排序 # 冒泡排序class BubbleSort(object):def __init__(self, data_list):self.data_list = data_listself.length = len(data_list)# 简单粗暴的排序方式def b_sort(self):d

编译时出现错误 -- clang: error: linker command failed with exit code 1 (use -v to see invocation)

出现这个错误的原因有多种,常见的是因为某些文件的缺失或者是文件的重复导致的。 这类错误查看的关键在于其上一行的文字。 对于文件缺少而导致错误的情况: 例如上图中的示例,其上一行文字为 ld:library not found for -lrxl,可以看出是缺失了某一文件而导致的错误,这行文字中的最后“ -lrxl ”:-l 代表着其前缀是“lib”,连着后面的 rxl,其名称为 libr