程序员要掌握的知识,要具备的能力实在太多,多得头发都不够掉。
大体有两大方向。一是对工具的熟练掌握,如操作系统、网络、IO、编程语言等;另一个是用代码为现实问题生成解决方案的能力,这其中最重要的是抽象能力。
前一个方向是很容易意识到的,很多现象可以说明这一点,比如,世面上介绍如何使用语言、框架的书汗牛充栋;比如,很多人眼里进这一行的门槛是上1个月的语言培训课。
工具的意义不容否认,为此我还写过一篇《工具优先》。但工具的生命周期其实很短,从个人发展角度看,把过多时间投入到半衰期很短的事物上,并不划算。我入门时接触的是Pascal, BasicScript, ASP, IIS,不知道现在还有没有人用这些。很多程序员也赶时髦,本来写java的,golang流行了,python流行了,学!本来搞业务开发的,大数据火了,机器学习火了,学!打的旗号自然很鲜明:持续学习。几次之后,却怅然若失,貌似没一个是拿得出手的,不过是低水平重复,换个工具,继续做原来的事而已。充其量效率提高了,但效率型工作是可替代性最强的,被其它人替代,被机器替代。
一颗上进爱学习的心,怎么就被辜负了呢?因为核心能力没有提升。人的能力好比电子围绕原子核旋转,大部分情况下处于巡航状态,在这过程中不断积蓄能量,始终向核心方向用力,就会跃迁到更高级轨道(这里指更靠近核心的轨道,实际电子是更远离核心的道)。“一万小时理论”和“10万行代码理论”只片面强调了量,如果没有聚焦核心,刻意练习,只能是低水平重复,甚至轨道降级。
核心是抽象能力。这个世界的运行,有讲逻辑的,也有不讲逻辑的。程序员要处理的事是讲逻辑的那部分,因为你所依赖的计算机是讲逻辑的,要让它意气用事,感情用情,目前还很困难。通过抽象,我们识别并保留逻辑部分,抛弃其它内容,然后用计算机语言翻译、实现这个逻辑,进而解决问题。
抽象这个词,本身就挺抽象的。到底什么是抽象?
抽象是去除多余和细节。比如下面这个标志,一看就懂是座拱桥,但并没有显示拱桥的幅度、宽度和长度,因为这些数据对于你意识到这是一座拱桥并没有帮助。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。