程序员大部分时间不是写代码,而是。。。

简介: 程序员大部分时间不是写代码,而是。。。

面对冷冰冰的机器、代码、工具,程序员的首要工作是知其然并知其所以然,方能入手去敲打出美妙的代码。


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


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


1.png


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


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


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


2.png


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


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


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


3.png


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


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


4.png


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


5.png


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


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


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


相关文章
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
1340 0
|
移动开发 前端开发 JavaScript
VSCode设置类似Webstorm那样可以用本地局域网IP地址访问自己开发的测试项目,vs code 前端如何以服务器模式打开?
VSCode设置类似Webstorm那样可以用本地局域网IP地址访问自己开发的测试项目,vs code 前端如何以服务器模式打开?
VSCode设置类似Webstorm那样可以用本地局域网IP地址访问自己开发的测试项目,vs code 前端如何以服务器模式打开?
nodeValue 属性
`nodeValue`属性用于获取节点的值。在元素节点中,它返回`undefined`;在文本节点中,返回文本内容;在属性节点中,返回属性值。例如,代码用于获取元素的第一个子节点的`nodeValue`。
|
存储 弹性计算 测试技术
阿里云E实例评测:为个人开发者、学生和小微企业打造的经济高效解决方案
阿里云E实例是面向个人开发者、学生和小微企业的入门级云服务器,具备优秀的性能、价格优势和良好的用户体验。E实例采用高性能处理器,支持多种内存配比,满足各种应用需求。与其他同类产品相比,E实例的价格更具有竞争力,还提供多种优惠活动和免费试用,降低用户成本。此外,E实例的用户体验良好,官方文档和帮助中心提供完善的资料和教程,控制台界面简洁明了。总的来说,阿里云E实例是一款经济高效的云服务器解决方案,适合个人开发者、学生和小微企业使用。
|
存储 SQL Cloud Native
厚积薄发|云原生数据仓库AnalyticDB再战双11
今年的云栖大会上ADB重磅发布了湖仓版公测,帮助用户打造云原生一体化数据分析平台。
厚积薄发|云原生数据仓库AnalyticDB再战双11
|
负载均衡 数据处理 调度
从负载均衡到路由,微服务应用现场一键到位
本文基于常见的服务调用场景,以Ribbon负载均衡组件为例,展示了微服务洞察能力能够在关键的位置为我们还原与记录丰富的现场信息,使得原有的黑盒场景能够便捷直观地被观测到。在微服务架构下,类似的不便观测的重要场景还有非常多,都可以借助微服务洞察能力来监测或是在异常时辅助排查。同时,全链路灰度是微服务治理中比较重要的一个场景,我们在落地全链路灰度的过程中最让人头大的两个问题就是流量路由不生效以及流量逃逸,我们借助于微服务洞察能力可以快速定位与解决全链路灰度相关的问题。
377 0
从负载均衡到路由,微服务应用现场一键到位
|
存储 程序员 C语言
菜鸟先飞——C语言内存管理
一个由C编译的程序占用的内存分为以下几个部分 1、栈区(stack) 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。
1899 0
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全