招一帮 NB 的程序员,就能开发出优雅的系统吗?
你觉得呢?
我不知道你怎么觉得,根据我近十年程序员生涯所见,很多领导都是这么认为的:招一帮优秀的程序员,就能快速的开发出高质量、没Bug、甚至是优雅的系统。这些领导认为优秀的程序员是万能的,不管原先的系统多么烂,需求怎么变,工期多么紧,只要有一帮优秀的程序员,就没有完不成的工作。如果完不成,那一定是这些程序员不够优秀。
程序员并不是一项多么神秘或高端的职业,写代码也不是什么高科技,但国内相比较于大量的从业者,合格程序员的比例并不高,合格的技术 Leader 就更少了。究其原因,『程序开发』是一项理论和实际联系非常紧密的工作,缺少足够的软件开发理论知识、计算机专业背景,即使一线编码经验再多,也很难在更高维度上去看待和认识软件开发,说起来经常就是“我们之前的公司就是这样做的”;而空有理论知识,缺少足够的编码经验,也很难写出高质量的代码。
只要稍微了解点软件开发的流程就知道,优秀的程序员,是开发出优雅系统的必要条件,但不是充分条件,因为软件开发的流程,涉及到很多节点,我在 屎山代码是怎么产生的 这篇文章里有讲到,每个节点的不专业,都会导致最终交付项目质量的下降。
可以理解为,软件开发既不难,也谈不上高端,它就像流水线上生产产品一样,只要每个节点都有明确的规范和标准,每个节点的人员足够专业,按照规范和标准操作,就能开发出高质量、稳定的产品。而我国互联网行业的现状是,类似这样的流水线规范和标准,绝大部分公司都做不到。
一个10年的老系统,技术栈杂乱,既有10年前流行的技术,也有这两年流行的框架,有人用 Hibernate、有人用 Ibatis、还有人用 MybatisPlus,有的人在 XML 文件中写 SQL,有的人在注解上写 SQL;有的页面是 JSP、有的是 HTML,有的值直接在页面展示,有的用 JS 处理后拼接 HTML 片段展示;不同类型的流程处理,有的人用几年前流行的工作流,有的人一层层判断,有的流程操作在日志表记录了,有的流程就没有记录,在日志表中记录的字段也参差不齐;代码中存在大量的常量、数字,不知其含义,一个方法几百行,一个类四五千行,一个查询 SQL 几百行,Join 了十几张表,还在 SQL 中做各种计算……. 这样的系统,你让再牛逼的程序员来搞,他也搞不来,钱给的不够,他也要跑路。
慢就是快。在项目初始阶段,好好设计架构,做好技术选型,定好开发规范,确定好不同模块边界和接口调用,看起来是花费了更多时间(其实并没有,如果没有做好这些前期工作,在项目后期还要花更多的时间打补丁/修Bug),其实提高了项目的可扩展性和稳定性。
当然上面说的是理想情况,实际开发中,我们更多是面向领导编程,领导说两个星期搞完搞不完就滚蛋,没几个人还会做那么基础工作…… 最终开发出来的项目….. 很烂….. 但领导也不在乎,领导只要结果。当这个系统无法维护的时候,该跑路的同学就跑路了,等待新的同学入坑。
这就是国内很多码农同学面临的现状吧。