【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

为什么 80% 的国内开发者缺乏基本功?

  • 2019-08-19
  • 本文字数:3385 字

    阅读完需:约 11 分钟

为什么80%的国内开发者缺乏基本功?

有人说:“初级程序员才比招式,高级程序员只看内功。”什么是基本功?不是那些高大上、新潮的技术、框架,而是程序员每天做的基础工作。比如,快捷键是否熟悉,测试习惯好不好,代码干不干净,打字速度有多快等等。在 IT 产业高速发展的当下,为何我们还要重申程序员基本功的重要性?一个基本功扎实的程序员应该具备哪些素质?当我们与国内最早导入敏捷软件开发方法的熊节先生探讨这一话题时,他表示,程序员的基本功才是真正影响开发效率,甚至影响整个项目成败的核心。然而,”国内 80%的软件从业者都存在基本功缺失的问题,其实我想说 90%,太得罪人。“

本文整理自 InfoQ 与熊节的采访全文。


InfoQ:您曾提到,80%的国内软件从业者存在基本功不扎实的问题,您是怎样得出这一结论的?这种现象在程序员、项目管理者身上分别有哪些不同的表现?


熊节:来自近二十年的行业观察。软件开发所需要的能力很早就被定义出来,包括需求管理、项目管理、配置管理和质量保障四个方面。我们从这四个方面看对应的人如何工作时就会发现,基本上,大部分的程序员都在凭本能做事。

比如我们讲需求管理,无非是上传下达。无论是需求分析师也好,产品经理也好,我看到许多人在获取需求时,要么是上去就问,要么就是自己头脑里有一套东西,不管客户讲的是什么,硬塞给客户。再比如项目管理,项目管理主要是管控进度和质量。进度怎么管?项目经理应该给出一个有效的团队协作、进度把控方式。但大多数项目经理没有这些东西,就是简单的轮询。比如一个任务要做五天,到了第四天去问做完没有?还没做完,怎么办?那能不能加班把它做完?这些工作方式,你看不到任何方法、技巧,都是全凭人类本能在做事,看不到应有的专业能力。

程序员同样存在着广泛的基本功缺乏的现象。软件开发这件事,不是只要能把功能写出来就行的。我每天的代码应该如何提交?我提交的代码怎样才能不破坏昨天提交的功能?如何确保交付的软件质量过关?这些都是程序员应有的基本功。例如单元测试,这是保证软件质量最根本、最核心的东西,对整个行业都非常重要,然而却很少有公司能做到。现在整个行业的声音并不是说写单元测试很重要,我们要想办法做到它,而是写单元测试太难了,我们做不到。这个现象反映出整个行业的基本功缺失到了一个很严重的程度。


InfoQ:是什么因素导致从业者很难进入到理想的工作状态?


熊节:主要是能力的缺失。像如何拆解任务,如何管理任务进度,如何了解生产流水线是否健康,用什么方式协调人与人之间的合作,这些都是有能力要求的。而从业者不具备这个能力。这又回到最初提到的问题——基本功的缺失。在缺乏基本功的情况下,人们完全凭着人类的本能做事,遇到问题就靠加班解决。


InfoQ:除了个人层面,这一问题有哪些历史成因?


熊节:从历史上看,我们不仅要看个人的努力,还要看历史的进程。这里有一个重要的时间节点,就是CMM认证。从 2001 年开始,全国各地都在对 CMM 大力补贴扶持,这件事给 IT 行业带来了巨大的影响。在 IT 行业从小到大、从弱到强的成长过程中,我们忽略了基本功,没有打基础,没有提高行业的能力。2008-2009 年,我们很多企业通过了 CMM5 级认证,但这些企业的能力在哪?最基本的需求管理、项目管理、配置管理和质量保证能力,都存在巨大的缺失。

