如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

编程:思考还是打字

  • 2014-01-28
  • 本文字数:2199 字

    阅读完需:约 7 分钟

Jim Bird 是一位经验丰富的软件开发经理、项目经理与 CTO,专注于软件开发与维护、软件质量与安全等领域中疑难问题的解决。在过去的 15 年间,Jim 曾管理过团队建设并主导过高性能的财务系统的建设。他的主要兴趣在于如何提升小团队的效率以构建真正的软件:高质量、安全、可靠、高性能及适应性强。近日,Jim 撰写了一篇博文,谈到了编程与思考及打字之间的关系。编程与思考关联性更强抑或仅仅只是一些打字动作而已呢?在这篇博文中,Jim 给出了自己的答案。

Ward Cunningham 曾在“The Pragmatic Programmer”一书的序言中说过“如果没有经过深入的思考,那么你会认为编程只不过是使用一种编程语言输入一些语句而已”。

软件开发涉及到很多工作,如设计、解决问题、学习最优的新算法、学习新语言、将乱糟糟的代码重构为紧凑且优雅的代码,这些工作都需要深入的思考才行。

在尝试做一些之前没有做过的事情时,甚至其他人也没有做过,或者是之前曾经做过,不过要确保这次做的时候不会再犯与之前相同的错误,那么你需要花时间想出更好的方式。有时你需要理解别人编写的代码,这样才能对代码做出修改,还有些时候你会寻找代码中隐藏很深的Bug。所有这些工作都需要花费大量的时间,不过最后的结果却是你可能并没有编写太多的代码来表现这一段时间的工作。

开发中还涉及到其他一些类型的工作,这些工作需要输入很多代码,却不需要过多的思考。在清楚了做什么以及如何做之后,你需要编写大量的代码来完成工作。也许之前曾经编写过这样的代码,不过还要再编写一次,这可能是一段脚本、一个界面、一个报表。也许大多数思考工作已经由别人帮你做了:准备好了线框图、明确告诉你应用的感官与流程、详细列出了API 的细节信息,这时你要做的只是敲代码,并尽力保证别犯太多错误。

调试过程就是思考过程。修复Bug、测试Bug 修复并将结果发布出去几乎就是个打字的工作。早期的设计与开发、技术调研与架构设计需要深入的思考。制作第3 个、第4 个、甚至是第100 个界面或是报表就是个打字的工作。UX 设计与原型制作需要深入的思考,而编写CRUD 和配置信息则是个打字的活。追逐移动应用最新、最酷的想法需要深入的思考,而完成应用则只是个打字的工作。解决常见的业务问题需要编写很多代码,而通过软件优化业务流程则需要非常深入的思考。

有些人的工作需要大量的思考,还有些人则只是敲敲代码而已。其实这两种人从事的是非常不同的工作,需要采取截然不同的方式进行管理。

有时编程就是打字

Jeff Atwood 在“Programming Horror”这篇文章中曾说过“我们首先是个打字员,其次才是程序员”。

很多业务应用本质上都是很肤浅的,充斥着大量的数据库表和文件、大量的数据元素、大量的 CRUD 界面、大量的报表、大量的集成、大量的映射,这导致运维工作变得比较困难。长长的功能需求列表,大量的问题需要回答才能保证每个人都能理解需求,需要记住大量的细节信息并追踪这些信息。银行、保险、政务、会计、财务报表与账单、库存管理与 ERP 系统、CRM 系统、办公应用,诸如此类;还有很多 Web 门户和在线商店都是如此。

你是要建造一个房子、一座桥还是一个商场呢?这类大问题的解决代价也很高昂,需要编写大量的代码才行。不过这些代码很有可能之前已经编写过多次了,这些工作更多的是使用熟悉的模式解决熟悉的问题,然后证明所采用的工具与方式是正确可行的。

思考、思考、思考

其他工作,诸如设计游戏引擎或是交易算法、物流与在线风险管理、优化实时控制系统都需要大量的思考,相比之下,打字的工作量倒没有那么大了。这些系统都具有严苛的非技术需求(可伸缩性、实时的性能、可靠性、数据完整性及精确性等)与复杂的逻辑,不过他们都关注于解决一类问题。有一些聪明人能够胜任这些问题,并找到问题的解决方案。虽然如此,还是有一些编码工作需要做,不过核心工作的代码量通常都不是很大,

这正是软件的魔力之所在,成功系统的核心都是一些专利算法和经过深思熟虑的设计。这类工作需要做很多研究并开发大量的原型,具备问题解决能力和丰富的领域知识。

打字与思考是不同类型的工作

需要编写大量的代码还是深入的思考决定了团队需要多少成员,这也改变了人们的工作方式以及你的管理方式。编码工作可以外包出去,思考工作却绝不行。你得认识到编码可以解决哪些问题,不能解决哪些问题,当思考转变为编码时需要多少工作量。

