身为软件工程师,你永远不应该做的十件事情

587124c802ef881c284da65dfd14cc52.gif

我从事软件工程师的工作已经5年了。虽然这并不意味着我是专家,但我犯过了许多错误,可以拿出来与大家分享。在本文中,我将说明身为软件工程师,我们永远不应该做的十件事情。

原文链接:https://favtutor.com/articles/donts-for-software-engineer/

作者 | Hoon Wee       责编 | 夏萌

译者 | 弯月

出品 | 优快云(ID:优快云news)

57137410be8b8e7a263e7d8e8fe7a649.png

完美主义

世间万物皆不完美,我相信这个世界上也没有所谓“完美的代码”。

软件开发是一个迭代过程。编写代码,测试代码,获取反馈,然后再重构,如此反复。今天能运行的代码到了明天可能就不行了。因此,软件应该具备一定的灵活性,且易于修改(这也是它被称为“软件”的原因)。

我并不是说你应该放弃追求完美。我只是说你应该意识到,不应编写过于死板,过于复杂的代码。

专业和完美主义是两回事,我们只能选择大多数时候的最优解。

52c0cae1cd0cbd26b294d63c1aeb5b29.png

请给我一些时间重构代码

重构代码指的是在不改变代码外部行为的情况下重新组织现有计算机代码的过程。从不重构的代码会逐渐变得难以理解,无法被其他开发人员使用。

开发人员都知道,我们编写的代码在实现功能后,应该经常进行重构。然而问题在于,非技术成员不关心这些细节。他们经常说:“我们是一家快速发展的公司,所以我希望你更加专注于添加功能。”然而,很快代码就变得难以维护,于是你不得不恳求他们:“请给我一些时间重构代码!”

不要乞求额外的时间来重构代码,重构本来就应该作为功能实现的一部分。

61fbe780fb4657af300f54c0818a3e76.png

错误理解“遗留代码”的含义

Web开发生态系统瞬息万变。我记得,之前的一个Web项目使用的是Next.js第10版。在那个项目开发期间,Next.js发布了第11版,并带来了新功能和改进。突然间,我们的第10版感觉就成了一个遗留项目。

许多人对“遗留代码”的含义都有一定的误解,以为“遗留代码”就意味着“旧代码”,但事实并非如此。《有效处理遗留代码》的作者Michael Feathers曾说过,遗留代码是没有写测试的代码。无法测试的代码无法进行重构。无法重构的代码就无法维护。

我们的Next.js“旧”项目实际上拥有相当不错的测试覆盖率,一切运行良好。这些是“维护良好的代码”,而不是“遗留代码”。请不要一味追逐新颖的工具而浪费时间。不要忘记,Github至今仍运行在已有17年历史的Ruby on Rails上。

a53b7766937678693703a16196e14974.png

函数式编程是最好的

函数式编程非常新颖,很多年轻人都在尝试。但这并不意味着任何地方都应该使用函数式编程。

举个例子,如果你有一个Flutter项目,那么在UI层使用函数式编程可不是一个好主意。由于不必要的重新渲染,UI层使用过多的“纯函数”代码会引发性能问题,Flutter是面向对象编程,因此你应该按照这种方式使用它。

这并不意味着你应该完全避免函数式编程。在上面这个例子中,业务逻辑层使用函数式编程应该更合适。你只需要根据实际情况,选择合适的工具。

a67184d47b087ce200b9a8a4fc6663c7.png

盲目遵循“最佳实践”

软件开发的最佳实践有很多,例如整洁的架构、SOLID原则、DRY、KISS、YAGNI、TDD、BDD、CI/CD等等。提出这些最佳实践的意图都是好的,但你不应该盲目遵从。

举个例子,测试驱动开发(TDD)是确保代码按预期工作的好方法。但如果你使用的是Clojure或Python之类支持交互式编程环境(REPL)的语言,那么可能不需要一切都采用TDD。

