[技能篇] 程序员工作以后该如何提升?

刚好最近 Coding Girls 有同学问了这样一个问题:

在现公司的开发日常已经脱离 hard 模式,就是日常写业务无压力,代码质量也 OK,但是写完业务就没事了。这样子应该怎样提升?

其实在工作一年多左右的时间,我也曾提出过这样的问题。不知道是否曾有人也有过一样的烦恼,就是当你能够 handle 现在的工作之后,要怎么提升自己?这个问题无关性别,任谁都会有。所以还是想根据自己的经历来写一写。如若有相似之处,纯属正常。

这里是 PHP 的社群,我们就基于 PHP 来讲。相信很多刚开始接触 PHP 的人,甚至是刚开始接触代码的人,百分之七十都是先接触的框架。比如我。Laravel 是个极度优秀的框架,最优秀的地方在于,它能够让一个连 SQL 都写不好的女同学爱上写代码。很多开箱即用的工具、各种技术教程帖子使得我们不需要在深究其原理的基础上,写出自己的毕业设计,写出自己在代码世界的一丢丢自信和存在感,从此一脚迈进了代码世界的大门。

于是乎你带着刚学会对框架的使用和一些在学校学得零零散散的稍微能理解的知识开始参加工作了。工作之后你突然发现自己对框架的理解还不够深入,于是你开始从头开始啃各种文档:

  • PHP 的文档,了解了每个函数的使用。
  • Composer 文档,开始折腾各种潮流包。
  • Laravel 的文档,如何用 ORM 写出复杂的 SQL,控制反转到底是个什么鬼?
  • Redis 的文档,学会它,定时任务队列缓存等优化开始不在话下。
  • Vue 的文档,可能你觉得只掌握一点点前端知识还不够,于是你又开始折腾。

甚至随着公司业务的发展,你会开始跟着你的团队接触一些对你而言还很高大上的技术,微服务、分布式、读写分离、主从备份等等~ 甚至你还开始尝试写开源项目,但是迟迟不肯发布。

慢慢开始觉得自己变得牛逼了,因为产品同学的需求你能很快完成了,测试同学即使提出来 bug,那也是你没好好看需求文档或者粗心写错了个符号导致的。工作变得越来越没有难度,于是乎你开始不知足了,这时候如果公司没能给你更多的挑战,你就会开始想着要换份工作了。

但是一般换份挑战无非是换个工作环境、组织、换个框架或者多兼顾一个语言的事情,当你适应这一切之后,你又开始会觉得好无聊,没有挑战的同时又对重复劳累的加班工作产生厌倦,终于你开始连周末也不想写代码了。兴许你会换个打发时间的事情,比如学一门乐器、谈个恋爱、养个猫、实现一些 Flag ~~

这样真的好吗? 你开始这么问自己。即便能做很多事情,却仍旧有很多事情是自己做不了的。你开始有种比上不足比下有余的感觉,你开始慌了,开始觉得迷茫、不知所措。于是乎你开始抓着身边的人问,这该怎么办才好?可是当有人给你提出换行换岗的建议时,你却并不想如此。是因为你热爱还是因为除此以外你不知道做什么好了?Anyway~ 我希望下面的内容能给有着同样疑惑的你带来些许答案。

提出疑问

提出什么疑问?

  • 你的代码质量真的 OK 吗?你是拿什么来衡量自己的代码质量呢?拿什么来保证接口的健壮性吗?你知道你写的接口能承受多少请求数和并发量吗?百万级的数据你能 Handle,千万级甚至 PB 级呢?
  • 日常写业务无压力?平均每写一个功能测试给你提多少缺陷你数过吗?你知道你写的功能有多少人在用吗?你写的功能别人用得可还顺手吗?生产上你写的功能可曾产生过「不可能出现」的脏数据?
  • 比如某天系统突然崩了十几分钟,CTO 和几个技术组长出面解决了。你可曾去了解过为什么崩了?如何解决的?了解到什么程度?(比如有慢 SQL,遇到慢 SQL 导致系统阻塞怎么解决,慢 SQL 是怎么产生的,平日里要如何避免慢 SQL ?怎么根据崩了发现是慢 SQL 的?)
  • 把框架文档看熟看透了就够了吗?Laravel 的框架为什么要这么设计?为什么我们都说它好?它跟其他框架的区别在哪里?有去翻过底层的代码吗?
  • PHP 函数的背后都用了什么样的算法来保证其运行的高效?了解过吗?

