“每天都会有更多的技术发生,每家公司都在互联网上,每家公司都将成为一家科技公司。”OKTA首席运营官兼联合创始人Frederic Kerrest说道,因为他们必须找出使用该软件的更好方法。软件不仅成为了一个必需品,更成为了一个竞争优势。因为众多公司围绕软件而竞争,软件开发相关的事宜显得越发重要。开发软件的人——软件工程师正显得越发重要。
“对于知识,要求知若渴;对于自己,要虚怀若谷。”优秀的软件工程师一定是在软件开发的道路上前行者。自学是其成长的一个重要手段,在自学的过程中,我们是可以通过考试的方式来收敛思绪,督促自己学习,从而提高自己的基本素质。诚然,原则和模式是软件工程质量的基石。但技术是工具, 是为人服务的,而不是相反的。我们不能为了迎合某种技术而束手束脚,让自己特别难受。与此同时,要让自己的能力发挥到极致,良好的心境是必须要有的,因为软件工程中的一个核心因素是人的因素。
诚然,在软件开发过程中,我们不仅要将自身内功修炼好,更应该 “用产品说话”。那么,在这个过程中,我们该如何保证开发的质量呢?在开发的过程中如何专注于自己擅长的事情呢?在本文中,我们将探讨软件开发过程中关于角色、重构和质量的问题。
角色我们经常提一句话:革命工作只有分工不同,没有高低贵贱之分。这里的分工其实就是角色的划分。角色划分是为了让个体承担的工作量最小化,从而可以把我们从繁文缛节中解放出来,专注于自己擅长的事情。那么,在软件工程当中,这样的理念应该如何贯彻呢?
软件工作里面的脏活儿、累活儿一般是指技术老旧而不得不维护的一些工作。还有一些重复性强的工作也被称为脏活儿、累活儿。
对于这种活儿,一般工程师都想推脱掉。主要原因是认为做这类活儿技术提高的空间很小,再加上技术陈旧,这些技巧学会了以后也用不上,同时也比较枯燥。
这类工作的工程师一般是指派的。需要对相关的工程师进行一些必要的技术培训或者直接招收懂得相关技术的工程师加入工作。
效率和价值主要体现在帮助客户解决现有软件系统中的问题,或者添加新的功能。客户可能很少愿意购买一套崭新的系统,因为价格相对比较高,所以他们宁愿少花点钱去做些修修补补的工作,能够解决燃眉之急就可以了。
运维工作的价值是把已经开发出来的组件和系统集成起来统一的工作。是推出面向用户的软件系统产品的重要一步。我不认为是边角料的活儿。
运维相关的工作越简洁越清晰越好。这部分相关的文档一般是read me markdown的形式存放在软件系统的repo中。通过查看这些文档,应该可以自行部署整套系统。
系统部署一般会分几种类别,开发模式,qa模式,staging模式和生产模式。
业界对于软件开发过程中的角色有不同的理解和看法。笔者观点如下:
1.项目产品经理负责业务需求的处理,负责跟客户与开发团队打交道。
2.项目开发组长一定是全栈,需要统筹规划,与项目经理一起探讨需求分析,与开发组成员一起探讨开发设计,任务分配与开发实现。
3.前端工程师负责网络页面程序开发,手机端应用开发,桌面端应用开发等等。
4.后端工程师负责API设计与开发, 数据分析处理与消息推送。
5.运维工程师负责部署环境的搭建与看护。
6.针对具体的业务需求,还会有更细分的角色类别,比如说大数据工程师,算法工程师,AI工程师,机器学习工程,深度学习工程师, 中间件工程师。
7.测试工程师负责系统集成后的业务需求案例测试。这一部分的输入跟开发团队的输入是一样的,都是用户的需求。输出则是需求案例对应的测试报告。而开发团队的输出就是整个软件系统。
重构为什么我们需要对代码和设计进行重构?主要是因为我们发现了更好的做法,如效率更高,更容易维护等等。
简单的代码重构我们都比较熟悉,比如说你通过工具就可以做一些整理。
一般来说,重构是为了解决复杂度的问题。
现在比较头疼的一个话题就是对老产品的重构,一些老产品涉及到上千万行,上亿行的代码。
关于老产品整改的问题。如果只是缝缝补补的话,可能起不到化繁为简的目的。其实做类似这种工作的话,有一个比较可行的方案。就是把现有的产品当做一个成型系统也就是现有运行的产品,不要做大的改动,顶多就是修改bug。
然后以这些成型的系统为基准,去写新的系统。相当于参照一个大的白盒就写一个小的白盒,这样新的小的白盒质量上肯定比大的白盒性能上要有优势。
这样子按部就班去做的话,就会比较靠谱。
有朋友会说上面的做法是重写,字面意义上没错的。