对于程序员来说。掌握语言的语法,其实只是万里长征的第一步。
真正困难的是,如何把现实的问题转化成代码。
计算机语言,他的本质是语言。和英语,法语,德语一样的。
是一门用来指挥计算机这个东西来干活的语言。
但是,你掌握了语法,背了单词,就能写一篇文章告诉一个英国工程队伍,让他们帮你解决一个工程问题么?
显然不能,你要懂这个工程相关的只是,还要懂他们的行为模式,习惯,手里的工具,还要知道资源的分配和管理模式,等等等等,语言本身,只是一个基础。而后面的东西才是能让这门语言起作用的关键。
而计算机的基础知识就是在执行者和工具的层面上,让你知道计算机是如何运转的,你要如何去安排和调度计算机的资源来解决问题。
更进一步,在遇到现实的业务问题后,在理解了业务需求之后,就可以快速的转化成技术方案来解决问题。而这才是高级程序员和普通的程序员之间的区别。
要知道,程序员的本名,叫XXX开发工程师。和其他的工程师一样,你要是连自己要去操作的对象的运转特质都不知道。那就只能干很表面的工作。
比如说:
计算机组成原理,当程序出错时,当系统加载时,当遇到底层的问题时,就可以更快的判断和分析问题,而不是只会重启。
数据结构,理解的数据结构,就可以明白语言中为什么会有数组,链表,map,字典,栈,队列等等多种多样的结构。
操作系统,就当遇到多线程、多进程、线程池、内存分配时,就能明白为什么要这么做,为什么要那么做,做了以后的表现都是为什么,而不是浑浑噩噩的跑跑看。
网络基础,当编写各种网络传输的程序时,就能够明白,各种各样的网络协议分别都是为什么。底层的逻辑是什么,如果有一天成为架构师的时候,选择技术方案时,心里面会有底,而不是瞎选一通。
这些东西,看起来好像去网上搜一下,看一看,几天就看个七七八八,剩下的大部分似乎都没起到什么作用。但是,学习一样东西不是明白个大概就能够会用的,是需要一遍一遍,长期的理解思考,把知识渗透到行为模式中,这样每当遇到问题是,心里马上就会有个判断,不需要现场去搜索,即便去搜索,也马上会知道要搜什么。而这就是效率的关键。
当随着年龄和资历的增加,就可以且需要解决越来越复杂的工程问题,需要带团队,培养新人,帮新人解决问题时。这些知识就会越来越凸显出价值。这些知识才是让一个程序员越老越吃香的关键。因为这些知识是不变的,随着经验,越来越熟练的和现实结合起来。是年轻程序员们最难替代的部分。
或者,简要的说。计算机基础知识,是让程序员35岁没那么容易被淘汰的关键。