从小米辞职出来创业的两个多月里,通过猎头或自己投简历,先后面试了知乎,今日头条,豌豆荚,美团,百度,App Annie,去哪儿,滴滴打车等技术团队,一二面(技术面)几乎都轻松的过了,三面却没有毕业那会的干脆。

 

回想两年前刚毕业那会,去百度,创新工场,搜狗面试,一二三面全都一次通过,在面试完回家的路上就接到电话拿到了offer,去年加入小米亦是如此。

工作两年后,随着项目经验的积累,技术能力的沉淀,团队管理的成长,似乎反而更难拿到offer,有些迷惑,有些思考。

 

 

经过思考也深刻分析了原因,优点是知识面广,架构设计视野开阔,缺点是精专不足,基础知识不够非常扎实,跟自己的工作阅历有关,原因终在自己。

先介绍一个名词“全栈工程师”,这个词在国外(QuoraStackOverflow)和国内(知乎CSDN)知名论坛的讨论是比较火的,结论也是毁誉参半,详见我的个人博客:全栈工程师的毁与誉

 


全栈工程师(Full Stack Developer),又名全端工程师,指掌握多种技能,并能利用多种技能独立完成产品的人。简言之,他一个人可以做一个系统。

 

当年研究生毕业时,放弃了百度,搜狗的高薪offer,选择回到创新工场(注:研一暑假在百度实习半年,后来研二暑假去了创新工场实习,更多经历见CSDN专访),加入创业的潮流中,在一个初创的技术团队;去年又加入小米电视团队,也是一个初创技术团队。

初创的技术团队,优势是它有一个足够大的舞台,能够让你尽情施展自己的才能,发挥自己的技术,拓展事物视野;缺点是业务刚起步,你必须扛住压力,快速学习各种技术,迅速搭建业务原型并上线,核心是解决问题

 

在创业公司里,各种快速迭代的业务需求,强力驱使你必须快速的融入团队与技术,从Android应用,到Android游戏,到网页爬虫,到游戏后台,到AWS服务器,到后台接口API封装与优化,用到的技术也是从前端到App,从后台到测试自动化,用到的语言和工具有Java,Python,HTML/CSS/JS,JSP,HighChart,Shell,AWK,MySQL, Memcache, Redis, DynamoDB, MongoDB,Tomcat,Resin,Apache,Nginx,Tornado,又拍云,阿里云,AWS云服务等,犹如一个知识网络栈,一个人全搞定!

 

 

广而不精,往往会被认为功底不深厚(实事也可能是),比较难进TABLE(Tencent, Alibaba, Baidu, Xiaomi, 360)等大公司的核心技术部门。

 

由此,全栈工程师的地位就很尴尬,说得不好听一点,全栈工程师就是什么都会,什么都不会

 

他们的技术专长是能够根据不同业务特点和项目周期,合理权衡并选择相应的实现架构和工具,因为他们有着全局性的思维视野和业务经验;

但他们的弱点也很明显,例如在应聘面试的时候,就会很吃亏,在某一专业领域,他可能只会用来解决问题,但研究的不够深入,在遇到深入某一专业面试的时候可能会被提前直接淘汰。

 

全栈工程师,犹如一匹赤兔马,埋没于千军万马里,遇到赏识自己的伯乐,它将会成为一匹脱缰的战马,驰骋沙场,纵横千里,荡平千川万水,帮助主人成就一番丰功伟业。

 

面试,在基本技术能力和责任态度都靠谱的前提下,更多的是和面试官的一种缘份

 

鉴于此,在简历的项目经验和技术专长里,会特意去掉了一些自己熟悉并能用之解决问题的技术,项目经验也只写一两个具有代表性的作品,目的只有一个:尽力避免给面试官以为自己什么都会,什么都不会的印象。因为大公司的很多面试官,在潜意识里就只招技术专业精专的人才,哪怕在实际项目中用不着那么高深的专业能力,哪怕实际项目需要的是技术面广,更肯学习,更能解决问题的人。

 

全栈工程师与专家工程师,犹如一个是特战队员手里的瑞士军刀,一个是削铁如泥的干将莫邪

瑞士军刀负责单兵独入一个人清除掉项目前期的各种技术障碍,快速实现产品原型,验证产品的可行性;

干将莫邪就像项目底层技术的中流砥柱,稳健有力支撑强大的业务技术难点,但需要多柄干将莫邪剑融合才能显示出它的强大威力。

这两个技术方向都没有对与错,发展到一定程度都会相互溶合,就好比中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来。

 

 

全栈工程师不是全为了工作本身,而是为了方便实现自己的梦想。

工作对于他们来说不是负担,而是一种乐趣;工作已融入了他们的生活,犹如空气和水。

 

全栈工程师,是一群渴望上进、积极主动、务实肯干、想闯出一番天地的程序员

他们内心深处不安于已掌握的技术和安稳的工作,他们非常乐意并且会主动去学习一些新技术,新框架,业余时间还会自己动手实践一些小创意,寓学于乐。

工作,学习,技术,小创意,已经成为了他生活的一部分,不断主动的去学习,自然而然的就学会了多门技术,精通多种语言。

 

技术学无止境,广而不精,这个问题自己也很早就认识到了,也想了很多办法来弥补,例如花大量时间和精力写技术博客,记录自己学习到的点点滴滴,并把知识和技术转化成自己理解的语言;遇到解决不了的问题,会很自然的主动去官方下载源码下来学习;业余时间自己也动手实践,做一些小创意(建立博客音乐盒理财)或写一段工具源码托管在Github上(priorityqueue),来加深自己对技术理解。

 

在工作之余的周末假日,会宅在家里研究一些自己感兴趣的技术或产品,例如自学Clojure,Go,PHP语言;搭建WordPress博客Discuz论坛;创建微信公众帐号(ithomer),支付宝捐助;捣鼓GAE,AWS,BAE,SAE,Aliyun等各种云服务(对比);安装配置Tomcat,Resin,Apache,Lighttpd,Nginx,Tengine服务器;学习Hadoop,Storm,Lucene,SolrClould,ElasticSearch,Sphinx等工具;跨平台Thrift,Protobuf接口….(不会又是精而不专的“罪证”吧,^_^)

 

自认自己还不算一名真正的全栈工程师,它只是自己努力的方向,在通向全栈工程师的道路上,业余时间做的小产品,让我感到很快乐,有一种淡淡的成就感

 

在中科院,百度,创新工场,小米的学习和工作经历,不仅学会了分析解决问题,更学会了思考。

各种编程语言,系统架构,设计模式在我的脑海里,已经编织成了一张脉络清晰,相互交融的知识网。

当遇到问题,会立刻由点及面快速搜罗合理的解决方案,并快速实现项目原型;当遇到新技术,会发散联想已有的知识体系来对比学习,把它编织进自己的知识网络,最终提炼,磨合,打通经脉,做到融汇贯通,自成体系。

 

我追求的全栈工程师,是从全栈 —> 精专 —> 精专全栈的迂回辗转,回味甘甜的一条路。

路上,有苦亦有乐,也有说不出的难言与误解,更多的是自己学习奋斗的青春歌谣,自己是快乐着。

 

 

以前,软件工程师最在意的是成为某个领域的专家或者高手,例如中国第一代程序员王江民,鲍岳桥,求伯君等。

今天,随着软件技术的发展以及需求的变化,尤其是越来越多的程序员出来自己创业,由于各种条件限制,许多技术上的问题不得不亲力亲为地去完成,因此,很多程序员慢慢地就练就了精通多门技术的本领,有意或无意识之间便成了全栈工程师。

 

一个真正的Full Stack Engineer,他从生活中发现问题,洞察需求,并设计解决方案,开发出产品原型。为了达到目标,他愿意去学习任何领域的技能和知识。同时他不追求一个人完成所有工作,如果有人可以比他在某方面做得更出色,便会十分热情的邀请他们加入。

 

Full Stack Engineer的核心并非否定团队和协作,而是更多的体现在架构设计,快速原型,TroubleShooting等方面。随着今天的分层越来越清晰,平台和语言越来越有特点,更加全面的技术人员可以根据不同的语言搭建整个架构。

 

全栈工程师,在创业公司,大企业,小团队,都可以发挥出他独有的技术特长。这一特长在面试,刚进公司或许还体现不出来,甚至还会有负面的印象(不够精专),但一旦他熟悉了业务,跟进了团队的节奏,他体内的巨大能量将会源源不断的释放出来,对团队的贡献将会是两三个工程师工作量的总和还多。因为全栈工程师,具备了前端后台以及测试运维服务器等多专业知识,沟通成本几乎为零,他甚至可以在不寻求外力的条件下,独立完成整个项目的核心或全部(时间足够)。

 

工作,只是全栈工程师生活的一部分。

在工作中,由于种种条件限制,全栈工程师的能量很难全部释放出来。

 

全栈工程师,是孤独的,也是寂寞的,他们在寂寞中孤独。

一个真正的全栈工程师,目标只有一个:创业

 

 

2014.07.31 夜