对于一名优秀的技术人员来说,究竟是专精一块技术方向,做到深耕其中所向披靡;还是谋求“什么都能略懂一点”的广度,成为一个全方位的人才?这其实是一个职业发展和学习规划路线的问题,许多同学都有这个困扰。
你学操作系统的时候,会发现有一个叫缓存的东西,看一下原理,也挺简单,就是空间换时间嘛。
然后你学一门语言开始试着做一些小项目,会发现有些数据经常被读、但很少修改,感觉没必要每次都读数据库,于是你在项目里临时用map存起来,写操作的时候才去操作数据库,然后一想,诶?这不就是缓存吗。
然后你开始实习了,发现大家现在都搞分布式微服务,自己在内存里用map会导致数据不一致,然后在别人的代码里发现了一个叫做redis的东西,想起面经里好像背过,看了看简介,原来是一个贼快的内存数据库,可以解决分布式缓存的问题。
没跑题,这是很多程序员从学校到职场的经历。我只是想论证,绝大多数知识都是相通的,是可以举一反三的。
所以,精于基础,广于工具。
所有的基础课程,都是历代大佬的经验总结大浪淘沙后留下来的,在所有上层应用中无处不在。
比如语言,语言差异再大,落在最底层无非也就是操作系统的磁盘读写、内存分配、cpu分配、垃圾回收这套东西,实现千差万别,思想大同小异。
所以,如你题目中所说,操作系统数据结构这些有多重要?
最重要!
搞清楚操作系统,你就知道原来语言是殊途同归的。
搞清楚数据结构,你就知道为什么所有语言都会有数组、链表、哈希,什么时候该怎么用。
搞清楚设计模式,你去看绝大部分框架原理的时候效率都会成倍增长。
把基础的理论知识和思想尽可能的搞清楚,语言、框架、工具,广泛涉猎。
面对一百个不同的需求,用一种工具,不管是否合理是否适配,都能够实现它们,这应该就是你所说的精。
能够快速的从一百种工具中选择合适的工具并上手,实现对应的需求,这叫解决问题的能力。
最后,我喜欢三体,但并非因为辛辣的讽刺或异想天开的脑洞,而是因为大刘道出了一个许多人本末倒置的事实:
应用是理论的扩展,工具是知识的延伸。