写给想成为前端工程师的同学们―前端工程师是做什么的?

前端工程师是做什么的?

前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。从狭义上讲,前端工程师使用 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,还可以用在各个方面。


JavaScript 可以用在“树莓派”这类智能硬件芯片开发

前端工程师也是软件工程师,所以软件工程师的基础知识也是非常重要的,这些基础知识包括:

  • 数学

  • 计算机体系

  • 操作系统

  • 数据结构和算法

  • 编译原理

HTML和CSS也是前端工程师非常重要的基本功,很多同学,尤其是喜欢写代码的同学容易忽视 Markup Language,实际上 ML 也是 UI 相关的领域里面很重要的内容,不应该被忽视。

  • HTML: The Living Standard
  • HTML & CSS

有同学问说:“前端工作需求很多,老是改来改去,实际的技术点并没有多少,产品决定业务逻辑,从事底层基础服务会不会更有挑战和职业未来?”

的确,越贴近业务和产品层面上的工作,需求差异性越大,可能改动越频繁。不仅仅是前端改来改去,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。前端领域知识点很多,值得学的东西也很多,聪明的同学懂得花时间学习成体系的知识并且研究得足够深入,因为只有这样才能从中总结出规律,形成方法论,这样才能最大化学习的价值。

知识的正确用法 —— 一个领域里面的大师永远不会是另一个类似领域的菜鸟

这次前端星计划布置的一个实现带有农历和节气的万年历,有些同学卡在农历计算上,大约70%的同学懂得去网上找代码,但只有不到1%的同学真正弄明白农历计算的原理。

在面试的时候,面试官问到如何做前端性能优化,有的同学能够拿雅虎的性能优化军规回答得头头是道,反复强调使用工具压缩静态资源,但是自己搭建的博客的nginx服务却没有开启gzip。都知道说要合并静态资源,要减少HTTP请求,然而为什么要减少HTTP请求,减少请求之后预计能改善多少性能,获得多少收益呢?需要弄明白这些问题,也需要深入了解HTTP协议本身。

还有一个更有趣的问题,大家都说写HTML的关键是语义化,那么到底什么是语义化呢?这个问题难住了不少同学。标签要符合语义,这个答案看似简单标准,但什么样的标签才是符合语义?强调用 strong 不用 b?那如果有个外星文明,它们的语言里 strong 相当于地球的 bold,bold 相当于地球的 strong,那么它们究竟该用 strong 还是用 b?我们说 i 标签是斜体的意思,那为什么fontawesome.io 拿它做 icon font 的标签,这是不是“反语义”的?

过去很多地方农村有一种民间的染坊,制作染布的染料。这种染房里面有一口很大的铁缸,通常都要有一个身体非常强壮的工人拿一根很长的铁棒在染缸里面用力地敲击,敲得越响,制作出来的染料颜色越鲜艳。 为什么越用力敲打铁缸染料就越好?染坊的人说这是祖祖辈辈传下来的经验,而事实上也是如此,真的染料的颜色和敲打用力有很大关系。直到有一天,一位从村里走出去学化学的大学生,弄明白了原来只需要在染料中加适当比例的铁屑,就能让染料和含铁元素氧化物产生化学反应而变得更鲜艳。原来祖祖辈辈传下来的“仪式”实际上在真实原理面前只是一种信仰和宗教。同样,如果我们不去了解技术的本质而止步于应用,那么我们就只是技术宗教的信徒。所以在周爱民老师的《JavaScript 语言精髓与编程实践》中说,计算机语言如同祭司手中的神杖,神杖换了,祭司还是祭司,世人还是会把头叩得山响。祭司掌握了与神交流的方法,而世人只看见了神杖。

由兴趣选择前端

在我学程序设计的最初,我学习的是C语言,然而整整一本书除了教我如何在黑洞洞的控制台上输出 Hello World 和各种其他字符或者用键盘输入一些什么然后依然是字符输出外,就没有什么其他的内容了。学习了一段时间之后,我的内心一度是崩溃的,因为我觉得这和我想得不一样,学了那么多知识,我都不知道自己究竟算不算是“学会”了C语言,因为在我看来,那些丰富多彩的操作系统和各种应用软件和黑洞洞的控制台之间明显还有着非常巨大的鸿沟。

事后回想起来,当时的想法当然是幼稚可笑的,那时候的我并不知道程序语言和运行环境之间的区别,对操作系统、用户API、硬件接口、网络服务等等都完全不了解。然而这并不能怪我,因为C语言的教程并没有任何一言半语来告诉我这一点,我也不知道学习了C语言的语法之后接下来还应该学习些什么。

相对来说,Web开发更吸引我,因为不需要安装任何环境,只需要在文本编辑器里面输入一些字符,保存后打开浏览器,马上就能看到丰富的视觉效果,这就是前端的优势,你所做的努力立即就能看得见。

相对于死板的输入输出,Web开发在界面可见的一层要丰富多彩得多,这一点吸引了我,如果这一点也能吸引你,让你着迷,那么你就适合学习前端。

