在工作中,大家是否曾遇到过下列情形?
-
团队辛辛苦苦做出的软件产品,却被客户云淡风轻地评价一句:“这不是我想要的。”
-
在新的项目中,自己作为系统的主要设计者采用了很多新技术,却发现团队成员的技术水平参差不齐,项目进度不断延期。
-
每次一到季度或年度总结的时候,自己明明做了很多项目,付出了很多努力,但是被问到这些项目具体取得了哪些收益、对业务有哪些提升时,却顿时语塞。
要解决这些问题,不应只是靠“我应该更努力工作”来解决,更重要的是:你是否意识到这些问题背后的本质?是否也有自己的解决方案?
事实上,在软件开发过程中,已经有了一套相对完善的方法论——软件工程。今天我们就来一起聊聊软件工程到底给我们提供了哪些解决方案或者便利之处。
一、保证软件交付的效率和可靠性
软件开发到底是一门科学,还是一门工程?这个在业界一直是一个被各方争论的热点问题。在我看来,软件开发兼有两者的特点。
-
从计算机科学角度看,软件开发需要关注软件本身运行的原理,比如时间复杂度、空间复杂度和算法的正确性。我们需要学习这些基本原理,来帮助自身探索正确的分析和建模方法,从而精进开发技能。
-
从工程角度看,软件开发更多的是关注如何为用户实现价值。我们需要在时间、资源和人员这三个主要限制条件下构建满足用户需求的软件,同时还得不断适应新的技术和新的需求变化。
可以这么说,我们并不一定每天都需要使用计算机科学的知识,但是每天却都需要使用软件工程的知识。不过,因为我们常常容易受到技术思维——打造尽量完美的软件——的影响,而忽略了软件工程的真实效用。
比如,在以下这些软件开发场景中:
-
为了体现自身技术实力,项目中常常使用“自研框架”,而不愿意采用现有开源程序或者购买稳定合适的组件;
-
在编码中喜欢使用各种最新技术,而没有考虑代码维护时,团队其他成员能否理解这些代码;
-
因为上线任务紧急,编码时很少写单元测试,而采用手工测试;
对产品设计和 UI 设计关注不多,需求评审时更注重技术是否好实现,而不太关注用户体验是否更好。
其实,这些问题的本质就在于我们总是只关注局部的具体功能实现,而忘记了具体的功能之间要相互配合来完成一个系统的整体功能。换句话说,在软件开发时,我们总是容易太过于关注局部,而没能跳出局部去看整体。
实际上,类似这样的问题在软件工程中已经有了很多具体的解决方案,比如敏捷开发,只要我们能合理利用软件工程的知识,就能轻松解决这些问题。
除了能跳出局部看整体ÿ