2.偏头痛杨写给年轻人的一些经验干货系列之学习篇

版权声明:偏头痛杨:本文为博主原创文章,未经作者允许不得转载,版权必究! https://blog.csdn.net/piantoutongyang/article/details/82109472

前戏

学习能力是一项非常重要的能力,我现在终于明白了当初老师和家长为什么总说:
“好好学习,天天向上”,
为什么要苦口婆心劝我们好好学习,为什么各大名企总是对名校毕业生抛出橄榄枝。

其实这就是一种学习能力的价值体现,从小学习好,长大学习还好,
学习好变成了一种习惯,一种生活方式。

那么进入职场后,学习能力这块就比别人占优,大多数用人单位都喜欢学习能力强的新人,
快速的去适应去学习未知的环境与知识体系,核心竞争力也就增强了,
有助于更快速的在竞争中脱颖而出。

此外,如果从小学习好,长大了上了名学,也是对人生发展起到重要作用的。
首先名校是有光环的,在校招中就会脱颖而出,进入名企的概率也会增加。
在大学校园中积累的圈子和同学也是进入职场后宝贵的人脉关系。

大部分企业都喜欢自驱型人才,因此我们需要加强我们的学习能力,
终身学习,脱离舒适区,自我挑战,自我驱动。



正文

学习需要方法论

发现身边有很多童鞋不知道如何去学习,学习效率比较低,产出比低等等。
还记得以前在某英语培训机构上的第一堂课并不是上来就教你英语,
而是教你学习英语的方法,第一节课就教你如何更高效的去学习英语。

学习有很多技巧&方法,不是说你一个月能把一本1000页的书看完就可以了。

书里的知识点你有没有掌握?有没有复习?有没有做笔记总结?
有没有隔三差五的自测?有没有对作者的观点进行反面的推理?
作者的观点完全都对吗?作者所面临的环境与自己面临的环境一样吗?

如果只是单纯的看,看完了过几个月就忘光了,
也没有思考没有复盘没有总结没有笔记,
呵呵,那么恭喜你,这本书相当于白读了。
如果要是这样,那还不如把看书的时间用作更有意义的事情,
反正这种读书也是浪费时间。

对于书上带有代码的例子部分,要自己亲手做一遍才行。
需要把理论转化成实践,书上和文章中的知识是人家作者的,
看懂了不是自己的, 只有自己亲手coding出来才是自己的。

不断的去思考,去学习,去好奇,去复盘,去实践,
所谓的”量变引起质变”,有好奇心的人,成长空间会佷大。

plus,晚上睡觉前把自己今天学到的知识复盘一下,
自己在大脑中要结构化记忆,把知识点分门别类的存在大脑里,存好,
隔三差五的去复盘,好记忆不如烂笔头,把重要&核心的知识记录到云笔记中。

别人的学习方法不一定适合你,适合自己的才是最好的,
拿我看书来举例子,我会选择撕掉一些不想珍藏的那种书。

我为了逼自己看进去800页的书,我先通读一章,然后第二遍精读,
把知识点和读书笔记记录到云笔记中,然后把这章撕掉,
实在看不懂就读他个5遍,还看不懂就去网上搜,还看不懂就问问大神,
还不行就pass掉,把这个知识点掠过,继续往下走,跟考试不要被小题卡住是一个道理。

看着书越来越薄,就更有动力继续撕书了。。。
等都撕光之后,按时间段去云笔记中复盘,当然不建议大家效仿哈。


真的要终身学习

不得不说程序员这行,技术更新迭代的非常快,不学习就会被淘汰,
对于java程序员来说,想当年只要学会SSH框架就可以找到一份收入不菲工作,
但你现在不会dubbo或spring cloud(中高级程序员),
不会分布式,多线程,NIO,JVM等等,你还能找到工作吗?
未来的技术风口在哪里,谁也说不好。

这就要求我们要终身学习,活到老学到老,要保持住自己的核心竞争力。

这是我们这行的生存法则,我们需要居安思危,未雨绸缪,
不要让自己落伍,或者说不要让自己落后的太多,落后就要挨打。

