自从上次看了业界大神阮一峰发的那篇文章之后,给我的印象非常的深刻,一直想写文章跟大家交流和探讨一下,那就是:软件开发到底算不算知识呢?
在探讨这个话题之前,我们先看看大神阮一峰是怎么说的,大致内容如下:
在软件开发中,技术变化如此之快,你花费了大量时间学习技术和工具,一旦这些技术被取代,你的知识将变得毫无价值,因为它们大部分都是实施的细节。
我最近总是在想这段话,软件开发算不算是真正的知识?
如果它是一种真正的知识,那么理论上,我们学到的东西大部分应该不会过时,就好像微积分不会过时一样。可是实际上,我们都知道,软件开发技能有时效性,十年前学习的编程知识,十年后几乎肯定不能用于生产。那样的话,软件开发就不能算真正的知识,只是一种实施的细节。
公司旁边有一家税务所,每天都有很多人排队交税。如果你是第一次来交税,肯定搞不清楚怎么交,交税是一门学问,必须有人教你,要带哪些证件,要填哪些表,去哪些窗口排队等等。
我现在认为,学习编程跟学习交税是一样的,都是学习实施的细节。一旦外部环境变了,原来的实施细节就没用了。 当代编程由于层层的抽象和封装,我们已经不必接触底层真正具有通用性的知识了。大部分时候,所谓编程就是在写某个抽象层的配置。比如,网页样式就是在写 CSS 配置,你很难说这到底是真正的知识,还是像《办税指南》那样的实施细节。
实施细节并不是知识,而是操作步骤。如果技术栈发生变更,实施细节就会毫无用处。但是,你又不能不学习它,不知道实施细节,就没法做出项目。我觉得,程序员应该要警惕,不要落入实施细节的陷阱,不要把全部精力花在实施细节上面,然后以为自己学到了真正的知识。对待各种语言和工具,正确的态度应该是“进得去,出得来”,既要了解足够的细节,也要能够站在宏观的角度看待它,探寻底层到底是怎么实现的。
看到这段话的时候,其实自己对于软件开发技术的更新迭代速度快,并不感到震惊,也不感到吃惊。毕竟,我们作为程序员对于技术发展的速度,更新换代的时间已经司空见惯,习以为常了。
但是,正式因为我们的司空见惯和习以为常导致我们对这样的问题就缺少了思考。
我比较震惊的是知识的概念。
如果说我们的软件开发和编程经验不属于知识,那它们属于什么呢?对,它们属于技术。但是,我们再思考一下,技术和知识又有什么关系呢?
知识应该是技术的基础,知识是根,技术是术。举个例子的话就是:知识就是交通规则,技术就是驾驶技术,有了技术你就能开车上路,但是要想安全行车,就必须还得懂交通规则。
知识是懂的原理,技术是知道怎么做。如果不懂知识,死记硬背,熟练练习技术,你能干活吗?能干,但是要想干好,那就必须得懂。就像开车一样,光学会了驾驶技术,但是要想安全行车,必须懂得交通规则。
那在深一层次的问,既然知识是技术的基础,我们编程,软件开发的根是什么呢?对,就是那些原理性的东西。比如,计算机系统原理,编译原理,算法等。
其实,知识这个概念到现在也没有一个明确的概念。知识是符合文明方向的,人类对物质世界以及精神世界探索的结果总和。知识,至今也没有一个统一而明确的界定。
就比如阮老师在上面说的微积分,微积分在现阶段我们的认知下,是正确的,但是在未来就不一定对了,也不一定能够满足和使用了。所以,它终究也可能会被淘汰。只不过这个科学基础性的知识的生命周期可能比较长,不容易更新换代一样。
就像我们现在的技术更新迭代快一样。软件开发的技术一直在更新迭代,但是计算机系统原理,编译原理更新的周期快吗?生命周期长吗?对,这些科学基础性的东西就如同微积分一样,不是它不会被淘汰,只不过是在现阶段的文明和人类的认知前提下,很难有进一步的突破,一旦有突破,也会淘汰。
不知道说了这么多,大家看懂了没有?其实讨论完这个话题之后,我们应该认识到,现阶段大部分的程序员都是忽视原理和基础的,都是在死记硬背软件的开发技术和流程,而很少去懂原理性的东西,这就是为什么很多人说我们程序员是吃青春饭的原因。因为熟练使用一种技能很容易被淘汰,而甚至原理性的东西,确实很难过时。
不知道看完这些,你们对这个话题有什么想法呢?你们认为软件开发属于知识吗?欢迎大家留言一起交流探讨一下。
原文发布时间为:2018-11-06 本文作者: loonggg 本文来自云栖社区合作伙伴“非著名程序员”,了解相关信息可以关注“非著名程序员”。