【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

为什么 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:2718612
用户头像
王文婧 InfoQ编辑

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

关注

评论 11 条评论

发布
用户头像
老一代之所以做得好,一个原因就是有很多轮子要造,而且也有情怀。只有自己有造过或多或少给团队用的轮子,亦或是体会过几十个人因为你的方法无法工作而不得不停下来,才能领会为什么单元测试重要、为什么要保证稳定性。如果一直都是用着已经限定的框架、接口、工具,写的代码没几个用户(实际上大量的功能从开发后就没有被使用过)使用,程序员就更不关心了。
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
回复
没有更多了
发现更多内容

保姆级带你深入阅读NAS-BERT

华为云开发者联盟

推理 预训练模型 BERT NAS论文 NAS搜索

高效动画实现原理-Jetpack Compose 初探索

vivo互联网技术

动画 Google 框架 移动开发 Andriod

优化技术专题-性能优化系列-针对Java对象压缩及序列化技术的探索之路

洛神灬殇

序列化协议 序列化机制 10月月更

字节跳动技术官珍藏版:MySQL王者进阶手册!面面俱到,太全面了

Java MySQL 数据库 面试 后端

运营型CRM系统(运营型客户关系管理)只是针对于运营的吗?

低代码小观

企业 企业管理 CRM 管理系统 运营型CRM

如何选购四屏或多屏炒股电脑主板?

双赞工控

主板定制

网络安全界基于知识的识别和映射提出网络空间资源分类明细

郑州埃文科技

021云原生之Kubernetes 部署

穿过生命散发芬芳

云原生 10月月更

揭开“视频超分”黑科技的神秘面纱

拍乐云Pano

音视频 RTC 视频算法 视频超分

自媒体团队会面临哪些瓶颈和困境

石头IT视角

AI 在视频领域运用—弹幕穿人

百度Geek说

AI 后端 弹幕 视频

华为云GaussDB深耕数字化下半场,持续打造数据库根技术

华为云数据库小助手

GaussDB 大会 GaussDB(for openGauss) 华为云数据库

Sentinel-Go 源码系列(一)|开篇

捉虫大师

sentinel Go 语言

C2C交易软件系统开发(源码)

NB!阿里首次公布Java10W字面经,Github访问量破百万

Java 程序员 架构 面试 计算机

iOS 布道者龙神:永远挑战难度值增加 30% 的事情

融云 RongCloud

语聊房 SDK,下一代场景化解决方案新范式

融云 RongCloud

现成C2C场外交易源码系统开发

Android技术分享| 超简单,给 Android WebRTC增加美颜滤镜功能

anyRTC开发者

android 音视频 WebRTC 移动开发 美颜滤镜

SQL实现连续登陆人数天数统计

大象灵感

sql 大数据 hive 数据仓库 数据分析

WICC 话题剧透|Beeto 陈昊:中东爆款社交平台是怎样炼成的

融云 RongCloud

mysql binlog日志信息查看

梁小航航

MySQL Binlog

2021云栖大会 | 传统行业如何上链?旺链科技与你面对面畅聊!

旺链科技

区块链 云栖大会

百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才

百度大脑

人工智能 百度

现成交易所系统软件开发案例

【高热FAQ】关于智慧康养物联网加速器 ,你想知道的都在这

华为云开发者联盟

物联网 硬件开发 智慧康养 华为云物联网平台 SaaS应用

官方线索|CCF CED中国工程师文化日

轻口味

1024我在现场

/var/lib/docker目录磁盘满了,更换默认目录

阿呆

【服务器】服务器租用后如何高效管理,不出纰漏?

行云管家

服务器 IT运维 运维管理 服务器租用

常州一家等保测评公司在哪里?联系电话多少?

行云管家

网络安全 堡垒机 等级保护 等保测评 过等保

Kubernetes Service Proxy 无秘密

绅鱼片

Kubernetes 网络 iptables k8s网络 kube-proxy

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