当时之所以大力补贴 CMM,政府的目的是要让软件行业出口创汇,但从历史的发展来看,软件外包的市场远远比不上内需。结果 CMM 对出口创汇的作用有限,又没有适时发展行业能力。当初大力补贴 CMM 这一决策,导致国内软件行业走了十年的弯路。


InfoQ:企业的软件流程标准化的缺失是否也带来了一定影响?


熊节:软件流程的标准化在国内软件行业基本没有发生过。的确,很多企业实施了 CMM、ISO9001之类的流程,但是这些流程都停留在纸面上。团队真正在开发软件的时候,并没有照着这些流程来实施。这样的“标准化”,其实并没有真正影响软件开发的过程。

需求管理、项目管理、配置管理、质量保证,这些最基本的事情是不是应该做的?我觉得是需要的。但停留在纸面上的流程并不是真正的软件开发流程。目前,大家在做软件的流程中还是存在凭本能写代码、单元测试没做就结束任务的问题。所以流程标准化是好是坏是第二个问题,首要问题是究竟有没有标准化、究竟有没有流程,这在许多企业中都是非常现实的问题。


InfoQ:您认为企业在帮助程序员夯实基本功方面应扮演什么样的角色,提供哪些支持?


熊节:软件开发是一门手艺,讲究又快又好,只考察能讲出多少知识是没有用的,只能用实际的代码来验证。企业从面试开始,到程序员的培养、发展、晋升,都应该更重视基本功,更重视那些真正影响每天软件开发的效率和质量的能力,不要只着眼于看起来高深、实则一年用不到一两次的技术点。

我最近做了一个“测试驱动开发实战营”的事,目的就是帮程序员快速提升编程的基本功。我认为需要有一系列这样的实战训练项目,让企业可以快速识别各种角色基本功是否扎实,并且可以通过密集的实战训练快速夯实基本功。


InfoQ:您认为,基本功扎实的程序员通常具备哪些素质?


熊节:第一,需要具备良好的沟通能力。沟通不仅仅是说话或者写文档,程序员还应该能用自动化的测试作为媒介,准确地框定需求范围。

第二,他应该能有效地拆解任务。要把任务拆解成可以落地、可以逐步实施的小块。这是需要练习的事情。

第三,他应该能在保证质量的情况下,把拆解好的任务快速实现出来,让每一行代码都是有测试覆盖、有质量保证的。

第四项基本能力就是代码质量要好。写完一段代码之后,应该回头看一看,有没有坏味道?用适当的重构方法把坏味道消除掉,让代码质量保持在良好状态。

第五,做前面几件事情的速度要快。只是头脑里知道怎么做,没有用,因为一旦有压力的时候,就很难施展出来,所以需要反复的练习,在压力下也能快速完成这一系列动作。


InfoQ:前段时间关于“996”的话题比较火。您如何看待这一问题?


熊节:从法律的角度,996不能鼓励,必须改变。但就一些程序员的效率而言,如果平时加强训练,把写代码的速度提高一倍,能够理解清楚需求,合理拆解任务,代码写得好,很可能根本就不需要加班。

很多年以前,制造业的先辈就已经发现一个规律:质量是免费的。换个角度来说就是,降低对质量的要求,并不会使软件开发变快,反而会因为缺陷太多、难以维护而拖慢速度。老话说磨刀不误砍柴工,缺乏基本功、代码质量不好,就会使自己不断陷在低效的焦油坑里。很多加班就是这样加起来的。

所以我们在批判 996 现象的同时,是不是应该有一定的自省,为什么开发软件的速度这么慢、质量这么差?如果把基本功练得扎实一点,是不是能少加一些班?我认为这是一个有建设性的视角。一味认为加班都是别人造成的,固然可以让自己心理感到很舒服,但恐怕并不有助于改变现状。

哪怕在最坏的情况下,你真的身处一个很糟糕的企业,就是因为老板或者其他角色的原因导致加班,练好基本功至少能让你更容易脱离这个焦油坑,跳槽去更好一点的公司。


