查看原文
其他

抱歉,这个忙我帮不了

刘欣 码农翻身 2021-04-27

“刘老师,我刚参加工作,技术这么多,以后该怎么学习啊,能不能帮我规划一个学习路线?”


写公众号小有名气以后,有很多人加我好友问问题,这是其中问得比较多的一个。


开始的时候我会热情地告诉他应该学什么技术,读哪些经典书,看什么源码...... 后来我就意识到:这是错误的,我只是在分享我自己这十多年的经验,没有充分考虑到每个人的基础、能力、个性、以及兴趣。


大家可以上网搜一下,有很多学习路线+知识体系,有漂亮的图表,但是你去试一试,能坚持下来、真正有所成就的人寥寥无几。


每个人都是不同的,统一的学习路线是不存在的,指望别人规划你的程序人生是不现实的。



不过老家伙也能发挥一点作用,能指一下大的方向,并且在关键节点扶一把。


比如,对刚入行的(尤其是转行的)同学来说,一个很大的问题就是:从哪里开始学习呢?


如果一开始就去学那些最底层的东西,程序的机器级表示、汇编、链接、OS源码,肯定被虐得体无完肤,怀疑人生。


我认为从工作相关的知识开始最合适,学以致用。


举个例子


假如你是个后端开发工程师,公司用了微服务架构,这时候应该怎么学习呢?


首先肯定要了解公司的业务,接下来画一张微服务之间的调用图,然后去研究一下使用层面,应用层面的问题:


服务发现是怎么做的?

负载均衡是怎么做的?

怎么做降级?

分布式事务怎么处理的?

出了问题怎么定位?

日志如何分析?

如何做微服务的测试?

如何做微服务的部署?


写出一份文档,把你的“研究成果”记录下来。


也许这些问题你之前也了解过,但是相信我,理论和实践还是有距离的,现在有个活生生的案例(也许是个不好的案例)摆在你面前,非常值得研究。


这些应用层面的东西搞明白了,就可以继续往下挖掘,多思考,多问几个为什么?


服务注册表这么关键的东西,万一挂掉了怎么办?

负载均衡到底是怎么实现的?

如何用线程池来实现隔离?

部署的时候用Docker,它到底是怎么实现程序的隔离的?

......


于是你自学的探索路线就慢慢出来了。


这样一步步就走向了原理层和系统层,要比一上来就学什么CAP,LXC, 线程池要有效得多,有趣得多。


我相信,只要你有一颗好奇的心,非常想探究一个技术到底是怎么实现的,你的知识触角就会伸向四面八方,慢慢地连成一张网。



再举一个例子



假设你还是一个后端开发工程师, 但是公司做得都是企业内部用的系统,没有微服务,只是用Spring实现业务,怎么办?


在学习Spring的过程中,肯定会遇到很多注解,例如@Service, @RequestMapping,@Controller, @Transactional  等。


有没有想过它们是怎么实现的?为什么给一个方法加上 @Transactional,就可以自动实现事务呢?我怎么看不到学习JDBC的时候那些conn.setAutoCommit(false) , conn.commit()?它们在哪里?是一样的吗?


于是你自己可以规划一条路线去追寻答案,顺着这条路追下去。在路的尽头,你会遇到ASM, CGLib,动态代理,ThreadLocal , JTA, 两阶段提交,这些家伙在微笑着等你。


如果你对字节码感兴趣,那就会更深入一层,进入Java 虚拟机的领域了。



总结



学习的过程就如同织一张大网,织网开始的时候,可能会有“师傅领进门”, 但是以后主要靠自己去规划路径,而不是依赖别人,关键是要不断发问,深入思考,杜绝看一遍就以为掌握了的情况。


很明显,能支撑你不断地探索,不断地问为什么的最大源动力就是好奇心, 好奇心能让你称为一个更好的程序员,而不仅仅是混口饭吃。




对新读者做个自我介绍,我是刘欣,畅销书《码农翻身》作者,前IBM架构师,近20年从业经验,用故事讲解技术是拿手好戏。


除了公众号之外,我还运营着一个知识星球“码农翻身”,我相信,无论是技术还是职场,我近20年的知识和经验会让你少走不少弯路,欢迎加入!


原价199 元, 现在优惠期,仅需129元即可加入,平均每天不到4毛钱


扫描二维码,加入“码农翻身”知识星球:


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存