软件工程|何为工程师思维?

软件工程|何为工程师思维?

之前有思考过:“懂得很多道理 , 依然过不好一生”到底是哪里的问题?听过不同的答案 , 如:停留“知道”的舒服区、别人道理未必适用自己、甚至能力欠缺等诸如此类的回答 。
后来发现这是“工程问题” 。
把每个道理嚼碎如同把手机拆开了解每个部件一样 , 若把手机再装回去不能做到了解就够 , 还要亲自实验一遍 。 不过历史告诉我们 , 就算不懂原理依然可以造出手机 , 技术和工程都跑在科学前面 。
不信你幻想下 , 几百年前没有优质教育体系时 , 四大发明如何出来的?
再把视角转向商业 , 中底层员工往往“经济金融类出身”较多 , 而核心高管团队总有几个理工科人士;他们思维有什么区别?文科生逻辑更擅长从原有特征推演分析做决策 , 理科生更讲究遇到问题客观看待事物、从根本上进行改变 , 这背后直接影响到“公司的运作效率” 。
就连百度创始人李彦宏 , 在新工科技论坛上也曾说:每个人都要具备工程思维 , 这也是许多毕业生的短板 , 要深度了解它不妨从“软件工程”说起 。
工程思维是什么
市面PM、开发、测试以及运维所做的工作均属于软件工程“代码080902” , 是现在大学主流的专业之一;学习内容包括数据结构、算法、人际交互、需求分析等模块 。
在英文环境中 , 工程(engineering)的档次要比科学(science)低很多 , 为什么?
主要原因是 , 软件从诞生之日起一直解决不好“交付问题” , 即:项目不能按照履约时间、质量、成本完整交给客户 。
为解决此疑难杂症 , 1968年10月北约科技委员会的专题会上 , 思考者们才真正提出“软件工程”的概念 , 它是什么呢?用软件的手段去满足客户需求吗?并非如此 。
方便理解 , 举个例子:
在某工厂包装车间产品线经常出现“漏装问题” , 客户收到货后打开包装一看是空的 。 于是负责人找专家询问解决办法 , 专家建议装上监控系统 , 通过视频识别操作就不会出现此现象 。
得知改造下来需要百万费用 , 厂长当场掀桌子决定“内部开会解决” , 有位老师傅说很简单:我们只需通过测量产品重量 , 然后在流水线最后装个大型吹风机 , 把它设定到相关风力即可 。 若包装盒被吹跑证明就是空的 , 若没有则是完整的 , 众人怒赞得到老板赏识 。
据此 , 工程的目的是客户需求的问题 , 至于解决的手段 , 只要在限定条件内是否用软件显得并不是那么重要 。
计算机专业中 , 清华大学出版的教科书《软件工程—理论与实践》开篇谈道:
一位计算机芯片从业者认为代码是解决芯片问题的唯一办法 , 但一位软件工程师 , 只不过把软件当做满足客户需求的其中一个办法唯一 。
所以 , 工程学指满足客户需求为目的的一门学科 , 而非单纯的开发软件 。 它需要将客户的需求捕捉、分析、进行定义 , 并给出整体的系统需求 , 并分解各子系统;直到每个细节的需求可以由一个现有的组件直接满足 , 或通过修改满足 。
而工程思维最大的特点是“要把事情做成” , 也就是可交付、可使用、并做到开源节流” 。
换个视角来看定义:
特斯拉、SpaceX创始人埃隆·马斯克(Elon Musk)并非是技术工程天才 , 从他创业发展史可看出横跨三大领域(互联网、清洁能源、太空) 。 似乎三者并没有直接联系 , 为什么能够如此游刃有余呢?主要有两大要素:1)工程思维 , 2)第一性原理 。
在某采访中有人问他 , 制造火箭降低成本这件事NASA那么多专家都没做到 , 为什么SpaceX能完成 , 他回答说“我想 , 是因为他们资源太多了” 。
这如同他优化特斯拉电池组一样 , 首先思考该目标是否可能 , 其次从商业和第一性原理出发 , 再研究电池的材料的组成部分 。 进而通过可操作路径想办法找到这些材料 , 然后逐步压缩每个材料的成本 , 最后组装完成就拥有更便宜的电池 。
也就是说 , 他认为每件产品(项目)依赖于结构 , 我们只需在封闭的结构中不断得拆解、类比、优化、模仿就能把它完成 。
再比如说:
某航空公司做了一个关于顾客体验的调研 , 询问他们有什么期待?得到的结果是期望早点儿到达目的地 , 或提高安检、托运的时间 。
几个专家视角给出的答案均不同 , 空气动力学家认为 , 前者如何让飞机飞得更快 , 涉及到动力以及元件的整体改造问题 , 后者需要优化安检与托运流程 。