要学的东西太多了怎么办

Posted 铁柱同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了要学的东西太多了怎么办相关的知识,希望对你有一定的参考价值。

一、前言

      为什么要写这篇博客,一方面是自己最近遇到一些事情然后刚想清楚,一方面是跟以前的同事朋友们聊天,发现他们都很沮丧,感叹学不完的知识以及焦虑年龄会影响职业生涯。在群上劝他们的我似乎成了那个唯一的奋斗逼,格格不入的感觉,也罢,有这种焦虑也是正常的,但是日子还是要过,时光也不停留,可以但是没必要。

二、为什么感觉有学不完的知识

一开始从编程语言学起,一开始以为只要语法熟悉就好了,但是呢,发现面试都要问实现原理和源码的。
然后呢,接触到了各种中间件,比如`redis`,`mysql`,`mq`这些,依然是学习使用和原理。
再之后呢,docker和k8s开始火起来了,还要学习k8s的使用和原理,要学习k8s衍生出来的一系列组合。
再之后呢,单一的语言不够了,学py方便写脚本,学c++优化性能,学nodejs等等,先学语法,再学实现原理。
最后呢,还剩下linux内核要啃,所有的语言和中间件最后的实现原理都离不开内核。
最后,心态就崩了。

      以上是比较片面的后端案例,但是也反映了当下后端同学的无奈。要学习的东西很多,如果能用工作时间学习还好,但是大部分人还是靠私下用功学习的,如此巨大的学习量,可能目标就要列个好几年,想想就有点崩溃。

三、不要用身体的勤奋掩盖思想的懒惰

      这个标题是我最近听过比较震撼的一句话,我们有时候总会陷入盲目的学习中,却忘记了思考这些时间花的到底值不值。比如博主,最近2个月吧,一直在看c++相关的语法和特性,从菜鸟教程到c++新语法特性pdf。学到东西了吗,学到了。至少每天都会感觉自己在学新东西,在精进。
      可最大的问题是,有必要抠着这些细节学习吗?用的时候查一下文档找不到吗?c++是我吃饭的家伙吗?自己吃饭的家伙学精通了吗?时间很宽裕吗?答案都是no,那么这两个月的时间似乎不是那么有用,学到了一些无关紧要的语法而忽视了自己吃饭的家伙。特别是时间也非常宝贵,晚上的学习时间应该用到刀刃上,而不是这些无聊的语法细节。
      为什么会造成这种情况呢?因为自己缺乏了思考。拿起来教程就开始学习,却没有好好思考下这些学习是否符合自己的定位和自己的方向。身体的勤奋告诉我你很努力在学习,可是思想的懒惰导致花了太多时间在无意义或者意义不大的事情上。

      我想大家有时候也会遇到跟我一样的情况,浪费了时间而且没有太多的效果。要学习的东西很多,时间却很有限。每一份浪费的时间都会加大我们的焦虑,毕竟这个行业一直都这么着急。

四、审视自己,细分领域

      计算机的知识很多,除了上面列出来的,还有很多前端的知识,各平台编译原理等等。哪怕是内核贡献者们或者go贡献者们也都不是全能的,我们为什么要要求自己是全能的呢?

      而且扪心自问,学习了很多的知识,又有多少是工作或者面试上面会遇到的呢?我们总期望可以通过大量的学习来增加自己知识的广度和深度,达到专家的水平。可是我身边的这些专家们,并不是全能的,一个都不是。

      他们凭什么可以做到专家,除了计算机知识以外,最重要的就是在他们自己的领域内,他们是专家。不需要前后端通吃,也不需要每个中间件都知道原理,他们只是对自己所在的领域非常熟悉,有从0-1000的经验,有丰富的业务演进经验,可以随时指导下面人接下来的演进方向和帮忙解决领域内的技术难题。

      那么我们呢,是不是该看看自己从业这么多年,到底处在哪个领域上,或者当下处于什么领域上。你所在领域内的知识都很精通了吗,业务上的0-1000演进或者极致的性能优化都ok了吗?该领域国内外的发展都关注了吗?是否可以高屋建瓴的指导同事们该怎么学习和解决相关的问题呢?

      比如博主所在的ASR语音识别算法工程化领域,传统的语音识别模型熟悉吗?端到端的算法原理知道吗?pytorch,onnx,openvino等推理引擎为什么快?指令集都做了哪些优化?业务演进都了然于胸了吗?国内大厂和国外大厂的新模型新算法都了解吗?工程化方向上的k8s有源码级了解吗?go常用库的源码看了吗,实现原理知道吗? 至少博主感觉自己还是有很长的路要走的。

      从自己所在的领域出发去学习才是有的放矢,如果这些问题你都已经了然于胸,那么你就是这个领域的专家,你的知识面也足够让你轻松找到一份工作的。

