网上大家经常热议互联网公司的加班情况,什么阿里的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指标只能导致开发做出质量更低的代码。

怎么提升团队的工作效率呢?

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

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

  1. 缺陷是软件开发中最大的浪费

    对用户来说,体验不好,出现缺陷,没有什么产品缺陷与开发缺陷之分,就是产品体验差,垃圾.当出现缺陷的时候,往往我们先馅于"在这不是bug是需求,是需求还是bug?"的纠缠中.这种毫无 ...

  2. 软件开发报价的计算方法[转载]

    1.软件开发价格估算方法     软件开发价格与工作量.商务成本.国家税收和企业利润等项有关.为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 × 开发费用/人·月 1.1开发工作量   ...

  3. 国内外软件开发上的差距与分析

    提高自己,迎接好的未来. 在开始任何其他文字之前,首先有必要正视一个根本现实:国内外软件开发的水平是有差距的. 这一结论的最直接证据是每一轮新技术的发起者基本上都是国外的人或公司: 从方法论(CMMI ...

  4. app软件开发现状及前景

    浅谈互联网行业: app软件开发现状及前景 随着市场对app需求增加,市场上开始涌现出大量的app软件开发定制厂商,各家公司根据自己发展需求定制适合自己发展的APP,那么国内APP软件开发现状究竟如何 ...

  5. Joel谈优秀软件开发-摘录

    Joel谈优秀软件开发这本书在图书馆近日稍微看另一部分,更像一个散文集,讲了软件开发中的方方面面.下面是一些记录,书本中提到的一些网址摘录在下面,大家有空的可以去看看,有些挺不错的. 1.Ken Ar ...

  6. 软件开发报价的计算方法 (转)

    1.软件开发价格估算方法     软件开发价格与工作量.商务成本.国家税收和企业利润等项有关.为了便于计算,给出一个计算公式: 软件开发价格 = 开发工作量 × 开发费用/人·月 1.1开发工作量   ...

  7. 面向对象的软件开发 (转)

    面向对象的软件开发 (转)[@more@] 面向对象的软件开发 Linda M. Northrop (本文转载自软件工程专家网www.21cmm.com,不代表gigix观点) 1 历史回顾 针对日趋 ...

  8. 软件开发管理与质量控制(二)

    3.5   开发人员技术结构 宏观上讲,软件开发机构基本可分为二种角色,管理角色和技术角色.不同角色各有其不同的发展方向,如图7所示. 不论是走技术路线还是管理路线,不存在那种角色地位更高的问题.高级 ...

  9. 精益软件开发简介之A版

    本简介主要介绍了精益,没有充分说明精益软件开发,本版本也未被选入正式稿,后续相信还将有更好的版本来介绍精益软件开发. 放在这里先睹为快,也是能够快速交付价值. 精益软件开发一词起源于Mary Popp ...

最新文章

  1. Windows命令行工具实验
  2. java 限制并发数_限制并发请求数aiohttp
  3. 点钞机语音怎么打开_原来微信语音一样能转发? 居然还有人不知道
  4. 【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
  5. 火狐linux ubuntu16.04,在Ubuntu16.04系统上更新FireFox浏览器(即火狐浏览器)到最新版本...
  6. 听说3月15日深圳有场存储盛宴,约吗?
  7. Matlab之深度学习工作流程
  8. Vue-pdf预览pdf文档
  9. argparse模块中的参数action、dest使用
  10. 智能眼镜的两种显示方式
  11. 机器学习虾扯淡之线性回归No.39
  12. 让割草类游戏更有趣的攻击动作设计技巧
  13. 重温前端基础(一) HTML、CSS、H5C3
  14. 100-days: thirty-two
  15. windows下vue-cli及webpack 构建网站(四) 路由vue-router的使用
  16. Linux 下 strace 命令用法总结
  17. 如何在jsp里面写java代码
  18. 图书信息管理系统(二)
  19. 中文字体css编码转换
  20. 国产浏览器的创新之路,拼的就是用户体验

热门文章

  1. jquery简单微博效果
  2. 《岗位说明书》--老白的作业
  3. FineBI和FineReport的区别
  4. 南京计算机与软件学院,夏志华 - 南京信息工程大学 - 计算机与软件学院
  5. WinCC 交叉索引中索引不到的变量和画面
  6. win10忘记登录账户密码怎么办
  7. 网银支付接口申请介绍
  8. 详解工业机器人机器视觉系统
  9. 猎证计算机等级考试二级试题讲解,猎证计算机等级考试系统(计算机等级考试助手)V3.64 免费版...
  10. Android SurfaceFlinger中Fence机制--个人理解整理