最近也有不少小伙伴们在公众号发消息问我,如何去学好一门后端语言?怎么才能进阶?在公司如何才能快速的晋级晋升?你作为一个后端是如何学习的呢?
其实我正儿八经的工作也就 4 年多了,但是如果算上大三实习大四工作的话满打满算大概 5 年之久。你会发现自己工作 3 年以后再到 5 年可能会觉得自己学不到东西,很多东西从表面上看你会了,深入一点你基本就回答不上来而且脑海搜索不到任何的相关知识点。小伙伴们问的最多的是下面几个问题(不以语言论英雄
):
- 我工作 1年 ,3年, 5年 进入了迷茫期,完全不知道自己要干什么?
- 不知道自己要看什么书籍、视频、文档?
- 学的东西总是用不上,而且经常忘记,需要查阅(百度、谷歌)
- 我发现我有时候还不如公司新来的员工(经验比我低)还菜?
- 更有甚者,工作了三四年觉得自己不如别人,想放弃转行?
实话实说,21年刚开始老早我就想把自己的学习路线以及书单整理下,因为换了工作的原因搁置了。自从最近写了文章之后,常常有朋友会问我,我是后端开发:“我需要看哪些视频、文档、书籍;如何规划自己的职业路线?”。那么我就以自己的成长过程中:学到的知识、看的书籍、以及文档,视频很少看。
学习时间表
这个是问的最多的,主要是因为我很早之前是做PHP语言开发。给大家看下我刚毕业的学习时间:
7:00 起床,因为是租房人多,早起洗漱
7:30 开始买早餐边吃边去公交站
7:45 到达公交站,等公交;运气好直接上车,不好下一趟
8:50 到达公司,接水开电脑开始工作 写代码
12:00 午睡时间, 看书、看视频(敲代码影响同事休息)
13:30 下午工作,写代码、需求评审、开会
18:30 下班,留公司继续学习、看书、动手实现(公司有空调舒服一些)
20:00 回家、买饭、同学吹水、看书、压马路
22:00 洗漱、看书、看教学视频
第二天凌晨2:00 结束学习睡觉
因为要工作的原因,放弃玩游戏的时间(LOL、穿越火线),全部投入到自身的技术提升;技术不好,工作难找,毕业了就不再是一个孩子,而是一个有担当、有承担能力的男人。
前几年做PHP开发 2 年做到高级研发,3 年开始承担面试负责项目等等一系列工作。分享一下我的PHP学习路线:
PS:目前已转使用Lua/Go语言开发高性能项目
初级进阶阶段一
- 掌握基本Html+Css语法,会用开源UI组件等等(必备,刚毕业一般都要前后端都会)
- 掌握PHP基础语法、格式、数组函数、语法糖、上传下载、cookie | session配置原理、命名空间
- 掌握mysql语法使用;会写原生sql、知道sql执行的先后顺序
- 了解面向对象 | 面向切面的编程思想;(很多老框架是面向过程)
- 了解redis | memcached基本命令和两者区别
- 了解使用php框架,Laravel | ThinkPHP
- 学会使用linux一些基本的命令
我非常建议初学者多看官方文档,最原生且可以锻炼英语能力;基本上涵盖了PHP的所有语法知识体系,当时教我的导师只推荐了官方文档手册和给了一个PHP的学习pdf。我自己的做法是:看一遍之后,我会自己写写小项目去使用;也就是要动手进行实践。
thinkphp框架在国内使用率太高了(当时大学时导师推荐学习),所以尽量选择ThinkPHP框架上手学习;之所以不建议使用Laravel入门是因为:语法糖太多、第三方类库太多、而且一些其他强大组件对新手来说难度较大;个人认为laravel稍微有点臃肿。尽量使用框架可以完整自己的个人博客系统。
中级进阶阶段二
php进阶
- 掌握常用设计模式理念、代码规范
- 掌握PHP常用的扩展实现原理和使用
- 掌握PHP反射原理与使用
- 熟悉使用正则表达式
- 学会debug断点调试+做日志查询报错
- 了解php-fpm概念和运行过程,学会对其调优
- 熟悉http协议、tcp/ip协议
- 熟悉composer安装第三方库,并且自己可以写一个类库
- 学会使用swool+php编写聊天功能
- 学会只用Fiddler、Charles、Whistle其中一个接口抓包工具
mysql进阶
- 掌握mysql
原生命令写法
,不要过渡依赖工具创建表修改字段操作 - 学会使用slow_log查看慢日志、
explain
关键分析sql性能,知道怎么调整sql语句,达到最优 - 掌握mysql事务(原子性、隔离性、一致性、持久性)语法和实现原理
- 了解mysql
悲观锁
、乐观锁
、行锁
、表锁
- 掌握索引,
索引分类
(主键、唯一、二级、全文、组合)、回表
、索引覆盖
、索引下推
、最左匹配原则
- 熟悉mysql的常用
配置项
,如何配置主从同步
和集群
原理
redis进阶
- 掌握redis数据结构使用场景
- 掌握
消息队列
、发布订阅
、管道
、stream
使用 - 了解redis的
事务
、AOF
、RDB
原理和机制 - 了解redis的
主从模式
、哨兵模式
、集群
、分布式缓存
linux进阶
- 学会自己能完整的部署一套lamp环境,且能运行自己博客系统
- 掌握常用的文本分析工具:
awk
、wc
、grep
、sed
、sort
、uniq等等命令 - 学会编写
shell
脚本 - 掌握查看资源进程相关命令:
ps
、top
、netstat、df -h
、free -h等等命令 - 掌握nginx的配置项含义,知道每一项是用来干什么的
高级进阶阶段三
php进阶
- 拥有快速开发项目解决问题的能力,能带领小团队开发项目(
管理能力
) - 掌握
高并发
、高可用
、高性能
- 掌握nginx负载均衡原理、
DNS轮询
、l4、l7;正向代理
、反向代理
、nginx高可用 - 熟悉使用
多进程
进行项目编程 - 熟悉
socket
编程,了解多路复用技术
(select、poll、epoll);了解IO模型原理 - 熟悉
swool
框架,在新项目可以使用swool作为主导 - 掌握消息队列使用:
kafka
、rabbitmq
、rocketmq
其中之一,能够处理上亿级别消息,知道如何对消息队列进行监控,异常处理,且能够通过消息队列异步解耦项目功能 - 熟悉
elasticsearch
搜索引擎,并且能够应用到项目上 - 熟悉
elk
日志搜集系统整体的流程和来龙去脉 - 尝试可以使用c进行编写php扩展
- 精力充足的情况下学习其他语言:
java、golang、python、lua、大数据
,对他们要有一定了解或者能使用起来
mysql进阶
索引调优
,大表性能分析- 掌握
分库分表
方法:水平、垂直 - 掌握主主、主从集群配置,知道如何解决主从的延迟问题
- 对索引的实现、
事务隔离
的机制有一定的了解 - 了解mysq的
脏读
、幻读
、不可重复读
- 熟悉mysql触发器、视图、存储过程的使用
- 熟悉开源的mysql中间件和阿里的
canal
增量数据同步
redis进阶
- 熟练使用redis的
管道技术
、事务
处理、分布式锁
、消息队列
- 掌握一些冷门指令:
bitmap
(位图)、pub/sub
(发布订阅)、Geohash
实现原理、Stream
(消息队列MQ) - 掌握
redis+lua
实现原子操作和脚本复用功能 - 掌握redis
集群部署
、哨兵模式实现
,知道是怎么一回事 - 了解
AOF
(Append Only File)日志
和RDB快照
实现原理与算法 - 可以试着去看redis
源码
(可惜,我没有看完)
下面是我相关redis文章:
- hash应用场景分析实践
- 面试官嘲笑我,这你都不会?位图
- 运维大佬嘲笑我,这个你都不知道?redis信息详解
- Redis发布订阅:我想着应该是全网讲解最简单最通俗的文章了吧!
- 面试官:谈谈你对geohash的理解和如何实现附近人功能呢?
linux进阶
- 掌握nginx各种配置:
配置https
、负载均衡
、正向代理
、反向代理
;最重要的是openresty
的配置nginx+lua - 掌握
vim
编辑器的命令和快捷键、crontab定时器 - 熟悉
文件管理
、权限配置
、用户配置
、软硬链接
- 常用的命令一定到牢记:cat、more、lsof、tail、less等等
- 了解编译原理、makefile、进程、信号知识点
- 熟悉
rpc
的配置部署
PHP书籍
第三版:豆瓣评分8.2
作者是Matt Zandstra 从事互联网应用开发十余年,目前是雅虎公司工程师。这本书是在我在毕业不到一年我就买了,大概看了有5遍以上,整体给我的感觉就是内容比较细腻,基本上是循环渐进。内容主要为4个部分:面向对象、设计模式、企业模式和最佳实践;面向对象和设计模式可能会稍微好点,但是后面部分就会有点差强人意。不过总体来说想深入了解的,还是值得一买,毕竟不是很贵。
PS:相对 21 年来说,内容稍微过时了点。
Mysql书籍
第三版:豆瓣评分9.3
这本书是在 2016年9月份 某东购买的,内容太细了,也很厚。你读的时候会发现,越往后越深,最后会感觉自己成了一个DBA角色。涵盖知识面比较全,也算是陪伴我两年多的战友了。值得推荐一下
第二版:豆瓣评分7.6
这本书是我刚毕业10个月的时候同事推荐给我的;零基础学习mysql更友好,前半部分讲解基础知识,后半部分则会深入到底层实现;我看完这本书之后,感觉个人对mysql的认知增加了很多,视图啊、触发器、存储过程等等。可以说这本书带着我闯天下。
PS:不过这本书真的是太厚了,携带不方便,我一般做地铁会看书,但是这本书拿着好沉好重。并且感觉有点过时了。
豆瓣评分9.4
这本书是我 2021
年年初买的,当时只是在某金小册上看过,试读了几个章节感觉作者真的是很用心设计本书的章节顺序(因为我不太喜欢读电子版的书籍)所以一直没买小册;但是知道作者出书之后的一个月我就去京东购买了这本书。现已看了三分之二。
作者的写作方式是:从现有的场景引出问题再到解决方案设计,循环渐进
的揭开 mysql 的实现细节。很细腻的处理方式,作者会告诉你:”mysql是什么样子?遇到什么问题?如何解决问题“,一步步的道出其原理,是一本不错的书籍。而我在这本书上也学习了很多知识点,很多地方更是豁然开朗
的感觉。
Redis书籍
豆瓣评分8.6
这本书大概是 2017
年上半年的时候买的,应该是我第一次买的一本 Redis 相关的书籍,不过很可惜,当时因为没有看完出去玩的时候给弄丢了。对于喜欢弄清楚Redis原理的可以尝试下,里面也有相关的源码解析;算是比较通俗易懂吧。
豆瓣评分8.4
这本书是在 2020年8月
买的,比较有意思的是都是在某金小册看到的,但是我又不喜欢电子版,就去京东搜索看到后买的。作者钱文品,这个名字跟书籍一样,有文有品,外号老钱;接近250页的数据。我已经看了两边了,整体感觉就是作者的初衷不是想写redis的设计与底层,更像是通过实战的场景来告诉你应用。
以至于很多开发者认为这本书差劲、粗俗甚至垃圾;不过萝卜白菜各有所爱,虽然文中大部分都是浅出,但是主体内容还是可以的。
Nginx+Lua书籍
豆瓣评分4.6
这本书在 2020年2月 买的,因为我已经有了nginx+lua基础,买回来一看,好家伙将近600页。
这本书很多人吐槽,说是抄文档充页数、深度不够、更没有实战、太基础的东西。说实话我读了一遍之后确实也有这样的感觉,主要是卖的还特别贵。有基础的lua nginx直接忽略往后看,只能说是一个入门教程,可以带你了解nginx+lua一些相关原理和类库使用。
这个站点由多年的技术积累做成的, lua基础到高阶再到openresty配置,到最后lua的高级类库和nginx_lua使用模块的。推荐学习
Pyton书籍
豆瓣评分9.1
这本书是在 2018年10月 某东购买的,花了一些时间看了这本书大概看了两遍;因为是刚入门,对于小白还是比较友好的,有python基础知识的朋友就不建议买了;python入门是比较简单的语言。本书籍针对刚入门开发讲解还是很不错的,但是针对当前python现在这个大家庭,这本书稍微有点落后了。
豆瓣评分8.2
我并没有买这本书,而是从同事那边借来看的,很遗憾没有看完,因为也是基础教程,所以没太有想看的欲望;就是看起来太枯燥了🤣 😂 😄 ;当时又不能用于实战项目,只能写一些脚本一类的,我就放弃去读这本书了。
linux书籍
第二版:豆瓣评分9.3
看评分、看评论,多的咱就不说了,作为后端开发这些还是必须要知道的知识;如果想要提升自身能力,对unix网络多了解,这本书真的要买来看看。虽说 2010 出版的,但是编程的总体思维基本是不变的。
第四版:豆瓣评分8.4
想要对linux多了解的,可以看看哦!小白都能看懂的书籍。
Go语言书籍
Go语言目前我还没有买相关的书籍,大部分是在网站上看学习:
文档有点多哈,前人总结,后人乘凉;我们都是站在巨人的肩膀上学习,目前我没有学完,基本的入门和实战看完了。后面几个看了就犯困啊,目前公司用go封装了自己的框架,已经运用到项目中了。
算法
豆瓣评分8.4
反正我觉得我作为一个小白,还是能很容易接受的;但是依稀记得尴尬的是实例是python代码写的,那时候看很懵逼的,小白还是可以看看的。
想要精进的大佬看看下面这本书,无敌存在:
豆瓣评分9.4
好书我真的不用再说了,看过一点,太干货了。个人感觉比《算法导论》会更友好一点,注重实践能力。
网络协议
豆瓣评分8.1
这本书对 HTTP 协议进行了全面系统的介绍,由浅到深非常适合入门小白,而且讲解生动易懂,书籍还配有一些图解案例,喜欢的可以入手看一看,扩展知识面。
豆瓣评分8.6
这本书到现在我都还没有读完过,太厚了,而且枯燥乏味,容易睡着;但是可以带你全面了解http,跟上面一本书可以任选一本读即可。我会选择《图解HTTP》就是因为它薄一些。
豆瓣评分9.2
这本书没的说,大家看豆瓣评分和评论就知道了,想要进大厂,这本书你不读一读,绝对亏死。
豆瓣评分9.1
😂 书籍厚的我无法呼吸,这本书完整而详细地介绍了TCP/IP协议是如何实现的,真的是不能详细的再详细了,想深入了解tcp/ip实现原理,请买一本看看,我不能保证你看着看着就睡着了
。
其他的书籍
豆瓣评分8.5
我依稀记得 2018
年时,我还在老东家,新来的同事非拉着我一起学习docker,一开始我是抗拒的;后面开小组分享会的时候他们在分享docker我也正式开始接触docker,中间断断续续学。看着菜鸟教程,然后看同事买的这本书,骨架清晰,篇幅简炼适合我这种小白。
豆瓣评分7.0
这本书 2019 年看的,总体来说是为了扩充自己的知识面;不管别人怎么评价,出发点是不一样的,各取所需;有喜欢的小伙伴可以试一试!
晒一晒我自己买的书籍和读过的书籍,有些书籍遗留在了郑州和上海(实习郑州,毕业的时候去了上海,随后辗转广东),个人不喜好看电子书所以很少推荐电子书。视频看的最多的是 韩顺平老师的PHP从入门到精通、java入门到精通等等一系列。部分书籍还在公司,现在在家居家隔离上班
:
广东漂泊时买的各种书籍,这些是在我的桌面上,还有一部分在压箱底😂 😂 😂 :
这是我当时看同事的书籍拍的照片:
问题解答
如何走出迷茫期
说实话作为一个 4
年多开发,我也不能妄自菲薄,不过可以谈谈我自己是如何走出 1
年、 3
年困惑期,迷茫期:
当时刚刚毕业一年的时候,偶然间去参见了一个技术讲座作为一个旁听者,参加讲课的大都是:华为PHP开发者、腾讯技术大佬、阿里的java大佬,但是在讲座结束之后,我不禁的陷入沉思;因为跟他们比起来我好像什么都不会,很渺小,知道的太少太少,我压根不敢跟他们交流,只是坐在一个角落里旁听,加上在公司各种被说技术菜鸟,从那段时间以后,我整天就有点萎靡不振,不知道自己要干嘛,又总想做点什么,期间一直浑浑噩噩,也想过放弃转行。我这意思到自己进入了迷茫期,我是这样走出来的(来源于跟一位阿里大佬交流心得):
- 调整自己的心态平衡,一直告诉自己还年轻还可以学习,毕竟自己才毕业一年
- 当我们处在迷茫期时,不知道要干什么,甚至职业规划也不晓得怎么做的时候;什么都不要做,待在原本岗位,继续做自己分内的事情,一段时间后你一定会有所不同
- 一定要耐得住寂寞,学编程、提高技术能力,本身就是一个迭代过程,也是一条寂寞的历程
- 职业规划不清楚的时候,按照原本的路线继续前行就是
- 自卑源于心里作用,技术高低只是一时,路还很长,继续努力便是;毕竟不是谁一出生,就是计算机大佬
学习方式
我认为看什么书籍、文档、视频不是那么的重要,重要的是你看的时候对于知识的吸收和理解
;你会发现你身边会有这些人,别人只看了一遍的文档或书籍,别人直接上手实战了,而你却要花费很长时间才能够上手;你也会注意到:同样的一个知识点,你跟别人的表达和分析却大相径庭
。然后你在心里会很羡慕别人,为啥别人啥都会,我不会?久而久之你就变得内心自卑,没有底气。
其实这一切你自己都可以通过自身的努力解开:
- 人跟人不同:一定要知道人跟人肯定有差别,要不然怎么会有普通本科和211、985院校的区别,我都认命了
- 学习方式不同:别人学习不只是看,而是在看的时候脑海就在过代码案例,去思考遇到的问题
- 学习深度不同:别人会在你休息的时候去看源码,然后走一遍实现原理
- 动动你的小手,光看不练假把戏;古人已经告诉我们了
- 最重要的:要学会付出,不能只求回付不付出行动。多花费一些实践去研究去实现功能
比如我学习lua到做项目:只用了 三天 时间
晋升晋级
大家不要慌,我也有过这样的尴尬场面,晋升不给晋让你晋级,要知道两者之前不单单是 rmb 的差距,更是对你技术的认可。我是这样做的:
- 日常需求开发,做的需求是比较多的,重要功能模块较多
- 遇到了新技术对项目性能有帮助的,会本地测试环境实践,然后跟领导聊一聊,能用到线上就是加分项
- 你引进的技术一定是能对项目产生影响的,例如:引入rabbitmq消息队列解决亿级别数据异步解耦,引入swool+php做微服务项目;再例如引进go语言、lua语言做高性能web项目,提高并发性能
- 学会交流、分享你的技术点
这是我自己所经历的一些,也许只是片面之词。这里也只是列表其中一部分来说事情。要记住:安安稳稳每天写需求很难提升自己和进阶自身水平,要不断的去接受新的挑战,这样才能利于自身发展。
结语
好记性不如烂笔头,厉害的大佬都不是简简单单的看个文档、看个视频、看本书就可以了;而是通过在实际的项目中引用实战,才成长起来的。
当我们不知道自己如何规划职业生涯或者迷茫的时候,或者觉得技术以及停滞不前,一定要保持看书的状态,这也是我目前的状态:
好啦,我是阿沐,原创不易,鼓励笔者创作更好的文章,请来一个三连赞!!!