当前位置:网站首页>程序员大部分时间不是写代码,而是。。。
程序员大部分时间不是写代码,而是。。。
2022-06-24 09: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.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
觉得不错,别忘了随手点赞+转发哦!
边栏推荐
- 栈题目:括号的分数
- 服乔布斯不服库克,苹果传奇设计团队解散内幕曝光
- Six states of threads
- Web项目部署
- [Qianfan 618 countdown!] IAAs operation and maintenance special preferential activities
- [EI分享] 2022年第六届船舶,海洋与海事工程国际会议(NAOME 2022)
- 【IEEE出版】2022年智能交通与未来出行国际会议(CSTFM 2022)
- Niuke-top101-bm29
- 126. word Solitaire II BFS
- What is the knowledge map? What does it do
猜你喜欢
抓包工具charles实践分享
Quick completion guide for manipulator (III): mechanical structure of manipulator
The difference between the sleep () method and the wait () method of a thread
服乔布斯不服库克,苹果传奇设计团队解散内幕曝光
Flink集群搭建以及企业级yarn集群搭建
Flink checkpoint and savepoint
Quick completion guide for mechanical arm (I): development overview of mechanical arm
JMeter接口测试工具基础— 取样器sampler(二)
使用Process Monitor工具监测进程对注册表和文件的操作
机械臂速成小指南(零):指南主要内容及分析方法
随机推荐
What is recursion?
P5.js paper crane animation background JS special effect
Charles packet capturing tool tutorial
Act as you like
【数据分析数据源】全国各省市行政区坐标(包含边界坐标点和中心坐标点)
26. delete duplicates of ordered array
Customize the toolbars of the kindeditor editor. Items removes unnecessary toolbars or retains some toolbars
24. image mosaic operation
What is a voice assistant? What will the future voice assistant look like?
Distribute proofs of manuscripts by scanning
The latest entry date of SQL Sever test questions
【资源分享】2022年环境工程与生物技术国际会议(CoEEB 2022)
Web项目部署
Rising bubble canvas breaking animation JS special effect
【资源分享】2022年第五届土木,建筑与环境工程国际会议(ICCAEE 2022)
Process and multithreading
Sort out interface performance optimization skills and kill slow code
Five methods of JS array summation
HBuilder制作英雄皮肤抽奖小游戏
Several stacks of technology sharing: product managers' Online Official answers to several stacks of knowledge