前端工程师是 互联网时代软件产品研发中不可缺少的一种专业研发角色.
从狭义上讲, 前端工程师使用 html,CSS,JavaScript 等专业技能和工具将产品 UI 设计稿实现成网站产品, 涵盖用户 PC 端, 移动端网页, 处理视觉和交互问题.
从广义上来讲, 所有用户终端产品与视觉和交互有关的 部分, 都是前端工程师的专业领域.
2005 年的时候大多数网页长这样:
现在的网页一般是这样的:
前端工程师的发展之路和前景是怎么样的?
前端是一个相对比较新的行业, 互联网发展早期 (1995 年~ 2005 年) 是没有专业的前端工程师的. 随着互联网的发展, 大约从 2005 年开始, 正式 的前端工程师角色被行业认可, 到了 2010 年, 互联网开始全面进入移动时代, 前端工程师的地位越来越重要, 前端领域的技术发展也越来越快, 各种新的思想, 设计模式, 工具和平台都快速发展, 对前端工程师的技能要求也越来越高.
有一些数据可以说明前端行业的发展迅速.
在 2010 年之后最流行的新编程语言中有相当部分和前端有关, 比如 Dart,Clojure,CoffeeScript 和 TypeScript.
作为前端最重要的编程语言 JavaScript, 在最近几年里不论是代码量还是关注数都稳居 GitHub 平台热门编程语言榜.
行业对前端需求量持续增加, 前端程序员薪水在行业里面处于较领先的位置.
近年来最流行的编程语言很多都是 JavaScript 替代语言
JavaScript 在最热编程语言 TOP10
近几年互联网公司前端团队每年扩张一倍
JavaScript 工程师平均薪水排名在程序语言工程师收入前 10
前端工程师需要什么样的知识和技能?
有人说前端工程师的技术栈是这样的:
还有人说是这样的:
实际上前端工程师最核心的技能还是:
在一个典型的互联网公司的产品研发流程中, 前端工程师和其他角色的关系大致上是这样的:
前端是最接近产品和设计的工程师, 起到衔接产品和技术的作用, 前端为用户可以看到的部分负责, 所以也是最接近用户的工程师.
在多终端的时代, 如果一个产品同时支持 PC, 移动端, 前端工程师还需要和更多的角色打交道:
JavaScript 对于前端是最重要的技能, 所以优秀的前端工程师要有扎实的 JavaScript 基本功. 而 JavaScript 这门编程语言也是目前程序设计领域炙手可热的宠儿, 如今的它不仅仅只是用来开发 web, 还可以用在各个方面.
前端工程师也是软件工程师, 所以软件工程师的基础知识也是非常重要的, 这些基础知识包括:
数学
计算机体系
操作系统
数据结构和算法
编译原理
HTML 和 CSS 也是前端工程师非常重要的基本功, 很多同学, 尤其是喜欢写代码的同学容易忽视 Markup Language, 实际上 ML 也是 UI 相关的领域里面很重要的内容, 不应该被忽视.
有同学问说:"前端工作需求很多, 老是改来改去, 实际的技术点并没有多少, 产品决定业务逻辑, 从事底层基础服务会不会更有挑战和职业未来?"
的确, 越贴近业务和产品层面上的工作, 需求差异性越大, 可能改动越频繁. 不仅仅是前端改来改去, PHP 服务端做业务的同学也面临这样的问题, 业务逻辑改来改去. 越底层通用性越强, 改动相对较少.
不过事情都是有两面性的, 首先可以这么想想, 是底层基础服务的市场大还是互联网业务和产品的市场大. 其次, 基础服务的通用性很容易达成, 而产品层面 上如何通用化, 如何在业务驱动的产品研发中利用工程化和工具化提升开发效率, 这其实是一个很难的问题. 丰富的互联网产品已改变和正在改变着我们的生活, 然 而作为产品的创造者, 工程师们怎样让自己过得更好, 这个领域值得研究.
另外, 不要觉得实际的技术点没有多少, 举几个例子: 实现曲线和曲面动画, 计算地图的最短路径, 让 PNG 静态图片类似于 gif 图一样做局部的运动, 抽奖游戏, 物理效果的 HTML5 游戏, 3D 图表, 增强现实的 WebGL 视频流处理等等, 这些都是在前端领域中遇到的实际问题.
就 JavaScript 来说, 在实际项目中设计最合适的模型高效率解决现实问题本身就很有挑战. 作为一种典型的新生代编程语言, JavaScript 特性丰富, 使用灵活, 性能优良. 面向对象, 函数式编程, 各种设计模式, MVC 和 MVVM, 这些本身就有足够的吸引力.
前端要解决界面和交互问题, 实际上 UI 层面上的问题一直是软件工程方面的一个难题, 因为 UI 不停地在变化. 浏览器各个版本的兼容性, Web 标准, 移动设备, 多终端适配, 给了前端工程师很大的挑战, 对前端工程师的能力也有很高的要求. 许多 UI 问题有不只一种解决方法, 许多问题有非常巧妙的思路 和精彩的解决办法, 前端在工程师群体里是属于非常有创造力的一个群体, 因为这个行业需要丰富的创造力和想象力.
前端工程师还是 Web 标准的制定者, 实践者和推动者, 而现在的 W3C 标准不仅仅局限于浏览器, 还包括各种手持智能设备, 车载设备, 智能家居等等. 在未来万物互联的时代, 前端将不仅仅是网页上的工程师, 而是所有人机交互领域的工程师.
前端工程师的学习和成长
前端领域发展很快, 各种新技术新思想不断涌现, 这是一个好现象. 但是前端发展太快也带来一些问题, 比如有同学就问到我究竟应该学些什 么, Angular.JS,React,Node.JS,ES6,ES7,CoffeeScript,TypeScript...... 似乎永远有太多东西需要学 习, 有些东西好像还没学明白就被另一些新的技术取代而 "过时了".
其实还是那句话, 前端工程师首先是软件工程师, 基础是最重要的, 如果基础不扎实, 一切应用技能就都是 "浮云". 前端的基础是什么? HTML,CSS,JavaScript 基本功, 数学, 算法, 数据结构, 操作系统, 编译原理基本功.
一个优秀的前端工程师必须要有自己擅长的领域, 并且钻研得足够深入, 同时要有眼界, 能 "跨界". 可以以前端作为职业, 但千万不要把自己的技能限制在前端领域, 因为有很多东西, 只有站在前端之外, 才能看得更清晰, 更透彻.
学东西千万别盲目跟风, 大家都在谈 AngularJS 就立即跑去学习, 过几天大家都谈 React 了, 就又放下 AngularJS 去学习 React. 前端领域知识点很多, 值得学的东西也很多, 聪明的同学懂得花时间学习成体系的知识并且研究得足够深入, 因为只有这样才能从中总结出规律, 形成方法论, 这样 才能最大化学习的价值.
知识的正确用法 -- 一个领域里面的大师永远不会是另一个类似领域的菜鸟
由兴趣选择前端
在我学编程的最初, 我学习的是 C 语言, 然而整整一本书除了教我如何在黑洞洞的控制台上输出 Hello World 和各种其他字符或者用键盘输入一些什么然后依然是字符输出外, 就没有什么其他的内容了. 学习了一段时间之后, 我的内心一度是崩溃的, 因为我觉得这和我想得 不一样, 学了那么多知识, 我都不知道自己究竟算不算是 "学会" 了 C 语言, 因为在我看来, 那些丰富多彩的操作系统和各种应用软件和黑洞洞的控制台之间明显还 有着非常巨大的鸿沟.
事后回想起来, 当时的想法当然是幼稚可笑的, 那时候的我并不知道程序语言和运行环境之间的区别, 对操作系统, 用户 API, 硬件接口, 网络服务等等都 完全不了解. 然而这并不能怪我, 因为 C 语言的教程并没有任何一言半语来告诉我这一点, 我也不知道学习了 C 语言的语法之后接下来还应该学习些什么.
相对来说, Web 开发更吸引我, 因为不需要安装任何环境, 只需要在文本编辑器里面输入一些字符, 保存后打开浏览器, 马上就能看到丰富的视觉效果, 这就是前端的优势, 你所做的努力立即就能看得见.
相对于死板的输入输出, Web 开发在界面可见的一层要丰富多彩得多, 这一点吸引了我, 如果这一点也能吸引你, 让你着迷, 那么你就适合学习前端.
在选择前端作为职业之前, 要明确判断自己对前端开发的确感兴趣, 选择做前端, 应该是确认自己喜欢和适合做前端, 而不是为了一份看起来体面而且薪水不菲的工作. 如果你对构建丰富多彩的界面, 处理各种交互逻辑不感兴趣, 甚至厌烦, 那么最明智的选择是放弃成为前端工程师的想法 -- 因为选择一个自己不喜欢的职业, 为之忍受数十年直到退休, 实在是一件很悲催的事情.
对在校学生, 看重哪方面能力?
有同学问, 一些大公司前端是否一定要求实际经验的学生, 在这里我可以回答: 否.
对于学生, 我们比较关心的是:
基础: 包括数学, 算法, 数据结构, 计算机相关基础的掌握.
学习能力和学习方法: 如何学的前端, 学了多久, 学到什么程度, 遇到过什么问题, 是如何尝试解决这些问题.
兴趣: 对前端的兴趣如何, 这一点可以体现在很多细节上. 有一个反面的例子比较常见, 一般来说我会问学生最近在关注什么前端新知识, 有的学生会说我 关注某某某, 但当我再问他究竟关注到什么程度, 会发现他实际上根本没有在这项新知识上花费多少时间. 如果你对感兴趣的问题都不花费时间, 如何证明你自己对 前端的 "兴趣" 呢.
解决问题的能力: 遇到难题如何解决的, 遇到没接触过的问题是如何思考和最终解决的. 从这里可以判断出同学有没有前端思维, 这些问题没有标准答案, 我们不追求某些 "官方思路", 看重过程而不是结果.
关于简历, 有同学提到说现在似乎很多公司都希望学生会点 Node.JS, 会点 React, 我自己不会该怎么办.
我想说的是, 我们并不要求学生必须会这些. 相反, 我个人更鼓励学生利用时间打好基础. 简历上写自己真正擅长的内容即可, 我们不会因为在你的简历上看 不到 Node.JS 或者 React 就忽略你. 只要你真心热爱前端并用心学了, 你应该明白如何用前端基础来打动我. 有的学生喜欢在简历上堆砌词汇, 实际上这一点不见得好, 因为如果你写了一个 你自己一知半解的东西, 最后在面试中被面到了, 一定会得负分的.
技术本身是有深度的, A 同学说 "我知道 React 但没用它做过东西", B 同学说 "我用 AngularJS 写过一些个人的小项目", C 同学说 "我上个月使用弹性布局的思路来写我的博客, 结果在 Android 系统 4.1 版本的 Webkit 浏览器下出现了一个显示 bug, 最后我是这样这样解 决的". 你们说 A,B,C 三个同学我们会选择哪个同学?
面试是一个彼此交流的过程, 我们希望看到大家在前端领域的能力和潜力,"知道" 一件事, 并不是一种有价值的能力, 尤其是在知识廉价的互联网时代. 我 们的同学千万不要像背书一样去死记硬背一样东西, 而应该真正用心去学. 我们的高等学校不仅仅教授大家知识, 还有如何真正学习和做研究, 不是吗?
如果你对前端真的感兴趣并有潜力, 花点小心思, 你该知道如何学习它.
最后, 祝愿大家都能成为优秀的前端工程师.
如果你依然在编程的世界里迷茫, 不知道自己的未来规划, 可以加入 Web 前端学习交流群: 731771211 里面可以与大神一起交流并走出迷茫. 新手可进群免费领取学习资料, 看看前辈们是如何在编程的世界里傲然前行! 群里不停更新最新的教程和学习方法(进群送 Web 前端系统学习路线, 详细的前端项目实战教学视频), 有想学习 Web 前端的, 或是转行, 或是大学生, 还有工作中想提升自己能力的, 正在学习的小伙伴欢迎加入
点击: 加入 http://u6.gg/ek2NA
来源: http://www.qdfuns.com/article/51714/8dd221306034980feb3d1f5c8e02f159.html