惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - 叶小钗
The Cloudflare Blog
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
小众软件
小众软件
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享

Random Thoughts

尽职编程:AI Coding 时代的个体产出差异的来源 大公司与创业公司的 AI Coding 体验差异 LLM 训练与推理的基本理解 昨日的世界不再重来 Magic Brush - 画出你自己的产品宇宙 写在 AI Coding 奇点之后 尼泊尔布恩山小环线纪行 2025 投资组合年报 三十而笠 我的 8 年职业生涯回顾 我的颈椎病康复之旅 - 关于选择的故事 熊野古道中边路纪行 新加坡旅居三年再回首 高加索三国 - 阿塞拜疆行记 2024 投资组合年报 重新思考 Go:了解程序在线上是如何运行的 欧游散记 —— 环勃朗峰之旅 欧游散记 —— 特摩索斯古城 重新思考 Go:Channel 不是「消息队列」 重新思考 Go:Slice 只是「操作视图」 那一天,我决定踏出一步 True Story 少数价值 A Snapshot of Myself - 2021 RPC 漫谈: 连接问题 RPC 漫谈:序列化问题 RPC 漫谈: 限流问题 科学,技术与工程 Pond: Golang 通用对象池 Golang for-range 内部实现
什么是真正的编程能力
Joway · 2019-06-11 · via Random Thoughts

四年前在知乎提过一个问题,「什么是真正的编程能力」,当时这个问题获得了许多业内前辈的热诚回答。时过境迁,前段时间和朋友谈起最初使用知乎的经历,这才又想起当年年少无知提的这个问题,多年以后去一一回顾当时大家的回答,对每句话都有了更为深刻的理解和感触。

如果我在今天去回答四年前自己提出的问题,我会如回答里的诸多其他工程师一样,将编程能力定义为「解决问题的能力」。在不同职业阶段对这话的理解可能会大有不同。在四年前,我会认为这句话的意思是「通过熟练且优异的编程技巧进行解决问题的能力」,着重点依旧在编程本身。但如今我却「背叛」了编程,或者说我所认为的编程能力不应当局限于「狭义的编程」本身。

如果我们抛开这些年上层编程技术日新月异的发展,从编程的本质来看,编程的实质无非是用一套形式化语言去定义问题和描述解决问题的步骤。一个文学作家亦可以用自然语言实现他自己的编程工作,只不过最终的编译器和运行环境是人类的大脑 —— 过去几千年的数学家就是如此工作,并在自然语言基础上发明了更清晰严格的数学形式语言。计算机编程较之人脑的优越性在于更为可靠和高效的运行环境,使得数学得以脱离人类大脑的局限,完成更为复杂的工作。

然而现实生活远比数学家想象的世界要复杂的多,现实问题在被形式化成为计算机语言前,往往要先经过人类使用自然语言进行反复沟通和辩论的过程,最终才会达成一致并被批准以落实成计算机语言。甚至于事实上相当一部分工作在自然语言阶段就足以被妥善解决,完全没有使用计算机的必要。许多人最初认为的编程能力,仅限于最后一步把自然语言的需求翻译成计算机语言而已,但事实上,一个只了解计算机语言编程的人或许是个不错的 Coder,但很难被称之为是一个合格的工程师,也不可能开发出伟大的 Software。

如果一个工程师在编程活动中被一个他所不熟悉的语言所编写的软件所阻挡,最工程师的方法自然是学会这门语言然后解决这个软件的问题。以此类推当一个工程师在现实生活中被一群完全与他处于不同话语体系和思维体系的人所阻挡,最工程师的方法同样是学会他们的语言,使用他们的方式去描述问题、解决问题。

语言亦或思想都是编程的工具,而编程又是为解决问题而创造的工具。我们经常看到一些多年某门计算机语言的从业者对于计算机的认知被牢牢锁死在这门语言框定的世界里,与之相似的是有更大一部分人对于世界的认知被锁死在计算机语言所框定的世界里。这既是从业者的悲哀也是计算机科学的悲哀。

以上所述,如果要我将「解决问题的能力」展开成一个更为清晰的定义,我会认为,真正的编程能力是能够在这个复杂的世界里,针对不同语言体系的人理解并使用不同的描述形式,编写出一个用以清晰界定问题并描述出解决方法的「程序」的能力。

希望再过四年我再来回顾这个问题时,能够有更为别致的感受。