五、学术不学道,空中楼阁也

      所谓的术可以指我们学习的编程语言语法,各种中间件,云原生相关的组件等。学会术让我们可以做上层应用的活儿,但是怎么分出高下呢?那就需要道了,道可道非常道的道。

      不管是编程语言的编译到执行,还是中间件的各种网络模型,缓存和通信,以及云原生实现的资源隔离等等,都离不开linux内核的支持,毕竟我们的应用是跑在linux内核上的。

比如:

学习内核的收发包可以让我们对tcp/ip,docker虚拟化和k8s的网络通信更加清晰,
学习内核的进程线程管理让我们对内存泄漏,锁,多线程编程更加理解,
学习内核的文件管理让我们对于所谓的网络io,磁盘io,epoll等网络模型更加理解,
学习内核的内存管理让我们理解程序执行时候的内存分配以及gc原理等

      博主是比较建议结合内核学习下的,我们不需要达到内核开发者的程度,我们只需要从根儿上出发去理解应用层的东西,这样看山不是山的境界,自然就高出一筹。

六、关于35岁危机以及现状

      所谓35岁危机,这个也跟身边的大佬们聊了下。两个大佬都是超过35了,但依然坚挺。对他们来说,30岁以前也都在学习的路上,只是刚刚进入深水区。35岁之后呢,成为一个领域的专家或者管理者,再加上履历加成,自然也就打破了35岁魔咒。

      可是35岁又是客观存在的事情,那么35岁淘汰的是哪些人呢?从最近的面试上可以看出来,年龄35+,面试的时候发现没有深入的知识点,所在领域也停留在会写应用层的阶段,脑子里也没有相应的演进和规划等。。这能怎么办,人家27-8表现比你强太多,只能淘汰了啊。。

      博主以为,要克服35岁魔咒,要么是成为一个领域的技术专家,定海神针,这需要超过5年的同行业和技术积累。
      要么就是在知识广度和深度都达到一定层次的时候,比如资深开发,然后转向管理者这个角色,从此研究的就是管理学和人性,打造自己的团队,成为不可随意替代者。

七、未来可期

      互联网行业虽然一直为人诟病,但是不得不承认我们是吃到了行业的红利。那些高中同学或者大学其他专业的同学就比我们差吗,凭什么现在的互联网应届生毕业就20k+,他们真的值吗?也许吧。

      行业在走下坡路,但是行业并不会消失。也许未来为淘汰很多人,但只要我们一直在前进的路上,我相信不会轻易的被淘汰掉。

      想起来之前跟朋友聊天,说35岁+的互联网中高层被淘汰的问题。仔细想想这些p7以上的大佬们,有可能会随着年龄增长被淘汰,但是这批互联网人履历都很好,人也聪明,从业这么多年积攒下的人脉也十分可观。他们真的会随便被淘汰然后被时代的洪流覆盖吗?
      博主觉得不会的,哪怕是换到传统行业,这批人依然是非常优秀的,可能专业知识会没用,但是见识还在,软实力还在,必定也不会沦落到送外卖开滴滴上去。

