2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

编程:思考还是打字

  • 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:381697
用户头像

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

关注

评论

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

投行工作的本质 | 读《投行职业进阶指南:从新手到合伙人》

邓瑞恒Ryan

读书笔记 投资 金融 投行 职业第二曲线

公安大数据分析系统开发,情报研判系统搭建

t13823115967

智慧公安

Gemini双子新约交易所系统软件APP开发

系统开发

ETH场外交易系统开发流程丨ETH场外交易开发源码案例

系统开发咨询1357O98O718

ETH场外交易系统开发

TRONex波场智能合约系统开发详解丨TRONex波场链系统开发(源码)

系统开发咨询1357O98O718

系统开发 TRONex波场智能合约 APP开发

有道逻辑英语-时态新发现笔记

Leo

学习 大前端 笔记 时态

第12周总结

饭桶

如何降低微服务测试成本?我的经验之谈

阿里巴巴中间件

构建一张音视频全球大网究竟需要多少个节点?Pano Backbone技术探秘

拍乐云Pano

音视频 RTC 拍乐云

《微信小程序开发入门与实践》.pdf

田维常

Java并发编程:多线程并发内存模型

李尚智

Java并发

三金本体挖矿模式系统开发丨三金本体平台源码设计

系统开发咨询1357O98O718

三金本体挖矿模式源码

vivo 全球商城:从 0 到 1 代销业务的融合之路

vivo互联网技术

架构 分布式 商城项目 商城

Forsage系统开发(模式分析)

系统开发咨询1357O98O718

Forsage系统开发案例介绍

年终盘点 | 七年零故障支撑双11的消息中间件 RocketMQ,怎么做到的?

阿里巴巴中间件

消息中间件 双十一

深入浅出理解视频编解码技术

拍乐云Pano

音视频 RTC 拍乐云 视频编解码 视频算法

架构师训练营 12 周作业

郎哲158

COMP矿池矿机系统开发案例分析

系统开发咨询1357O98O718

COMP矿池矿机系统开发介绍

喜讯 | 拍乐云荣登2020「年度最具投资价值创新企业TOP20」榜单

拍乐云Pano

音视频 拍乐云

使用Angular8和百度地图api开发《旅游清单》

徐小夕

Java angular.js 大前端 angular

OKO疯矿链系统开发案例(源码)

系统开发咨询1357O98O718

OKO疯矿链系统开发

第12周作业

饭桶

北京天源迪科与重庆邮电大学移通学院成功签约

DT极客

【涂鸦物联网足迹】物联网常见通信协议

IoT云工坊

物联网 HTTP 通信协议 mqtt coap

区块链钱包系统开发方案丨多币种钱包系统开发详情

系统开发咨询1357O98O718

区块链钱包开发

LeetCode题解:433. 最小基因变化,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

5分钟完成业务实时监控系统搭建,是一种什么样的体验?

阿里巴巴中间件

体验 监控

BMEX交易所系统软件开发|BMEX交易所APP开发

系统开发

产品推荐 | 还在自研?快来解锁拍乐云互动白板

拍乐云Pano

音视频 在线教育 RTC 互动白板

看到Mybatis源码就感到烦躁,怎么办?

田维常

mybatis

区块链应用落地,物流供应链平台搭建

t13823115967

区块链应用

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