思考工作应该由紧密配合的专家小团队来完成,或是由一个非常聪明的成员独立完成。在设计架构或是解决难题时,你不需要很多人参与。解决问题的人会沉浸在问题域中,这是很有效的方式。

思考与打字

思考与打字是软件开发中的两个重要组成部分。

“Programming is Not Just Typing”这篇文章中,Brendan Enrick 谈到了结对编程的好处,因为这会促使人们在打字的同时又在思考:

  • 两个人都在思考,但思考的却是不同的事情。一个开发者拿着键盘,脑子里想着他正在编写的代码,在短时间内,他的打字速度比较重要。
  • 结对的另一个开发者全力思考着。他并不关心编程语言的语法,因为这是另一个人的事情。他要确保自己的搭档使用正确且高效的方式完成工作。

成为一名优秀的开发者要比一名打字员困难得多,他需要学习很多知识:掌握所用的编程语言、了解相关工具的使用方式、知道如何在代码间导航、知道如何编写更好的代码,同时打字速度还要快,这些都是成为一名成功的开发者所要掌握的东西。不要忽略打字的重要性,同时也不要让打字干扰到自己的正常思考。

2014-01-28 22:381692
用户头像

发布了 88 篇内容, 共 272.1 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

阿里巴巴2022全新出品亿级并发设计速成宝典(系统拆分,缓存,MQ,读写分离,分布分表,ES扩容应有尽有)

程序员小毕

Java 程序员 面试 后端 高并发

Kubernetes日常故障解决

CTO技术共享

开源 签约计划第三季 8月月更

兆骑科创双创服务平台,创新创业高层次人才引进,投融资对接

兆骑科创凤阁

兆骑科创创新创业大赛承办,线上直播路演,企业孵化

兆骑科创凤阁

今天面了个腾讯拿38K出来的大佬,让我见识到了Java面试八股文的天花板

Java全栈架构师

Java 数据库 spring 程序员 面试

阿里架构师力推jvm架构解析文档,把JVM调优实战讲的明明白白

Java工程师

Java JVM GC

IPv6地址规划

穿过生命散发芬芳

ipv6 8月月更

Kubernetes 集群 Ingress 网关

CTO技术共享

开源 签约计划第三季 8月月更

深入浅出边缘云 | 5. 运行时控制

俞凡

架构 边缘计算 网络 深入浅出边缘云

从没见过能把高并发拆解的这么详细!阿里巴巴这份堪称神级的“高并发”教程太香了

Java永远的神

Java 程序员 架构 面试 高并发

JOIN查询时,我为什么建议你将小表放在前面?(NLJ,SNL,BNL算法全面解析)

董哥的黑板报

MySQL 数据库 后端 服务端 db

阿里SpringCloudAlibaba实战小抄(第五版)GitHub独家首发开源

冉然学Java

GitHub 开源 springcloudAlibaba spring-boot

阿里内部高并发核心编程笔记:多线程、锁、JMM、JUC、设计模式

冉然学Java

JMM 设计模式 java; 多线程高并发

STM32+果云GA6-GPRSGSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位

DS小龙哥

8月月更

设备树

贾献华

8月月更

从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

阿里巴巴云原生

Linux 阿里云 云原生 容器服务 IPVLAN

Istio的扩展和定制

阿泽🧸

istio 8月月更

开源一夏 | 自从我使用HiFlow场景连接器后,在也不用担心成为“落汤鸡”了

叶秋学长

开源 8月月更 Hiflow

一个可以提前结项的敏捷项目

Bruce Talk

敏捷 Agile 敏捷项目

1500字简述 Apache ZooKeeper 的基本原理

wljslmz

Apache zookeeper 分布式 8月月更

基于 OPLG 从 0 到 1 构建统一可观测平台实践

阿里巴巴云原生

阿里云 分布式 云原生 可观测 全链路

阿里大神级 最新Elasticsearch 笔记,抓紧学起来!

冉然学Java

elasticsearch 编程 分布式 java; 程序员、

Kubernetes 虚拟机部署弊端

CTO技术共享

开源 签约计划第三季 8月月更

STM32的启动过程 — startup_xxxx.s文件解析(MDK和GCC双环境)

矜辰所致

stm32 arm 8月月更 stm32启动流程 startup_xxxx.s

Web网页端IM产品RainbowChat-Web的v4.1版已发布

JackJiang

html5 前端 websocket 即时通讯 IM

MySQL存储引擎

武师叔

8月月更

迄今为止见过最详细的零拷贝技术讲解

C++后台开发

后端开发 零拷贝 Linux服务器开发 C/C++后台开发 C/C++开发

六千字梳理 Node.js 的多进程模型和项目部署流程

昆吾kw

Node Express NGIN pm2

Spring(二、配置文件)

开源 bean Spring JPA 8月月更

编程:思考还是打字_语言 & 开发_张龙_InfoQ精选文章