在github上看到一篇阿里巴巴无线前端团队的面试试题,第一道就是“你对前端职业发展有何看法?”。这也是我在面试别人时每次必问的题目。听了太多答案,今天,我也整理下自己工作两年来对前端的一些认识。
1. 什么是前端?
前端作为一个工作,其主要工作领域是浏览器端,核心技术包括 JavaScript,css,html 等。还要处理服务器通信,以及部分服务器脚本开发的工作,比如发布、测试脚本,jsp、php页面脚本。有时,还需要与产品经理、交互设计,共同完成一些交互设计。可以看出,前端处于设计与后台的中间领域,起到承上启下的作用。这也就要求前端工程师的知识面在横向上必须要广。服务器技术要懂,产品与交互也要懂。所以经常有前端工程师称自己游走在设计与编码的边缘。
2. 前端工作有技术含量吗?
相信很多人有这样的问题,甚至有更多的人认为前端是没有技术含量的工作。我在知乎上就曾回答过这个问题。
首先要明确什么算是有技术含量,如果说“百度的中文搜索算法”,“讯飞语音的语音识别技术”,“清华大学图书馆的智能机器人”算是有技术含量的话,那么前端可以说毫无技术含量。可是这个没有技术含量的工作领域中依然有很多大牛。他们在做出自己的职业选择时不是因为觉着前端有技术含量,而是因为热爱!。
任何一个职位如果你真的热爱,且研究够深入,自然会有人高薪用你。而选择一个有技术含量但却不是自己喜欢的领域,恐怕也很难做出什么成绩。
因为热爱,就会深入研究,进而发现这个领域的价值点(所谓的技术含量)。我想这几个方面都是前端的技术含量:
1. 全浏览器兼容。后台工程师、客户端工程师,无论你们用什么语言开发,都会有一套可以信赖的统一的接口(框架,或sdk)。前端?没有!我们需要同时懂得至少三种浏览器内核的接口,还有面对各种莫名其妙的bug。
2. 横向技能面要广。懂交互设计;懂视觉设计;略懂后台技术;精通http协议;linux操作;shell;vim;git;svn;至少熟练使用一门后端语言(java,c#,php,python);至少使用过一个MVC开发框架,还有前端的各种开源项目(jquery,requirejs,seajs,bootstrap,yui…);还要能够灵活运用“面向对象”,“面向过程”,“函数式”的编程方法,否则很容易在JS这门灵活的语言中迷失自己;还要懂设计模式,富客户端应用的常用架构模式。
3. 纵向技能要深。js,css,html5,css3,…
4. 学**能力强,持续学**的意愿。没办法,前端技术更新速度太快.
5. 关注用户体验,懂得交互设计。帮助产品经理和交互设计师校验错误是前端工程师的义务和责任。很多问题只有在实现时才会发现,如果作为实现者的你,没有及时发现前置环节中出现的错误。那这些错误很可能最后直接交给用户“欣赏”。有时,人手紧张,一个懂交互,懂产品的前端工程师可以一个人当三个人用。
3. 前端工程师应该具备怎样的知识结构?
关于前端工程师的知识结构,上一个问题中已经提到了一部分,下面是别人给出的总结,我就不重复造轮子了
4. 前端在产品研发团队中的地位与价值?
实现自身价值并获得他人的认可和肯定是人类的本性。正式因为这一本性的驱使,人类文明才不断进步。任何一个正常的前端工程师都希望自己在产品研发团队中发挥更大的价值。
糟糕的情况。在很多公司,前端只是一个页面制作,他们负责把psd稿转为html文件,然后交给后台工程师套页面。如果还有哪个老板在这样组织他的队伍,我想他正在做的产品一定不是什么好产品。这种做法,无视人的本性,把人的机器用。我相信任何一个前端都可以承担的更多,发挥更大的价值,他们需要的只是上级的肯定与信任。只要一个人真正热爱前端,我愿意给他机会,让他承担的更多。可惜我不是老板。
比较理想的情况。前端的输入依然是psd稿,当然如果产品和设计能力不够,还可能需要前端参与交互设计。输出则是一个可以工作的模块或页面。前端直接从服务器模板(php,jsp)开始工作,前后端同学在开始工作前定好页面内应该种的变量以及ajax通信的接口,随后独立开发,最后连调测试。这种开发方式前端可以根据接口和数据结构来来设计页面的html结构和css结构,把冗余工作降到最低。同时也会让前端发挥更大的主观能动性,让枯燥的工作变的有趣。同时后台工程师,也可以更加关注底层算法与数据存储于通信的逻辑。
5. 前端工程师的未来?
近十年,不断发生的一件事情就是,越来越多的软件开始在浏览器里运行。随着google和火狐的webos的发展,甚至在不久的将来,浏览器的api,会替代操作系统的 sdk 成为软件开发标准。随着html5的发展,浏览器里运行的早已不是简单的页面,而是复杂的web应用。前端工程师也早已不是页面制作,而是web应用工程师。
当然,也有一个让我比较担忧的问题,未来究竟是web时代还是app时代?如果是app时代,前端技术的价值可能会降低(虽然也可以使用前端技术开发app,但各方面都要比原生应用差很多)。我想,关于这个问题,也许就像“天下大事,合久必分,分久必合”一样。web与app会长期共存,此消彼长,互相促进。如果精力够,我还是建议前端工程师去学下app开发。有一技傍身总是好的。