全文共2538字,预计学习时长8分钟
谈到程序员界的“实用”你会想到什么?我会想到安德鲁·亨特和戴维·托马斯编写的《程序员修炼之道》一书。尽管是一本技术类书籍,但内容非常具有哲理性,而且适合所有想学实用思维模式的人。
本文将带你一探这本书告诉我们的程序员“实用主义”生存法则。
精练技术
作为软件工程师,我们一生都在开发和维护软件。我们不仅得对产品负责,更拥有所编代码的所有权。
提供解决方法而不是蹩脚的借口
每个人都会犯错误。如果发现任何问题,都应该给出解决方法,而不是找借口来推脱责任或对他人指指点点。
DRY
在编写代码时不应该复制自己的代码,重复代码会导致代码重构和维护不良。但你有没有想过,我们为什么会复制代码呢?
· 复制代码似乎对程序员来说更舒服
· 复制代码是程序员偷懒的一种方式
· 在庞大的团队中工作,由于缺乏知识而复制之前的代码。
· 由于缺乏架构知识,开发人员认为复制代码是他们唯一的选择。
莫立于危窗之下
如果楼房的窗户被打碎又一直未经修理,会有一种被遗弃的感觉。人们就会开始乱扔垃圾、到处涂鸦,很快窗户就会破损得更严重。
软件也同样如此。错误代码会产生更多错误代码。如果我们遇到糟糕的设计、错误的决策和低劣的代码,我们应该采取正确的措施,以防进一步的损失。
正交性
根据几何定义,如果两个向量垂直,即构成一个直角,则称它们正交。
如果我们设计一个系统,让两个系统只在一点连接。这将提高生产力并降低风险,这样的系统更容易测试。
准备好迎接变化
没有最终的决定,也没有一成不变的东西。好的设计比坏的设计更容易改变。
曳光弹
新的项目需求并不明确。新算法、新技术、新语言或未知库的使用将出现,环境也会随着时间而改变。
类似曳光弹,它会显示我们击中的目标。虽然不能总是达到目标,但我们可以做出相应的调整来达到目标。
它的好处在于:
· 用户可以尽早看到效果。
· 开发人员可构建一个工作结构。
· 程序员能够有东西证明。
工具
任何优秀的工匠都知道,有了计划之后不要立马开展工作。先要准备工作环境和所需的工具。假如一位樵夫使用钝锯,那将耗费许多时间完成工作。但如果我们先打磨好工具,就可以高效地完成工作。
编程也不例外。准备充分的工具和优质的工作环境将大大提高生产力。我们需要熟练掌握编辑器的使用、电脑终端和纯文本。源代码控制就像GIT系统一样,是使协作、回滚和共享变得容易的必备工具。
石汤与煮青蛙
一起来看看编程领域中一种有趣的哲学——“石汤与煮青蛙”:
https://www.youtube.com/watch?v=9KejHBhTuPM
知识体系
技术发展日新月异。如果不吸纳新的知识,就可能随着时代发展而被淘汰,所以要定期学习新知识,把它当成一种习惯。
如果你处在某个新语言或新技术的舒适区,那就继续学习另一种新的语言。不同类型的知识以不同方法解决同样的问题,而且学习不同的方法可以拓展对问题的思考并避免一些问题发生。
可以在线搜索一些有趣的课程,以及国内外的讲座或会议内容进行学习。除此之外,网上有许多优秀的在线资源,要好好利用,放眼整个行业,了解最新发展动态。
交流
好的创意需要交流。如果我们不与周围的人沟通,那好的创意和想法就失去了原有的意义。
在与他人交流的过程中,想好要表达的内容以及方式;也要换位思考,了解听者想要获取的信息,鼓励听者们参与进来:通过提问来交流和不断获得反馈。
调试
去解决问题,而不是一味地责备和抱怨。
千万不要浪费精力去无谓抱怨,问题确实已经发生了,试着了解问题的根本。这些调试策略会有所帮助:
· 使问题复现
· 将数据可视化
· 找人解释错误所在
· 追本溯源了解问题前因后果
· 如果可疑代码通过了单元测试,测试是否完成?
没有人能做出完美的软件,即便优秀的程序员也未必完全有信心,但每个人都可以试着不断接近完美。
测试
务实的程序员会主动尽早发现问题,这样就不必之后再面对问题。作为一般实践,测试应该在我们完成任何特征之前运行。除非所有测试都成功通过,否则编码永远不会完成。
法则是:提前测试,经常测试,主动测试。
断言式编程
使用断言能帮助我们及早发现错误,所有的错误都会给我们提供信息。
如果有任何错误,那就意味有一些地方出现问题了,需要尽早处理。断言可以用来防止我们假设它不会发生。
巧合编程
密切关注正在做的事情,避免巧合和意外。始终按照计划进行,并记录我们的假设。不仅要测试我们的代码,还要测试我们的假设。
程序员使用大O符号估计算法使用的资源,例如时间、处理器、内存等等。选择合适的算法时要务实,最快的算法并不总是最好的,要考虑用例。
重构代码
我们的需求随着时间不断变化,因此需要重构代码来纠正,需要移动功能来提高系统的性能。
如果我们遇到代码重复或者违反DRY原则的情况,那么现在就是重构代码的好时机。耦合是重构代码的另一个重要因素,或者是否有机会使代码更加松散耦合。
记住一点尽早重构,经常重构。
需求
不要收集需求,要挖掘它们,这是优秀的程序员要做的,并为用例创建文档。
当用户和开发人员用不同的名称来指代同一事物,或者用相同的名称来指代不同的事物时,工作会变得非常困难。将文档发布到内部网站,以便所有合作伙伴都能轻松访问。
务实的团队
这一点适用于个人的实用技术也适用于团队。团队不应当容忍坏特征,所有这些小的故障,只能通过个人的贡献来改进。质量永远是团队关注的问题。
人们总是认为有人在寻求或者被指派解决某一问题,或不关我事。要打破这种想法,确保每个人都积极地监视环境的变化、问题和崩溃。尽可能多地让事情自动化。这能避免重复,提高团队效率。此外,自动化有助于保持整个团队的一致性。
标记工作
上了年纪的工匠们会自豪地在自己的成品上签名标记。作为务实的程序员,我们也应该这样做,把注释放在代码中,把我们的名字放在文件的开头,这会提高代码质量。另外,标注应说明其目的。
总是检查,常常阅读,不断修改,但只需要几次编写。这就是务实程序员的修炼之道。
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范