编程到底是不是知识

编程到底是不是知识

看 《阮一峰的网络日志 - 每周分享第 28 期》 有感。摘录如下:
在软件开发中,技术变化如此之快,你花费了大量时间学习技术和工具,一旦这些技术被取代,你的知识将变得毫无价值,因为它们大部分都是实施的细节
我最近总是在想这段话,软件开发算不算是真正的知识?
如果它是一种真正的知识,那么理论上,我们学到的东西大部分应该不会过时,就好像微积分不会过时一样。可是实际上,我们都知道,软件开发技能有时效性,十年前学习的编程知识,十年后几乎肯定不能用于生产。那样的话,软件开发就不能算真正的知识,只是一种实施的细节
举个例子,公司旁边有一家税务所,每天都有很多人排队交税。如果你是第一次来交税,肯定搞不清楚怎么交,交税是一门学问,必须有人教你,要带哪些证件,要填哪些表,去哪些窗口排队等等。
我现在认为,学习编程跟学习交税是一样的,都是学习实施的细节。一旦外部环境变了,原来的实施细节就没用了。当代编程由于层层的抽象和封装,我们已经不必接触底层真正具有通用性的知识了。大部分时候,所谓编程就是在写某个抽象层的配置。比如,网页样式就是在写 CSS 配置,你很难说这到底是真正的知识,还是像《办税指南》那样的实施细节。
实施细节并不是知识,而是操作步骤。如果技术栈发生变更,实施细节就会毫无用处。但是,你又不能不学习它,不知道实施细节,就没法做出项目。我觉得,程序员应该要警惕,不要落入实施细节的陷阱,不要把全部精力花在实施细节上面,然后以为自己学到了真正的知识。对待各种语言和工具,正确的态度应该是“进得去,出得来”,既要了解足够的细节,也要能够站在宏观的角度看待它,探寻底层到底是怎么实现的。

我的思考

之前我就对这些问题有过类似的思考,但是没有像阮一峰大佬想的这样的透彻,软件开发确实只是实施细节,只是操作步骤而已,框架是开源的,是大部分的人都可以无门槛使用的,操作步骤也是公开的,除了一些生僻的操作步骤只有经验丰富的人知道以外,大部分的常规的操作步骤,普通人稍微学习一下就可以上手,更不用说还有大量的培训机构做视频来教无门槛的人上手,这就导致了初级操作工越来越多,初级程序员越来越卷,本质上都是因为:操作步骤,不是真正的知识,是简单培训就能学会的,是不值钱的,如果一个开发人员只是某一个工具的熟练操作工,那他必然会被更年轻更便宜甚至更熟练的其他操作工人轻松地取代。
那么在软件开发中,什么才是真正的知识呢?当我把阮一峰大佬的观点发到技术交流群里的时候,群里的群友对我进行反驳,说我不应该把软件开发和编程划等号,大学里软件工程系的课程很少跟编程语言高度绑定,学的更多的是基础知识,比如计算机系统,计算机网络,编译原理等等,因为知道大家可能会从事不同领域的工作使用不同的编程语言,所谓万变不离其宗,大学教的就是这个宗,这个宗,这个内功,是真正的知识,是别的行业的人想要跨行的话,没个几年学不会的。这些内功,可以简单概括为四个方面,不管使用什么开发语言,做什么应用,这四大块都绕不开。

程序员的核心竞争力是什么

我们从此引申出一个问题,程序员的核心竞争力是什么,我觉得可以简单总结为以下几个方面。

反问自己,你是软件开发工程师吗?

600