我是如何成为前端开发工程师的?
我本科学的法学,毕业后在北京一家央企做了5年国际工程市场开发,之后读了2年MBA,去年毕业后,我在家自学了7个月,上个月我入职了一家游戏公司做前端开发,圆满完成了我的计划:30岁之前完成转行。
人生总是充满了机遇和挑战。每个人都会遇到各种困难,体验各种艰辛和无奈,但只要你有上进心和一点冒险精神,就一定能抓住宝贵的机会。
不到一年前我还在官僚气息浓厚的央企等待下班,那几年因为被领导边缘化,手里的业务全被分走了,最后一年多甚至一点事也没有,在我受够了领导的欺压,当着全办公室的人拍了他桌子,指着他鼻子骂之后,他气得再也不跟我说一句话,因为我是正式员工也无法开除我。所以我得以享受每天自由的时间,我把全部时间都投入了研究生期间的论文写作,三篇论文都顺利完成了。去年毕业后,我义无反顾的选择了离开这个像垃圾场、焚尸炉、养老院一样的早该破产的央企——中钢集团。
我的志向是中钢这样的破公司无法包容的。我入职3年就学会了全部业务,自此再无法进步,反而是卷进了一个又一个黑暗的政治泥潭,体验了中国式管理的丑陋肮脏,也明白了国企制度的巨大落后和根本性缺陷。
我一直相信自己是正确的,即使受到领导的孤立和栽赃,即使部门里所有同事都不愿理我的时候,我都没有怀疑过自己。我最自豪的就是当着所有人的面拍了领导的桌子,指着他鼻子骂了好几句,直到被同事拉开。就是这个领导,因为财务问题,今年初被外审人员查了,已经撤职。部门又换了一个新领导上台,只要想想就能知道之前受宠的那些同事的下场了,这些鼠目寸光的墙头草们实在是可悲又可笑。
来北京工作以后,我一直保持着巨大的上进心并持续学习着。我喜欢新鲜事物,尤其是新科技。那几年,每一期的苹果keynote大会我都会下载到iPad上反复观看,也会第一时间去买《乔布斯传》并津津有味地反复阅读,印象很深的是,一次晚上聚会,我正好带着几本刚收到的网购书准备拿回家,其中就有《乔布斯传》,一个女同事很不解地问我这有啥好看的,我回答道:我想看看别人是如何过完自己的一生的。我的办公室柜子里放了上百本书,有几次换工位,我用超市的购物车装了满满两车书,看到的同事无不惊异。我却每次都会不好意思,反而会感觉自己有些太另类了。
我的想法很多,我曾经想放弃一切,做一个业余观测天文学家,也想过投身学术事业,做一个自由的学者,不过最后我还是选择了互联网开发,因为它真的很有趣,不但有前途待遇也很好,我更向往的是国外科技公司的那种鄙视权威的精神。为此我专门做了一期电台节目,总结了为什么要当一名web开发工程师。
我是一个彻头彻尾的文科生,一个兴趣广泛的幻想者。我花了半年时间在家认真学习了web前端开发,顺利的找到了一个不错的公司。我知道肯定有很多人也在考虑转行,或者是在国企里忍受煎熬,我愿意分享我的学习历程,如果能启发到一个两个朋友的话,也算功德无量了。
web前端是一个入门非常友好的领域,你只需要一两个月就能学会HTML、CSS和JavaScript基础知识,如果脱产学习的话,甚至只要两三周就能学完。网上的入门教程数不胜数,大多数都是免费的。推荐几个我常去的:Freecodecamp,Codecademy, Udacity, Udemy
你也可以直接去看文档,把w3school和MDN的基础文档刷上几遍就可以算是入门了。之后就可以开始打造自己的作品集(portfolio),这对于零基础的同学非常重要,你能从这些项目中得到宝贵的经验,不过这也是个非常花费时间和精力的事。
在我的学习历程中,走过一段弯路。学完基础后,我自以为是的认为JavaScript很简单,于是开始深入学习CSS,啃下了一本最新的全英文的CSS3权威指南,后来又开始捣鼓个人网站,一开始用WordPress做网站,后来转向Hugo做静态网站,这些是我的兴趣点,虽然多学点东西没坏处,可是却并不利于迅速找到工作。
后来我发现自己根本没有深入理解JavaScript,于是开始大量看书,印象最深的是那本《JavaScript面向对象精要》,反复看了五六遍,又写了一篇读书笔记,之后才豁然开朗,感觉自己真是井底之蛙。
恶补了一个月左右的JS后,就开始边刷面试题边找工作了。刷面试题是非常重要的,可以说直接决定面试成败。当然理解原理是前提,不过我的经验是把一些常见的题背下来,这样就可以在面试时候从容地脱口而出。如果遇到笔试题,则只能通过自己的理解和积累来应对了。我背过的题且面试问到过的有:
- 如何提高web性能?
- H5新特性有哪些?
- get和post方法有什么区别?
- CSS3选择器有哪些?
这些问题都可以单独深入研究,不过应付面试只需要把主干答案背下来就行了,细节的了解就行。
我面试过两家问算法题的,这对前端新手并不友好,我答的都不太好。所以完全可以熟悉下常见的算法题,万一你中意的公司问到了呢?我被问到的题是:
- 用JS写出两种数组去重的方法。(在白板上答题)
- 用JS破译莫斯代码。(面试官笔记本登录codewar网站,直接在上面做。要先读一长段问题说明,所以相当于同时考验英文阅读理解)
我一共面试了8家公司,只有两家给了offer,可以说面试也是一个调整自己学习方向和状态的好机会,多参加几次就可以熟悉一些套路,也可以增加面试经验,提高面试成功率。
零零散散说了不少,最后再讲三条我认为对我顺利转行很重要的东西。
第一个是英语阅读和听力水平。由于我这七八年一直在不断学习英语,现在看英文博客和YouTube视频没有压力,这也帮助我更有效率的学习web开发,我订阅了frontendfocus和freecodecamp的邮件周报,每次都会认真阅读,此外一有空也会看订阅的medium daily digest。这样真的提高很快。当遇到问题时,我首先会用英文在Google上搜,其次会用中文在谷歌上搜,最后才用中文在百度上搜,事实证明英文Google几乎每次都能找到解决方法,我这样的新手遇到的问题,很多人都遇到过并分享出来了,国外社区在分享知识这一点上做的太好了。
第二个就是好奇心。我属于那种天生好奇心特别强的人,小时候会不停的问爸爸妈妈各种问题,直到她们不耐烦不理我。学习web开发也是,每天都会去GitHub上看看有什么新东西,经常会被某个repo吸引,然后花时间去深入了解其功能和使用方法。在Twitter上也关注了一大堆技术大牛,新东西总会让我有学习的欲望,这也是我能够一直进步的一个原因。
最后一个就是耐得住寂寞的心。学习编程是需要静下心来认真思考的,尤其是理解编程原理的时候。我经常会花很多时间研究一段代码,遇见不懂的立刻各种搜索,或者各种翻书。时间长了难免会觉得枯燥,夜深人静的时候写代码也会觉得很孤单,这就需要家人朋友的支持了,多和朋友聊聊天,准备面试时候请朋友考考自己,这样会让自己心态更好。
web开发是一个日新月异的领域,每天都有新的技术出现,我觉得这简直就是新人最好的福利,因为你永远都会和互联网老兵处于同一起跑线去学习新东西,而每一项新技术都是你最好的反超机会,不是吗?