为什么讲国内软件开发有90%以上浪费

网上大家经常热议互联网公司的加班情况,什么阿里的996呀,小米员工把睡袋放到办公室呀。作为在软件行业干了20多年的老兵,我深深的感觉到中国的软件开发中存在的严重的浪费情况。

  1. 软件设计者不了解行业需求导致的浪费,这种方向性的浪费,可能是毁灭性的,导致颗粒无收。之前,好几个杀入餐饮软件SAAS的人跟我讲,他们第一期的软件开发花了接近百万,结果拿到市场上才发现完全不能使用。我就职的一个做汽车后市场O2O的初创企业,董事长和产品总监把关设计产品功能,因为不懂汽车维修行业,导致设计的功能太过理想化,比如设计了维修联盟,洗车联盟的等诸多的联盟相关功能,而中国的汽车维修企业没有形成连锁化管理,这种自发形成联盟是不现实的,比如服装连锁行业,即使是相同品牌的加盟店都有很多利益纠葛,更不用说不相关的企业了,利益怎么平衡呢。
  2. 团队的沟通协作能力不够,软件开发和搬砖不同,搬砖可以大家各自搬各自的,软件开发是讲求协作的,产品团队,开发团队,测试团队和运维团队的相互配合和协作。协作能力的提升和团队管理者有着很大的关系,为什么同样的红军在第5次反围剿中毛泽东领导前后有那么大的区别,为什么古今中外有那么多以少胜多,以弱胜强的案例。软件开发和打仗一样,非常讲究团队协作。
  3. 团队的单兵能力不强,为啥特种部队协作能力强,因为单兵能力强,团队成员之间能交叉互补。我常常看到前端和后台开发沟通起来那个费劲,大家都不懂对方的东西,协作开发的时候很难为对方考虑,沟通的时候各自强调己方。我一直在团队里面强调,开发人员需要有产品和测试思维,这样的开发人员不但可以和测试和产品沟通顺畅,而且可以发现对方的忽略的问题。现实情况,很多设计上的逻辑缺陷到上线测试才发现,很多开发的缺陷到测试才发现,如果开发在开发之前通过团队沟通就能发现逻辑问题,那么可以大大的降低BUG率。很多开发不注重沟通能力的锻炼,我发现很多时候,如果他们能够把编码的思路讲给我听,我就可以发现其中的问题,让他们少走弯路,但很多开发就是做一步想一步,不会做开发前的细致规划和思考。软件其实就是一个人或者团队的思路的展现,把自己的思路理清表达清楚,展现在软件上面才会有条理有规律,我看到太多的开发把简单的问题做复杂了,复杂的问题就只有上帝能看懂了。这些思路不清的面条代码,带来了极大的维护成本和协作成本。很多开发人员天天忙忙碌碌,是身体的忙碌掩盖了头脑的懒惰,这样的开发人员即使工作10年,真正的经验也就1年。反之,如果开发是一个喜欢动脑子,肯钻研的人,可能1年的工作可以抵他人10年的工作经历,把软件开发做成体力活是件可悲的事情。
  4. 技术创新能力不足,国内的开发人员很多都是喜欢单纯的拿来主义,不懂得怎么客户化调整现有开源框架来更好的服务自己的业务开发,提升工作效率。比如自动化测试可以节省大量的人力成本,但能实现自动化测试的公司屈指可数。我们公司之前有个员工是在手淘做自动化测试的,他跟我讲了他们的测试情况,我感觉还是有提升空间的。我有专门的文章来讲解怎么利用开源框架Appium实现敏捷的UI自动化测试,这个测试思路体现了开发和测试的紧密配合。现在DevOps越来越流行,但真正实现还是需要团队的驾驭能力的,需要有能力调整拿来的方案来适应自己的需求。
  5. 开发缺乏统一规范,代码重用率极低,开发一边解决着他人挖的坑,同时自己又给后面的人在挖坑,当然这种挖坑一般不是故意的,是团队协助不足和个人能力不足的体现。很多公司忙于项目进度,不注重代码审核,其实如果有高手带领大家进行代码审核,可以大大提升团队的单兵能力和协作能力。很多程序员喜欢把常量直接写在代码里面,看看常量没有统一定义的后果,不同程序员可能有打字错误,导致本来应该相同的常量变成不同的了,代码维护程序员只找到了部分Hardcode的常量并且修改了,把部分落下修改了。如果统一定义,则不会发生这些问题。当然例子还非常非常的多,这里不多讲了。若详细了解,请参看”软件开发规范的建立”。
  6. 团队领导者缺乏结构化设计的思维,往往只关注软件的功能实现,而不关注软件开发的持续性和模块的可重用性。不可重用的代码只能解决单一问题,而重用率高的代码可以解决一类问题,一类问题可以抵上几万个以上单一问题,这就是框架,框架不一定局限于通用性框架如SSH框架,公司也可以根据自己的开发情况建立自己的框架。阿里2015年以后开始提中台战略,就是希望提升公司内部代码的重用性,BAT都刚刚开始,不要说其他公司了。
  7. 因为代码缺乏规范和缺乏系统结构设计,导致代码呈现出一种无规律的复杂,是灾难性的真复杂,看这种代码就好像蹲在粪坑边一堆苍蝇耳边不停的嗡嗡一样。良好的规范的结构化的代码是一种由规律的复杂的代码,这种代码在阅读者掌握规律之后,实际上是简单的。就和一个非常大的迷宫,很难找到出口,但告诉你规律,比如见到什么往右走,是不是就很容易出来了呢。代码这种无规律的复杂,导致后续维护效率极低,而且容易出现”修改这个问题导致更多问题的局面”,很多软件项目都是死于代码规范和结构不好。
  8. 虽然常常看到和听到敏捷开发,可能也实践过敏捷开发,但真正做到位的可能没有。敏捷开发是一个双刃剑,敏捷可能会制造混乱,过度规划会抑制团队的创造性和主观能动性。真正做到敏捷,是需要强的团队领导和团队成员的,团队成员可以后面培养,但团队领导必须是非常优秀的帅才,很难寻觅的。技术领导人能力不足,导致效率问题不可能得到解决,大家都知道问题存在,但都解决不了。
  9. 公司最高层面往往只关心短期进度,导致软件开发团队都去尽力满足这种短期需求,而更加忽视代码结构的建设,导致技术债越堆越高,BUG越来越多。加班加点修改BUG,导致程序员根本没有精力做自身素质提升,进入一种恶性循环。
  10. 有些公司领导层对软件开发不懂,外行人领导内行人,例如一个知名的例子,要求几天做个百度网站出来,类似情况下,开发人员只能想办法去糊弄上面的领导,这种开发更是浪费时间和金钱,完全是无用的。我之前遇到一个老板,还是美国留学回来的,当时让我们团队开发一个票据交易系统,要求一周开发完毕,他自己声称他和朋友3天开发了一个股票交易系统,遇到这样的老板,我只能跟他说再见了。还有些老板用编码量和BUG量来考核开发人员,歪曲的KPI指标只能导致开发做出质量更低的代码。

