一、写在前面的话
嗨喽,大家好呀!我是简凡,一位游走于各互联网大厂间的新时代农民工。
这是我初写博客的第一个系列,做为曾经编程小白我,也经历了长期的困惑迷惘,想学点什么做点什么,但又无从下手😂 。所以想在此分享下这一路走来的成长之路,希望能帮助到正在观看文章的你。为了让成长变得更加可以操作,所以我不想直接扔一篇什么后端成神之路的路线图xmind出来,而是通过成长的第一人称视角去一步步完成这个系列。
首先介绍先这个系列的标题,后端从入门到熟悉,为什么要用熟悉呢?因为程序员要学会的第一件事就是低调🐶 ,众所周知要是在简历里面写上精通某某,你会被面试官问的体无完肤,哈哈。那又是为什么用了后端,而没有写具体的语言呢?因为我曾经是Javaer,现在是一个Gopher,我期待从一个更通用的视角来看待后端开发的知识体系。言归正传,俗话说磨刀不误砍柴工,所以这篇序言我不会讲入门第一步该怎么做,而是打算从以下三方面来进行,因为掌握了这些才会让后面的路走的坚实、稳固,这也是你未来成长为技术大牛的真正核心:
- 克服学习过程中的长期性迷惘,和间歇性懒惰
- 开始建立自己的知识体系
- 合理利用自己的时间
二、如何成长为一位技术大牛
2.1 咬定青山不放松,立根原在破岩中
首先第一点,作为一个技术人我们可能会常常会处于一种知识焦虑的状态,比如你想要学习,想要进步,但不知道今天该做些什么,明天要做些什么,这个月要做些什么。又比如你明明似乎很想达成一件事,但常常还没起步就被别的事情吸引过去了,打了半天游戏,刷了半天抖音,一天就过去了。别担心,首先有所焦虑这是件好事,证明了你对未来有所期待,你所欠缺的就是一条能通向你未来的切实可行的道路和一种反馈激励机制,促使你乐此不疲的去达成你的愿望。那我们该如何做呢?这里我想提四个关键词:目标、计划、执行力、正反馈。2.1.1 目标
首先说目标,举个例子,比如你的目标是,我想学会Java,我想学会Golang。其实这不算是目标,我认为目标中必须要包含一些关键要素,时间、地点、程度。
还是已学习Java为例,你可以给自己设置一个短期目标,我想在学校图书馆里7天内学习完Java基础,我想在1个月内学会JavaWeb基础,并且能跟着做一个小型项目,这样你会给自己锁定一个场景,你每天睁开眼就知道了,我今天要去图书馆,为了达成我要在7天内学习完Java语言基础的目标。这里还要注意的是长期目标是由一个个短期目标构建成的,我们如果定的目标太大就很难跟踪执行,我们可以学习互联网的管理理念来管理自己,”小步快走”,将一个大的目标进行逐级拆解,变为短周期的目标,一般目标时间不要超过一个月。有人可能觉得7天学会Java基础是不是有点激进呢?其实并不是,我们要相信自己的潜力,一个稍高一点的目标才能激发我们不断为达成目标的愿望,并且在目标达成收获更强烈的正反馈。然后来说什么是“程度”,这里讲的学习完Java基础,学习完JavaWeb,会做一个小型Web项目,都算是一种程度。这种程度会让我们的目标更加清晰,我们在执行时会知道,如果我坚持完成,就会有一个怎样的收获,那么做起来也能更有动力了。此外一个带有程度的清晰的目标,才能为我们的下一步“计划”,做一个很好的铺垫。2.1.2 计划&正反馈
为了达成我们的目标,我们需要详细的列一份计划,这里有几点要注意。
一是,计划一定要细致,拆分到切实可执行的操作单位,每个操作单位执行时间不要超过3天,比如你的计划项是学会Java基础,这个是不可操作的,因为Java基础还包含很多,最终你的这个计划项就会变得不可监控。而你把计划项列为学习Java中的变量和运算符,这样你就可以每天对你的计划项进行打卡了,你也能不断的收获到正反馈,感觉得到自己在不断打怪升级。
二是,计划要有时间和完成度的说明,这里我给大家推荐一个最简单的管理工具,用excel写一个WBS(想要获取wbs模板可以关注我的微信公众号“简凡丶”,后台回复wbs),这样我们就可以不断的跟踪我们的目标达成程度啦。
三是,我们在一段时期还有其他想要达成的目标,比如想学习理财、学习一项乐器,这里建议主要不宜太多,个人建议不要超过3个。否则容易把自己的生活搞的混乱,最终哪个目标都没有达成。我们知道多线程的程序,如果CPU是单核的,往往还不如单线程顺序处理,因为程序上下文切换时会消耗无谓资源。我们要抓住主要矛盾,保持对主要目标的专注度,才能让时间更加高效。
2.1.3 执行力
我很喜欢一句简单且实用的话,干就完了。当我们遇到困难,去查资料,去和人交流,总之干就完了。当我遇到懈怠,还在给自己的启动学习,创造理由,创造空间,干就完了。在程序员这个行业付出和收获成正比的,想要高薪,好的待遇就要不断付出,保持学习。如果选择躺尸,就是会在年龄较大的时候,面临淘汰。像管理一个项目一样,开始对自己的学习、工作,乃至人生进行一个规划和管理吧,你的人生一定会逐渐变的清晰、灿烂起来。
2.1.4 总结
讲到这里我们就可以按照目标->计划->执行->正反馈->下一阶段目标,这样循环递进的方式看到我们成长的进度条在直线向前了。
2.2 学而不思则罔,思而不学则殆
我们在学习的过程常常会遇到学到后面,前面的知识就忘了,甚至想查也无从查起,只能再学一遍。这是因为我们没有记录,知识在脑子里都是一个个碎片,彼此之间没发生上下文联系。那我们该如何做呢?
一句话,开始记笔记,并逐步建立自己的知识体系,然后对自己的体系进行完善和定期重构。在《金字塔思维》一书中说,人在一小段时间,最多记住7件事,再多出来就会将前面的淡忘。那我们该如何让繁杂的知识在脑中记忆的更加牢固呢?答案就是对知识进行分层。例如,你要去菜市场买菜,要买葡萄、黄瓜、苹果、茄子,如果你只零散的记住几样物品,到菜市场你就有可能忘记了一两样。但你如果对他们进行分类,分为蔬菜和水果,蔬菜有黄瓜和茄子,水果有葡萄和苹果,这样的话,你就变得不容易忘记。再进一步,你如果有意识知道一共要买四件物品,蔬菜两件,水果两件,最终买完时,进行一个check,看看是否买了四件物品,这样你最终就一定不会漏买了。这就是典型的的结构化思维的实际应用。它可以帮助我们加深记忆,建立知识之间的联系,甚至激发我们的创造性思维。所以现在你已经认识到建立知识体系的重要性了吧。
2.2.1 如何建立知识体系
下面我们来说如何去建立自己的知识体系。我曾经学习和实际应用过多门开发语言,比如Java和Golang,Python等,我发现了在各语言之间,其实是有相同的学习的逻辑顺序的。
我们学习一门语言,首先肯定要学习语言基础,包含基础语法和语言特性等。然后就是为了实现一个后端业务需求我们要学习Web框架,来帮助我们方便快捷的和网络与数据库打交道,以便我们快速实现一个单体项目。例如,此时Java中要开始学习Spring、SpringMVC,然后学习在SpringMVC基础上进一步封装的SpringBoot,对于Golang我们可能会学习beego、学习Gin。再接下来就是对于一些复杂的大型系统需要为了业务的快速迭代和基础层的复用,需要把单体项目拆分为微服务。此时我们要开始学习微服务框架,例如,Java要学Dubbo、学SpringCloud,Golang中要学习gRpc、Micro等。当然有时我们还需要解决某种业务场景,就需要一些语言框架或者中间件,辅助我们高效解决应用需求。比如我们需要存储页面中的图片,会用到对象存储OSS;再比如我们需要一个中心缓存,来减轻数据库压力,加速我们的查询请求,我们会用到MemCache、Redis等,我们需要对业务流量进行异步、消峰我们需要用到消息队列。这些需求场景每种语言都会有相关的SDK来供我们操作使用这些中间件来解决问题。当然这里只是列举了后端体系的一小部分,后面几期我会按照技术层级的深度与广度逐步递进,逐步揭开后端体系的神秘面纱,并为大家整理出适合不同成长阶段的学习路线。
言归正传,你会从我上面的表述中发现建立知识体系的两个要素,第一,是对知识进行分层,在每个成长阶段,根据自己的情况,将所学知识深入到一定程度。例如,你是一个刚入门的小白,在第一轮学习时,就要去掌握JVM调优,掌握各种设计模式,这是不必要的,第一个阶段你应该现已独立开发一个项目为前提,去进行初级阶段的学习。当你可以较为熟练的写出一个应用了,再去学习设计模式,阅读开源代码学习人家的项目构建,才是正确的路线。”小步快走”,可以帮助一个企业或个人构建一条快速成长的高速轨道。第二,是不断摄取优秀的开源文章或项目,来完善你知识的体系,并定期对你的知识体系review。
此外,工欲善其事必先利其器,我们还需要一个好的笔记应用协助我们构建知识体系。这里是我当时选取笔记软件的需求(优先级递减):
- 支持全局关键词搜索,只有这样笔记本才能成为我们的第二个大脑,随时可以获取想要的资源
- 页面支持目录大纲,建立一篇文章中的知识层级
- 简洁、清晰、赏心悦目的编辑页面,并且支持Markdown
- 支持云同步,支持多端同步,这样可以防止数据丢失,还可以没事时随时拿来回顾下以前的知识
- 有客服,能聆听到用户意愿,并对产品进行更新(这里吐槽下oneNote,感觉微软做的产品真的不够用心)
- 可以做知识共享,作为博客对外输出
综合以上几点,我在诸多笔记软件中选出了语雀,或者直接用typora写Markdown也是不错的,但由于自己写的Markdown图片需要找图床保存,还容易失效,我个人最终选择的语雀。这里只想说语雀yyds。这里有个小插曲,当时由于公司网络隔离原因语雀突然不能用了,联系了官方后端小哥,效率很高,当天就帮助了我解决了问题,这里给一个赞👍🏻
2.3 光景不待人,须叟发成丝
上面说完了方法的问题,下面再说下心态问题吧,与君共勉。这里第一个要说的就是程序员的35岁问题,其实是实际存在的,原因我觉得大致是这样,这个行业目前比较火热,竞争激烈,所以会有源源不断的新人涌入进来,那企业方自然有了更多的选择,所以自然会觉得同等水平下,一位工作年限较短的人比另外一位更加有潜力,更加热爱学习。所以用更少的钱,招聘一位技术优秀,可塑性强,学习能力强、潜力深的青年人自然成了自然而然的事情。
那对于已经进入这个行业该如何自处呢?其实没别的办法,只能自己卷自己了😭,我们至少要让自己的工作年限至少能匹配上同等水平的要求,而且越早达到目标水平,那我们未来的溢价空间就越大,因为这体现着你未来的潜力,这也是企业选择技术人才的一个重要目标。
所以快速成长,成为了IT人的刚需,所以还在懒惰踟蹰不前的你,别犹豫了,就是干!
另外,这里还想说一点,就是避免假忙,聚焦成长。对于已经步入职场的同学经常会被繁杂的事情所干扰,似乎很忙的样子,但当你想要跳槽时却发现自己好像又什么都不会了,所以拼命的刷八股文。恰好最近部门在扩招,我也面试了很多类似的人,面试者是刷的八股文,还是有真正的实战经验一深问就看出来了。其实对于面试官来说刷八股文并不会引起多少反感,容易让面试官引起反感的是面试者表现出的对于工作和学习缺乏思考的意识,此时往往会被评价为缺少潜力。“潜力”这个词很神奇,就跟相亲时候的“感觉”一词似的,一旦被评价为没“潜力”,那拿到offer的希望也就渺茫了。所以,我们在工作中一定要勤于思考、善于总结、把一些通用的事情形成“方法论”,才能成为面试官和老板眼里一个有“潜力”的developer,才能让自己在繁杂的工作中收获成长。
2.4 总结
啰啰嗦嗦的说了好多,希望能给渴望成长的你一些启迪。从下一篇开始,我们将正式进入《后端从入门到熟悉之路-入门篇》,一起探索如何从一个编程小白成长为一个初级开发工程师,我们下期见,Peace😘
我是简凡,一个励志用最简单的语言,描述最复杂问题的新时代农民工。求点赞,求关注,如果你对此篇文章有什么疑惑,欢迎在我的微信公众号中留言,我还可以为你提供以下帮助:
- 帮助建立自己的知识体系
- 互联网真实高并发场景实战讲解
- 不定期分享Golang、Java相关业内的经典场景实践
我的博客:https://besthpt.github.io/
微信公众号: