这个话题很大,也不简单,有很多本书都从不同的角度在讲这个事情,比如《人月神话》、《人件》、《项目管理修炼之道》、《硝烟中的scrum和XP》等。

不过,此文不想那么系统全面地讨论这个问题,而是希望以一个非常直白的方式来讨论一下,以便使完全没有接触过软件工程的人也能有个感性的认识,而这一点通常非常重要,为什么?因为很多公司的高层管理者,很多软件项目中的产品经理、项目经理、部门经理等都可能没有深入系统地学习和了解过软件项目工程管理方面的知识,而同时又直接或间接地影响着软件开发团队的开发进度和管理模式。

下面将从一些常见的问题来展开讨论:

软件开发怎么就算做得又快又好?

讨论进度,其实离不开质量,如果质量较差的软件产品按进度交付了,也可能是会埋下大量隐患的,这一点可能大家都能认同。 可是如何衡量软件做得质量好坏呢? 其实可能并不那么容易,真正做过多年软件开发的高级程序人员可能会知道这中间的差别,软件质量从外表可见的功能、界面到最深层的代码结构、设计、可读性、可维护性、可扩展性等,又是一个非常系统而庞杂的很多个可评判的角度。

通常公司的管理人员只能通过可见的部分来评判,通过专业测试人员的经验丰富的全面测试来保证软件符合功能的各需求,没有任何缺陷,这就已经算是最好质量的软件成果了。 然而真正重要的软件产品,通常不是一次开发后项目就结束的,都是需要随着市场和需求的变化,不断更新迭代的,如果软件代码的可读性、框架的可维护性、设计的可扩展性差的话,肯定不能算是高质量的软件。

因此,软件开发要达到高质量、高效率,就需要在代码可读性、可维护性和可扩展性等多方面都达到较好的水平才可以。

软件开发中哪个环节是关键环节?

市场调研、需求分析、UI/UX设计、代码编程、测试反馈、上线部署等等,这一系列的过程最终才能呈现给用户一个可用的产品,那么哪个环节是关键环节呢?也许缺少哪个环节都是不行的,讨论关键环节的意义又是什么呢?找到关键环节,才能针对关键环节进行优化,这样也就能带来最大的改善效果。

其实只要仔细推敲一下就知道“代码编程”肯定是最关键的环节,最早的软件都是编程人员一己之力进行开发的,自己思考需求,自己设计界面,自己写代码,自己测试,自己发布最终产品等。其他的环节都是时代变迁,逐渐分工、发展出来的。不管是什么软件,需求可以简化,界面可以简洁,测试可能不充分,部署可能比较简单,而最终代码却是实打实地体现软件结果,多一个模块,可能就多一个功能,多解决一个 bug,可能就少出现一些使用中的问题。不管发布后遇到什么问题,也是需要落实到某一处或多处的代码修改才可能最终真正解决。

如何改善质量保证进度呢?

综上所述,首先要保证质量,才能提升进度,否则在牺牲质量的情况下得来的“进度”其实是一种欺骗。希望培养一支强大的研发团队的领导者需要极度重视这一点,就好像盖万丈的高楼一定要先打好地基一样,这方面的精力和金钱的投入可能是远超预算的,这在很多入行不深的公司或领导心中可能是远远没有估计到的,于是就出现了很多陷入泥潭中的开发团队,即使996不停歇地加班加点,也达不到预期的开发进度,而且会进入一种恶性循环:

  • 因为基础质量欠佳,所以后期扩展维护艰难;
  • 因为扩展维护艰难,所以加班又加点;
  • 因为加班又加点,成员积极性不高,只顾应付差事;
  • 因为只顾应付差事,代码质量就不高,扩展维护就比较难……

再加上成员幸福指数低,就会离职率高,人员流动频繁又导致接手项目更加陌生和困难,公司花费人力成本居高不下,而这些成本其实是极大的浪费,根本没有用在研发的刀刃上,因此公司的产出价值就不高,如此过上几年,基本上耗尽了公司积蓄也就 Game over 了。

