从小米辞职出来创业的两个多月里,通过猎头或自己投简历,先后面试了知乎,今日头条,豌豆荚,美团,百度,App Annie,去哪儿,滴滴打车等技术团队,一二面(技术面)差点儿都轻松的过了,三面却没有毕业那会的干脆。
回忆两年前刚毕业那会,去百度,创新工场,搜狗面试,一二三面全都一次通过,在面试完回家的路上就接到电话拿到了offer,去年增加小米亦是如此。
工作两年后,随着项目经验的积累,技术能力的沉淀,团队管理的成长,似乎反而更难拿到offer,有些迷惑,有些思考。
序
经过思考也深刻分析了原因,长处是知识面广,架构设计视野开阔,缺点是精专不足,基础知识不够非常扎实,跟自己的工作阅历有关,原因终在自己。
先介绍一个名词“全栈project师”,这个词在国外(Quora,*)和国内(知乎,CSDN)知名论坛的讨论是比較火的,结论也是毁誉參半,详见我的个人博客:全栈project师的毁与誉
全栈project师(Full Stack Developer),又名全端project师,指掌握多种技能,并能利用多种技能独立完毕产品的人。简言之,他一个人能够做一个系统。
当年研究生毕业时,放弃了百度,搜狗的高薪offer,选择回到创新工场(注:研一暑假在百度实习半年,后来研二暑假去了创新工场实习,很多其它经历见CSDN专訪),增加创业的潮流中,在一个初创的技术团队;去年又增加小米电视团队,也是一个初创技术团队。
初创的技术团队,优势是它有一个足够大的舞台,能够让你尽情施展自己的才干,发挥自己的技术,拓展事物视野;缺点是业务刚起步,你必须扛住压力,高速学习各种技术,迅速搭建业务原型并上线,核心是解决这个问题。
在创业公司里,各种高速迭代的业务需求,强力驱使你必须高速的融入团队与技术,从Android应用,到Android游戏,到网页爬虫,到游戏后台,到AWSserver,到后台接口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)等大公司的核心技术部门。
由此,全栈project师的地位就非常尴尬,说得不好听一点,全栈project师就是什么都会,什么都不会。
他们的技术专长是能够依据不同业务特点和项目周期,合理权衡并选择对应的实现架构和工具,由于他们有着全局性的思维视野和业务经验;
但他们的弱点也非常明显,比如在应聘面试的时候,就会非常吃亏,在某一专业领域,他可能仅仅会用来解决这个问题,但研究的不够深入,在遇到深入某一专业面试的时候可能会被提前直接淘汰。
全栈project师,宛如一匹赤兔马,埋没于千军万马里,遇到赏识自己的伯乐,它将会成为一匹脱缰的战马,驰骋沙场,纵横千里,荡平千川万水,帮助主人成就一番丰功伟业。
面试,在基本技术能力和责任态度都靠谱的前提下,很多其它的是和面试官的一种缘份。
鉴于此,在简历的项目经验和技术专长里,会特意去掉了一些自己熟悉并能用之解决这个问题的技术,项目经验也仅仅写一两个具有代表性的作品,目的仅仅有一个:尽力避免给面试官以为自己什么都会,什么都不会的印象。由于大公司的非常多面试官,在潜意识里就仅仅招技术专业精专的人才,哪怕在实际项目中用不着那么高深的专业能力,哪怕实际项目须要的是技术面广,更肯学习,更能解决这个问题的人。
全栈project师与专家project师,宛如一个是特战队员手里的瑞士军刀,一个是削铁如泥的干将莫邪。
瑞士军刀负责单兵独入一个人清除掉项眼下期的各种技术障碍,高速实现产品原型,验证产品的可行性;
干将莫邪就像项目底层技术的中流砥柱,稳健有力支撑强大的业务技术难点,但须要多柄干将莫邪剑融合才干显示出它的强大威力。
这两个技术方向都没有对与错,发展到一定程度都会相互溶合,就好比中国佛家禅修的南顿北渐,事实上到了最后,渐悟与顿悟是一样的,顿由渐中来。
欢
全栈project师不是全为了工作本身,而是为了方便实现自己的梦想。
工作对于他们来说不是负担,而是一种乐趣;工作已融入了他们的生活,宛如空气和水。
全栈project师,是一群渴望上进、积极主动、务实肯干、想闯出一番天地的程序猿。
他们内心深处不安于已掌握的技术和安稳的工作,他们非常乐意而且会主动去学习一些新技术,新框架,业余时间还会自己动手实践一些小创意,寓学于乐。
工作,学习,技术,小创意,已经成为了他生活的一部分,不断主动的去学习,自然而然的就学会了多门技术,精通多种语言。
技术学无止境,广而不精,这个问题自己也非常早就认识到了,也想了非常多办法来弥补,比如花大量时间和精力写技术博客,记录自己学习到的点点滴滴,并把知识和技术转化成自己理解的语言;遇到解决不了的问题,会非常自然的主动去官方下载源代码下来学习;业余时间自己也动手实践,做一些小创意(建立博客,音乐盒,理財)或写一段工具源代码托管在Github上(priorityqueue),来加深自己对技术理解。
在工作之余的周末假日,会宅在家里研究一些自己感兴趣的技术或产品,比如自学Clojure,Go,PHP语言;搭建WordPress博客,Discuz论坛;创建微信公众帐号(ithomer),支付宝捐助;捣鼓GAE,AWS,BAE,SAE,Aliyun等各种云服务(对照);安装配置Tomcat,Resin,Apache,Lighttpd,Nginx,Tengineserver;学习Hadoop,Storm,Lucene,SolrClould,ElasticSearch,Sphinx等工具;跨平台Thrift,Protobuf接口….(不会又是精而不专的“罪证”吧,^_^)
自认自己还不算一名真正的全栈project师,它仅仅是自己努力的方向,在通向全栈project师的道路上,业余时间做的小产品,让我感到非常快乐,有一种淡淡的成就感。
在中科院,百度,创新工场,小米的学习和工作经历,不仅学会了分析解决这个问题,更学会了思考。
各种编程语言,系统架构,设计模式在我的脑海里,已经编织成了一张脉络清晰,相互交融的知识网。
当遇到问题,会立马由点及面高速搜罗合理的解决方式,并高速实现项目原型;当遇到新技术,会发散联想已有的知识体系来对照学习,把它编织进自己的知识网络,终于提炼,磨合,打通经脉,做到融汇贯通,自成体系。
我追求的全栈project师,是从全栈 —> 精专 —> 精专全栈的迂回辗转,回味甘甜的一条路。
路上,有苦亦有乐,也有说不出的难言与误解,很多其它的是自己学习奋斗的青春歌谣,自己是快乐着。
悟
曾经,软件project师最在意的是成为某个领域的专家或者高手,比如中国第一代程序猿王江民,鲍岳桥,求伯君等。
今天,随着软件技术的发展以及需求的变化,尤其是越来越多的程序猿出来自己创业,由于各种条件限制,很多技术上的问题不得不亲力亲为地去完毕,因此,非常多程序猿慢慢地就练就了精通多门技术的本领,有意或无意识之间便成了全栈project师。
一个真正的Full Stack Engineer,他从生活中发现问题,洞察需求,并设计解决方式,开发出产品原型。为了达到目标,他愿意去学习不论什么领域的技能和知识。同一时候他不追求一个人完毕所有工作,假设有人能够比他在某方面做得更出色,便会十分热情的邀请他们增加。
Full Stack Engineer的核心并不是否定团队和协作,而是很多其它的体如今架构设计,高速原型,TroubleShooting等方面。随着今天的分层越来越清晰,平台和语言越来越有特点,更加全面的技术人员能够依据不同的语言搭建整个架构。
全栈project师,在创业公司,大企业,小团队,都能够发挥出他独有的技术特长。这一特长在面试,刚进公司也许还体现不出来,甚至还会有负面的印象(不够精专),但一旦他熟悉了业务,跟进了团队的节奏,他体内的巨大能量将会源源不断的释放出来,对团队的贡献将会是两三个project师工作量的总和还多。由于全栈project师,具备了前端后台以及測试运维server等多专业知识,沟通成本差点儿为零,他甚至能够在不寻求外力的条件下,独立完毕整个项目的核心或所有(时间足够)。
工作,仅仅是全栈project师生活的一部分。
在工作中,由于种种条件限制,全栈project师的能量非常难所有释放出来。
全栈project师,是孤独的,也是寂寞的,他们在寂寞中孤独。
一个真正的全栈project师,目标仅仅有一个:创业。
2014.07.31 夜
摘自我的独立博客: 全栈project师的悲与欢
全栈project师的悲与欢的更多相关文章
-
全栈project师的毁与誉
全栈(Full Stack)project师.也能够叫全端project师,不管是前端知识,还是后端架构你都要了解.甚至有些调皮的程序猿这样理解全栈project师:全栈project师 = 屌丝战斗 ...
-
为什么未来是全栈project师的世界?
谨以此文献给每个为成为优秀全栈project师奋斗的人. 节选自<Growth: 全栈增长project师指南> 技术在过去的几十年里进步非常快,也将在未来的几十年里发展得更快. 今天技术 ...
-
全栈project师?给把瑞士军刀你去砍鬼子好不好!?
来自www.techgogogo.com 编者注:本文来自Medium前三名推荐文章,发文时已经获得高达2,125个推荐,中文版由天地会珠海分舵编译.全文对当今风靡业界的"全栈xx师&quo ...
-
全栈project师体能备战--知识面(1--10)
javascript 单例设计模式: 单例模式确保某个类仅仅有一个*,并且自行实例化并向整个系统提供这个实例.如:cocos2dx中的导演类.[样例]我有6哥美丽的老婆,他们的老公都 ...
-
全栈project师体能备战--知识面(10--20)
WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,能够翻译为Windows 通讯开发平台. 对于 WCF 的client ...
-
22期老男孩Ptython全栈架构师视频教程
老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...
-
添物零基础到大型全栈架构师 Java实战及解析(实战篇)- 概述
实战篇是在基础之上,进一步提升的内容.通过实战篇可以深入理解Java相关框架和库的使用,能够独立开发小模块,或者按照架构师的指导进行代码编写和完善. 主要讲解核心框架和库的使用和使用场景介绍.通过 ...
-
Kubernetes全栈架构师(基本概念)--学习笔记
目录 为什么要用Kubernetes? K8s控制节点-Master概念 K8s计算节点-Node概念 什么是Pod? 为什么要引入Pod? 创建一个Pod 零宕机发布应用必备知识:Pod三种探针 零 ...
-
web全栈架构师[笔记] — 03 html5新特性
HTML5新特性 一.geolocation PC端 精度比较低 通过IP库定位 移动端 通过GPS window.navigator.geolocation 单次 getCurrentPositio ...
随机推荐
-
关于Python中的文件操作(转)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
-
创建寄宿在Windows服务中的WCF服务
1.创建Windows服务项目 2.Server1改名为你想要的名称,比如WinServer 3.在项目中新建一个WCF文件夹,用于存放wcf服务文件. 注:在WcfServer类的上面还要添加 [S ...
-
为什么.NET感觉上比Java差一点
其实,我本人很喜欢.NET技术.工作经历中,大部分时间也在使用.NET开发. 这几年,由于工作的原因,开始进入Java+Linux世界. 今年,开始学习Python和Scala. 使用.NET时,有种 ...
-
php几个不起眼儿的小技巧
说是不起眼儿的小技巧,其实应该说是不常用的常规应用吧.很多事情就是这样,知道是一马事儿,会用是一马事儿,精习又是另外一马事儿.而成为高手更是需要扎实的基本功. str_repeat 重复输出字符串就靠 ...
-
记一次使用快速幂与Miller-Rabin的大素数生成算法
大家都知道RSA的加密的安全性就是能够找到一个合适的大素数,而现在判断大素数的办法有许多,比如Fermat素性测试或者Miller-Rabin素性测试,而这里我用了Miller-Rabin素性测试的算 ...
-
使用微软URLRewriter.dll的url实现任意后缀名重写
<?xml version="1.0"?> <!--先引用URLRewriter.dll,放置于Bin目录--> <configuration> ...
-
SQLite异常 qAdmin: Cannot perform this operation on a closed dataset.【申明:来源于网络】
SQLite异常 qAdmin: Cannot perform this operation on a closed dataset. 当使用 SQLite administrator,打开SQLit ...
-
php之swoole安装与基本使用
扩展安装: 参考GitHub地址 安装: 1. 使用PHP官方的PECL工具安装 (初学者) pecl install swoole 2. 从源码编译安装 (推荐) git clone https:/ ...
-
第四周Java作业
老师说让用二维数组找最大,也就是最大和块,要求必须挨着,我其实不会写这个程序,所以我只能把自己的思路写出来 我觉得可以大问题缩小,我的思路是先把四个数一个正方形来进行计算,然后六个数矩形,把他化成两个 ...
-
在用单片机接受串口数据的时候,第一位是0x0A
unsigned char data len=0; //命令字符串长度if(RI) //如果数据已经接收完,即RI=1{ RI=0; //对RI进行清零 cmd_buf[counter] = SBUF ...