开发人员的三个阶段
快速成型
过度设计
实用主义
结论
参考
这是对我关于测试的文章的一个回复:
所以我想,嗯...🤔
图片来源:
https://blog.gardeviance.org/2008/04/three-stages-of-expertise.html
实际上,我已经思考这个问题和我的个人发展好几年了。
首先,我意识到我正在改变很多事情,关于我如何编码以及我如何看待技术和问题。
我从五年级就开始编程了。中学毕业后,我决定放弃计算机科学(转而学习电子工程),因为我觉得编程已经没什么可学的了。我觉得自己就是世界上最好的程序员。
你现在可能已经猜到了,我完全错了。🤦🏻♂️
我必须了解软件工程的意义:架构、测试、性能、可维护性等等,我并没有真正考虑过这些是重要的部分,事实上,它们是程序员和软件开发人员之间的区别。
因此,我阅读了大量的文章和书籍,并尝试将所有旋钮调到 11,从而构建出非常复杂的软件,以涵盖可能发生的所有情况。
类似文章有很多。事实上,有很多关于可能阶段的建议,你可以有 4 个、5 个甚至更多(参见参考文献)。所有这些建议都针对程序员工作中略有不同的方面。
从我的角度来看,我将我的个人发展分为三个阶段及其转变:
快速成型
- 写代码快快快,代码越多越好!
- 没有或很少自动化测试(参见上面的推文)
- 没有干净的代码
- 没有合理的源代码结构
- 大文件和方法
- 没有适当的命名(“字母表中有很多字母!”)
- 到处都是硬编码的值和文件名
- 没有底层设计原则或架构
- 其他人无法阅读或理解代码
- “我可以编写一个正则表达式来解析 XML”
- “看,那个源文件终于有1000多行代码了!只有专业的程序员才能写这么多代码!”
- 成为一名程序员而不是软件工程师
过度设计
在几个项目失败后,我阅读了关于我可以做什么的文章和书籍,并尝试应用所有这些,最终
- 实现未来功能,无需满足要求
- 使一切可配置、可插入
- 可扩展性和性能设计
- 复杂的设计和架构(“我已经应用了所有 GoF 模式!”)
- 抽象程度高但领域知识水平低
- 使用最复杂、最深奥的语言特性
- 100% 单元测试代码覆盖率
- 从干净的代码开始
- 学习新技术并尝试立即使用它们
- 最大程度干燥
- “让我们把这段代码放进库里吧!”
- 其他人无法理解代码(但至少他们可以读懂)
实用主义
在之前的方法失败后,我尝试了:
- 只构建必要的内容(YAGNI)
- 找到一个好的测试平衡点(测试金字塔)
- 干净的代码
- 领域特定代码——
CarWheel
而不是AbstractVehicleRotatingDataItemFactory
——不要考虑如何实现某些东西,而要考虑为什么 - 接受低冗余(DRY)会导致高耦合,并平衡两者
- 仅在实际需要时(无论是通过专门的要求还是当应用程序运行明显糟糕时)才优化性能或可扩展性
- 学习新技术,但要了解炒作背后的内容(可测试性、文档、贡献、安全性等),并可能要等到经过实战检验
- 识别代码异味
结论
这三个阶段并没有得到科学证实。事实上,这只是我通过反思自身得出的结论。甚至可能还有其他我尚未经历过的阶段。另一方面,这似乎也适用于过去15年里我遇到的很多开发者。
您不一定需要将多年的经验分配给这些阶段,有些人可能会跳过某个阶段,或者根据个性、学习或指导的方式将其缩短为较短的时期。
最重要的是:学习永无止境。确保总有人比你更聪明。
我每天都会学到新的东西,我非常感谢我的同事和朋友。
你发现自己有什么相似之处吗?
参考
- https://coderoom.wordpress.com/2010/03/19/5-stages-of-programmer-incompetence/
- https://www.quora.com/What-are-the-growth-stages-of-a-programmer