从前我对计算机技术心怀畏惧,认定技术高人必定有佛光笼罩,昼夜不息运键如飞日吐代码上万行。如今也算见过一些世面了,回首那段忐忑不安宛如初夜的过程,我却不发觉有任何的励志意味,而是视为一种理所固然。理想的程序员,和理想的建筑师、理想的财务师、理想的按摩师没有任何的差异,他们本质上都是一群手艺人。我相信理想的程序员人人皆可成为。
近三年总在互联网圈厮混,我认识过一些程序员,共事过一些程序员,领导过一些程序员,又面试过一些程序员。他们学历不一样,有的来自北大,有的来自北大青鸟,有的是博士,有的是高中肄业;资历也不一样,有的来自BAT,有的来自某破产基金公司(仍是一个销售);年限也从0到15年不等。但我认为程序员只需分三类:天才的程序员、理想的程序员、平庸的程序员。天才的程序员我只敢说接触过3个,这是天命。7分由你是颗精子的时候就已决定,拥有绝佳的数学天赋、冷静致密的逻辑、为解决难题宁愿不眠不休而深觉得乐的技术热情;3分来自起步要早早早,巴不得同龄人玩泥巴的时候就得开始玩电脑,大学毕业前就突破一万小时法则,后面的已经是游戏人生。
天才的程序员可遇不可求,更不能长有,我看到的90%还是平庸的程序员。IT时代的膨胀,已让程序员如同文艺复兴时的印刷匠同样的普通,多数投入祖师爷门下的人,仅是为了更大的饭碗,更高的待遇,更好的生计。平庸的程序员编写腐烂的代码,没有规范和一致性,固守旧世界的语言,还好谈论大的架构和性能,说的比作的漂亮。而毫无例外的,他们认定技术没有出路,作产品、营销和管理的是更高大上的手艺,而他们当中的99%,又会天然的流露出本身恰巧具有了那方面的天赋,至于进程为何会崩溃这样的小问题是不屑于去了解的。
而我最喜欢和理想的程序员相处,巴不得与他们同吃同住,若是容许,我但愿个人队伍能插满他们的旗帜。理想的程序员心眼儿不坏(他们历来都不是办公室政治的宠儿,是一群单纯明亮快乐的手艺人),有天真烂漫的好奇心(他们的眼睛里常常闪着「哇,这个是怎么作到的!」),永远精益求精(他们的口头禅是「我再研究一下」),还乐于分享(他们活跃于GitHub、各大问答社区和你的身边,舍得将宝贵时间用于帮助新手)。是的,他们不须要被管理,只须要给一个大的方向,总能回报以意想不到的结果。
理想的程序员与平庸的程序员只有一墙之隔。二者的差距只有6个一点点,而人与人的差距,正是在这日积月累的一点点中,被永远拉开了。有意思的是,我发现这6个一点点都和意识有关,也就是程序员和其余一切新兴产业的工种同样,只须要意识加上时间的锤炼,人人皆可达到理想的阶段。理想的程序员必然也是一个优秀的 problem-solver。
第1个一点点:专一眼下
见过太多心神不定的程序员,我不得不把「专一眼下」做为天字第一条。他们每每有各式各样的小梦想,好比作个小茶农、作个小鹅贩、作产品、作销售、作投资,却被程序员的高薪或是没有转行的魄力「耽误」了,而由于不专一,他们不在乎作好本身的本分,不在乎锤炼本身的技能,不在乎学习新兴的技术。不能否认,这世界上存在着伟大的产品(像乔老爷)、伟大的销售(像埃里森)、伟大的投资客(像彼得菲),而他们毫无例外都是程序员出身。可你据说过巴菲特评价盖茨的话么,比尔盖茨若是转行去卖狗,那他必定是全世界最大的狗贩。我坚信除了少数的天才外,冥冥众生都可以在多个领域取得成功,只要保持足够的专一。而哪怕你下一年就想卖狗去,程序员的经验仍然能训练你强大的逻辑、谨慎和耐心,放在哪一个行业都是至关可观的竞争力。
第2个一点点:思考力与推进力
我认为处理bug、崩溃、调优、入侵等突发事件比编程自己更能体现平庸程序员与理想程序员的差距。当面对一个未知的问题时,如何定位复杂条件下的核心问题、如何抽丝剥茧地分析问题的潜在缘由、如何排除干扰还原一个最小的可验证场景、如何抓住关键数据验证本身的猜想与实验,都是体现程序员思考力的最好场景。是的,在衡量理想程序员的标准上,思考力比经验更加剧要。
程序员
有时候小伙伴跑过来,问我「提交了一个任务被卡住了,怎么办」的时候,我总以为他能够作得更好。好比,能够检查试验别的任务,以排除代码自身的缘由;能够经过Web UI检查异常(若是没有帐号,可让我提供);能够排查主机日志或删除缓存,再不济,总应该提供任务ID和控制台日志给我。理想的程序员永远不会等事情前进,他们会用尽一切方法让事情前进。面试
一句「技术上没法实现」是容易出口,可有多少人在说出这句话的时候,内心是100%确定的?若是不愿定,为何不能回去谷歌一下再回答?本来我觉得程序员是充满想象力,在由于有想象力,才能诞生那么多改变咱们生活的软件和互联网产品。见识多了,才了解大部分程序员已经在与bug的对抗中变得保守而不肯担当风险,与此同时许多团队也不肯意宽容失败。因而「Say No」变成一种习惯性的抵触,还记得曾国藩为何解散湘军么?他说那支军队已「暮气渐深」,不能打仗了。要作理想的程序员,就不能给本身滋生暮气的机会,若是面对不合理的需求,能够把时间成本摆出来,把曲线救国方案亮出来,简单粗暴「Say No」是不可取的。编程
第5个一点点:善用工具api
善用工具能够分为4个层面:说了这么多,想必有人会问,费劲心思成为一个理想的程序员,又有什么用处?会有高薪吗?不。能升职吗?也不见得。迎娶白富美呢?不如去卖狗。缓存
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------数据结构