学习不仅是在提升自己的能力,更重要的是保证自己在行业中的生存机会。
想想中年危机,想想上有老下有老时你的状态,还能像现在这么嗨吗?

为什么研究生更具有竞争力和含金量呢?
研究生经历过考研的洗礼,能抗住巨大的压力,
此外研究生具有超强的学习能力,这些是用人单位比较看重的。 底子好,又是一张白纸,谁不爱要?

那么怎么学呢?
看书?看博客?看视频?看公众号?去培训机构?买XX课程?看源码?
什么都好,只要你学,只要你坚持学。


学习很痛苦怎么办

我们在现实生活中充斥了大量需要学习的事情,
例如我们小时候要学习怎么去拿筷子吃饭,上课需要去学习功课,
写作业,去滑雪的时候需要学习如何去滑雪等等等等。

同样的都是知识,有的知识学起来非常痛苦,有的知识学起来非常轻松,我个人总结出,这是因为兴趣导致。

你对编程没有兴趣,就会导致你对编程的知识在潜意识中感觉到厌恶,
导致不爱学或学不进去,学的慢等等,但假如你对摄影非常感兴趣,
甚至不睡觉都会去学,有一种强烈的求知欲,那么你学的就会特别快,
学习效率特别高。

因此,有人说过一句话:”如果不能把你的爱好变成你的职业,
那么久尝试着把你的职业变成你的爱好,”
在爱好强大驱动力的驱使下,我们学习的效率会逐渐提高。
那么问题来了,如何能把自己的工作变成自己的爱好呢?


劳逸结合

当然学习也不要非常极端,一天到晚啥也不干除了吃饭,睡觉,就是学习,
那种高度自律的生活是我无法企及的高度。。。

经我个人研究发现,一个人在不同的时间段学习的效率是不一样的,
拿我来举例子,你让我学一天的效率跟学几个小时的效率差不太多。
就是大脑已经学不进去的时候,那就干脆不要学,而去做其他的事情。
但如果每天都坚持学习,那么就会越来越优秀。

正所谓:游戏可以打,妹纸可以撩、烟可以抽、酒可以喝,
但是还是要花时间和精力用来学习,并且保持住,
把持续的学习当成是一种生活方式。

如果你是一名在校学生,你喜欢学什么就可以学什么。
如果你在企业里工作,要注意,学习新技术应当对本人和公司都有用。
要是仅仅出于个人的喜好而学习新技术,通常得不到领导的支持。
记住双赢理论,而不是你自己赢。


学会复盘与随时记录

无论是工作中、技术中、情感中、生活中,我们都需要有复盘&总结的能力,
尤其是在逆境时。正所谓失败并不可怕,我们不应该害怕失败,
可怕的是没有从失败中汲取有价值的信息。

人无完人孰能无过,知错能改善莫大焉,其实后来想想走弯路也是一种捷径。
出现问题后,多从自己的身上找原因,不要给自己找一些借口,
我们要正视自己身上的问题,才能汲取更多的营养,
自己帮助自己快速成长。

此外,我们还需要有举一反三融会贯通的能力,类似的场景发生了,
就有快速解决问题的能力了。

在遇到问题或者有灵感的时候,立刻把想记下的点写到云笔记中,
这些记录下来的东西,就是自己的小金库,形成自己的知识体系树,
这是一笔宝贵的财富,定期复盘,会让自己受益匪浅。

把自己总结的知识点再润色一下,然后发布到网上,帮助更多的人,是不是会更好呢?

学会使用云笔记,有道云笔记,印象笔记等等,在pc上记录,无论是在网页、手机、pc上都能同步。


学会做减法

学习跟生活是可以融会贯通的。
例如你会20种技术,但没有一项是深入的,都只是皮毛阶段,
这样在职场中是有问题的,因此我们需要强调要有技术嗅觉,
能嗅到什么该学,什么不该学,在有限的人生有限的时间里,
你不可能把所有的东西都做到最好,因此需要取舍,找到自己的方向&优势&侧重点。

