- 我们是做技术的,还是做工程的:
技术和工程同等重要,但工程能力却是我们长久忽略和欠缺的。我们盲目地以为只要技术水平好了,职业发展就能很好。
- 技术能力和工程能力的区别:
- 技术能力:
在 leetcode 上刷题,不断刷题让我们对数据结构和算法更加熟悉,来解决一些小的技术问题。
- 工程能力:
如何正确理解业务上下文和业务逻辑,去做 CURD。
从刷题中获得的技术能力,哪怕再强,一旦放到项目组中实际应用,至多能把效率提高 10 倍。假设原来是 5%,提高 10 倍就是 0.5%。即便如此,仍然有 95% 需要在代码的基础上反复修改调整。
- 工程能力强的表现是什么:
尽早暴露问题,不要成为别人的绊脚石。求助不是浪费别人时间,而是让项目的 TL 或者 PM 进行全局安排,可能是让其他人来做,也有可能是去请外部资源协助。借此降低“你觉得自己能做完,但是别人觉得你大概率做不完”的情况。
- 什么才是工程能力:
- 团队协作:实际项目中要求我们有协作的行为,工程能力要求我们才能变成一个更好的 Team Player。
- 长期稳定:刷题是为了用最快的速度写最好的代码,而平时工作有需求的变更,要写出更好改、更好读、更容易懂的代码
- 持续提高水平:注重长期持续输出、持续学习与持续提高。
- 那些体现工程效能的实践:
- 设计模式:必须能描述GOF书中的全部24种模式,同时还要有POSA书中的多数模式的实战经验。
- 设计原则:必须了解SOLID原则,而且要深刻理解组件设计原则
- 开发方法:必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等
- 代码实践:必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程
- 工程软件:必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。