未来是否可期,关键还是看自己要怎么选,怎么走。提升自己总是没错的,加油啊。

end

要学的东西...

1.1 基本数据结构

1. 数组

2. 链表,双向链表

3. 队列,单调队列,双端队列

4. 栈,单调栈

1.2 中级数据结构

1. 堆

2. 并查集与带权并查集

3. hash 表

    自然溢出

    双hash

1.3 高级数据结构

1. 树状数组

2. 线段树,线段树合并

3. 平衡树

    Treap 随机平衡二叉树

    Splay 伸展树

    * Scapegoat Tree 替罪羊树

4. 块状数组,块状链表

5.* 树套树

    线段树套线段树

    线段树套平衡树

    * 平衡树套线段树

6.可并堆

    左偏树

    *配对堆

7. *KDtree,*四分树

1.4 可持久化数据结构

1. 可持久化线段树

    主席树

2. * 可持久化平衡树

3. * 可持久化块状数组

1.5 字符串相关算法及数据结构

1. KMP

2. AC 自动机

3. 后缀数组

4. *后缀树

5. *后缀自动机

6. 字典树 Trie

7. manacher

1.6 图论相关

1. 最小生成树

    prim

    kruskal

2. 最短路,次短路,K短路

    spfa

    dijkstra

    floyd

3. 图的连通

    连通分量

    割点,割边

4. 网络流

    最大流

    最小割

    费用流

    分数规划

5. 树相关

    树上倍增,公共祖先

    树链剖分

    树的分治算法(点分治,边分治,*动态?树分治)

    动态树 (LCT,*树分块)

    虚树

    *prufer编码

7. 拓扑排序

8. 欧拉图

9. 二分图

    *KM算法

    匈牙利算法

1.7 数学相关

1. (扩展)欧几里得算法,筛法,快速幂

    斐蜀定理

    更相减损术

2. 欧拉函数与*降幂大法

3. 费马小定理

4. 排列组合

    lucas定理

5. 乘法逆元

6. 矩阵乘法

7. 数学期望与概率

8. 博弈论

    sg函数

    树上删边游戏

9. *拉格朗日乘子法

10. 中国剩余定理

11. 线性规划与网络流

12. 单纯型线性规划

13. 辛普森积分

14. 模线性方程组

15. 容斥原理与莫比乌斯反演

16. 置换群

17. 快速傅里叶变换

18. *大步小步法(BSGS),扩展BSGS

1.8 动态规划

1. 一般,背包,状压,区间,环形,树形,数位动态规划

    记忆化搜索

    斯坦纳树

    背包九讲

2. 斜率优化与* 四边形不等式优化

3. 环 + 外向树上的动态规划

4. *插头动态规划

1.9 计算几何

1. 计算几何基础

2. 三维计算几何初步

3. *梯形剖分与*三角形剖分

4. 旋转卡壳

5. 半平面交

6. pick定理

7. 扫描线

1.10 搜索相关

1. bfs,dfs

2. A* 算法

3. 迭代加深搜索,双向广搜

1.11 特殊算法

1. 莫队算法,*树上莫队

2. 模拟退火

3. 爬山算法

4. 随机增量法

1.12 其它重要工具与方法

1.模拟与贪心

2. 二分,三分法(求偏导)

3. 分治,CDQ分治

4. 高精度

5. 离线

6. ST表

1.13 STL

1. map

2. priority_queue

3. set

4. bitset

5. rope

1.14 非常见算法

1. *朱刘算法

2. *弦图与区间图

以上是关于要学的东西太多了怎么办的主要内容,如果未能解决你的问题,请参考以下文章

浅谈对C#委托理解

WebAPi返回类型到底应该是什么才合适,这是个问题?

Linux定时任务

HashSet源码详解

要学的东西...

About Me