优秀工程师的三大思维(2)

发表于:2019-05-16来源:未知作者:未知点击数: 标签:
需求一旦确立,会基于模块化的思想拆分成多个功能模块去降低实现的局部复杂度,最终将所有功能模块拼接在一起去实现整体需求。每个功能模块会安排








需求一旦确立,会基于模块化的思想拆分成多个功能模块去降低实现的局部复杂度,最终将所有功能模块“拼接”在一起去实现整体需求。每个功能模块会安排给一个人或一个团队负责,由于功能模块是需求分解后的产物,容易导致工程师在实现的过程中只看到“树木”而忘记了“森林”。
性能是工程师在实现一个功能模块时不得不关注的,特别是当功能模块被运用于高频、时效性敏感、算力有限的场合时性能将尤其被关注。在现实中有时会存在工程师乐于追求性能的极致去体现自己的技术实力,甚至出现过早追求性能而滑入过度设计的误区。
毫无疑问,一个正规的团队,对于功能模块的开发工作多会以项目制、多个迭代的方式去完成交付。不少工程师这里会有一个误区,忘记了敏捷思想所倡导的“项目计划的目的是为了适应变化”,而是将“按时交付”当作是天职,各种赶工爬到终点时却毫不意外地看到了“一地鸡毛”的景象。
在迈向第四次工业革命的道路上,人工智能、大数据、机器学习,Kubernetes、Istio、Knative、Go、Dart、Flutter等新技术不断冲击着工程师已掌握的技能。快速跟上技术的迭代步伐是每个有追求的工程师不断提升自己专业素养的表现之一。工程师的内心一定不缺乏对新技术的追求,憧憬自己所掌握的技术具有一定的先进性。
工程思维
工程思维的起点是流程。流程的背后是科学,以既定的步骤、阶段性的输入/输出去完成价值创造,通过过程控制确保最终结果让人满意。由于流程涉及每一个工程师的工作质量与效率,其含义不只在于定义、工具化、检查等内容,而是应基于工程师的日常工作习惯,将流程与工程师的工作环境无缝整合。“无缝”体现于流程中的概念与工程师群体已建立的专业常识相一致、没有增加毫无价值的负担,根本仍是确保易用性。







机制的含义是通过对所需解决问题的分析,以一种模式去解决同类问题。机制应体现一定的系统性,而非“头痛治头,脚痛治脚”。系统性不是一开始就能被洞察到,可能在演进的过程中逐步发现和完善的,因而需要工程师在工作的过程中不时回顾并付诸实践去落实。对于工程师来说,机制是通过系统性的软件设计去达成的。
可以说产品质量直接决定了工程师的工作和生活幸福感。一个质量不可靠的产品一定会给用户和工程师自己带去麻烦,甚至造成无法挽回的经济损失并造成负面的社会影响。对于工程师来说,那势必打乱个体的工作与生活节奏。为了让产品的质量做到可靠,单元测试、静态分析、动态分析等确保工程质量的手段应成为工程师的基本工作内容,通过将这些手段与CI(Continuous Integration)流程进行整合去持续构建起对软件产品的质量信心。
在互联网行业,除了软件产品的质量得可靠外,风险可控是另一个不能忽视的内容。而风险可控是建立于系统性机制和质量可靠之上的。对于服务端软件来说愈是如此。风险往往出现于资源使用的极端场景,当从外部涌入的过多事务远超软件产品的处理能力时,需要有一定的机制让整个产品能相对平滑地应对,或是扩充资源、或是限制涌入事务的流量。
软件所需的机器成本是比较容易忽视的话题,软件成本不只与软件性能相关,还与软件之间的依赖、技术方案等因素相连。当一个软件需要从公司的内部对外输出时,平时忽视对成本的关注就会暴露出成本问题。比如,为了运行某个软件需要数量庞大的计算资源,所导致的资金开销对于客户来讲很可能是无法接受的。
至此,大致介绍完了自己所理解的工程师思维。
延伸
了解工程师思维的价值在于,工程师个体需要在工作中逐步建立起产品、技术和工程三大思维,以便用更为全面的视角去看待日常工作中所面临的困境和困惑。当站在单一的思维去看待所面临的问题时可能觉得不合理,但从三大思维层面去审视时所得到结论可能完全相反。从团队协作的角度,只有团队中有更多的个体从多维度去进行思考,才容易发现岗位间衔接的那些无人问津的灰色地带,进而通过补位、助攻去更大程度地发挥团队的效能。
显然,不同岗位、不同职责的工程师对于这三大思维的深度要求是不一样的,但从多维度去思考却应是每个工程师都应该具备的素养。

原文转自:https://www.jianshu.com/p/47b5b7cf27f3