一个人成熟的标志,就是懂得取舍。
学海无涯,人生苦短,应该把有限的时间与精力用在最有意义的地方,工作技能中要做减法。
要打造自己的竞争力,有自己的强优势,一般人无法超过你的,那你就有价值了。

有句俗话叫懂得越多越知道自己有多无知,懂得越多在某种场景下并不是一种好事,
因为这会让自己陷入恐慌之中,尤其是对于新手玩家。

网上有句话,是关于减法理论的,我觉得说的还可以:

我们总觉得自己什么都需要,但根本没有那么多的精力去维护这一切。
我们都是必死的凡人。
你的时间、精力都有限,怎么可能对全世界耐心相待?
所以我们要做减法。
减法的妙处,就是要你把你能够接纳和包容的人和事留在身边。
做过减法之后,你身边都是喜欢的人,日程表上都是想做的事,
这个时候你会变成一个充满省去的人。
如果你不做减法,就去接纳和包容世界上所有的人和事,很快就会被拖垮。


学会时间管理

之前公司hr会给我们培训,什么是时间管理,以及衍生出来的四个象限:
紧急重要、紧急不重要、不紧急重要、不紧急不重要。
一天的标准上班时间是8小时,利用好了可以干很多事,用得不好时间一晃而过。

我们应当在机能处于最佳状态时做最重要的事情,在最差状态时干最次要的事情。
什么时间用来学习?什么时间用来社交?什么时间用来玩?
什么时间用来撩妹纸?这些都是需要自己统筹规划的。
如果不懂时间管理,日子一天天浑浑噩噩的过,
看见别人升职加薪,入职BAT,自己只能望洋兴叹,
在羡慕别人的时候,殊不知他们付出了多少。


参加一些线下的技术沙龙以及技术论坛

其实参加这些技术论坛除了会学到一些技术之外,还有一个重要的附加值,
那就是会增加自己的人脉,认识更多的技术同僚,很多和蔼可亲的大神都是乐于分享的,
分享知识的同时还会分享自己的微信号,那你加上这些大神的微信号,
有问题的时候可以沟通,没问题的时候看看大神发的朋友圈,
也会嗅到一些技术的前沿知识,让自己不再处于闭塞的知识孤岛状态。

即使没有加上大神的微信,退而求其次,也可以加一些技术同僚的微信,
让技术沟通成为可能,从而一步一步编织自己的技术人脉网络。


脑子是好东西,多动脑

我个人认为人的大脑就像齿轮,时间长不转动齿轮,齿轮就会生锈,
从而导致反应迟钝等负面影响。
想用的时候也转不快,反之亦然,总用,就越转越快,加速度越来越快。

没事做一些逻辑题,appstore上有很多这种app,需要刻意培养自己的逻辑思维能力。

逻辑思维不强的人做不了合格的程序员,因为在程序员的日常工作中充斥着大量的逻辑,
无论是数据库、代码、需求、架构、运维还是同事之间的沟通都蕴含了大量的逻辑&关系等等,
有的时候业务人员想不明白咱们得想的比他们更清晰,这样才能把风险降到最低。

产品经理描述完了需求,程序员听不懂或不知道如何转化成代码,这就尴尬了。。

需求1,2,3,4都给你写好了,写的非常详细,甚至模型都给你建的差不多了,
这时候让你去落地变成代码,太简单了,没有任何挑战,也练不到什么。

相反,需求描述的像一坨屎,非常复杂又杂乱无章,这时候让你去落地变成代码,
而你排除万难最终完成了,这样你的成长就非常快了。

之前我就拿到过一堆shit一样的需求文档,
我看了半个小时说,放弃了,说这需求太烂了,我干不了,
然后我的一个前辈说我太low了,然后就带着我step by step的花了2个小时,
从头到尾过了一遍,把需求整理的井然有序,从那以后我的需求整理功力大涨。

抽象能力和逻辑能力,说白了就是给你一句话,
你能把这句话翻译成计算机能懂的语言,
包括建模,建库建表,架构,代码等等。
把需求转化成功能。

2个“人”,你能抽出来1个“人”类。
n个数据,你能抽出来若干张有关联关系的表。

