当前位置:网站首页>程序员大部分时间不是写代码,而是。。。
程序员大部分时间不是写代码,而是。。。
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.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
觉得不错,别忘了随手点赞+转发哦!
边栏推荐
- Tencent wetest platform will bring new benefits in 2021 with 618 special offers!
- A method to solve the self-adaptive width and height of the internal picture of rich text label in wechat applet
- cuda runtime error (801) : Raw out
- What is a voice assistant? What will the future voice assistant look like?
- What is the knowledge map? What does it do
- 88.合并有序数组
- Outils de capture de paquets
- [Qianfan 618 countdown!] IAAs operation and maintenance special preferential activities
- Niuke-top101-bm29
- Thread pool execution process
猜你喜欢

Flink checkpoint and savepoint

Flink集群搭建以及企业级yarn集群搭建

分布式系统你必须了解的点-CAP

Distributed transaction principle and solution

Customize the toolbars of the kindeditor editor. Items removes unnecessary toolbars or retains some toolbars

Simple pricelist style code

Quick completion guide for manipulator (III): mechanical structure of manipulator

A group of skeletons flying canvas animation JS special effect

P5.js paper crane animation background JS special effect

Flink checkPoint和SavePoint
随机推荐
What is the resource search platform and how resource search works
MYSQL_精讲数据库数据类型
283. move zero
喜欢就去行动
Shape change loader loads jsjs special effect code
Fais ce que tu veux.
Cool interactive animation JS special effects implemented by p5.js
26. delete duplicates of ordered array
Leetcode-2221: triangular sum of arrays
Canvas falling ball gravity JS special effect animation
Leetcode-1823: find the winner of the game
Act as you like
International Symposium on energy and environmental engineering in 2022 (coeee 2022)
How to make a good video? What are the operation methods?
【IEEE出版】2022年服务机器人国际研讨会(IWoSR 2022)
Caching mechanism for wrapper types
机械臂速成小指南(零):指南主要内容及分析方法
线程运行原理
跨域概述,简单积累
【IEEE出版】2022年工业自动化,机器人与控制工程国际会议(IARCE 2022)