在选择前端作为职业之前,要明确判断自己对前端开发的确感兴趣,选择做前端,应该是确认自己喜欢和适合做前端,而不是为了一份看起来体面而且薪水不菲的工作。如果你对构建丰富多彩的界面、处理各种交互逻辑不感兴趣,甚至厌烦,那么最明智的选择是放弃成为前端工程师的想法 —— 因为选择一个自己不喜欢的职业,为之忍受数十年直到退休,实在是一件很悲催的事情。

对在校学生,我们看重哪方面能力?

有同学问,360前端是否一定要求实际经验的学生,在这里我可以回答:否。

对于学生,我们比较关心的是:

  • 基础:包括数学、算法、数据结构、计算机相关基础的掌握。
    学习能力和学习方法:如何学的前端,学了多久,学到什么程度,遇到过什么问题,是如何尝试解决这些问题。

  • 兴趣:对前端的兴趣如何,这一点可以体现在很多细节上。有一个反面的例子比较常见,一般来说我会问学生最近在关注什么前端新知识,有的学生会说我关注某某某,但当我再问他究竟关注到什么程度,会发现他实际上根本没有在这项新知识上花费多少时间。如果你对感兴趣的问题都不花费时间,如何证明你自己对前端的“兴趣”呢。

  • 解决问题的能力:遇到难题如何解决的,遇到没接触过的问题是如何思考和最终解决的。从这里可以判断出同学有没有前端思维,这些问题没有标准答案,我们不追求某些“官方思路”,看重过程而不是结果。

关于简历,有同学提到说现在似乎很多公司都希望学生会点 Node.js,会点 React,我自己不会该怎么办。

我想说的是,我们并不要求学生必须会这些。相反,我个人更鼓励学生利用时间打好基础。简历上写自己真正擅长的内容即可,我们不会因为在你的简历上看不到 Node.js 或者 React 就忽略你。只要你真心热爱前端并用心学了,你应该明白如何用前端基础来打动我。有的学生喜欢在简历上堆砌词汇,实际上这一点不见得好,因为如果你写了一个你自己一知半解的东西,最后在面试中被面到了,一定会得负分的。

技术本身是有深度的,A 同学说“我知道React但没用它做过东西”, B 同学说“我用AngularJS写过一些个人的小项目”, C 同学说“我上个月使用弹性布局的思路来写我的博客,结果在Android系统4.1版本的Webkit浏览器下出现了一个显示bug,最后我是这样这样解决的”。你们说 A、B、C 三个同学我们会选择哪个同学?

面试是一个彼此交流的过程,我们希望看到大家在前端领域的能力和潜力,“知道”一件事,并不是一种有价值的能力,尤其是在知识廉价的互联网时代。我们的同学千万不要像背书一样去死记硬背一样东西,而应该真正用心去学。我们的高等学校不仅仅教授大家知识,还有如何真正学习和做研究,不是吗?

如果你对前端真的感兴趣并有潜力,花点小心思,你该知道如何学习它。

最后,祝愿大家都能成为优秀的前端工程师。

我有一个前端学习交流QQ群:328058344 如果你在学习前端的过程中遇到什么问题,欢迎来我的QQ群提问,群里每天还会更新一些学习资源。禁止闲聊,非喜勿进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆水寒服务器维护7.5,逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍...

逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍2018-07-26 10:08:08来源:游戏下载编辑:苦力趴评论(0)《逆水寒》官方发布微博,称为了保证服务器的运行稳定和服务质量,将于7月26日上午7:00-上午10:00进行停服维护。此次…

是否可以限制蓝牙传输距离_技术文章—关于蓝牙传输范围的常见误解

蓝牙技术在耳机、手机、手表及汽车领域的普及为人们带来了许多便利,却也引发了一些人们对于蓝牙的误解。目前,蓝牙可为多种重要的解决方案提供支持,其中包括家庭自动化、室内导航以及商业和工业创新等。误解一:蓝牙稳定传输的最远…

基于webpack搭建的vue element-ui框架