还有一个,在技术群里问问题也是,遇到问题,第一反应是:
嗯这个问题群里可能有人会遇到过,赶紧粘到群里,然后焦急的等待ing。
没有思考的过程,又或者去网上搜到了答案,然后就抛到九霄云外去了,
没有一个反思&复盘的过程,举一反三,甚至记录的过程。怎么成长?


新人面对吨级的知识点(java服务端方向)

在我的技术群里了解到很多未毕业或刚毕业的童鞋们会出现恐慌心理,
发现要学的东西太多了,
不知道学什么&怎么学,未来的方向也比较迷茫,
看着周围的童鞋都在面试,拿offer,很紧张。
如果你是想走java后端工程师的话,那我的个人建议是:

三大分支为地基:java基础+mysql基础+spring基础,
我以后会把这三条分支体系都做成系列文章。

之后再学一些非常主流的开源框架:springmvc+mybatis+springboot。
之后再学习2个服务器软件:nginx+tomcat,简单学点html+ajax+jquery,
之后拿这些知识去做一个demo网站,
里面有增删改查的功能,带分页,然后就可以去投简历了。
面试失败后需要不断的总结&复盘,每次面试都比之前的一次效果要更好。

个人建议:新人不要深入学习前端的技术,
因为前端是前端工程师这个岗位去做的,术业有专攻,
把有限的时间&精力放到自己的强项上,
不要学大数据&人工智能&机器学习等等,也是同理。

包括现在很火的微服务,rpc,分布式(包括消息队列与缓存),
多线程并发,NIO,JVM等等,
以及研究各种开源框架的源码,这些知识点都是以后要深入学习的,
刚入门的童鞋可以不要把有限的时间精力耗费在这些上面从而造成恐慌心理。

而对于有多年经验的老玩家而言,也要学会做减法,打造自己的技术深度,结合技术广度,打造自己的金字塔形知识体系。


java后端工程师的主流技术学习路径

0.计算机基础阶段

计算机基础(CPU、内存、硬盘、网卡、路由器等)、
网络基础(http、tcp、udp等)、OSI模型、二进制、linux、uml、
算法&数据结构;

1.java基础阶段

类、对象、变量、接口、抽象类、数据类型、封装&继承&多态、异常、
内部类、注解、泛型、枚举、多线程、io&nio、网络编程;

2.java web基础阶段

servlet、filter、listener、jsp、session&cookie、
tomcat&jetty&resin、mysql、jdbc、junit、html、javascript、json&xml;

3.单机与前后端分离阶段

spring、springmvc、mybatis、nginx、druid、quartz、gradle&maven、
git&svn、jenkins、linux;

4.RPC&SOA&分布式阶段

springboot、dubbo、zookeeper、redis&memcached、
rocketmq&rabbitmq、 docker、mongodb、hadoop、elk、drools;

5.微服务阶段

spring cloud、sevice mesh;

中间穿插的知识点

此外,中间穿插着一些需要深入理解的知识点,例如:
深入理解java多线程、NIO、JVM、GC、CLASSLOADER、内存机制、
常见数据结构与算法、协议、设计模式等底层原理知识点。
以及JDK1.8之后新增的例如函数式编程等知识点,
以及尝试去阅读一些java底层和优秀开源框架源码(强烈推荐从spring开始)。

还有一些综合性的知识点,包括:
数据库设计原则、mysql分库分表、读写分离、锁机制、事务隔离、
集群&负载均衡、各种软件的参数调优、重构、对性能敏感、
在github有自己的开源项目、敏捷开发、极限编程&测试驱动开发等等。

上述这些每个知识点都可以展开成n个小知识点,再继续延展下去,
像天女散花一样多,
这就是我为什么总要强调,要打造自己的知识体系树,结构化学习,结构化记忆&总结。
让知识记得更稳,更牢,更快。

注意请不要把有限的时间&精力浪费在过时的技术上,
现在很多网上的老文章有很多都在误导新人,
让新人浪费时间,走弯路。


过时技术列表

(箭头左侧代表过时的技术,右侧代表替代的技术)

