程序员之与代码,就好比鱼离不开水,​但你知道吗?程序员每天花在写代码上的时间​却不是最多的。

近日,一篇《Developers spend most of their time figuring the system out》的文章在HacekerNews上引起了不少开发者的共鸣,作者表示,程序员大部分时间都在摸索系统之上,而非构建系统。

对于这一话题,最早可追溯到1979年Zelkowitz、Shaw和Gannon出版的《软件工程和设计原理》一书,书中描述到,程序员把大部分的时间(67%)都花在了开发维护上。

图1 诚然,这本书并没有告知这一数字是如何获得的,那么在40年后的今天,又是怎样的情形呢?

在CSDN举办的2022开发者生态汇上,知名程序员,MegaEase CEO 左耳朵耗子(陈皓)在演讲中提到,在国内没有一家软件公司有升级部门,经常是老到20年的系统依然在使用。可想而知,对于这样的系统,程序员入职后的第一件事或许就是弄清楚这些老“玩意”后进行着修修补补地工作。

对此,原文作者提到,在一篇《Measuring Program Comprehension: A Large-Scale Field Study with Professionals》的论文中指出程序员在一个项目上的时间分配,其中约58%的时间来理解系统,并阐述这一数字是如何得来的。

图2

由图2可以得知,即使在40年后的今天,花在摸索系统上的时间并没有变少。尽管这是一个非常大的项目成本,但人们在日常更多地是讨论如何构建系统,而不是如何弄清楚一个系统。

那么开发者是如何搞清楚系统的呢?开发者更多是通过阅读代码来摸清系统的架构与分支,这一结论也在论文《Measuring Program Comprehension》得到了验证,理解力基本都是用阅读来衡量。

那有没有什么其它更高效的方式呢?程序员为什么要阅读源码呢?其实对于程序员来说,如果只知其然而不知所以然,是很难进行下一步的代码搭建,因此摸清系统,最主要的是为了做出更好地编程决策。

图3 决策时间

站在图3的角度来看,阅读只是从数据中收集信息的一种手段,也恰好可能是最手动的方式,所以这就为优化提供了重要的机会。

在做一件重要的事情之前,人们往往会进行命名,否则就会像伏地魔一样。在多年以前,把弄清楚系统然后再做下一步称之为评估,并且还提出应该围绕评估来优化开发。

图4 评估是对系统进行全面了解的过程,从而支撑做出决策

通过阅读来提取数据是最机械的一种方式,无法规模化,还会带来信息不完整和不确定性。在还未摸清系统全貌之前,决策不应该建立在信念的基础之上。数据科学告诉我们,应该以问题为导向去匹配相应地工具进行推理。

图5 工具应与背景相匹配

软件不是一座孤岛,而是由无数关联项组成,因此人们无法预测具体的问题,但可以预测出问题类别。树立可塑开发思想,在摸清问题之后,构建自定义工具流程,从而快速处理上下文中的重要内容。在未来十年,人们无需通过阅读来衡量“弄清系统”,取代它的应该是解决实际问题所花费的精力。

针对这个话题,不少人提到了结对编程,一位gleenn网友表示,人们往往会避免或者纠结结对编程,认为结对编程所花费的时间和成本是非结对的2倍,这完全是错误的理解。当他在一个每天轮流做结对编程的地方工作时,在一个熟悉系统并能即时回答你提出的问题人面前写代码,一个新开发者的效率可以一飞冲天,比一个人做要快速好几百万倍。

ID为kayodelycaon的用户表示,在一个100%进行结对编程的地方工作,意味着无法结对的人就会被过滤,而能否进行结对编程,与当事人的方方面面都有着关系,比如自己有多动症、短期记忆方面的问题等。但自己却能编写出非常好的代码,会考虑代码的可读性、算法复杂性、副作用、可测试性等多个小细节。

参考链接:

  • https://lepiter.io/feenk/developers-spend-most-of-their-time-figuri-9q25taswlbzjc5rsufndeu0py/