花了1天多的时间, 终于把这个框架搭建起来了。 好了, 不多说了, 直接进入主题了。前提是安装了nodejs,至于怎么安装, 网上都有教程。 这里就不多说了, 这边使用的IDE是idea。1.在E:/my-project(我的电脑上&…

编译打包vue_Vue 源码分析( 一 )

Vue 源码分析( 一 )目录结构、版本、入口1、Vue 源码目录结构dist:打包之后生成的结果目录 examples:代码示例 scripts:配置文件 src:源代码目录compiler: 编译相关 (将template模板转换成rende…

使用grep4j轻松测试分布式组件上的SLA

因此,您的分布式体系结构如下图所示,您刚刚从企业那里收到了一项要求,以确保生产者发送并随后传输到下游系统(消费者)的消息的SLA必须快且永远不会慢于此。 400毫秒。 要求说: 从生产者发送到任何消费者的…

Python+Appium环境搭建

1、python环境搭建,这里就不做过多介绍 2、安装 node.js 2.1、官网下载node.js:https://nodejs.org/en/download/ 2.2、获取到安装文件后,直接双击安装文件,根据程序的提示,完成nodejs的安装。 2.3、安装完成后&#x…

以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...

学习Excel技术,关注微信公众号:excelperfectQ:如下图1所示,一个名为“InputFile.csv”文件,每行有6个数字,每个数字使用空格分隔开。图1现在,我要将以60至69开头的行放置到另一个名为“OutputFi…

BZOJ 1008:[HNOI2008]越狱

傻逼题&#xff0c;然后n&#xff0c;m写反了WA了一发。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<queue> #include<vector> typedef long long LL; using namespac…

属性被分为八大类不包括_Python语言---私有属性

属性分为实例属性与类属性方法分为普通方法&#xff0c;类方法&#xff0c;静态方法一&#xff1a;属性&#xff1a;尽量把需要用户传入的属性作为实例属性&#xff0c;而把同类都一样的属性作为类属性。实例属性在每创造一个实例时都会初始化一遍&#xff0c;不同的实例的实例…

Jenkins分层作业和作业状态汇总

您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置Jenkins工作层次的方法。 这是用例&#xff1a; 我们有一个主入口作业被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 &#xff08;第2级&…

【Python Programe】WSGI (Web Server Gateway Interface)

Part1: What is a Web server? 一个位于物理服务器上的网络服务器&#xff08;服务器里的服务器&#xff09;&#xff0c;等待客户端去发送request&#xff0c;当服务器接收到request&#xff0c;就会生成一个response发送回客户端&#xff1b; 客户端与服务器使用HTTP协议进…

华大单片机m4内核的滴答定时器_微处理器、单片机及其外设,处理还是控制?...

每项新应用设计都需要一个单片机或微处理器。当在两者之间选择其一时&#xff0c;需要考虑一些因素。以下是微处理器、单片机以及异构架构的概述。考虑选择微处理器(MPU)或者单片机(MCU)时&#xff0c;应用类型通常是关键因素。另一方面&#xff0c;最终选择取决于诸如操作系统…

安装提示卸载office_office2010 卸载工具

点击上方“蓝字”&#xff0c;关注我们获取更多免费资源我们为什么要用这个office2010卸载工具呢&#xff0c;很简单旧版本的office卸载不干净&#xff0c;在安装新版本的office时可能会遇到一些奇奇怪怪的问题。如果遇到无法安装office时&#xff0c;我们可以先使用office卸载…

人工通道会取消吗_二七政策将用于ETC?高速或将取消人工收费通道

随着社会的发展&#xff0c;有车一族越来越多&#xff0c;但是在这种情况下&#xff0c;堵车的情况就随处可见了&#xff0c;并且随着车辆的增多&#xff0c;高速收费通道的成本也增加了不少&#xff0c;而且通过时间越来越长&#xff0c;面对这种情况&#xff0c;交通局就和银…

在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson

如今&#xff0c;Oracle云无处不在。 最初&#xff0c;拉里&#xff08;Larry&#xff09;否认在很长一段时间内都需要云&#xff0c;并且在去年的开放世界&#xff08;Open World&#xff09;之后就宣布了一些非常早期的公告&#xff0c;而且可用性很差&#xff0c;似乎没有人…

推荐20个很有帮助的 Web 前端开发教程

在平常的搜索中&#xff0c;我碰到过很多有趣的信息&#xff0c;应用程序和文档&#xff0c;我把它们整理在下面这个列表。这是收藏的遇到的有用内容的一个伟大的方式&#xff0c;可以在你需要的时候方便查阅。相信你会在这个列表中发现对你很有用的资料。 1. CSS Vocabulary 一…

Scrapy爬虫框架解析

Scrapy框架解析Scrapy框架大致包括以下几个组件&#xff1a;Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader&#xff1b;组件Scrapy Engine这是框架的核心&#xff0c;负责控制数据流在整个系统的各个组件间的流动过程&#xff0c;并且在特定动作发生时触发相应…

Couchbase 2.0归类视图简介

大多数应用程序必须处理“主/详细”类型的数据&#xff1a; 啤酒厂和啤酒 部门和员工 发票和项目 … 例如&#xff0c;这对于创建如下应用程序视图是必需的&#xff1a; 借助Couchbase和许多面向文档的数据库&#xff0c;您可以采用不同的方式来处理此问题&#xff0c;您…

(转)利用WPF的ListView进行大数据量异步加载

原文&#xff1a;http://www.cnblogs.com/scy251147/archive/2012/01/08/2305319.html 由于之前利用Winform的ListView进行大数据量加载的时候&#xff0c;诟病良多&#xff0c;所以今天试着用WPF的ListView来做了一下&#xff0c;结果没有让我失望&#xff0c;我将一个拥有430…

有关循环和判断的几个小问题

注意在while嵌套的if语句之外&#xff0c;还有一个cin>>n;因为刚刚没有这一部分的时候&#xff0c;执行的结果是这样的&#xff1a; 把while里面的cin>>n;注释掉了之后&#xff0c;在cmd里执行的时候&#xff0c;只能输入数字&#xff0c;但是没有任何的反应。 但其…