当前位置:网站首页>程序员大部分时间不是写代码,而是。。。
程序员大部分时间不是写代码,而是。。。
2022-06-24 18:50:00 【Java技术栈】
作者 | feenk 整理 | 梦依丹
出品 | CSDN(ID:CSDNnews)
面对冷冰冰的机器、代码、工具,程序员的首要工作是知其然并知其所以然,方能入手去敲打出美妙的代码。
近日,一篇《Developers spend most of their time figuring the system out》的文章在HacekerNews上引起了不少开发者的共鸣,作者表示,程序员大部分时间都在摸索系统之上,而非构建系统。
对于这一话题,最早可追溯到1979年Zelkowitz、Shaw和Gannon出版的《软件工程和设计原理》一书,书中描述到,程序员把大部分的时间(67%)都花在了开发维护上。

诚然,这本书并没有告知这一数字的背后,那么在40年后的今天,又是怎样的情形呢?
在CSDN举办的2022开发者生态汇上,知名程序员,MegaEase CEO 左耳朵耗子(陈皓)在演讲中提到,在国内没有一家软件公司有升级部门,经常是老到20年的系统依然在使用。可想而知,对于这样的系统,程序员入职的第一件事或许就是弄清楚这些老“玩意”后进行着修修补补的工作。
对此,原文作者提到,论文《Measuring Program Comprehension: A Large-Scale Field Study with Professionals》中指出了程序员在一个项目上的时间分配,其中约58%的时间来理解系统,并阐述这一数字是如何得来的。

即使在40年后的今天,花在摸索系统上的时间并没有变少。尽管这是一个非常大的项目成本,但人们在日常更多的是讨论如何构建系统,而不是如何弄清楚一个系统。
开发者是如何搞清楚系统的呢?开发者更多是通过阅读代码来摸清系统的架构与分支,这一结论也在论文《Measuring Program Comprehension》得到了验证。
那有没有什么其它更高效的方式呢?程序员为什么要阅读源码呢?其实对于程序员来说,如果只知其然而不知所以然,是很难进行下一步的代码搭建,因此摸清系统,最主要的是为了做出更好的编程决策。

阅读只是从数据中收集信息的一种手段,也恰好可能是最手动的方式,这就为优化提供了重要的机会。
在做一件重要的事情之前,人们往往会进行命名,否则就会像伏地魔一样。在多年以前,把弄清楚系统然后再做下一步称之为评估,并且还提出应该围绕评估来优化开发。

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

软件不是一座孤岛,而是由无数关联项组成,因此人们无法预测具体的问题,但可以预测出问题类别。树立可塑开发思想,在摸清问题之后,构建自定义工具流程,从而快速处理上下文中的重要内容。在未来十年,人们无需通过阅读源码来衡量是否“弄清了系统”,取代它的应该是解决实际的问题。
针对这个话题,HackerNews不少人都提到了结对编程,一位gleenn网友则提出了结对编程模式:人们往往会避免或者纠结结对编程,认为结对编程所花费的时间和成本是非结对的2倍,这完全是错误的理解。当他在一个每天轮流做结对编程的地方工作时,在一个熟悉系统并能即时回答你提出的问题人面前写代码,一个新开发者的效率可以一飞冲天,比一个人做要快速好几百万倍。
ID为kayodelycaon的用户表示,在一个100%进行结对编程的地方工作,意味着无法结对的人就会被过滤,而能否进行结对编程,与当事人的方方面面都有着关系,比如自己有多动症、短期记忆方面的问题等。但自己却能编写出非常好的代码,会考虑代码的可读性、算法复杂性、副作用、可测试性等多个小细节。
原文链接:https://lepiter.io/feenk/developers-spend-most-of-their-time-figuri-9q25taswlbzjc5rsufndeu0py/
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
觉得不错,别忘了随手点赞+转发哦!
边栏推荐
- Ls common parameters
- 华为机器学习服务语音识别功能,让应用绘“声”绘色
- R语言 4.1.0软件安装包和安装教程
- Introduction to smart contract security audit delegatecall (2)
- Microservice system design -- data model and system architecture design
- Mqtt protocol usage of LabVIEW
- Conception de systèmes de micro - services - construction de sous - services
- Why is nodejs so fast?
- Introduction to alos satellite
- 一文详解|Go 分布式链路追踪实现原理
猜你喜欢

Volcano becomes spark default batch scheduler

Volcano成Spark默认batch调度器

JS deep understanding of functions

JS position operation

FROM_ GLC introduction and data download tutorial

High dimension low code: component rendering sub component

LabView之MQTT协议使用

starring V6平台开发接出点流程

Microservice system design -- data model and system architecture design

优维低代码:构件渲染子构件
随机推荐
Conception de systèmes de micro - services - construction de sous - services
The sharp sword of API management -- eolink
1: Mosaic of 100W basic geographic information data
Introduction to alos satellite
特尔携手微软发挥边云协同势能,推动AI规模化部署
Road vector data download tutorial
Game between apifox and other interface development tools
Several ways of connecting upper computer and MES
微信小程序轮播图怎么自定义光标位置
为什么生命科学企业都在陆续上云?
Fabric 账本数据块结构解析(一):如何解析账本中的智能合约交易数据
Xiaodi class massive data processing business short chain platform
How to use Fisher's least significant difference (LSD) in R
使用阿里云RDS for SQL Server性能洞察优化数据库负载-初识性能洞察
NFT质押流动性挖矿系统开发技术
Development of NFT dual currency pledge liquidity mining system
制造业项目MDM主数据项目实施心得
flink-sql的kafka的这个设置,group-offsets,如果指定的groupid没有提
【Leetcode】旋转系列(数组、矩阵、链表、函数、字符串)
【计算讲谈社】第三讲:如何提出关键问题?