持久层:jdbc->hibernate->spring jdbc&ibatis->mybatis
控制层:servlet->struts->springmvc
业务层:ejb->spring
远程通讯:mina->netty
序列化:hessian->kryo
全文搜索:mysql like->mysql 全文索引->solr&lucene->elastic search
数据库:oracle&mssql->mysql&postgresql
应用服务器:tomcat->weblogic&websphere&resin&jboss&jetty->tomcat
WEB服务器:apache->nginx->tengine
连接池:dbcp&c3p0->driud
消息队列:activemq->kafka->rocketmq&rabbitmq
页面:jsp&jstl&el->前后端分离
构建:ant->maven->gradle
版本管理:cvs&vss->svn->git
数据通信:xml->json
远程调用&服务化:rmi&web service->restful url api&dubbo&spring cloud

其他过时技术: awt&swing、applet、jmx、jms;

提一嘴tomcat,为什么tomcat能力有限,还有人大量使用,
因为tomcat免费,开源,容易组成tomcat集群,用docker可以动态扩容。
在使用springboot之后,把tomcat内嵌到java进程中,使用上更加方便了。

以及不要去深入研究类似于安卓、前端、大数据、人工智能等方向,
因为这些属于转行了,所谓术业有专攻,把好钢用在刀刃上。


推荐的技术书籍

推荐的技术书籍:
《Java编程思想》
《深入理解java虚拟机》,周志明
《架构探险》系列,黄勇
《Java程序员职场全攻略:从小工到专家》,吴亚峰
《Java并发编程实战》
《Java并发编程的艺术》
《Java NIO》
《Spring源码深度解析》
《大话设计模式》
《设计模式之禅》


推荐的微信公众号

《架构师之路》,沈剑
《码农翻身》,刘欣
《程序员小灰》,魏梦舒


停止抱怨

有很多同学会抱怨:“我在单位什么都学不到啊,技术用的是过时的,
team没有技术氛围啊,上班都是做一些简单重复的工作啊”等等。
这种情况可以趁下班后用自己的时间来去学习和动手搭一个demo出来,
然后逐渐丰富,多问为什么,买本书或看技术文章来丰富自己的知识体系树。

就像军队在和平年代不打仗也要进行军演和YY假想敌。
如果只想在上班时间8小时内学习和提升,那样进步就太慢了。

plus一个复利思维,我们所花的时间&精力,去刻苦钻研技术,
这种学习能力,理解能力,都会在日后成倍增加,
在理解了一些原理后,以后在学习新姿势的时候会越来越快,
所以,以前吃得苦,受的累,加的班,都没有白费,都是在为后面积累能量。

项目中没有用过多线程,就去想一下多线程使用在什么场景,
然后在本地模拟这个场景,然后在不断的去优化和调试线程池的参数。

没有用过动静分离、前后端分离、前后台分离,
就尝试着自己把一个单体项目拆成分离的项目,自学nginx,反向代理,
看看分离后有什么好处与痛点。

没用用到分布式,自己搭一个dubbo RPC的demo架子出来,
自己写service服务,暴露在内网成为RPC接口,然后注册到zookeeper中等等,
然后一点一点的往里头填肉,自己YY平时的业务场景,
看看分布式事务等痛点如何解决?
并理解什么是服务管理,服务升降级、服务的监控、报警、开关、动态扩容、依赖关系计算。
想想为什么要使用RPC,如果用了会有什么好处,不用会有什么痛点?

没有用过集群,负载均衡,自己又只有一个电脑怎么办?
用docker做容器,把多个节点虚拟化出来,尝试能不能docker动态扩容。

流量不够大怎么办?自己多用几个节点,
使用jmeter模拟分布式压力测试,看看系统的瓶颈在哪里,
JVM、GC如何优化?内容如何管理?

数据库没有那么大的数据量玩分库分表,那就自己写多线程定时任务,
天天模拟插入数据,或者写个爬虫天天去网上爬数据到库中,
看看单表数据量过500万以上有什么痛点?如何去优化?