因此,改善质量、保证进度这两者,一定是要把“改善质量”放在第一位的。那么继续思考:

改善质量的关键在于什么呢?

很多人可能想到了测试,所以你会看到很多大公司投入大量人力物力来加强测试团队的建设,测试人员在公司团队的地位也通常比较高,大有用测试人员来监控质量、监督进度的趋势。然而,这类策略依旧是只抓住了表面文章,没有深入内核的解决方案,其不知软件开发人员在这样的大环境下,自然就会以蒙混过测试为最终目标,而不追求真正的软件代码质量。举个最常见的例子,在这样的公司,测试发现一个 bug,软件开发人员检查问题的原因后,可能有多种解决思路,一些是快速临时解决的补丁思路,修改小、影响小,解决方便简单,但可能对代码质量改善很少,甚至会留下其他隐患,还有一些是彻底的长期解决方案,可以大幅改善软件设计和架构,起到一劳永逸的作用,但修改面比较大,影响面比较大,有些可能还是架构层面的改善,冒的风险也比较大,所以软件开发人员会怎么选择呢?不用说,简单打个补丁吧!

就象上面那节问的问题:软件开发中哪个环节是关键环节?要改善质量,还是要抓住关键环节:代码编程。不论怎么做,最终的代码是否高质量,都要看软件开发人员怎么写了。直到目前为止,软件开发还是一个需要人类智慧才能完成的工作,人工智能也许能起到一些辅助的作用,但核心关键还是靠人的。那么高质量的软件代码,就需要高水平的软件开发人员才可能产生出来。高水平的软件开发人员还需要在心情愉悦的情况下才能产生出高质量的代码来,这就需要公司的文化和氛围适合研发团队的氛围,这方面可以参考国外高科技企业的一些先进经验,参考《干法》、《心流》之类的书籍去学习一下,如何激励研发人员进入忘我工作的状态,把技术追求做为一个自我实现的目标来努力,自然会让代码不断精益求精,达到字字珠玑的效果。既然需要高水平的开发人员才能产出高水平的软件代码,那么:

怎么评估一个高水平的开发人员?

高水平不是吹牛吹出来的,也不是年资耗出来的,大量的年轻有为的开发人员,就已经拥有很高的水平了,而也有很多年龄比较大的开发人员,水平其实很一般,空有一些工作年限而已。那么如何评估一个高水平的开发人员呢?

  • 重视工程实践,遵守规范和标准;
  • 谦逊且易于协作;
  • 以终为始,测试驱动,擅于理解需求、分析需求、拆解需求转化为编程设计方案;
  • 见识广博,对新技术有热情,持续精进;
  • 善于分析和解决问题;
  • 有创新思维,有客户体验思维;

这些方面都有很多细节,这里暂不详述,总的来说可以参考“权限编程”的实践思路进行评估,当然评估的面试官本人也需要是有见识、有心胸、有较高技术水平的软件工程师以及创始人、CEO等,毕竟招聘工作是影响公司未来发展的重中之重的工作,参考 Google《重新定义公司》一书。

如何培养出高水平的开发人员?

毕竟高水平的开发人员是比较难招的,成本很高,通常也很难评估,那么可不可以自己培养出高水平的开发人员呢?当然可以!还是遵照“权限编程”的实践思路来进行培养就没错了,公司如果有经验水平较好的开发人员,那就由他们带队,如果没有,那就让好学上进的开发人员来带队,大家认真学习“权限编程”的思想,并且积极落实到实践当中,如果公司愿意投入,也可以引入外部教练资源来进行引导提升,通常只需月余即可上道,进入一种良性循环的飞轮状态,假以时日,自然会慢慢培养出来高水平的开发人员。

广告

需要编程教练、敏捷教练的公司可以与我联系。 :)