有不少读者咨询过基础知识相关的问题。
有问怎么能够学好基础知识,有问基础知识到底有什么用,也有直接过来喷我,说工作只有CRUD,基础知识就是忽悠。
当然,也有一种论调说,基础知识就像是编程中的九阳神功,掌握好了,就可以内力大增,成为绝顶高手。
其实基础知识既没有那么不堪,也没有那么神乎奇迹。这篇文章,就聊聊,我对基础知识的一些理解。
首先,基础知识的学习,确实不能带来短期的收益。应该说,对于大部分的工作,都是如此的。
以后台开发为例,花了很长时间去补操作系统,数据库,网络这些知识,但发现每天的工作还是CRUD,大部分都用不上。
要想通过学习基础知识来取得短期内的快速提升,并升职加薪,这个想法基本就可以摒弃了。
基础知识对程序员最大的价值是软件思维能力的培养和软件架构意识的潜移默化。
虽然学习这些内容,既枯燥又费时间,但长期来看,确实会从根本上提升一个程序员的软件思维能力,你也可以认为,它能够最终提升你技术生涯的天花板。
image.png
其次,基础知识对于技术的提升,不是在后期才发挥作用的,而是在整个的技术成长周期中,都发挥着作用。
很明显的区别就是,两个人在同时学习一套新的RPC框架。基础知识扎实,对网络协议,操作系统网络部分处理机制,有较深入了解的同学,可以学得比对这些部分完全没了解,或了解很少的同学快很多,也透很多。
就像有些人,老是觉得某些框架学了就忘,很多时候,是因为没有吃透框架本身的设计原理,掌握最核心的东西。
一般框架的设计,都是围绕性能,复用性,可扩展性进行的。
要做到高性能,必然需要对底层依赖系统有深入理解,反过来说,如果你对底层依赖系统理解深入,你对框架性能这块的设计和考究,就能很快掌握了。(底层依赖系统:操作系统,JAVA 虚拟机等)
java 2.jpg
复用性,可扩展性,基本跟软件设计,设计模式,最佳编程规范相关。如果这些你也掌握了,那自然能够很快理解这其中的设计。
有这些基础知识的支撑,学习这些新框架的时候,你会快很多,而且因为你能理解为什么要这么设计,所以也不容易忘记,甚至你忘记的时候,都可以通过自己的经验推导出来。
所以,基础知识对个人技术能力的提升,是有很关键作用的,能让你学习得更快,更容易,更深入,而且伴随你整个技术生涯。
image.png
再次,基础知识的学习,求精不求多。有不少同学容易陷入一种误区。觉得基础知识很重要,然后就一直在学,好像随时抱着一本大部头的《算法导论》,自己的编程能力就会有提升一样,其实并不是如此的。
对大多数人来说,学习基础知识比学习一种新的语言,一个新的框架更难,更枯燥。
而蜻蜓点水式的学习,对基础知识的掌握基本没用,除了获得一点心里安慰之外,基本没有价值。
其实一本《算法导论》那么厚,大部分人都没有看完的,你能够吃透其中的三分之一,我觉得就可以赢过大多数人了。操作系统,网络协议,也是一样。
吃透才有真正的价值,那怕只是书中的一页。而蜻蜓点水式的学完,你会发现,合上书,基本就忘光了。
如果你真的想掌握好基础知识,我觉得可以做一个长期且极有耐心的规划。比如一年为期,只看一本基础知识的书籍,并且每个月,就其中的一两个点,深入吃透。
这种看似很慢的做法,其实特别扎实,一段时间后,你会慢慢感知到一种来自底层思维的变化。到那时候,你肯定可以获得一种巨大的满足感,你会有一种突然清晰的感觉,好像一层朦雾被拨开了。
最后,基础知识当然不能够包治百病,但如果你确实有耐心去学习,你有可能在坚持两三年后,改变自己的技术命运,说在你已有的水平上,再提升一到两个档次都不为过。升职加薪便是自然而然的事情。
当然,这种事情是很难的,单两三年这个时间,估计不少人看了就退缩了。不过这也合理,做成困难的事情的人总是少的,但也是这批人,最后可以走得更快,更好!
最后在这里和大家说一下,我现在在职Java开发,在我的工作中我总结了许多关于Java的一些基础的学习资料和学习路线,还有一些试题之类的文件,如果你们对此有兴趣的伙伴可以来我的扣扣交流峮,
前面108中间062后面1881 希望我的分享对大家有帮助。