看看在上千万数据量下的数据如何做数据迁移,如何备份,
如何查看慢sql,如何去优化mysql,优化连接池等等。

没有用到异步消息队列,先弄懂为什么要用消息队列,
什么是生产者,什么是消费者,什么是异步,消费失败了怎么办?
再从搭一个类似于rocketmq的demo出来,跑起来,
再放到自己的demo中,然后再压测看看是否有问题。

没有用到缓存,就尝试着把热点数据放到缓存中,减少数据库节点压力,
尝试着去解决缓存穿透,数据一致性等问题。

没有看过优秀源码,就硬着头皮去看,遇到不懂的就去网上搜,
先打好基本功,先理解其设计模式,再去扣源码。

等等等等。。。
类似的例子还有很多,不再赘述,
其实我们是可以经常挑战自己,把不可能变成可能的。
有句老话说的好;“不能改变环境,就要去适应环境。”


知足者长乐

一辈子都要和别人去比较,是人生悲剧的来源(例如别让孩子输在起跑线上)。
其实有两种论调,一种是知足者常乐,一种是不知足者常乐。

如果你能看到我的博客,证明你还是一个普通人,
既然是普通人就不要期望能达到业界翘楚例那样的高度,
也不要幻想有朝一日可以飞黄腾达走向人生巅峰。

成功对于每个人的定义都不一样,但想成为人上人,
是要付出常人所不能付出的努力,透支很多的健康,耗费很多心血等。
例如马云在创业失败后几次之后还会选择创业, 就这一条就会过滤掉很多人。

所以,知足者常乐,还是那句话,人生苦短,在有限的人生里,
不仅仅只是努力工作这一项,你还有亲情友情爱情需要去维护等等。

但我并不是说让大家都消极心态的生活,不努力,颓废,各种浪等等。
努力还是很有必要的,自我挑战,自我提升,自我驱动,这些都是好事情,但要学会知足。

贪婪是人性的一个弱点,当你没有房子的时候你想买房,当你有了房子,
你想换更大更好的房子,你想买车,有了车之后,你想买更好的车,
这些都是需要代价的,会让你的生活很疲惫不堪。

再想想30岁之后要面临的中年危机,上有老下有小,很多地方都要用到钱。
所以学会扪心自问一下:“值得吗?”,如果答案是肯定的,那么就去做,
如果是否定的,那么要学会知足者常乐。


不要迷信某个大神

我发现一些朋友可能会有一种习惯,就是把心目中的偶像封神化,
一旦你认可了他,他就是神,他说的什么都对等等。

我个人建议不要过分迷信某个所谓的大神以及书中讲解的知识点,
因为大神&作者也是人,也会有出错的地方,或者误导你的地方,
或者让你理解有歧义的地方,包括我在内,
他的知识是他的,不一定是适合你的,更不是你的,你需要做转化。

正确的做法是,把作者的观点拿到自己的脑子里做思考、路演、复盘、反问等等,
最后在理性的决定是否认同作者的理论。


善用搜索引擎

大家在使用搜索引擎搜索关键字的时候,也是有很多技巧的,
细节暂不展开,大家可以自行去搜索相关文章。
我的习惯是,在搜索的时候,把关键字用空格分开,自己做分词,
命中率会提升,如果要搜索的是一句话,除非全部命中,否则命中率不高。

搜索引擎用的很不顺手,也会间接导致工作学习效率低下等问题。


总结

学习能力是一种我们需要要掌握的生存技能,有很多人不喜欢学习,
在他们眼里因为学习等于吃苦,网上有段子说:
“什么苦都能吃就是吃不了学习的苦”,因为学习的苦需要你主动去吃,
而生活的苦是被动去吃,所以该怎么办?

网上有句话写的不错,引用下来:

其实人应该过种“有点难度”的人生,比如找份高出自己现有能力的工作;
比如追求一个距离自己稍稍遥远的姑娘;
比如买套稍稍高出自己支付能力的房子;
再比如,做读书、健身这些常人难以坚持的事情,你能够从中收获更多。

猜你喜欢

转载自blog.csdn.net/piantoutongyang/article/details/82109472