程序员修炼之道 pdf_程序员的修炼之道:实用主义的生存法则

全文共2538字,预计学习时长8分钟

bf5d2ab541fad8cf0af0e2b43b3d15d3.png

图源:unsplash

谈到程序员界的“实用”你会想到什么?我会想到安德鲁·亨特和戴维·托马斯编写的《程序员修炼之道》一书。尽管是一本技术类书籍,但内容非常具有哲理性,而且适合所有想学实用思维模式的人。

本文将带你一探这本书告诉我们的程序员“实用主义”生存法则。

精练技术

作为软件工程师,我们一生都在开发和维护软件。我们不仅得对产品负责,更拥有所编代码的所有权。

提供解决方法而不是蹩脚的借口

每个人都会犯错误。如果发现任何问题,都应该给出解决方法,而不是找借口来推脱责任或对他人指指点点。

DRY

80db9446c26380b4af8b2d6d9e5d5a85.png

在编写代码时不应该复制自己的代码,重复代码会导致代码重构和维护不良。但你有没有想过,我们为什么会复制代码呢?

· 复制代码似乎对程序员来说更舒服

· 复制代码是程序员偷懒的一种方式

· 在庞大的团队中工作,由于缺乏知识而复制之前的代码。

· 由于缺乏架构知识,开发人员认为复制代码是他们唯一的选择。

莫立于危窗之下

如果楼房的窗户被打碎又一直未经修理,会有一种被遗弃的感觉。人们就会开始乱扔垃圾、到处涂鸦,很快窗户就会破损得更严重。

软件也同样如此。错误代码会产生更多错误代码。如果我们遇到糟糕的设计、错误的决策和低劣的代码,我们应该采取正确的措施,以防进一步的损失。

79189c6ed34b0cefbd1d9b84138b3630.png

图源:unsplash

正交性

根据几何定义,如果两个向量垂直,即构成一个直角,则称它们正交。

如果我们设计一个系统,让两个系统只在一点连接。这将提高生产力并降低风险,这样的系统更容易测试。

准备好迎接变化

没有最终的决定,也没有一成不变的东西。好的设计比坏的设计更容易改变。

曳光弹

新的项目需求并不明确。新算法、新技术、新语言或未知库的使用将出现,环境也会随着时间而改变。

类似曳光弹,它会显示我们击中的目标。虽然不能总是达到目标,但我们可以做出相应的调整来达到目标。

它的好处在于:

· 用户可以尽早看到效果。

· 开发人员可构建一个工作结构。

· 程序员能够有东西证明。

工具

任何优秀的工匠都知道,有了计划之后不要立马开展工作。先要准备工作环境和所需的工具。假如一位樵夫使用钝锯,那将耗费许多时间完成工作。但如果我们先打磨好工具,就可以高效地完成工作。

编程也不例外。准备充分的工具和优质的工作环境将大大提高生产力。我们需要熟练掌握编辑器的使用、电脑终端和纯文本。源代码控制就像GIT系统一样,是使协作、回滚和共享变得容易的必备工具。

d2ecf1ab418c45f1e963fe200fb36c90.png

图源:unsplash

石汤与煮青蛙

一起来看看编程领域中一种有趣的哲学——“石汤与煮青蛙”:

https://www.youtube.com/watch?v=9KejHBhTuPM

知识体系

技术发展日新月异。如果不吸纳新的知识,就可能随着时代发展而被淘汰,所以要定期学习新知识,把它当成一种习惯。

如果你处在某个新语言或新技术的舒适区,那就继续学习另一种新的语言。不同类型的知识以不同方法解决同样的问题,而且学习不同的方法可以拓展对问题的思考并避免一些问题发生。

可以在线搜索一些有趣的课程,以及国内外的讲座或会议内容进行学习。除此之外,网上有许多优秀的在线资源,要好好利用,放眼整个行业,了解最新发展动态。

交流

好的创意需要交流。如果我们不与周围的人沟通,那好的创意和想法就失去了原有的意义。

在与他人交流的过程中,想好要表达的内容以及方式;也要换位思考,了解听者想要获取的信息,鼓励听者们参与进来:通过提问来交流和不断获得反馈。

73a664bc84d9331c346cb1d6a1eb2f55.png

图源:unsplash

调试

去解决问题,而不是一味地责备和抱怨。

千万不要浪费精力去无谓抱怨,问题确实已经发生了,试着了解问题的根本。这些调试策略会有所帮助:

· 使问题复现

· 将数据可视化

· 找人解释错误所在

· 追本溯源了解问题前因后果

· 如果可疑代码通过了单元测试,测试是否完成?

没有人能做出完美的软件,即便优秀的程序员也未必完全有信心,但每个人都可以试着不断接近完美。

测试

务实的程序员会主动尽早发现问题,这样就不必之后再面对问题。作为一般实践,测试应该在我们完成任何特征之前运行。除非所有测试都成功通过,否则编码永远不会完成。

法则是:提前测试,经常测试,主动测试。

断言式编程

使用断言能帮助我们及早发现错误,所有的错误都会给我们提供信息。

如果有任何错误,那就意味有一些地方出现问题了,需要尽早处理。断言可以用来防止我们假设它不会发生。

巧合编程

密切关注正在做的事情,避免巧合和意外。始终按照计划进行,并记录我们的假设。不仅要测试我们的代码,还要测试我们的假设。

程序员使用大O符号估计算法使用的资源,例如时间、处理器、内存等等。选择合适的算法时要务实,最快的算法并不总是最好的,要考虑用例。

a5d6a7c66a3c9376b2efd7298b837f9e.png

图源:unsplash

重构代码

我们的需求随着时间不断变化,因此需要重构代码来纠正,需要移动功能来提高系统的性能。

如果我们遇到代码重复或者违反DRY原则的情况,那么现在就是重构代码的好时机。耦合是重构代码的另一个重要因素,或者是否有机会使代码更加松散耦合。

记住一点尽早重构,经常重构。

需求

不要收集需求,要挖掘它们,这是优秀的程序员要做的,并为用例创建文档。

当用户和开发人员用不同的名称来指代同一事物,或者用相同的名称来指代不同的事物时,工作会变得非常困难。将文档发布到内部网站,以便所有合作伙伴都能轻松访问。

务实的团队

a5c9a4697bf1f9f15e77acb0a12a23e5.png

这一点适用于个人的实用技术也适用于团队。团队不应当容忍坏特征,所有这些小的故障,只能通过个人的贡献来改进。质量永远是团队关注的问题。

人们总是认为有人在寻求或者被指派解决某一问题,或不关我事。要打破这种想法,确保每个人都积极地监视环境的变化、问题和崩溃。尽可能多地让事情自动化。这能避免重复,提高团队效率。此外,自动化有助于保持整个团队的一致性。

标记工作

上了年纪的工匠们会自豪地在自己的成品上签名标记。作为务实的程序员,我们也应该这样做,把注释放在代码中,把我们的名字放在文件的开头,这会提高代码质量。另外,标注应说明其目的。

总是检查,常常阅读,不断修改,但只需要几次编写。这就是务实程序员的修炼之道。

507bed9ec008607dcd0227b01f6abe1a.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值