最近也有不少小伙伴们在公众号发消息问我,如何去学好一门后端语言?怎么才能进阶?在公司如何才能快速的晋级晋升?你作为一个后端是如何学习的呢?

不以语言论英雄

实话实说,21年刚开始老早我就想把自己的学习路线以及书单整理下,因为换了工作的原因搁置了。自从最近写了文章之后,常常有朋友会问我,我是后端开发:“我需要看哪些视频、文档、书籍;如何规划自己的职业路线?”。那么我就以自己的成长过程中:学到的知识、看的书籍、以及文档,视频很少看。

学习时间表

这个是问的最多的,主要是因为我很早之前是做PHP语言开发。给大家看下我刚毕业的学习时间

因为要工作的原因,放弃玩游戏的时间(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的所有语法知识体系,当时教我的导师只推荐了官方文档手册和给了一个PHP的学习pdf。我自己的做法是:看一遍之后,我会自己写写小项目去使用;也就是要动手进行实践。

thinkphp框架在国内使用率太高了(当时大学时导师推荐学习),所以尽量选择ThinkPHP框架上手学习;之所以不建议使用Laravel入门是因为:语法糖太多、第三方类库太多、而且一些其他强大组件对新手来说难度较大;个人认为laravel稍微有点臃肿。尽量使用框架可以完整自己的个人博客系统。

中级进阶阶段二

php进阶

  • 掌握常用设计模式理念、代码规范
  • 掌握PHP常用的扩展实现原理和使用
  • 掌握PHP反射原理与使用
  • 熟悉使用正则表达式
  • 学会debug断点调试+做日志查询报错
  • 了解php-fpm概念和运行过程,学会对其调优
  • 熟悉http协议、tcp/ip协议
  • 熟悉composer安装第三方库,并且自己可以写一个类库
  • 学会使用swool+php编写聊天功能
  • 学会只用Fiddler、Charles、Whistle其中一个接口抓包工具

mysql进阶

原生命令写法explain悲观锁乐观锁行锁表锁索引分类回表索引覆盖索引下推最左匹配原则配置项主从同步集群

redis进阶

消息队列发布订阅管道stream事务AOFRDB主从模式哨兵模式集群分布式缓存

linux进阶

awkwcgrepsedsortshellpstopdf -h

高级进阶阶段三

php进阶

管理能力高并发高可用高性能DNS轮询正向代理反向代理多进程socket多路复用技术swoolkafkarabbitmqrocketmqelasticsearchelkjava、golang、python、lua、大数据

mysql进阶

索引调优分库分表事务隔离脏读幻读不可重复读canal

redis进阶

管道技术事务分布式锁消息队列bitmappub/subGeohashStreamredis+lua集群部署哨兵模式实现AOF日志RDB快照源码

下面是我相关redis文章:

linux进阶

配置https负载均衡正向代理反向代理openrestyvim文件管理权限配置用户配置软硬链接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
循环渐进豁然开朗

Redis书籍

豆瓣评分8.6

2017

豆瓣评分8.4

2020年8月

以至于很多开发者认为这本书差劲、粗俗甚至垃圾;不过萝卜白菜各有所爱,虽然文中大部分都是浅出,但是主体内容还是可以的。

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

我不能保证你看着看着就睡着了

其他的书籍

豆瓣评分8.5

2018

豆瓣评分7.0

这本书 2019 年看的,总体来说是为了扩充自己的知识面;不管别人怎么评价,出发点是不一样的,各取所需;有喜欢的小伙伴可以试一试!

部分书籍还在公司,现在在家居家隔离上班

广东漂泊时买的各种书籍,这些是在我的桌面上,还有一部分在压箱底 :

这是我当时看同事的书籍拍的照片:

问题解答

如何走出迷茫期

413

当时刚刚毕业一年的时候,偶然间去参见了一个技术讲座作为一个旁听者,参加讲课的大都是:华为PHP开发者、腾讯技术大佬、阿里的java大佬,但是在讲座结束之后,我不禁的陷入沉思;因为跟他们比起来我好像什么都不会,很渺小,知道的太少太少,我压根不敢跟他们交流,只是坐在一个角落里旁听,加上在公司各种被说技术菜鸟,从那段时间以后,我整天就有点萎靡不振,不知道自己要干嘛,又总想做点什么,期间一直浑浑噩噩,也想过放弃转行。我这意思到自己进入了迷茫期,我是这样走出来的(来源于跟一位阿里大佬交流心得):

  • 调整自己的心态平衡,一直告诉自己还年轻还可以学习,毕竟自己才毕业一年
  • 当我们处在迷茫期时,不知道要干什么,甚至职业规划也不晓得怎么做的时候;什么都不要做,待在原本岗位,继续做自己分内的事情,一段时间后你一定会有所不同
  • 一定要耐得住寂寞,学编程、提高技术能力,本身就是一个迭代过程,也是一条寂寞的历程
  • 职业规划不清楚的时候,按照原本的路线继续前行就是
  • 自卑源于心里作用,技术高低只是一时,路还很长,继续努力便是;毕竟不是谁一出生,就是计算机大佬

学习方式

知识的吸收和理解大相径庭

其实这一切你自己都可以通过自身的努力解开:

  • 人跟人不同:一定要知道人跟人肯定有差别,要不然怎么会有普通本科和211、985院校的区别,我都认命了
  • 学习方式不同:别人学习不只是看,而是在看的时候脑海就在过代码案例,去思考遇到的问题
  • 学习深度不同:别人会在你休息的时候去看源码,然后走一遍实现原理
  • 动动你的小手,光看不练假把戏;古人已经告诉我们了
  • 最重要的:要学会付出,不能只求回付不付出行动。多花费一些实践去研究去实现功能

比如我学习lua到做项目:只用了三天时间

晋升晋级

大家不要慌,我也有过这样的尴尬场面,晋升不给晋让你晋级,要知道两者之前不单单是 rmb 的差距,更是对你技术的认可。我是这样做的:

  • 日常需求开发,做的需求是比较多的,重要功能模块较多
  • 遇到了新技术对项目性能有帮助的,会本地测试环境实践,然后跟领导聊一聊,能用到线上就是加分项
  • 你引进的技术一定是能对项目产生影响的,例如:引入rabbitmq消息队列解决亿级别数据异步解耦,引入swool+php做微服务项目;再例如引进go语言、lua语言做高性能web项目,提高并发性能
  • 学会交流、分享你的技术点

这是我自己所经历的一些,也许只是片面之词。这里也只是列表其中一部分来说事情。要记住:安安稳稳每天写需求很难提升自己和进阶自身水平,要不断的去接受新的挑战,这样才能利于自身发展。

结语

好记性不如烂笔头,厉害的大佬都不是简简单单的看个文档、看个视频、看本书就可以了;而是通过在实际的项目中引用实战,才成长起来的。

好啦,我是阿沐,原创不易,鼓励笔者创作更好的文章,请来一个三连赞!!!