有人说,程序员是吃青春饭的,35 岁就提前退休了。
猛一看,这句话是对的;仔细一看,这句话是不对的。
说它对,是因为现实中确实有很多程序员 35 岁就被毕业了;说它不对,是因为 35 岁以上的没被毕业的程序员还是有很多的。
程序员不是吃青春饭的,而是吃技术饭的。换句话说,如果你的技术跟不上年龄的增长,那么你就只能吃青春饭;因为同样的技术,我肯定找年轻的,年轻人精力旺盛好忽悠,还能提升公司门面。
但是,你会发现,一个公司的主心骨,或者说挑大梁的,大多都是经验丰富的、可靠的、技术好的人,而这样的人,大部分年龄都不小。
那么,为什么你成不了这样的人呢?好听点就是:因为你的技术跟年龄不匹配。难听点就是:你的性价比太低,不值这个价!
要改变这个状况,你就要下几个决心,做几件事情。你首先需要提高的不是技术,不仅是技术,不仅仅是技术。
态度
首先要做的,就是端正自己的态度,不要天天扯着脖子叫唤:我 35 就失业了,我还能干啥。大部分这样叫嚷的,都是有谋杀嫌疑的,你把悲观带给别人,导致别人也悲观,从而无所事事,跟谋杀没什么区别。
假设现在有一个问题让你解决,如果你解决不了,那你纠结个毛啊;如果你能解决,那你又纠结个毛啊。所以,不用纠结,踏踏实实干事才是正途。
在 IT 行业,永远是技术至上的,一门新的技术盛行,肯定有其原因,要么就是性能提升了不少,要么就是用起来更简单。而我们作为开发者,需要做的就是不断学习,不断了解新技术。
如果你遇到新技术不主动学习,就在那感叹薪资提升慢,35 岁就被干掉,上班就摸摸鱼上几个小时大号。那么就对不起,程序员涨薪不是靠熬年龄,被干掉更不是因为年龄,而是因为不思进取。
有人就不爽了,年龄就是工作经验啊,工作经验长才能拿高薪啊。
错!8 年工作经验中有 7 年都在 ctrl+c
、ctrl+v
的不是 8 年经验,是 1 年经验。建议大家招人的时候看下面试者的手形,左手大拇指和食指磨损严重的就是用的 Mac,左手小指和食指磨损严重的就是用的 Windows,总之:只要左手食指磨损严重的,就是平时CV
惯了,就要重点关照了。
总之,年龄大不是被干掉的原罪,也不是拿高薪的借口,技术才是王道,所以,你需要的态度就是:学好技术,技术就是一切。
乐观的态度是前进的动力,态度比能力更重要。
目标
好,现在,你已经准备学好技术了,那么,该学什么技术呢?
这就要看你的目标了,程序员的职业道路只有两条:管理路线和技术路线。并不是说管理路线就不需要学技术,而是要求不那么高深了。但是做管理前,还是需要技术达标才能晋升,所以你还是要先学好技术,不然难以服众。
假如你现在定了目标:我要成为一个前端专家。
那么,你可以去招聘软件上看看,前端专家都有哪些要求,然后把这些要求列出来,逐条去努力,去实现。你也可以看看你们公司的高级前端,他每天都在做什么,他做的事你是否能做到,如果做不到,你要怎么才能做到。总之,你要想方设法去找到“实现你的目标的条件”,然后让自己逐个满足这些条件。
你每天可以反思一下,今天做了什么,做的这些是否让自己距离目标近了些;当然,这不是一日可成的,这些都是需要坚持的。当你想放弃的时候,不妨就想象下自己已经达到目标的情景,指不定你的动力就又来了。
没目标的人朝三暮四,有目标的人始终如一。
坚持
当你有了目标之后,你要做的就是坚持不懈地向目标走,你可能坚持不下去了,想放弃;或者你看到别人在吃喝玩乐禁不住诱惑,没关系,你想想他 35 被辞退的情景,你就觉得挺爽的。
我曾经读过一本书,叫做《Utliers》,中文名叫做《异类》,这本书告诉我一个道理:坚持不懈地做一件事,只要花上 10000 小时,你就能成为专家。这叫做 10000 小时法则。
10000 小时,猛一听挺唬人的,按照每天 8 小时算,就是 1250 天,按每周工作 40 小时算,也就是 300 周,大概 6 年时间,6 年的时间就能成为专家?按照 23 岁毕业来算,也就是 30 岁就能成为专家,有几个人成了呢?这个法则不对吗?肯定是对的,比如:钢琴师朗朗,魔术师刘谦,他们都是世界级的人物了。那就说明:凡是 30 岁没成为专家的,都是没有坚持的,因为大部分程序员每天真正干活的可能也就三四个小时,剩余的时间没有去学习、写代码;而是在摸鱼。唉,我替你们老板求你们上会儿班吧。
坚持是一件很可怕的事,会积少成多,会将微弱优势叠加,产生质变的效果。而且坚持会成为一种习惯,一旦养成了习惯,改都改不掉,一个好习惯将会使你受益终生。
我有个同学坚持刷leetcode
7 年了,真不是人啊,当初我嘲笑他,现在他过着令我羡慕的生活。现在后悔也没用了,知来者之可追,所以现在,我也要坚持了,耶稣也挡不住我,我说的!
理性
理性是程序员的本性,就像物体的密度一样,不会随着时间、空间的变化而改变。
即使不理性的人,一旦当了程序员,也会变成理性,因为你要面对的是代码、是计算机。代码只跟你讲道理,胡搅蛮缠、煽情那一套对代码是没用的。
理性就是做事有理有据,错的为什么错,对的为什么对,都是要做到心中有数的。比方说:今天我 review
代码,我发现这一块逻辑不太对,应该会出 Bug,但实际却正常运行,结果对了我就不去纠结了吗?这肯定是不行的,如果将来出错了呢?换句话说,我们去纠结一个代码的出发点应该是:实际结果跟我预想的不对。而不是:结果不对。
或者说:决定我们是否做一件事应该是理论导向的,不应该是结果导向的。
比如,我在同事的代码中看到很多直接在 UI 线程操作文件的,我就嘀咕:文件操作是 IO 密集型的耗时操作啊,应该在 IO 线程啊,为啥在 UI 线程呢?那个同事说:这个文件很小,几十毫秒就完事了,不会造成 UI 卡顿。
他说的没错,但是不对!因为他这么做的原因是:文件不大,不会卡顿 UI,这就是根据结果做出的判断,也就是结果导向的。
结果在后面我们发现,ANR 率上升了 0.04%,最后定位到是这个文件引起的,明明文件不大啊,这是咋回事呢?因为部分性能差的手机,ANR 率就高了,还有就是有的用户选择了一些大文件。那么这个问题怎么避免呢?
我们这么理解:理论是根据大部分场景综合得出的结果,就像正态分布,独立概率一样,都是经过大量实验、场景得出的结论,所以适用于大部分场景;而你自己的结论,只是根据你自己的所见所闻得出的,而你自己的见闻远不如理论提出者。 所以,我们要尊重理论,根据理论来下决定,而理论说:文件是耗时操作,应该放在 IO 线程,那么我们放在 IO 线程就行了。这就是理论导向。
我们要做理论导向,不要做结论导向。
理性不是无情,程序员也是有感情的,也会开心,愤怒。我们要做的,就是不在愤怒时下决定,愤怒时是感性占上风的,此时做的决定大部分是从情绪出发的,很容易错,我们要避免之。
清醒时做事,糊涂时读书,大怒时睡觉,独处时思考。
基础
最后,要说的,就是基础!我们一定要重视基础。
基础很重要!!!基础衍生出其他所有知识。学得越深,基础越重要。
基础就是通用性技能。平时感觉不到它的存在,但是一旦遇到问题,你就知道它的重要性了。
有的人在遇到问题不能解决时就开始怀疑人生,怀疑这个怀疑那个,甚至怀疑自己学过的东西都没学对,这其实就是基础不牢,这也不能确定那也不能确定,就导致不能排除无用的信息,进而无法及时解决问题。
比如,我有个同事用ArrayList
写了个用户列表,后面发现列表中有两个一样的人,不知道是服务器返回错了,还是客户端自己加错了,其实这就是他不知道ArrayList
是否具有去重性,只能先写个 demo 确定一下,这就浪费了时间,其实我觉得像这种基础不牢的,应该先把ArrayList
源码抄 100 遍再说。
高手之间的较量,拼的就是基础,拼的就是对方犯错。你可以不会高级 API,但是不能基础不牢,因为高级的 API 都是基础 API 实现的,基础 API 也能实现,比如正则表达式,你可能记不住,但是只要你知道字符串的基础 API,你也能实现同样的效果。
基础是重中之重,两手都要抓,且两手都要硬。
结语
程序员为什么是最理性、最睿智的群体呢?
因为我们整天跟电脑打交道,能跟电脑讲理的人,能不理性、不睿智吗?
我们要做的就是:端正态度,定好目标,坚持不懈,理性做事,打牢基础。诚能如此,吾等前方,绝无敌手,三界之内,没人能挡住我们的脚步。
那么,下一节,就从基础开始,一步步迈向胜利之路。
程序员的必修课 - 奔波儿灞取经 - 掘金小册数据结构+计算机网络+操作系统+设计模式,软硬兼修,深入浅出带你夯实程序员基本功。「程序员的必修课」由奔波儿灞取经撰写,610人购买https://s.juejin.cn/ds/BoPu7q4/