InfoQ:您可以向程序员朋友推荐几本提升基本功的书籍吗?


熊节:《重构》、《实现模式》和《测试驱动开发》。

不过我始终认为,读书对于能力提升的帮助很有限。能力的获得,必须通过重复、有针对性、有反馈的刻意练习。这也是我搞“测试驱动开发实战营”的原因:我希望为大量程序员创造一个刻意练习的环境,帮他们提升基本功。


嘉宾介绍:


熊节是中国 IT 业界最早导入敏捷软件开发方法、尤其是注重工程技术实践的极限编程(XP)方法的敏捷先行者,也是多年以来中国敏捷社区的领军人物,为敏捷、尤其是持续集成等敏捷工程实践在中国 IT 行业的引入、传播和推广发挥了重要作用。


2005 年至 2018 年间,熊节效力于国际知名的 IT 专业服务公司 ThoughtWorks,担任过软件架构师、项目经理、敏捷转型顾问、研发中心主管等多种角色。在 ThoughtWorks 期间,熊节以项目交付为载体,将极限编程的工程实践植入员工和客户的日常工作。熊节还以敏捷转型顾问的身份,指导和参与了华为、中兴、上海贝尔、平安等企业的敏捷转型历程。


工作之余,熊节一直以写作的方式对行业技术导向创造影响。他曾在各类专业媒体发表数十篇文章,并主持翻译了《重构》、《软件工匠》、《实现模式》、《卓有成效的程序员》等敏捷领域重要著作。他的新作《敏捷中国史》是中国 IT 业界首部系统总结敏捷方法传入中国及发展演化历程的著作。


想了解更多,可关注微信公众号:程序员练功房(ID:programmer_gym)。


2019-08-19 15:2718907
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 70.5 次阅读, 收获喜欢 275 次。

关注

评论 12 条评论

发布
用户头像
TDD 确实需要坚持练习才能学会,只看不练原地踏步。可以从实现「单一原则」练习功能测试:happy path; sad path; default path
2024-03-29 23:39 · 浙江
回复
用户头像
老一代之所以做得好,一个原因就是有很多轮子要造,而且也有情怀。只有自己有造过或多或少给团队用的轮子,亦或是体会过几十个人因为你的方法无法工作而不得不停下来,才能领会为什么单元测试重要、为什么要保证稳定性。如果一直都是用着已经限定的框架、接口、工具,写的代码没几个用户(实际上大量的功能从开发后就没有被使用过)使用,程序员就更不关心了。
2020-01-05 19:47
回复
用户头像
”基本功扎实的程序员通常具备哪些素质“,楼上说的这是基本素质吗,又快又好,谁不想呢,具体步骤呢,这么说难免有点套路,说的好听的性质吧
2019-08-25 22:13
回复
用户头像
感觉最近这七八年国内IT行业某种程度在倒退,非常的浮躁了,风口不断 猪满天飞,微服务 高并发 大数据架构师也满天飞,个个都是bat。用着最牛掰的先进框架 包裹这最臭不可闻的烂代码,又是maven 又是jenkins又是git又是docker的都用上了就号称devops了就持续集成了,其实一个像样的单元测试都没有,就是持续编译打包自high呢。 现在如果跟年轻一代程序员提单元测试 重构 设计模式 tdd这些过时的玩意,要么对方一脸茫然 要么对你嗤之以鼻 觉得你老古董了。
2019-08-24 23:16
回复
我看呢,估计对方都觉得人也过时了😂
2019-08-24 23:26
回复
我也觉得,目前大部分做软件的公司,真的在技术的持续集成上有太大的缺失,对项目的“工程化”不到位。
2019-08-25 09:29
回复
用户头像
80%从哪来的?
2019-08-19 13:24
回复
受访者的经验观察
2019-08-20 09:53
回复
拍脑袋拍的吧
2019-08-22 09:41
回复
用户头像
搞了半天是卖书的。基本功是靠时间积累的。是靠专业培训代纪传承的。光靠持续重构和各种治标不治本的开发模式是不可能解决的
2019-08-19 11:31
回复
您的说法和文章内容其实是一致的吧。
文章讲“能力的获得,必须通过重复、有针对性、有反馈的刻意练习。” 重复练习需要时间积累,有反馈就是代纪传承。
2019-08-20 13:43
回复
错啦,不是卖书,看原文:不过我始终认为,读书对于能力提升的帮助很有限。能力的获得,必须通过重复、有针对性、有反馈的刻意练习。这也是我搞“测试驱动开发实战营”的原因:我希望为大量程序员创造一个刻意练习的环境,帮他们提升基本功。
2019-08-27 09:23
回复
没有更多了
发现更多内容

