写点什么

编程:思考还是打字

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

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

关注

评论

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

极光笔记 | DSP高并发应用实践

极光GPTBots-极光推送

后端 DSP

阿里云弹性计算对视觉计算的思考与实践

阿里云弹性计算

Metaverse 视觉计算

首版架构师全栈”成长笔记“一经发布就获得一致好评,我不允许你没看过

Java架构追梦

Java 程序员 java面试 后端开发

「可视化案例Vol.3」数字孪生可视化园区,开启园区智慧管理新篇章

ThingJS数字孪生引擎

物联网 可视化 数字孪生

【国产】ETL自动化调度运维管理平台 TASKCTL 8.0 分布式部署

敏捷调度TASKCTL

Docker DevOps 国产开源 大数据运维 TASKCTL

2022,「大厂云」还在找新着力点

ToB行业头条

博云首批通过欧拉技术测评,联合解决方案通过验证

BoCloud博云

新闻

如何做好部门知识管理

小炮

基于Elasticsearch生长的SREWorks数据化运维体系

阿里云大数据AI技术

分布式 SRE 数据化运维

PlatoFarm生态进展不断,通缩推动PLATO价值提升

小哈区块

WorkPlus助力深i企打造移动数字化底座

BeeWorks

web前端培训Vue3 setup() 启动函数的原理

@零度

前端开发 Vue3

新思科技连续六年获评Gartner魔力象限领导者殊荣

InfoQ_434670063458

新思科技 应用安全 Gartner

DeepMind爆发史:决定AI高峰的“游戏玩家”|深度学习崛起十年

OneFlow

人工智能 深度学习 DeepMind AGI

算法交易的最佳编程语言是什么?

非凸科技

rust 编程语言 交易系统 策略

“数聚赋能”,让实时数据中台成为惠企、惠民政策服务应用的源头活水

tapdata

数据中台 数字政务 实时数据 智慧政务

基于云效AppStack实现环境管理 | 开箱即用

阿里云云效

阿里云 研发管理 研发 应用交付 环境管理

高级Java面试经验总结:多家大厂简历优化+面试题目+面经+薪酬等

Java架构追梦

Java 程序员 面试 后端开发

ImageKnife组件,让小白也能轻松搞定HarmonyOS图片开发

HarmonyOS开发者

HarmonyOS ArKUI 3.0

多商户商城系统如何对接电商收付通?

CRMEB

Android C++系列:vector最佳实践

轻口味

c++ android 4月月更

服务器与普通台式机的对比及发展趋势

Finovy Cloud

gpu 云服务器 GPU服务器 GPU算力

不面试别看!字节跳动2022年Java架构师岗面试题(试行版)发布

Java架构追梦

Java 程序员 java面试 后端开发

低代码之火,何以燎原?

BeeWorks

Tapdata Cloud 2.1.4 来啦:数据连接又上新,PolarDB MySQL、轻流开始接入,可自动标记不支持的字段类型

tapdata

SaaS 云数据库 Real Time DaaS polarDB DaaS

全网最细的短网址系统设计与实战

星牛君

MySQL redis 布隆过滤器 Java EE

直播回顾:SIMD 指令集在 OpenJDK 中的现状与未来 | 龙蜥技术

OpenAnolis小助手

Java Openjdk simd arm 龙蜥社区

浅谈商业模式---《北大-真格创业课》笔记(30/100)

hackstoic

商业模式 创业公司

移动开发平台|助力企业安全高效搭建高质量移动应用

BeeWorks

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