原来程序员的大部分时间并不是写代码相关推荐

  1. 有赞996反省:男程序员们,别再低头写代码了(上)

    近日,一条"有赞年会亲历"的帖子在知乎刷屏,关于有赞年会上宣布的年后开始执行"996"工作制度的消息,引发了有赞乃至整个互联网员工激烈吐槽. 什么是" ...

  2. 有赞996刷屏:男程序员们,别再低头写代码了

    近日,一条"有赞年会亲历"的帖子在知乎刷屏,关于有赞年会上宣布的年后开始执行"996"工作制度的消息,引发了有赞乃至整个互联网员工激烈吐槽. 图片: mmbiz ...

  3. 对程序员来说最难的是写代码吗?

    程序员,是专业写代码的,对我们而言,最难的,从来不是写代码.当然,刚入行的时候,可能会遇到不知该怎么写代码的情况,比如:我入职的第一个题目就是通过 zookeeper 实现两个应用之间的通信,当时不晓 ...

  4. 我是个程序员今年33岁还在写代码,不想干这行,该做些什么好?

    1.大多数人现状   人过30以后一般都会遇到以下几个问题: 明显感觉脑力跟不上了 记忆力和20多岁小伙子没法比 体力也没有以前好了 特别是有了家庭和孩子,学习新技术的时间大大减少   编程是个技术活 ...

  5. 程序员自我修练-提高写代码的能力

    首先让我们看一看刚入软件公司会出现的情况: 1. 你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟) ──别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心 ...

  6. 中国到底有多少个.NET 程序员?都在哪个城市写代码?

    中国到底多少个.NET 程序员,对于这个问题,似乎没有一个准确的答案,而且最近很多使用.NET 开发技术的老板在抱怨找不到.NET 开发人员,所以我想基于我的公众号粉丝数据给大家分享下中国的.NET程 ...

  7. 33岁转行计算机行业,关于转行:我是个程序员今年33岁还在写代码不想干这行该做些什么好...

    1.大多数人现状 人过30当前个别都会遇到以下几个问题: 显著感觉脑力跟不上了 记忆力和20多岁小伙子没法比 膂力也没有以前好了 特地是有了家庭和孩子,学习新技术的工夫大大减少 编程是个技术活,技术更 ...

  8. 中国到底有多少个程序员?都在哪个城市写代码?

    原文链接 中国到底多少个程序员?每年计算机专业毕业的有多少?而这些人中真正从事it行业的比例是多少呢?中国的程序员中的地域分布状况又如何呢?以及程序员使用的编程语言比重等等,这一个个问题似乎都深刻的说 ...

  9. 如何避免把路走窄?程序员须记住:解决问题比写代码更重要!

    51CTO官微 技术资讯/行业精华/产品心得 当你手里有把锤子的时候,看所有的东西都是钉子. 有时候程序员往往会陷入为了写代码而写代码的怪圈,没有意识到代码是为了解决现实问题的.当问题有更简便的解决方 ...

最新文章

  1. linux查看cpu个数命令,Linux怎么查看物理CPU个数
  2. C语言经典例99-文件内容合并和排序
  3. Using dbms_shared_pool.purge to remove a single task from the library cache
  4. Ubuntu12.04 下配置tomcat
  5. 上周Asp.net源码(11.5-11.10)免费下载列表
  6. No orientation specified, and the default is
  7. cmake静态编译以及安装带有opencv的静态库并调用
  8. 多个图片合成PDF文件
  9. linux根目录解释
  10. Kubernetes如何被应用在华为
  11. Ensight后处理软件显示网格
  12. tomacat出错_繁星漫天_新浪博客
  13. 用 HTML5 造个有诚意的 23D 招聘稿
  14. NUIST OJ 1347 供电站 [迭代加深搜索]
  15. 猿创征文|深入剖析多态的实现原理与虚函数指针
  16. 快速把数据转换成excel
  17. Microsoft c++ Speech 识别接口快速入门
  18. 棋牌服务端机器人断线问题记录
  19. 什么软件消除笔没有痕迹?这些软件值得收藏
  20. PY32F003 入门

热门文章

  1. Linux 中的FHS文件系统风格标准---File Hierarchy Standard
  2. J2EEd 13个规范
  3. Spring beans配置方案(一) 学习笔记
  4. 排序算法第四篇——冒泡排序
  5. 【C++ primer】第七章 函数-C++的编程模块
  6. teradata 数据定义
  7. python os
  8. 利用Delphi-cross-socket 库提升kbmmw 跨平台开发
  9. git、cocoapod组件化开发常用命令
  10. Firefox-常用扩展