TDD的唯一目的是尽快获取反馈。如果你能在不写测试的情况下获取反馈,那么就不需要TDD(但测试还是应该写)。

afc924375943140e436c6d573b77f330.png

独自挣扎

我见过许多热衷于展示“解决问题的能力”的初级开发人员。他们经常在其他人已经解决的问题上苦苦挣扎。请不要成为这类人。不要重新发明轮子。

伟人往往站在巨人的肩膀上。

在团队中工作时,你可以向经验更丰富的队友学习。他们就是你的“巨人”。跳上他们的肩膀,不要浪费时间再跳回地面。你的目标是瞄准更高的巨人。

37b2f921f183049adaa1f7f90c8df1ea.png

在没有自我意识的情况下进入“心流”状态

你有没有体验过“心流”?这是一种完全沉浸在工作中的心理状态,你会感觉精力充沛,十分专注。作为程序员,进入“心流”状态后,感觉像代码会自己写出来,而你只是一个媒介。你完全进入了状态。

不过一定要小心,你可能会写“太多”代码。我发现自己在“心流”中往往会过度设计。并非只有我会这样,《代码整洁之道》的作者Robert C. Martin也曾在心流中经历过反生产力。

为了有意打断心流,我推荐使用“番茄工作法”。这是一种时间管理方法,每工作25分钟,休息5分钟。这种方法有助于你保持专注,避免倦怠。

6774031ac1a4fce5af2d049e9c2616ac.png

忘记活动身体

软件工程师的工作并不轻松。我们常常在电脑面前一坐就是几个小时,不停地敲键盘,盯着屏幕。进入“心流”状态后更加容易忘记自己的健康。但请记住,健康最重要。没有健康的身体,大脑再聪明也无用武之地。

你应该注意每工作30分钟(如果采用番茄工作法,则为每25分钟),活动一下身体。站起来,伸伸懒腰,四处走走,喝点水。这有助于你保持专注,避免倦怠。

179491c32c49660f5bd198d7c5b321da.png

忘记编程的乐趣

第一次尝试编程时,我感到异常兴奋。每天我都会写代码,解决问题,学习新事物。

但随着时间的推移,我逐渐忘记了编程的乐趣。我太执着于编写“整洁的代码”,遵循“最佳实践”,解决“难题”。更多时候,我无法真正编写自己的代码,因为我疲于遵循他人和公司的代码。我的创造力去了哪里?

你应该时刻牢记编程的乐趣。我知道这很难,但你应该尽量找时间做自己的项目,学习新知识。在工作时间里,尝试与队友交流一些令人兴奋的新技术,即便手头的项目中用不到。这有助于保持动力,并激发灵感。

5ac70c724cec04d01563748189556a5b.png

变成“码农”,而不是软件工程师

“码农”和软件工程师是有区别的。“码农”只会埋头写代码,而软件工程师则是利用代码解决问题。以下两个理由告诉你千万不要变成“码农”:

  • 所谓的“码农”将来会被AI取代(实际上正在被取代中)。我知道这个说法富有争议,但很遗憾这是事实。

  • 人们不关心你的代码,他们关心的是你如何解决他们的问题。

将代码作为工具,成为“解决问题的人”。理解问题,找到最佳解决方案,并利用代码实现。这才是软件工程师的本职工作。

7a530e074220f2ad61c31418998d3504.png

总结

以上是我个人认为身为软件工程师永远不应该做的10件事情。当然,这些看法均源自我个人的经验,希望能对您有所帮助。

推荐阅读:

▶被曝“抄袭”中国大模型,斯坦福AI团队道歉:1人失联2人甩锅,还被扒出“抄袭前科”!

▶“现在,仅需两行代码,就能窃取你在 Windows PC 上输入/查看的所有内容!”

▶“戒毒的程序员,全职开发操作系统 6 年后,决定辞职再转战浏览器!”

0cd3bf3a877894f323733a6ac2d46c11.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值