程序员和程序员之间是如何拉开差距的呢?
1.哪有永远的“我比你强”,只是你不肯升级记忆
同龄的王健被分配带应届生陈远,王健一开始给陈远定位为“什么都不知道的新人”,需要自己手把手地教导。王健偶尔和其它人吐槽道,陈远还研究生呢,某个简单问题都不清楚!言语间,为已有的几年工作经验而自我感觉良好。
陈远每天早上提前一个小时到公司看会书,周末也来公司呆着,学些平常在工作里学不到的技术。王健只觉得他是“闲的”,“在做无用功”,平常工作还不是得向自己汇报。
一年多后,陈远薪资翻倍跳槽去BAT。刚开始听到这消息,王健心想“凭什么”,在他印象里陈远一直是“新人”、“什么都不懂的”、“比不上自己的”。可现在,王健需找陈远推荐简历了。
哪有永远的“我比你强”,只不过是你待在舒适的小井里得意自鸣,思维凝固不前,无视他人的缓慢进化罢了。
2.同龄人毕业五年差距明显,而同事,共事一个月便分高低
小权和于平同期入职,两人刚开始接手项目时一样的“坑人”,可没多久大家发现小权明显比于平优秀。
小权为人靠谱,写代码细心,注重总结。经手的项目分门别类地写笔记,涉及的接口、踩过的坑、用到的配置、学到的知识……有些项目上线一段时间后,再和他讨论里头的一个细节问题时,他能快速地查找笔记,给出答案。
于平为人粗心大意,不主动承担问题,喜欢找各种理由推卸责任。他是“惯犯”,经常会写同类型的bug,每次还抱怨说,产品文档没写清楚,前端同事那么跟我沟通的,导致我理解错误……
在后来晋升答辩时,小权顺利晋升,于平则抱怨有黑幕,否则和小权一起入职的自己怎么就没通过。
职场中,确实有“黑幕”隐藏在你每一个不严谨的bug中,在你每次的工作态度里,在每个工作细节中。
同一年毕业的同学,在五年后可以看出之间的差距:有人追赶风口,成为技术总监,年薪超百万;有人稳步向前,成为部门经理;有人调头改跑道,追求自由灵活的工作和生活方式;还有人浑浑噩噩地过日子,找不到方向……
职场生涯是个巨大的项目,而每个阶段都是一个子项目生命周期。
在进入下个阶段时,需要找到按照启动、计划、执行、监控和收尾来完成迭代和增量修补。有的人增量体现在肚腩皱纹和年龄上,有的人的增量体现于知识、技能和才干。
3.朝夕共处的同事抛弃你时,可没空和你说再见
张泉灵说时代抛弃你时,连一声再见都不会说。
而你的同事才没空抛弃你,他们忙着追求自己的理想,他们忙着奔跑,他们忙着跳槽加薪,他们忙着自我提升,他们忙着学习.
程序员最核心的竞争力——「学习力」
如果有人问我:你在面试程序员时,最看中的是什么能力?那我的答案一定是:学习力。
互联网时代的技术来得快,去得更快。就像Flash这样曾经雄霸天下多年的技术,都有被人人唾弃的一天。如果没有足够强的学习能力,就无法跟上变化,被淘汰只是迟早的事。想想看,你苦心钻研多年引以为傲的技术,一夜之间就没有用武之地了,难免会有一种「身体被掏空」的感觉。
学习力强的程序员敢大胆地体验尝试新技术,他们的技术栈始终在保持不断地更新。他们能快速把握事物的本质,并判断出它能用来做什么,不能用来做什么。他们拥抱技术升级和革命,因为他们学习并掌握新技术的速度比其他人更快,所以他们永远不用担心失业。事实上,他们掌握的是「驾驶」和「学习驾驶」的技术,而不是「驾驶XX牌汽车」的技术。
而学习力差的程序员呢?为了继续停留在旧技术的舒适区,他们往往会抵制新技术的推广,甚至百般阻挠。因为那会使他们过去的经验统统无效,只能和后来者站在同一起跑线上。抱死一个框架好几年,脱离了框架啥都干不了的程序员实在太多了。事实上,这样的人不能驾驭技术,反而是被技术给奴役了。
同样是自行车,为什么山地车比公路车更普及更流行?除了皮实耐用价格低外,主要是因为它的通过性好,什么泥地沙地都不在话下,上下马路牙子跟玩一样。而公路车呢?只能老老实实地跑在平路上。
公司不是学校
面对这些因为「想学点技术」而换工作的求职者,评价他们「不思进取」貌似不太合适。但显然他们的思维模式还是被学校洗脑的那一套,没能真正地融入社会。也许他们认为,学习就是要由老师手把手带着,而自己之所以学不到技术,就是因为没遇到一个好leader,能替自己设计好成长路线,指出所有重难点,提供各种参考资料……
在中国传统文化里,不管是匠人还是武师,收徒都要找毫无根基的幼童。这一方面是为了保持师父的绝对权威,方便贯彻落实教学;另一方面是为了尽量延长学徒期,以考察徒弟的品性。拜师之后,徒弟便跟随师父一起生活,经过数年的言传身教,这才得以出师。
师父收徒的核心诉求,是「传承」自己的技艺和名声,希望徒弟日后能做出一番成就来光耀师门。这就要求徒弟流动性低、忠诚度高、归属感强。与其说是收徒,还不如说是在挑儿子,所以有句俗话叫作「一日为师,终身为父」。
然而公司是盈利性的商业组织,不是学校,更不是新手训练营。公司招聘员工的核心诉求,是生产出实实在在、对得起薪水的价值,而不是传承技艺。公司希望员工入职前就具备工作的能力,至少在经过短暂的培训和指导后就能独立开展工作,正所谓「能干就干,干不了走人」。
一般情况下,为了使新人尽快进入工作状态,公司会安排一位老员工来做一段时间的导师。但导师只有为你解惑的义务,却没有教你技术的责任。因为导师自己手里还有做不完的工作,带新人又没什么利益可图,凭什么为你提供私人教练级的服务?能有耐心听完你的问题,指点一下方向,就已经很不错了。
学习是自己的事,没有人能替你去做。这就跟吃饭一样,谁真的关心你吃没吃、饱没饱?就算你的亲人再怎么关心你,也不能替你去吃。我们都知道,人不吃饭肯定是要饿死的,那你为什么不去给自己找吃的,却在埋怨没有人给你嘴里喂食呢?
程序员该怎么学习技术?
学习技术最有效的方式是阅读、实践和交流。公司没给你安排这方面的工作,那你自己都做了些什么呢?八小时之外的时间都用在哪了?有没有读源码?有没有看原版书?有没有泡技术社区?有没有尝试最新流行的技术?有没有尝试把它们用在公司的项目上?有没有主动去接触行业里使用这些技术的团队和大牛?
「看文档」其实是最快的学习方法。对于自己工作中常用到的技术,抽时间把官方文档通读一遍(其实篇幅都不大),绝对收获满满。没事的时候多翻翻自己使用的框架/系统/平台的API,看看有哪些自己不知道或者没用过的功能,想想这个功能可以用来做什么,能不能解决现存的问题,或者优化当下的解决方案。
如果你是前端工程师,通读HTTP协议和ECMAScript标准,就能秒杀95%的同行,不开玩笑。
「读源码」是深入学习开源技术的唯一途径。只有理解了某个功能在底层是如何实现的,你才能真正把握它更适合用来做什么,不能用来做什么。正如不明白汽车的构造和原理,我们也能把车开好。而如果多少知道一点,开起来就会更得心应手。当车出现问题时,也不至于完全束手无策,只能蹲在路边等待救援。
你一个框架用了N年了,却连一行源码都没读过?如果它是你女朋友,估计早该分手了。
「折腾」是学习任何技术的必经之路。在有保护的环境下进行大量的试错,是最高效的学习方法。现在虚拟机技术已经那么成熟,VPS也很便宜,你为什么不分分钟弄一个,然后在上面花式作死呢?
听说过无数次rm -rf /的事故,可你居然一次都没试过?知道输出啥样子么?
公司给你提供的最有价值的东西,就是实战的机会。你所学习的技术,最终需要通过工作来变现。你有机会接触到真实的数据,了解真实的用户,观察真实系统是怎样运转的,积累真实的经验……
然而,所谓的机会,只属于已经提前准备好的人。不要等到工作都安排到你身上了再去学习。公司不是你的试验田,你也不该拿用户当小白鼠。公司不给你机会,那只说明你还没有准备好。
记住,学习是一辈子的事。