怎么提升团队的工作效率呢/strong>

  1. 团队要有创新思维的技术领头人,就和戚家军的戚继光,岳家军的岳飞,俗话说强将手下无弱兵,将帅无才累死三军。
  2. 团队领导要善于发现人才和培养人才,特种兵是怎么出来的,是优秀的教官领导层层选拔,然后经过理论教导和实践锻炼磨练出来的。好的团队必须有好的团队成员,团队单兵素质是非常重要的,否则团队的执行力不能得到保证。
  3. 管理层的支持,如果管理层只看重短期进度,不配合支持,训练计划也只会中途夭折。团队变革的过程其实会是一个痛苦的过程,因为老的系统需要维护,所以培训新的队伍,往往意味着成本支出的提升,这也是很多管理层畏手畏脚的原因。很多时候盲目改革,会导致白白付出没有回报,不改革可能就是慢慢困死。怎么样选对合适的真正有能力的技术领头人,怎么样学会配合和支持,体现了管理层的睿智。唐太宗选对了薛仁贵,帮他平定了辽东,汉武帝选对了卫青和霍去病,成就了强大的汉王朝。
  4. 最后,团队成员需要提升自己的单兵素质能力,需要开发人员同时具备产品思维和测试思维,单兵能力是高效团队协作的基础,就和世界杯冠军球队一样,个个都需要强能力,再加上协作配合和优秀的教练,才能走到冠军那步。当然,不是每个团队都能达到这个高度,但强烈的目标感还是需要有的,你奋力去追逐太阳,即使没有得到太阳,你也可能得到了一个月亮。

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8603 人正在系统学习中

来源:黄允聪

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月23日
下一篇 2019年2月23日

相关推荐