编程到底是不是知识

警告
本文最后更新于 2023-11-07,文中内容可能已过时。

编程到底是不是知识

看 《阮一峰的网络日志 - 每周分享第 28 期》 有感。摘录如下:

在软件开发中,技术变化如此之快,你花费了大量时间学习技术和工具,一旦这些技术被取代,你的知识将变得毫无价值,因为它们大部分都是实施的细节

我最近总是在想这段话,软件开发算不算是真正的知识?

如果它是一种真正的知识,那么理论上,我们学到的东西大部分应该不会过时,就好像微积分不会过时一样。可是实际上,我们都知道,软件开发技能有时效性,十年前学习的编程知识,十年后几乎肯定不能用于生产。那样的话,软件开发就不能算真正的知识,只是一种实施的细节

举个例子,公司旁边有一家税务所,每天都有很多人排队交税。如果你是第一次来交税,肯定搞不清楚怎么交,交税是一门学问,必须有人教你,要带哪些证件,要填哪些表,去哪些窗口排队等等。

我现在认为,学习编程跟学习交税是一样的,都是学习实施的细节。一旦外部环境变了,原来的实施细节就没用了。当代编程由于层层的抽象和封装,我们已经不必接触底层真正具有通用性的知识了。大部分时候,所谓编程就是在写某个抽象层的配置。比如,网页样式就是在写 CSS 配置,你很难说这到底是真正的知识,还是像《办税指南》那样的实施细节。

实施细节并不是知识,而是操作步骤。如果技术栈发生变更,实施细节就会毫无用处。但是,你又不能不学习它,不知道实施细节,就没法做出项目。我觉得,程序员应该要警惕,不要落入实施细节的陷阱,不要把全部精力花在实施细节上面,然后以为自己学到了真正的知识。对待各种语言和工具,正确的态度应该是“进得去,出得来”,既要了解足够的细节,也要能够站在宏观的角度看待它,探寻底层到底是怎么实现的。

我的思考

之前我就对这些问题有过类似的思考,但是没有像阮一峰大佬想的这样的透彻,软件开发确实只是实施细节,只是操作步骤而已,框架是开源的,是大部分的人都可以无门槛使用的,操作步骤也是公开的,除了一些生僻的操作步骤只有经验丰富的人知道以外,大部分的常规的操作步骤,普通人稍微学习一下就可以上手,更不用说还有大量的培训机构做视频来教无门槛的人上手,这就导致了初级操作工越来越多,初级程序员越来越卷,本质上都是因为:操作步骤,不是真正的知识,是简单培训就能学会的,是不值钱的,如果一个开发人员只是某一个工具的熟练操作工,那他必然会被更年轻更便宜甚至更熟练的其他操作工人轻松地取代。

那么在软件开发中,什么才是真正的知识呢?当我把阮一峰大佬的观点发到技术交流群里的时候,群里的群友对我进行反驳,说我不应该把软件开发和编程划等号,大学里软件工程系的课程很少跟编程语言高度绑定,学的更多的是基础知识,比如计算机系统,计算机网络,编译原理等等,因为知道大家可能会从事不同领域的工作使用不同的编程语言,所谓万变不离其宗,大学教的就是这个宗,这个宗,这个内功,是真正的知识,是别的行业的人想要跨行的话,每个几年学不会的。这些内功,可以简单概括为四个方面,不管使用什么开发语言,做什么应用,这四大块都绕不开。

  • 操作系统

  • 计算机网络

  • 数据结构与算法

  • 设计模式

除此之外的东西,本质上来说,都可以看作是操作步骤。也就是说,从编程语言,再到特定语言的流行框架,其实都是操作步骤,这些东西都是会随着时间的推移不断变化的。

一个眼前发生的例子就是 Python,Python 刚开始火起来的时候,培训机构大量培训 Python,从业人员暴增,Python 的 Web 框架 Djanggo 也是非常受欢迎的,现在 Python 不再流行,Python Web 半死不活,Djanggo 自然也就没有多少人使用了,论坛里很多做 Python Web 的都说找不到工作。这就是只会一种语言一种框架的人在技术的变迁的过程中的结局,他们很有可能会转行,离开软件这个行业。

现在 Java 仍然流行,不代表 Java 会一直流行,Java 都不流行了,Spring 必然也将退出历史舞台。Spring 这个框架,除了其包含的 IOC 和 AOP 的思想之外,确实都是操作步骤,都是学 API 的使用。

所以不要把自己绑定在一种编程语言上,更不用说把自己绑定在某种语言的某个流行的框架上,我们在学习的时候,要学习这些编程语言和流行框架的细节,不然无法编码,但是同时更要注重基础知识,尤其是像我这种从其他行业转行到计算机行业的人,不应该要过多注重框架 API 的熟练,应该花费精力去补习基础知识,这样才能增加自己的抗风险能力,在这个行业走得更深更远。

有人说,你这不是典型的既要又要嘛,这没办法,想要走上更高级的层次,就得付出更多的努力。

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

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

  • 扎实的计算机相关基础

  • 英语

  • 良好的沟通能力和管理能力

0%