1、引言
我,Scott,一家创业公司的 CTO。
从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前端工程师和Nodejs工程师,对于前端发展的这个职业算是有些感触吧,打算陆续写一些从业经验也好,技术分享也好,对自己前6年的经历做一些文字上的沉淀。
此篇文章谨献给工作0 ~ 3年的前端工程师,内容都是我的亲身经历,不精彩但接地气。
(本文同步发布于:http://www.52im.net/thread-24...)
2、关于作者
Scott:Web前端攻城师88年狮子男,前端攻城4年,以Coding为生,以Coding为乐,爱足球,喜做饭。2010年就职于阿里妈妈用户体验中心-MUX,专注于淘宝单品外投,研究创(Guang)意(Gao)效果,加载方案优化,略有心得。
大家如果去上 Youku, 微博,各种电影小说新闻媒体网站,应该会有印象曾看过这样满屏滚来滚去的淘宝豆腐块广告。
哈哈,很不好意思,2014 年以前,你在全网看到的差不多有 70% 的淘宝豆腐块广告都是我做的,你在淘宝搜了鲜花啊,内裤啊,硬盘啊,种子啊,再去访问其他网站,都能看到豆腐块里的类似商品,当时我的工作就是开发这些模板的样式,优化这些模板的特效,测试在各种终端设备上的兼容性,数据方面需要跟各种算法引擎团队约定各种异步数据格式,业务上需要考虑复杂的参数加密解密二跳透传,Cookie 的读取定向等等来落地不同推广场景下的异步交互方案,最终基于各种广告系统接入和投放到目标网站。
3、故事背景
我2010年毕业于一所普通211大学,电气学院自动化专业,了解这个专业的大概知道自动化是弱电方向,就业高不成低不就,不读研仅靠本科的技术积累很难进入好单位,而我又是那种一进大学就迷失自我的 “逃课生”,四年逃课挂科无数,不仅荒废了专业,也虚度了青春,彼时年少而又轻狂,骄傲却不知路在何方,唯一的收获是大一便早早的搞定了老婆,恋爱8年后领了证,认识到现在已经整整10年,所以说码农恋爱要趁早啊。
以上是典型的屌丝工科男背景介绍。。。。。。
4、入行以前
4.1 贵人点拨改换行业
初到杭州,得知我有一个学霸级的高中女同学在杭州淘宝的广告部门实习,就在实习间隙登门拜访,学习求经。
见到高中女同学的同时,也结识了她学霸级的男朋友,跟她都同在淘宝,是一名资深的Java 工程师,他俩知道我对互联网很感兴趣后,便向我口述了淘宝种种开放的职场氛围,有趣的江湖文化,每天发生的每一个故事都深深打动了我,激发起了我对于互联网的兴趣和想要进入淘宝的动力。
后面两位开始给我出谋划策,鼓励我从事编程方向,比如 Java 编程,可以从自学开始。其实,早在2009年,就有朋友建议我从事前端开发方向,并且帮我选了月影的《Javascript 王者归来》这本大厚书,但是因为不够了解加上没有兴趣支撑,一直放角落里风干积灰,直到如今我也没看完。
4.2 初学 Java 编程
当时对于 HTML,CSS,Javascript,我其实一无所知,于是决定学习Java,6 月份毕业后在杭州租了个小房间,每天啃杭州图书馆的Java书籍,同时在网上看马士兵老师的 Java 视频教程,陆续跟下来一个小聊天室和仿QQ通讯的小软件,但也只是照葫芦画瓢,并没有吃透技术点,心急如焚!加上这两个月窘迫到口袋里只剩下几十块钱,开始每天只吃一顿挂面,也是在这个时期留下了胃溃疡等一堆胃病,快撑不下去了,找工作就势在必行了。
4.3 寻找 Java 岗工作
从 8 月中旬开始逼自己投简历找 Java 工程师的工作,面过的2家公司都发了offer,但薪资都是1500,不仅是学徒工,更要签4年合同且不许毁约,想想有些后怕就跑去找之前提到的学霸女同学求建议,她男朋友建议我可以先考虑试试前端这个岗位,上手快并且我活泼的性格更适合设计相关的工作,回头想想,人生有时候不仅需要运气,更需要贵人点拨,于是当天下午回到住处便开始了为期 2 周的废寝忘食背书模式。
4.4 放弃 Java 投奔前端
所谓背书模式,其实就是把能搜到的前端知识都手抄到纸上,然后开始背诵,一天到晚脑海中不停的像放电影一样,熟记块状元素和行内元素的区别、绝对定位和相对定位的区别、jQuery二级下拉菜单的 Javascript 插件代码实现。。。甚至背下了DOCTYPE、几种文档声明的写法,陈年小抄中,还能隐约看到垂直居中几个字:
如果说前面的两个月是信心百倍,有的放矢的充电Java,那么这两周就是完全是饥不择食,慌不择路的学习前端,在快要被房东赶出去的时候,再次逼自己开始又一轮的找工作。
5、面试上岗
5.1 面试前端岗位
精心准备了什么都精通的简历,也是第一份前端简历,投给了口碑网(淘宝当时内部新成立的项目)来练手,结果面试官电话里第一个问题就把我问懵逼了:
你知道IE6的双边距怎么解决么?
我嘞个大擦!这是什么鬼?!我听都没听过!!!
此时的我,根本不了解原来浏览器竟然有兼容性问题!也根本不知道前端开发是需要对 IE6 的样式和行为写 Hack 脚本进行兼容的(包括 IE7 和 IE8)!
再往后面又问到不同文档类型下的盒模型…,我就像是一个傻子一样,在电话这头大气都不敢出一个,真心想找地缝儿钻进去,气氛尴尬的要死。
面试官看出我啥也不会,便心平气和的给我普及了一下前端开发需要关注的知识点,不出意外的礼貌拒绝了我。
5.2 掉头重新学习前端
那次面试之后,我的信心受到了巨大打击,也发现了自己和一个哪怕是及格的前端开发工程师,相差的距离是如此的遥远,梦想看着就在眼前,而你臂展不够,各种不好的心理暗示开始浮上心头:
淘宝肯定进不去了…
杭州我白来一趟了…
工作肯定找不到了…
爸妈没法骗下去了…
此时已是 9 月出头,我亲爱的同学们都已经转正上岗,而我还在原地踟蹰。我只能安慰自己:你是 0 编程基础的新人(大学计算机都是挂的,对于挂计算机课还是略后悔的),不要拿自己和别人比较,这个阶段是正常的,挺过去就好了!
于是我努力回忆面试官的问题,重点突击 IE 兼容性问题,办法依然是背,感谢上苍赋予了我强大的临时抱佛脚能力,从小学到大学,都是以临考突击的方式应对,短期记忆量可以很大,但说忘就忘的一干二净,幸好有面试官的耐心提点,我才有的放矢,后来面试官我们私底下成为了很好的朋友。这一次背书只经历了3天3夜,对的,不眠不休的记忆,我便又开始新一轮的求职经历。
5.3 第三次求职面试
这一次花了一下午做简历,只投给了两家小公司,其中一家 HR 效率极高,几个小时候后便电话联系面试。去了后做了一套笔试卷子,我就和公司老总在办公室聊起来了,没想到越聊越嗨,为什么呢,因为我俩聊的是足球,我大学一直是院队主力左后卫,踢了四年校联赛,于是跟这个老总在足球这个话题上开始投机。
有时人生真是捉摸不定的曲折离奇啊,第二天中午我便拿到了这家公司的offer,但offer的内容是:
把你外派到淘宝当外包,你愿意不愿意?工资会比较低。
当下才知道这家公司是外包公司,思前想后,决定还是接受这个offer,即便薪资低的可怜,勉强够交房租。
不过这只是第一关,还需要到淘宝去参加第二轮面试,被淘宝面试选中才能最终获得外派资格,于是屁颠屁颠跑到华星科技面试,开始依然是做了一套笔试题,面试官看完我答的卷子后是这样跟我讲的: 果然是刚毕业的学生,卷子填的满满的,但是题目全部做错了,又问了我 apply 和 call 的区别,我自然是不会的,甚至连上下文都搞不清楚是啥意思,只知道它俩传参的区别,于是面试官问我其他方面的,比如为啥从事这个职业之类的,我拼尽全力声情并茂讲述我的求职渴望,这也是我唯一可以讲的东西了。
走出华星科技大厦,心情是灰色的,感觉就要和淘宝真正的say byebye了,背的知识点遇到资深的面试官随便一挖,我便原形毕露伪装失败,越想越伤心,此时竟然雷声大作瓢泼大雨没头没脑哗啦啦的下起来了,我把档案塑料袋顶在头上,默默的往家走,躲雨的心情都没有,脑海中一片空白,雨越下越大,迷住了前面的道路,迷住了我的视线…
5.4 雨过天晴
人生是如此的曲折离奇,第二天便接到通知,淘宝竟然要我了!于是跑到外包公司签了就业合同便去淘宝报道了,此时是 2010年9月6号,到了淘宝才意外发现,我竟然跟之前的学霸女同学在同一个大部门 - 淘宝广告事业部,人生处处是惊喜,一言不合就相遇。
自此我开始了4年的前端工程师之旅。
自知才疏学浅,我进入部门后,也是尽量的谦虚做人,不懂就问,跟同事好好相处,同事帮我解决了一个问题,我就基于这个问题,晚上到家后,根据他的解决思路,把所有相关的知识点,全部在百度搜一遍(那时候还不会科学上网),如此坚持了一年,这第一年技术也成长迅速,在外包公司的工程师队伍里已经是走在最前列了,虽然外包公司也是给出较大幅度的涨薪,但是跟阿里正式的前端工程师待遇依然不可同日而语。
于是我就欢天喜地的转正成为淘宝正式员工,但和外包公司老总依然成为了很好的朋友,同时也组建了这家公司成立以来的第一支球队,作为队长我带领外包公司的球队在杭州城参加各种比赛,虽然胜负参半也没拿到太好的成绩,但是跟这一波外包公司的队员一起风吹日晒, 建立了珍贵的革命友情,后来随着转正淘宝正式员工并且加入了淘宝的球队之后,跟老球队一起踢球的次数越来越少了…
6、职业沉淀
6.1 4年阿里前端生涯
铺垫了那么多转行求职历程,其实只是为了说明,我是非常普通的一个人,跟所有的求职者经历不同但起点类似,有提心吊胆,有惊喜连连,有彷徨失落,有坚决果敢…,但选择了前端开发,无论它是不是不归路,都是我自认为的一条很适合自己的路,认识到这一点,就要铁了心走下去。
在阿里的四年,最大的收获是见识到了什么是大牛。在公众视野中不少活跃的各种圈内牛人红人(包括我自己,有些新人认为我很牛),接触下来其实根本比不上大公司里那些低调做事的大牛,他们做人做事,对自己的定位、要求和产出,总是能让我意识到自己的种种不足——不够谦虚不够努力。如果说这是榜样的力量,ok,那我承认与优秀的人共事总是十分难忘的经历,而我自己作为一个普通的工程师,自认够努力,但还远不够优秀,也许是天分不足,也许是尘世扰心,我的职业瓶颈还是早早出现,而要迈过去需要更长时间。
在工作2年左右,我发现自己在技术深度上很难有专业造诣的时候,我开始把眼光放的更长远,我不再把自己仅仅定位成一个前端工程师,而是会开始关心互联网的发展趋势与整体格局,关心产品从0到1诞生过程中的盈利模式,关心在产品迭代中工程师与运营多方参与的角度和结合的效率,关心工作流程和团队文化,这一切其实都是我潜意识不自觉的关注,是一种不安分,过后很久才逐渐意识到自己早就在默默铺路,有时候一个选择早就做了,只是你还未意识到。
那么对于技术这个领域,我也开始去关注更多非前端的生态,从 Linux 生产环境配置部署到域名解析,到软文策略和 SEO 推广,从移动端、 PC 端的前端分离和架构,去折腾 PHP 的 Wordpress,Codeigniter…,折腾 Ruby on Rails,直到接触到 Nodejs,尝试借助 Nodejs 拉上 Mongodb 做数据接口,和模板输出的工作,从数据库的安装到主从灾备,不求精通只求通,下班的无数的晚上和周末,在屏幕前消耗青春,通过乱七八糟的折腾这一系列有的没的。
我逐渐意识到自己可以创造的价值不再是仅仅前端页面的输出,这个价值不单单是指可以一己之力搭建一个完整的网站,而是有了前后的动手经验,能从更高的一个层次上去把握一个项目以什么样的形式去设计,以什么样的思路去迭代会更加的省时省力,这个省时省力其实能更好的促成产品,拿到商业目标,而有了这个意识,就能更好的配合产品经理实现他脑海中的想法,如果你认为是不切实际海阔天空的想法,没关系,来小成本验证一下,验证之后说不定就真的是海阔天空,也是这种想法促使我业余时间结交了许许多多的朋友,以兼职的方式参与了至少 3 个小创业项目,自己的技术面和技术深度也得到了很大的拓展。
6.2 发掘自己的更大价值
当聚焦的点不再单单是前端开发的时候,我发现了更多的乐趣和更多的可能性,从前,我会花好几天反复测试一个广告投放模板,对于里面的一个模块加载器或者特效组件如何去设计才能最小化体积,减少展示延迟,最大化优化动画流畅度,针对移动端的广告投放用哪些效果兼容性最好最省电这些细碎的点占据着我工作的大部分时间,必须承认,解决这些技术点是很有成就感的。
但是技术的革新速度实在太快了,昨天还在纠结的几 K 大小带来的网络延迟、代码执行效率带来的性能消耗,今天突然在百兆宽带甚至是 4G 大水管高规格硬件时代变得不那么敏感了,昨天还是小心翼翼使用 radius 圆角图片两套并存的兼容方案,今天 CSS3 属性放开随便用,这些当然是我们需要不断更新的知识栈。
但仔细想来,让我花费数倍的时间去研究底层的优化细节,跟实现我的个人价值放到一起的时候,是不是最佳的途径呢?很多类似的技术问题,我可能需要花费 2 天,而天分好的同事,只需要花费 1 天甚至更少,从这一点上,我越来越不认可自己的技术方向和优势。
于是我摘掉带有职业界限的眼镜去看待彼此的分工,带着合作共赢的心态去接触更多的领域,包括前面我提到的小创业团队,他们都没有能够生存下来,有的是因为技术原因,而有的是因为资源问题,参与这些项目也给了我更多的感触,让我逐渐明白想要做好一件事情,是要先定位实现的程度也就是预期目标,这个不同时期的目标完全取决于不同时期的资源配置,平衡追求这个性价比才是做事的关键,说白了,就是知道什么可为不可为,外加一些方法论。
7、创业萌芽
7.1 职业波动期
在阿里工作的第 3 年节点上,我萌生了创业的想法,但并没有机会也没有胆量迈出这一步,并且就在这个第三年中,我在阿里迎来了职业生涯中最心旷神怡的几个月,被分配到了技术非常优秀的主管,也开始参与更有挑战性的项目,个人技术成长越来越快,无论是前端开发能力,还是后端开发能力,然而好光景持续了仅仅几个月,便被分派去支持双 11、双 12 推广会场。
在阿里这种变化是常态,业务支持永远是第一位的,因为客户永远是第一位的,所以抽调出来支持一个活动是很正常的,我起初也是很平静的参与这个项目,然而这个活动的历程却充满了心酸,耗尽了我的耐心。
成长受阻,陷于无序的需求算是一个促使我做出离职创业的导火索吧,另外一个重要原因则是遵从内心的创业冲动,后文会写到。
关于这个项目呢,原本是提前了 2 个月筹备这个活动,从后端数据到前端和运营,全部到位了,虽然前端在里面扮演的角色很关键,但技术难度却并不高,工作量也不大,就是把页面过来时候带的参数,按照规则梳理一下,发一些请求到后端,拿到加密值然后重新替换到页面里的所有 a 标签 href 中,也就是刷页面参数,然后把这套代码抽象成组件,集成到一个大系统里面,根据不同的会场类型加载不同的刷参逻辑。
原本是 3 周做完的项目,用了整整 7 周的时间才最终落定下来,主要原因是产品经理更换了 3 个,需求方大 Boss 介入了好几次,项目经理风险意识不够导致工作不断重做,解释成本也因此居高不下。
每一次联调出问题,都先会把责任全部抛过来丢给前端,也就是我,然后每一次我都要反过来充当半个项目经理的角色,去 push 各个参与的团队来配合我核查问题的来源,而每一次查出来后要么是后端数据环境更改异常,要么是数据引擎切换引发不兼容,要么是产品设计规则不全出现参数漏洞,总之就是项目负责人的不专业,加上团队协作的成本高,导致参与的人都做的不开心,其实在这之前也参与过类似这样的扯皮的延期项目,然而这一次对于我却尤其难熬。
7.2 挣扎在白天黑夜边缘
在双 11 项目远没开始的时候,我接触到了一个创业项目,兼职赚外快补贴家用,平时的晚上和周末断断续续在做,大概到了 10 月份,这个项目准备去找融资,因此希望我在 10 ~ 12 月份能尽快把项目原型开发上线,我评估了一下剩余的工作量,差不多需要 15 人日,同时算了一下时间,10 月份至少有 3 周的空闲周末,还不算晚上,再加上 11 月份甚至 12 月份的晚上和周末大概能有 20 多天的时间,时间简直不能再充裕了,于是便也一口答应了下来。
然而这个从双 11 前就启动,一直持续到双 12 的公司项目,却频频上线出问题,而每一次出问题,都需要前端工程师介入联调,于是几乎所有的周末全部都被公司征用,不止如此,白天只能调试,不能发布,需要熬夜发布,出问题后还要配合回滚,回滚后,还是不能走,要等测试工程师测试完,再重复以上过程,于是就有了连续的周末通宵,这个答应在 12 月份上线的创业项目,便搁浅了,毕竟公司事大,孰轻孰重我还是分的清楚。
总算双 12 上线一周后,我下班回到久违的家中,眼看要延误掉这个创业项目的融资窗口,我想既然承诺了,无论如何都要拿下!于是,白天去公司工作,幸好是双 12 之后,这个项目不再变动了,每天只需要配合调整策略参数就行,不需要投入大精力去开发。
晚上回家以后,7 点开始写代码赶这个创业项目,敲代码一口气通宵到到第二天早上 6 点,洗漱一下出门到公司吃个早餐,然后在公司躺椅上睡到 9 点,起来洗把脸,冲上浓咖啡,配合这个双 12 的 项目继续做沟通啊,邮件通报啊,参数更正啊这些琐碎的事情,中午吃过饭,又在躺椅上睡一个小时,下午跟进一些常规的部门工作,晚上回家后继续写代码,如此反复,经历了大概 12 天,期间至少有 2 次半夜敲着敲着代码就一头栽在桌子上睡着了zzz。
要预发布创业项目的那个晚上,需要跑通发布环境,我买了一箱的红牛,一夜喝了 5 罐,凌晨 4 点,突然一阵恍惚,有一种灵魂出窍的感觉,手脚冰麻,说不出一句话,视力急速下降,那一刻,我想,我怕是要猝死了。
在这种症状持续的 2 分钟时间里,我心里怕到了极点,想了许多许多,如果我猝死了,父母怎么办?老婆怎么办?我的事业怎么办?这个项目怎么办?我闭上双眼,让自己使劲喘气,慢慢的回过神来,然后起来走动了一下,狠了狠心,继续折腾发布环境,差不多 7 点多,环境弄好后,就洗个脸到了公司。
这一次到公司没敢睡觉,担心躺下了会彻底体力崩溃,就咬牙坚持了 1 天,晚上回家又熬夜大概到 2 点,成功发布上线,整个心才真的像大石头一样放了下来,顿时困倦无比,迷迷糊糊正打算去睡,突然又发现一个环境异常问题,赶紧屏住呼吸紧急调试,这一次调试的每一秒钟我都记忆深刻,因为我需要把已经休眠的身体和意识拉回来,大概 5 分钟左右重新修复上线,我给公司主管发了短信上午在家请假休息,就混沌沌的睡去了。
大概 2 周后,这个上线的创业项目拿到了 200 多万的天使投资,这个就是促使我做出出来创业的重要原因吧,这也是我目前正在创业的项目。
7.3 离职创业
在大公司当一颗螺丝钉,其实我并没什么不爽,但当发现一些不好的兆头或者流程大问题的时候,由于我人微言轻,再好的技术,或者说再好的工作态度都无法改善这个情况,我做了反馈但所有人都摇头,我做了推动但所有人都表示无能为力,这种无力感越来越强,我发现除了被我抓在手中的这些前端技能和可怜的工资,我什么也没有,什么也做不到,我开始怀疑人生,是坚持死磕到公司上市死磕到自己在公司和团队有更好的能力和话语权,还是选择离开。
这时候已经是 2014 年春天,我重新开始考虑去向,这时候年前参与的创业项目投资到位了,我也基本了解了它的业务模式,可能是年前拼命赶项目那次太投入,导致我对它也有很深的感情,毕竟是自己一手写出来的代码,是自己一手养大的孩子,这时候对方希望我以技术合伙人的身份加入,我最终想了想便答应了,其实还是有点冲动的,因为恰恰是那个时候是我在公司做项目最不爽的时候,在公司的无力感和在创业项目上的认同感成就感形成了鲜明的对比。
Anyway,我是希望可以通过我的力量,证明一些或者是实现一些我的想法,我希望可以有一些事情是可以在我影响和控制范围之内的,于是到了 6 月份,也就是阿里巴巴上市前夕,我递交了辞职书,这次走的虽有留恋但是毫无遗憾。
8、写在后面的话:所谓 CTO 的称谓
对外面我总是宣称自己是这家创业公司的 CTO,而对朋友和同事,我总是希望大家把我当成一个普通的程序员看待。
因为对外,可以树立公司的形象和减小解释成本,这个 CTO 的 title 有明显的代入感。而对身边朋友,包括对我自己来讲其实它意义不大,我丝毫不认为有一顶 CTO 的帽子在头上,技术就能牛逼几分,身价就能增加几分。相反,有这顶帽子在头上,带给我更多的是一种责任。而恰恰,我慢慢成为了一个有责任感爆棚的人。
在技术方面,我始终不认为自己可以配上 CTO 这个称谓,只不过对当下这个团队这样的业务规模,我尚可以完全 handle 住,但至于未来会怎样,依然还是个未知数。
附录:程序员的百味人生
《一个微信实习生自述:我眼中的微信开发团队》
《微信程序员创业总结:如何提高Android开发效率》
《如何做一个合格的 iOS Team Leader》
《程序员中年危机:拿什么拯救你,我的三十五岁》
《一个魔都程序员的3年:从程序员到CTO的历练》
《为什么说即时通讯社交APP创业就是一个坑?》
《致我们再也回不去的 Github ...》
《一名90后二流大学程序员的自述:我是如何从“菜鸟”到“辣鸡”的》
《一个魔都程序员的3年:从程序员到CTO的历练》
《选择比努力更重要:我是如何从流水线工人到程序员的?》
《程序员的抉择:必须离开帝都——因为除了工作机会,还有什么值得留恋?》
《干了这碗鸡汤:从理发店小弟到阿里P10技术大牛》
《程序员神级跳槽攻略:什么时候该跳?做什么准备?到哪里找工作?》
《感悟分享:在腾讯的八年,我的成长之路和职业思考》
《调皮的程序员:Linux之父雕刻在Linux内核中的故事》
《迷茫中前行:一个专科渣渣菜鸟的编程入门感悟》
《机会不给无准备的人:一个Android程序员屡战屡败的悲惨校招经历》
《笑中带泪的码农往事:入职三天被开,公司给100块叫我走人,有我惨?》
《阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路》
《干货分享:十年大厂资深程序员的开发经验总结》
《鹅厂7年终有离开之日,记离职鹅厂最后30天的真实心路历程》
《4年前端、2年CTO:一个非科班程序员的真实奋斗史》
(本文同步发布于:http://www.52im.net/thread-24...)