1. 要有比较好的计算机基础
这里的计算机基础指的是数据结构与算法,操做系统,编译原理,计算机网络等等。虽然相对于其余方向而言,前端在工做中用到计算机基础的地方可能少一点,可是不管大小厂,招实习生其实都是为正式招聘作储备,因此会比较但愿招未来有更大发展空间的人。
若是你具有比较好的计算机基础素养,那么之后在拓展到其余领域(WebGL —— 计算机图形学,Node.js 底层 —— 操做系统,JS 引擎和各类预编译工具—— 编译原理, etc.)的时候会更快上手。另外有一些公司对前端的概念不局限于 Web 前端,也包括移动端偏前端的部分,这里也须要你有比较好的计算机基础才能作好。前端领域有不少人已经不知足于造轮子,直接跑去造语言了,若是你编程基础够好,接触过各类形形色色的编程语言和范式,再上手这些东西也会方便些(好比Ruby/Python->CoffeeScript,Haskell->LiveScript)。
虽然也有不少地方为了招到足够多能来干活的前端会下降对计算机基础的要求,可是打好这方面的基础是没有坏处的,若是面试笔试被问到且答得上来,也是可以加分的。一些大厂常常会出现“不是前端的面试官来面前端”的状况,我我的是以为若是这类面试官问的都是计算机基础问题的话,其实真的无可厚非,毕竟人家在面“一个前端程序员”以前,是在面“一个程序员”啊……
2. 要懂得现代前端的一些新技术
好比:css
有一些同窗以为这些东西懂得越多越好,我我的是以为这些工具不必定要都了解(毕竟它们不少也未必能火多久),但对这些东西要有大体的概念,而且每一个领域的用过一两种(最好是在项目里),清楚它们的优缺点和必要程度。这是区分在前端上投入过必定精力的人和跨行来兼职前端的人的标志。
去大厂校招应聘前端的会有不少只是作过一些 Web 项目,但不必定对前端的技术很了解,只是看前端门槛比较低就去投简历的人。若是你对这些新技术比较了解的话,起码可以证实你是比较专一前端并且花过必定时间在上面的。
同时,前端如今确实是一个天天都有不少轮子冒出来的领域,也须要你有足够强的自学能力和(英文)文档阅读能力去跟上社区的这些新动态。接触过比较多的轮子,才会有本身的判断,不会总是人云亦云火一个学一个。这些工具里,确实也有不少在合适的场景下能够提升前端的生产力或者代码质量,对这些东西有必定关注,也代表你对本身的生产力和代码质量是有必定关注的,这实际上是一个更广义的靠谱程序员的特性。
3. 懂得什么是 Web 标准和浏览器开发维护的流程,而且会跟进新发布的标准和主流浏览器新实现的特性
固然面试的时候通常不会直接问你这方面的问题,可是若是你懂这里面的水大概是怎么一回事的话,在不少问题上(特别是兼容性问题上)都能回答得比较深入一些。最好清楚:前端
标准和浏览器这滩水仍是很浑的,涉及到不少利益纠葛和大厂的博弈,若是你大概清楚他们的一些事情,不光本身作前端兼容的时候会容易一些(不会只抱怨“为啥XXX就是不能OOO”而是懂得他们的无奈而且认真寻找解决方案),在新特性出来的时候也更容易消化(不是“啊又出了个新东西要学好烦啊”而是“在邮件列表上争(si)论(bi)了那么久他们终于把这个搞出来了”),你本身对前端比较基础的那部分的知识体系更会有条理得多。我的以为这也是区分比较有经验的前端和临时跨行的前端的关键之一,这些东西是须要你通过一段时间的耳濡目染才能理清楚,并且会在必定程度上影响你的工做的。
4. 多看书,多关注技术资讯
技术资讯的来源包括RSS、邮件订阅、比较重要的邮件列表、或者follow Twitter和微博上一些比较有影响力的开发者。我的经验是,通常在二面或者三面的时候,面试官都会问相似“你从哪里接触前端的新技术/你看过哪些书”的问题,由于前端如今技术更新很快,比较专一于前端这方面的人通常都会有本身接触新技术的渠道,他们天然也会比较关心候选人是否是有在跟进社区的一些动向。其实这也可以排除那些不太靠谱的临门跨行的人,由于他们平时通常不会特地去关注前端技术的新动态的。
5. 不只懂得一些东西怎么写,更要懂得一些东西不要怎么写
Web 标准大多不是严格向后兼容的,不少几年前经常使用的写法,如今已经被社区的大多数人强烈建议避开了,有不少特性也随着时间的流逝被打上了 deprecated 的标签,若是你不幸拿着一本比较老的书入门,又不在网上验证上面说的每一句话,那么颇有可能你就这样被误导好久,好比 HTML可能会逐步被XML所取代吗?(来自《css权威指南》) - 贺师俊的回答 这样的状况……与之相似的还有:git
这些知识都须要你有必定的前端方面的经验,看过比较多相关的博客和书,才能慢慢积累起来,因此也能区分靠谱的前端和不靠谱的前端。
6. 不依赖某一个特定的框架或者库
好比很常见的“离开了jQuery就不会写前端”星人……也不是说要作原生 JavaScript/CSS 和 DOM 的原教旨主义者,但高度依赖某个框架或者某个库的话,一般意味着换了一个框架/库你的学习成本会比不依赖特定轮子的人高,由于这一般是处于还不知道前端领域“什么是什么”的阶段的表现。
事实上前端领域的这些轮子有一些都是其余领域早就有,或者根本不须要的东西,其中不少的实现原理也不是那么复杂,只不过是脏活累活。我的以为对这些东西应该报以“不能知其然而不知其因此然”的态度,起码大概清楚它们的实现是怎样的套路,知道它们的优缺点,多接触几种,这样在换一个替代品的时候很快就能上手。
由于前端的特殊性,在开发比较大的项目的时候使用库和框架是必须的(好比遇到各类鼠标事件的前端兼容问题时,总不能全都就地写 if-else 吧,总得封装一下。遇到很是 data-driven 的项目,还用手动操做 DOM 的写法很难维护吧,用个 MV* 框架真的不纯是偷懒了),可是这些东西都是会迅速改朝换代的,死守着某个特定的库或者框架,确实不太靠谱。不少公司喜欢问候选人“原生 API 写个 Ajax 请求怎么写”这类问题,感受很大程度上也是在排除这类人……
7. 懂一点点设计
这里说的不是切图啊PS啊AI啊什么的,而是大概懂基础的视觉传达/色彩构成/平面构成的知识。毕竟前端是和设计师联系最密切的程序员,虽然前端要作的事不只仅包括 UI/UX,可是 UI/UX 却都主要依赖前端来实现。不少时候,设计师(特别是不会前端技术的设计师)给出的设计可能很难(在照顾兼容性的前提下)实现,这个时候不该该跟他硬拼让他改设计,或者本身默默纠结怎么用很 hack 很难维护的方法去实现,而是理解设计的意图,而且跟设计师沟通,尽量在工程上容易实现容易维护的前提下实现设计的意图,哪怕要修改一些具体的表现形态。
最恐怖的就是丢一张图过来,让你作到 pixel perfect,你也不问三七二十一直接开工,代码写得别扭也不去沟通,遇到不兼容就打个哈哈蒙混过关了……设计的目标是让大众都能更容易地使用,这样作是与设计师存在的意义背道而驰的,我也遇到过一些设计师会主动来问前端怎样的设计在浏览器里容易实现,怎样的设计比较别扭,这样他才能结合多方面的信息去作设计上的决定。若是你对设计不关心,不与他交流的话,实际上至关于剥夺了一些关心工程实现的设计师的知情权(通常正常的设计师看到本身的设计实现出来效果很差,也会小郁闷的……)。我的以为与设计师沟通的技巧,也是一个靠谱的前端应该具有的素养。
8. 懂一点点后端
(这个是我看了一下别人的答案补加的)。其实这个和第一点的目的相似,最重要的是别要作一个非得等队友来才能开工的人。大厂(主要是阿里系)有很多在用 Node 作先后端分离一类的事,另外作前端的常常要在后端还没写完的时候本身去 mock 一下数据接口,若是你懂怎么搭建简单的服务器和 serve 数据给前端,那么就能够提升开发的效率。即便你只想专一前端,但前端有不少东西(好比 JS 跨域,WebSocket,SSE,WebGL 的素材获取)都须要你懂得架设简单的后端才能去实践,这时候不懂后端一般就意味着你要放弃学习这些知识,或者只能纸上谈兵。一个正常的前端确定是要对计算机网络和 HTTP 等协议有必定了解的,有了这些知识去学简单的后端实际上是很水到渠成的事情。
9. 在前端投入足够的时间
意识到以上几点还须要投入足够多的时间才能看到成果,否则很容易出现“道理我都懂,但是OOO”的状况,那最后也仍是靠谱不了的……若是不是真的对前端感兴趣而且投入足够多的时间,与其为了“好找工做”而投前端,不如转一个更合适的方向。阿里前端的困局与突围 · Issue #141 · lifesinger/lifesinger.github.com · GitHub 和 图灵社区 : 阅读 : 企业软件领域前端开发的困境 都能说明这个问题。
另外有些面试官喜欢问你一些很细节的 API (虽然我我的以为这类问题很囧),这些东西不少时候都是靠的“无他,但手熟尔”,虽然有一些确实有点刁难人的味道,但有一些真的是若是你常常写前端,重复多几回就会记住的,若是记不住,只能说明你前端写的不够多。还有一些没足够实战经验的人不多遇到过的问题(好比 JS 跨域),也是须要在前端投入足够多的时间,才会接触到(不管是纸上谈兵,仍是项目里遇到)。程序员
其实综上所述,不靠谱的前端大概表现就是:计算机基础很差(更糟糕的是编程基础都不行,不过编程基础和计算机基础好很差跟绩点高不高专业对不对口这些其实真的不必定有什么关系……),对前端的认识还停留在十年前,对社区出现的新工具彻底不认识(没认识全很正常,但彻底不了解就有点两耳不闻窗外事一心只读圣贤书的味道了……),不懂 Web 标准是怎么回事或者不在乎标准,遇到兼容问题就复制粘贴搜到的代码,对于一些在社区里是常识的坑毫无心识地各类踩,“离开了jQuery/某库/某框架就不会写前端”星人,或者平时根本没怎么作过前端的东西,只是作作 Web 项目顺带写前端,到应聘了临门一脚跑过来……无论是平时学习仍是笔试面试,尽可能避免向这些特征靠拢就能够了。事实上大厂们招人不必定会要求这么严格,并且大厂里的团队自己也未必个个靠谱,可是平时有在这些方面努力的话,起码若是挂了会知道本身哪里不足,或者究竟是他的问题仍是你的问题……github
以上大概就是我以为拿到大厂(or前端比较靠谱的中小厂)前端offer须要的水平,其实我感受不必拿“实习”这个词来限定本身,尽可能往高水平靠拢,才能作到是你来选公司,而不是公司来选你,这样你才能结合兴趣/家庭/我的规划之类的因素拿到最适合本身的 offer。另外,我以为面试这回事是这样的,上面提到的这些特征,每一条单独拿出来,在不肯定面试官的状况下,既不是拿到offer的充分条件,也不是拿到offer的必要条件,某一条不知足,也不是拿不到offer的充分或必要条件。大厂的面试官有不少种,有些设计出身喜欢问设计,有些后端出身喜欢问偏后端的东西,有些喜欢问你API细节,有些喜欢问你实现思路,有些喜欢看你学习能力,有些面试官原本就不是前端因此喜欢问你基础题。若是你侧重某一些方面,虽然无可厚非,可是运气很差赶上指望不一样的面试官,可能你就会获得比较低的评价或者挂掉。肯定能拿 offer 的惟一途径,就是面面俱到,这固然是不可能的要求,但大厂的种种因素配合起来每每就是在找这种不存在的人才,真的想拿 offer 的话,就只有硬着头皮尽可能靠拢。面试
就像国内不少大厂里比较著名的前端们文章/博客/知乎里提到过的同样,前端这块水不是很深,但水很是很是宽,在考虑未来做为一个前端如何发展如何应对天花板以前,先要脚踏实地把这些属于前端的“本分”的东西搞好。事实上前面提到的这些东西我也没有全都作到。做为前端,我的以为最重要的是要保持一颗开放、谦卑的心,不要抵触新东西,永远记得外面的世界还有不少东西本身不懂,要继续学习。算法