脱离 hard 模式,究竟是事情很 easy 还是因为你把自己置身于 easy 就算了?

积极主动

根据上面随意提出的疑问再延伸出更多的疑问,就可以举出大把你需要学习的内容了。

  • MySQL 你真的会优化吗?优化的原理是什么?为什么有些 SQL 语句逻辑相同,性能差异却如此巨大?框架是怎么和数据库连接的,事务是怎么处理的?为什么加了索引会让查询变快?如何更好的利用索引?order by 是怎么工作的?
  • Nginx 你真的会用吗?除了拿来简单的部署项目,你知道如何设置反向代理来实现负载均衡吗?跨域和缓存的问题该如何处理?
  • Linux 熟练吗?命令都会用了?Linux 系统中出现大量不可中断进程和僵尸进程怎么办?如何迅速分析出系统CPU的瓶颈在哪里?Linux 内存是怎么工作的?进程切换的过程是怎么样的?磁盘 I/O 性能优化有几个思路?怎么使用 tcpdump 和 Wireshark 分析网络流量?怎么缓解 DDoS 攻击带来的性能下降问题?服务吞吐量下降很厉害,怎么分析?

接下来就不详细列举了,比如基本岗位技能 Web 协议、Redis 等,内功心法之数据结构、算法、设计模式等等~ 如果真的不知道自己有啥技能上的欠缺需要补充,看看自己心仪公司心仪岗位的招聘简历呗~

提出疑问,知晓自己的缺漏,下一步就是自己想办法补缺了。上面的问题,你知道答案吗?此刻的你是否有复制黏贴百度答案的冲动,如果还有,那就去找到答案吧!

在这个资源共享的时代,学习成本可以说几乎为零。你能提出的疑问几乎都有人提出过,也有人解答过。如若你需要更加系统更加深入的理解,书籍、视频、课程,网上的资源大把。买了就踏踏实实的去看,辛苦加班赚回来的钱不要浪费了。反正没见过厉害的人说他们是不看书的。

  • 知识付费的时代,各大社区现在都多多少少有在运营相关技能的教程
  • 极客、慕课也有很多深入理解底层原理的好课程
  • 想补充相关的知识该去看什么书,实在找不到人推荐你就上知乎

写点什么

学而不思则罔,思而不学则殆。有道是学以致用,如若看完一个知识点,把自己的理解写下来,自己能看懂,别人也能看懂,还能把不懂的人讲到懂,那你就是真的懂啦!还是那句话,没见过哪个大牛没有输出自己的知识见解的。So,看了书、学了视频课程之后,请务必要强迫自己写点什么。知识点笔记、读后感等等~

加入圈子

一个人走得快,但一群人能走得更远。于我个人的经历而言,我的技术成长离不开圈子里面的人的帮助。因为偶像安正超,来到 Laravel China 结识了站长 Summer,进而结识了更多社区里的人。在一次次交流探讨、耳濡目染之下,知道了自己的不足勤加修炼的同时,也知道有谁能解答我的问题、有谁愿意与我探讨,还有谁和我一起互相监督共同成长。一路走来,十分感谢伴我同行的人、耐心帮助我的人、愿意花费自己的时间给予我建议的人。

因此,去积极加入圈子,或者是自己开辟圈子吧。寻求帮助、或者帮助别人。有道是教学相长,互相裹挟成长,一个人你学不下,一群人你旁听总该有点收获吧。花点时间建立自己的技能圈子,去找厉害优秀的人跟着他们学习,有什么难的呢?

题外话

在这里列出一大堆学习资源可能无法保证会对你有用。更何况学习本身还带着坚持、自律、方法这样的标签去将我们很现实般地划分为三六九等~ 需要学习的东西还很多,对程序员而言,知识的更新速度之快是我们永远始料未及的。有道是,路漫漫其修远兮,不管工作了多少年,时刻想着如何去提升自己是人生的一门必修课,你不想可不行啊!