为什么要开发分布式操作系统

LAXCUS分布式操作系统

分布式计算 分布式存储 超算 云边端协同 分布式操作

【6.3-6.10】精彩博文回顾

InfoQ写作社区官方

优质创作周报

Spark ShuffleManager

布兰特

大数据 spark

Java—基础容器

武师叔

6月月更

Redis stream Java API实践

FunTester

数据库每日一题---第8天:超过5名学生的课

知心宝贝

数据库 程序员 前端 后端 6月月更

华为云鲲鹏DevKit代码迁移实战

乌龟哥哥

6月月更

APICloud可视化开发新手图文教程

YonBuilder低代码开发平台

App APICloud 低代码开发 移动端开发 可视化开发

推开混合云市场大门,Lenovo xCloud的破局之道

脑极体

如何使用物联网低代码平台进行工作表管理?

AIRIOT

低代码 物联网 低代码开发平台

【愚公系列】2022年06月 面向对象设计原则(五)-接口隔离原则

愚公搬代码

6月月更

存储引擎分析

工程师日月

6月月更

数据的软删除—什么时候需要?又如何去实现?

翊君

6月月更

leetcode 130. Surrounded Regions 被围绕的区域(中等)

okokabcd

LeetCode 搜索 数据结构与算法

首批!青藤通过信通院CWPP能力评估检验

青藤云安全

网络安全 主机安全 信通院

APICloud可视化开发丨一键生成专业级源码

YonBuilder低代码开发平台

App 低代码 可视化 APICloud 移动端开发

Sealem Finance打造Web3去中心化金融平台基础设施

BlockChain先知

Web3生态去中心化金融平台——Sealem Finance

西柚子

APICloud 5月SDK发版说明

YonBuilder低代码开发平台

App 低代码 APICloud 可视化开发

很流行的状态管理库 MobX 是怎么回事?

岛上码农

flutter ios 安卓开发 跨平台开发 6月月更

Vue-5-模板语法-2

Python研究所

前端 6月月更

Tornado简介&&本专栏搭建tornado项目简介

孤寒者

Python tornado 6月月更

盲盒商城APP系统开发的软件特点和盲盒功能介绍

WDL22119

盲盒商城 盲盒开发 盲盒源码 盲盒H5开发 盲盒APP系统开发

云数据中心中的SDN/NFV应用

穿过生命散发芬芳

SDN网络 6月月更

线程池的创建

急需上岸的小谢

6月月更

改变世界的开发者丨玩转“俄罗斯方块”的瑶光少年

华为云开发者联盟

人工智能 华为云 俄罗斯方块

攻防演练 | 网络安全“吹哨人”:安全监控

青藤云安全

网络安全 主机安全 攻防演练

flutter系列之:UI layout简介

程序那些事

flutter 程序那些事 6月月更

2022 年 DevOps 路线图|Medium

观测云

ServerLess Aws Lambda攻击与横向方法研究

火线安全

云安全

锁机制

卢卡多多

锁机制 6月月更

为什么80%的国内开发者缺乏基本功?_文化 & 方法_王文婧_InfoQ精选文章