关于为何选择程序员这份工作,各有各的答案。有的人因为喜欢代码的对话逻辑,有的人因为看中程序员的较高薪资。有人追名,有人逐利,有人为了梦想,还有人仅仅只是想做些实际的小事。你的答案,又是什么?
✎ 写在前面
第一句话就问了大家为什么从事了程序员这份工作,我先来谈谈自己的情况。我一直认为,如果勉强自己做一件不喜欢的事情,那么很难有动力在今后的工作中继续前进。选择成为一名程序员,大概是在 16、7 岁的时候,那时候父母给我买了第一台电脑(一台 586 电脑),给自己的内心种下了一颗种子。IT 行业是个知识更新非常快的行业,其他行业也在发展进步,但是相对而言没有这么快的节奏,而我是一个喜欢尝试新事物的人,心理承受能力也还可以,所以程序员貌似会是一个不错的选择。此外,IT 行业的机会很多,也适合我这样的普通人家孩子,站在现在的年纪回顾过去,自己没有选错。
✎ 入行前
所谓入行前,其实就是指还是学生的你是否应该选择程序员作为你的职业工作、如何获得这份工作。作为一名学生,你真的要想清楚是否程序员这份工作适合你,因为它牵扯的个人精力实在太多,导致你不可能有太多的个人爱好。大家都知道,很多程序员会自嘲称呼为码农,目前来看,程序员是最容易逆袭的职业,码农也是从收入角度最容易逆袭的工作,但同时码农也习惯了自嘲,于是把自己描绘的异常辛苦,总觉得自己赚钱多是应该的,因为太累了。
入行前,作为学生的你们,除了正常的上课、实习之外,还可以通过一些竞赛类的准备工作提升自己的技术能力,此外,一般也需要通过校招进入技术含量较高的科技公司。针对这两点,我分别谈谈自己的看法。
参加校招
最近几年都参与了公司组织的校园招聘工作,每次去都会见到大量的学生,我喜欢和他们交流,观察他们的一言一行,为了进一步考察他们的综合能力和性格组成,我每次都会自己准备面试题,这些题目包括了编程基本概念、算法编程题、操作系统、数据库编程、开源代码阅读、垃圾回收机制、系统架构描述、实习期经历回顾、人生过程中遇到过的挫折、对于工作氛围的想法、未来的职业发展方向设定等。
这些问题中其实大多数都是开放式问题,一些是没有固定的答案,另一些甚至于是完全开放式的,需要学生提出问题。我的这组题目中,可能只有编程基本概念这一条有固定的标准答案,算法编程、数据库编程都有多种回答方案,只不过每一种回答的运行效率不同,这些都属于半开放式的技术问答。操作系统、开源代码阅读、垃圾回收机制、系统架构描述,这些个问题则属于是自己出题的题目,为什么这么说?因为我会根据你所了解的知识点一点点地深究下去,一点点往下问,所以这是完全开放式的技术问答。
实习期经历回顾、人生过程中遇到过的挫折、对于工作氛围的想法、未来的职业发展方向设定,这四个问题属于非技术领域的完全开放问答,我之所以提出这些问题,是希望能够更加接近学生的真实生活、内心想法,了解学生的过往经历、三观,以及周围环境,这样可以决定是否录用,以及如何更好地发挥学生的能力。
除了实际的技术基础能力以外,我觉得一名学生还需要具备做人的格局,做人不要仅限于眼前利益,不要太实际,不要只考虑自己。推荐大家担任大公司的“校园大使”,这个工作一定要尽自己最大可能做好,积极配合 HR 小姐姐,其实过程中你也在被观察。
✎ 入行后
关于深度思考的理解
我觉得技术能力是可以培养的,而且可能可以快速培养,只要这个人具备深度思考的能力,因为知识体系的建立一定是基于思考之上的,而不会是填鸭式的。
一个人做多了自己的职业活动,如果不调整,就会变得单一。思想也慢慢定向,没有开放式的思维方式,所以要在紧张的大脑和肢体活动之余,发现思维的新空间。作为一名软件工程师,我的大部分时间都用在了这个领域,我也发现,生活上的几乎所有细节也可以被放在这个领域里找到对应点或面,此外,程序员也需要从产品、运营方面思考技术,这样才能不断开阔自己的思考方式。我之所以愿意把这些思想“沉淀”积累起来,不是因为它们有特别的价值,而是因为它们是在宁静的外界和宁静的内心状态下形成的,宁静致远,对于拥有技术愿景的程序员来说,这是一个值得追求的境界。
对于工作时间的理解
时间是很值钱的,这种事情很多时候必须是上完学开始工作了才能理解。一个原因是对绝大多数学生来说,工作之后的空闲时间会变少,那么原来业余生活里快感度比较低的事情就不做了,这是因为你的时间可以换来收入,而收入可以用来在空闲时间换取更爽的快感,那么你的选择空间也就更多了。上学的时候,空闲的时间太多,以至于连写东西吐槽、在网上跟人互喷,都能排上日程。
之前我不小心说出了自己每天的工作时间(这里说的工作时间,其实也是学习时间,对于程序员来说,所有工作时间都是可以用来学习的,就看你会不会找方法),10-12 个小时,引起了读者的一波评论,我可以肯定的回答,确实是这样的。作为一名程序员,我认为你每周的工作时间应该保持在 60-65 个小时,因为我们这个行业的技术更新速度实在太快了,我认识的所有厉害的大牛都是这么熬过来的,没有人可以用很短的时间学会别人花费很长时间学会的技术。当然,每周的工作时间最好能够控制在 75-80 个小时以内,毕竟一个人的睡眠是需要保证的,也需要有一些陪伴家人的时间、个人娱乐时间。
关于公司的选择
如果你希望自己在某一个或几个领域成为资深码农,你应该选择有技术并且有业务的大公司。技术层面,既要有技术积累,也要有高水平的同事。业务层面,要让业务对基础架构有足够的挑战性。其实当前满足后者的公司比前者多得多,毕竟让大多数互联网公司所做的事情来说,技术都不是决定性的,提前对技术做过于超前的储备大概率会浪费。反过来,假设一个公司有技术积累又有高水平的员工,一旦业务上不去高水平员工肯定会跑,最终只剩下哪些当年技术比较不错的技术人员,长期来看技术早晚要落后。这些原因导致业界很多公司存在业务发展非常快而技术跟不上的情况,去这样的公司也一样有挑战,但做的工作未必系统,而且同事的能力也不见得有保障。
怎么看技术人员话语权不高
一位朋友原先是做分布式数据库的,最近跳槽去了一家做无人车的公司,和他聊了一下,了解他的看法。做无人车和软件基础设施相比,最大的区别是做软件基础设施的技术人员,尤其是搞数据库开发的程序员,很多时候解决的是技术的门槛问题。我们认为数据库的一切问题归纳为本质上是“可用”的问题,对业务来说能扛住压力不丢数据不超时,并且各种功能都支持,这就是“可用”,至于在高并发情况下依然“可用”,那就是“高可用”。一旦把技术问题转化为“可用”的问题,就会让技术变成一个门槛,达不到的话业务受影响,达到后业务做得好或是坏,其实和技术的关系就不那么大了。这也是很多公司技术人员话语权不高的原因。
关于为什么去做高难度的技术
例如像 BAT、华为、小米这样的大公司,对软件基础设施的门槛要求还是比较高的,所以这个工作还是比较有技术含量的,尤其是比大多数实现业务逻辑、项目经理需求的工作有技术含量。就我前面提到的这位朋友的情况而言,无人车有更大的吸引力,因为它更难,难到我们并不确定什么时候才能真正做出来。表面上看它也是一个门槛—一个“可用”的无人驾驶技术,但因为难度足够大,所以有挑战性,必须不断地改善技术,做全球范围内还没有做出来的技术。搞数据库时处理的一些问题可能是其他公司已经解决的,并非“人类”都还没有解决的问题。很多时候需要和其他公司交流,互相借鉴经验,或者看看 Google 这样的领航者是怎么做的。
另外,这个世界的进步,尤其是科技进步一定是需要聪明人去推动的,聪明人集中的地方进步就会快。冷战的时候搞军备竞争、太空竞争,政府大规模投钱搞,自然聪明人集中从而发展迅速。
关于技术人员的上升通道
为什么说技术人员的上升通道局限比较大?曾经听移动的一位总经理说过,所有的高层管理者都需要一个抓手,也就是管理基点,他是不会放手这个基点的,例如运营、产品、业务逻辑,或是技术。PM 出生的管理者还是会继续考虑产品,运营出身的管理者还是要考虑运营,但技术出身的管理者到了一定级别不见得还要考虑技术,特别是技术细节。这样的人时间久了就做不回码农了,可能连一线的技术经理都做不了了。大公司高级别的码农就算不写代码至少知道最新技术的发展方向并且实际设计和运用加和人扯淡,出去还是能当个同级别架构师。小公司 CTO 很容易既不写代码又不了解大方向,出去只能找人接盘接着当 CTO,还可能被觉得没水平。
关于跟进最新技术的重要性
工作上一定要跟进最新技术的发展动向,某种程度上这和炒股差不多,看好业绩的话提前埋伏进场。比如若干年前刚有安卓 ios 的时候,很多人还在塞班上开发,但眼光好的第一时间就转行到了安卓、ios,因为先占了坑在最稀缺的时候抢占了先机,跟早毕业的道理一样,可能比你晚两年转行的人处处占了先机,差距越来越大。当然也有可能赌输了,例如 Windows 编程。
每一次业界的革命,都会让一些公司落寞而让另一些公司崛起,码农也一样,每一次技术换代也都会让一些码农没落而让另一些码农崛起。在技术换代面前,之前的工作经验不至于一文不值,但也大打折扣。另外,正因为技术不断换代,学的快的才比单纯年轻的有优势,如果技术完全停滞,干五年左右技术就不再成长,那么毕业五年后还当基层码农的失业风险就越来越大,这也是某通信大厂被传闻的所谓“35 岁裁员”的写实,听说 35 岁主要针对的就是这些基层码农,45 岁针对的是基层码农和技术一线管理者。不断地盼望着(如果能力够强也可以自己创造)新技术的出现,并且自己保持着不亚于年轻人的学习能力,自然就降低了高龄失业风险。
至于做管理,也是一种出路,因为在管理的经验积累上很难有天花板的说法,十年管理经验可能有很大一部分确实是后五年积累的,而不像写代码,但是也要考虑做管理和技术脱节的问题,得保证这个公司不要你了,你的管理经验是能用在其他公司的。作为技术管理者实际上也还是要掌握最先的技术并且能用于自身业务,比如你说你懂大数据、高并发访问的架构设计,但前公司的产品 TPS 只有几百,你觉得你的技术有实践过吗?只能强调自己管多少人的话,可能不是互联网公司技术出身管理者的出路。
✎ 写在最后
作为一名程序员,你需要保持三种感觉,饥饿感、疲劳感和孤独感,学习的目的是因为想要学习,学习的过程是很单调的,经常需要独自搜索网上的资料,独自前进,学习时间长了会很累。做技术的人容易仰望星空,但是仰望星空前需要做好脚踏实地,掌握好基础技术、动手能力强、三观正、具有较强的为人处事能力,这四点是一切可持续发展的基础。仅以此文献给在路上的我们三人,也纪念我们的青葱岁月,进入职业生涯的中期,我们仍需负重前行。
作者:周明耀 InfoQ
——————————————
小编细选了一些网友的评论,来看看无所不能的网友们选择当程序员的理由是什么:
@纳兰少:以前学医的,现在做了程序员,别人问我为什么。我总回答:学医救不了中国!
@不停换头像的zzm:我以为当了程序猿就能实现小时候成为一名大黑客的梦想
@耳火不耳:因为我家祖宗十八代都没出一个程序员,我要做第一个
@举个小栗子:因为穷
@党:看了很心寒,我不像作者这样科班出身,我到了三十才入的行,我没用过作者说的离散数学啥的,但是我从来没有放弃,一直在努力。
@Jay:以前做设计,程序员老是做不出我要的效果,后来我就自己研究然后做了,没想到越做越好,越来越深入。
@whatever:因为自由,给我一台电脑和网络就能养活自己
@盐:作为个单身狗∪・ω・∪,只适合编程
@A:是程序员选择了我,不是我选择了程序员
“我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐我专栏的C语言/C++编程爱好者的聚集地>>>C语言/C++进阶之路 - 专题 - !
欢迎初学和进阶中的小伙伴!工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”
喜欢小编的记得动动您的小指点个关注哟!