如果有需要,可以在帖子下面留言,我或者社区里的热心的同学都会跟你分享我们学过的可能对你有用的课程、有用的书。比如网络相关的书有哪些值得一看~ 社区本身就是个很大的圈子,好好利用起来呀!

另外,一个程序员的成长肯定不仅仅只有技术,还有职场、管理、交际圈等等~ 如若有机会,再来写个《职业篇》吧!(因为现在暂时还不够格呀喵~)

本作品采用《CC 协议》,转载必须注明作者和本文链接
Stay Hungry, Stay Foolish.
本帖由系统于 4年前 自动加精
讨论数量: 25
Summer

给自己找点事情做做,写写 技术文章,或者写些开源软件,或者 申请成为版主

给自己提个问题:下次找工作时,简历要怎么写,现在每天做的事情哪些放到简历里?

4年前 评论
看完后,感觉自己在混日子,太菜了
4年前 评论

除了学习,精进技术以外,还想谈个恋爱。😊

4年前 评论

:speak_no_evil: 有人有兴趣一起在 LeetCode 上面组队做题吗?好少见用 PHP 做题的~ 当然我们可以用 Go 来写~

4年前 评论
Ritin 4年前
yourself 4年前
finecho

沙发 :blush:

4年前 评论
月光

症状描述的很实在,这样的想法或者说状态很可怕,如果意识不到更可怕。还好我每天都很清楚自己会什么不会什么,从来不敢懈怠。

4年前 评论
jcc123

所以开始转golang社区了~

4年前 评论

厉害厉害

4年前 评论

很棒的分享,点赞「授人与鱼不如授人与渔」的引导方式,收藏了,慢慢品!

4年前 评论
Summer

给自己找点事情做做,写写 技术文章,或者写些开源软件,或者 申请成为版主

给自己提个问题:下次找工作时,简历要怎么写,现在每天做的事情哪些放到简历里?

4年前 评论

寻找自身的差异性或者发光点也是很重要的事情,这个发光点可以是能够让你在技术道路上走的更远的能力,也可以是能够让你生活的更好的能力。

当我在简历上一点点罗列技能时,发现其实我一无所有。

4年前 评论

除了学习,精进技术以外,还想谈个恋爱。😊

4年前 评论
看完后,感觉自己在混日子,太菜了
4年前 评论

:speak_no_evil: 有人有兴趣一起在 LeetCode 上面组队做题吗?好少见用 PHP 做题的~ 当然我们可以用 Go 来写~

4年前 评论
Ritin 4年前
yourself 4年前
ccccccccccc

写得真好,羡慕表达能力这么棒。
赶完项目后也要好好沉淀自己了。
每次同样的功能看着自己不断重构更好的写法那个满足感也是很棒。
PHP或许是门容易入门的语言,但是写得好坏还得看个人修行
一起加油加油。

4年前 评论

@JokerLinly
https://leetcode.com/ 上用 PHP 还是有些的

4年前 评论

学而不思则罔,感谢感谢 一下子警醒我了。现在在学习go语言 有点急于求成,很多知识点一带而过。

4年前 评论
mouyong

@JokerLinly 一起组队呀。♪(^∇^*)

4年前 评论

@JokerLinly
@一只木蛋
@蜗牛 我已经做了一些了。也做了有一段时间了。

数据库练习题 GitHub
算法练习题 GitHub

4年前 评论

Stay Hungry, Stay Foolish. :yum:

4年前 评论

向小姐姐学习!加油~

4年前 评论

搞技术学无止境这是必然的吧

4年前 评论

忽然感觉自己好菜,就像一个搬砖者

4年前 评论

一个人走得快,但一群人能走得更远,因为这句话加入论坛 :+1:

4年前 评论

感觉还是要学一下计算机基础知识,操作系统原理啥的,对代码的执行有比较深刻的理解

4年前 评论
TigerLin

很羡慕啊,刚接触代码就从laravel开始,学了年把,写项目基本都是拿来主义,直接扩展包,不想为什么,现在想深入研究 又不知道从何做起,没有大的工作环境,都要自己一点点摸索,很迷茫

4年前 评论

这个问题把我问蒙了233

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!