关于前端工程师的自我发展

前端

什么是前端开发工程师

前端开发工程师(或者说“网页制作”、“网页制作工程师”、“前端制作工程师”、“网站重构工程师”),这样的一个职位的主要职责是与交互设计师、 视觉设计师协作,根据设计图用HTML和CSS完成页面制作。同时,在此基础之上,对完成的页面进行维护和对网站前端性能做相应的优化。另外,一名合格的前端开发工程师,应该具有一定的审美能力和基础的美工操作能力,能很好的与交互及视觉协作(这是百度百科上对于前端开发工程师的定义),用JS将页面构建师所完成的页面构建稿与后台工程师所提供的数据服务的无缝连接,同时需要考虑交互逻辑(大部分时候,会有UI设计师事先在UI稿中提供)和用户体验。在开发过程中,需要跟很多人进行沟通:与产品经理沟通产品细节,与后台工程师沟通数据服务的提供方式,与页面构建师协商代码上的细节(很多JS的操作逻辑需要与构建代码共同完成)。因此,目前的工作对本人的与人沟通能力、个人技术能力、统筹协调能力都提出了相应的要求。

前端开发工程师应具备能力

1. 与人沟通

作为一个主要以开发JS为主的前端工程师,我们需要跟很多人进行沟通,策划产品的产品经理、构建页面的页面构建师、提供后台数据服务的后台工程师,有时候也包括前端架构师(如果涉及了一些较大范围的前端开发项目)。沟通的内容也各异包括产品、代码、架构等等。于是就要求我们对产品有深入的理解:产品的呈现方式、产品的目标用户、每个产品细节设计的理由。对于基本的理解,我们都可以做到,但是如果我们能够在理解的基础上,把自己的想法(因为前端工程师的想法更多的是从技术角度出发的,能够涵盖产品经理很少能够考虑到的一些问题)提供给产品经理,让其能够对产品做更好的优化,那就再好不过了。但在与产品经理进行沟通的过程中,我们需要把握好“建议”的尺度,切忌过分对产品的设计做太多的建议或是过分的否定,要明白作为前端工程师,在团队中所充当的角色就是把产品经理传达的产品尽量完整的实现。过分的跟产品经理因为产品设计或者规划方面的内容进行讨论就偏离了前端开发工程师的职责范畴。同时,作为前端工程师还需要与后台工程师就数据服务的接口进行大量的沟通,有时候也会参与一定量的后台开发(目前,在我们团队中,前端工程师将需要承担一定的PHP开发)。在与后台工程师进行沟通时通常碰到的问题都是因为考虑的角度不同,或者是没有从对方的角度进行考虑。很常见的一个问题就是,前端工程师和后台工程师都想尽量减少自己的开发工作量或是自己负责的模块出错可能性。我把这个问题抛出来,并不是鼓励大家什么都为对方考虑,让跟自己合作的人所承担的任务越轻松越好;但是,我希望在前端工程师和后台工程师进行沟通时,双方都能够更多的从大局考虑。在碰到类似的沟通上的问题时,将更有经验的开发人员(通常是团队的leader)加入到讨论中将使得双方的讨论很快的得到结论。

2. 个人技术

对于前端开发工程师而言,所涉及的技术很多,所需要懂的东西也很多,相比于后台工程师,他们了解更多的产品,相比于产品经理,他们了解产品背后的实现。这样的定位使得前端开发工程师,需要了解很多的技术内容。纯粹的从技术角度而言,前端工程师需要对JavaScript精通。因为JavaScript是我目前最重要的工作内容,所以,我想详细的对前端工程师相关的JavaScript技术进行描述。我所理解的前端开发工程师所需要了解的JavaScript技术绝对不仅仅是了解几个JavaScript函数,或是写多少行的JavaScript代码所能体现的。首先,JavaScript是一门相对比较尴尬的语言(因为它是一门脚本语言),它没有想其他很多语言一样,有很多体系化的教程;而且据我了解,目前还没有学校将JavaScript作为必修课程;但是,互联网越来越流行,互联网中的内容的交互性也越来越丰富,因此JavaScript技术也就越来越被市场所需要。所以,大量的需求和匮乏的学习资源导致了一些相对比较畸形的现状。因为这些情况也就导致了作为JavaScript的程序员,我们需要做的事情更多,需要走的路更长。下面,我从三个纬度来讲一讲自己的理解:

3. 开发效率

JavaScript程序的开发效率很大程度上决定于前端工程师在接到需求的时候是否对整个业务逻辑有充分的思考。我个人的习惯是在当需求到我手上的时候习惯根据具体的业务逻辑将业务的主要事件流的流程图在草稿上画下来,也包括异常事件流的流程图。然后根据纸面上的流程图思考具体的代码实现。通过这个环节,可以提早发现常见的错误,避免开发过程中不必要的返工。同时,完整的流程图可以帮助我们更高效的进行编码,同时把一些可以复用的函数(或是代码)在编码之前就做好规划。这里我又想提一下JavaScript的设计模式。由于JavaScript的语言特性,导致了在JavaScript使用设计模式的程序员相对比较少,也可能是因为JavaScript在很多项目中充当的角色没有使用设计模式的需要。那么,我们有没有必要对JavaScript的设计模式做深入的了解呢?回答当然是肯定的,我们在思考设计模式的过程中,不仅仅需要思考设计模式本身,同样也要考虑什么时候才需要使用设计模式(这一点在JavaScript中显得尤为重要)。最近阅读并翻译了一本名为《Essential JavaScript Design Pattern》的书,里面把一些常见的设计模式,已经在JavaScript和JQuery中的实现都做了简要的介绍。书中提到的设计模式在JavaScript中的具体实现的确很巧妙,也都实现了很好的效果(有的是提高了开发效率,有的是提高了程序的可扩展性等等)。但是,有一个很重要的方面却下降了,可读性。如果阅读运用了这些设计模式的程序的人是一个JavaScript的初学者,对于他而言,理解这些程序将耗费大量的时间和精力。所以,在我们使用设计模式之前,我们需要考虑的因素有很多:是否能够带来代码上的精简,是否能够提高程序的效率等等,现在又多了一点:将来可能阅读这段程序的人能否理解它。对于开发的效率,个人觉得还有很重要的一点就是碎片化时间的管理(对于这一点,打算另写一篇文章)。

4. 团队合作

前端开发团队的团队合作似乎向来不被大家所看好。首先,因为JavaScript语言本身对于面向对象思想的支持不是很良好,因此,对于同样的业务逻辑,很难有统一的程序实现的描述,也就导致JavaScript的开发团队很难做好相互之间的合作。其次,很多情况下,前端的开发任务量相对比较小,即使是相对较大的前端开发项目大都能一个前端工程师就可以完成。那么是不是前端开发团队的合作就是没有意义呢?显然不是。对于前端团队的合作,我们需要换一种思维模式来考虑,由于互相之间协同开发的必要性和可能性都比较小,前端开发工程师大多项目都是单独完成的,我们可以侧重的维护一个公共的基础库(就像我们现在的LEGOS),使得互相之间的开发过程中可以复用,提高了整个团队的作战效率。对于前端的协同开发,本人目前并没有怎么参与大型的前端开发项目,所以不予评论太多。

5. 新技术摄取

作为前端开发工程师,对于新技术汲取的能力必须非常的强,因为在前端开发领域技术的迭代速度相当的快。甚至可以说,前端开发领域就是拼谁能够尽快的把握新的开发技术。譬如,在HTML5还没被大家所认可的时候,整个市场大都倾向于Flash,但是当HTML5面世,整个市场瞬间被打了180°的急转弯。在这样的市场大环境下,我们必须要有迅速汲取并应用新技术的能力(也就要求了前端开发工程师必须要做到高效)。所以,对于个人发展这个问题来说,我更大程度上觉得,是把学习并应用新知识和技术的过程训练的炉火纯青是在前端开发领域叱咤风云的关键。

但对于JavaScript语言本身也面临着这样、那样的挑战。Google推出的Dart就是抱着把JavaScript踢出历史舞台的目的。也正如我所描述的第三点中提到的,作为前端工程师必须要有能够应对各种市场对技术需求变化的能力。

从过去几个月的工作经历中,对于自身的时间管理也是影响自身工作的很关键的一方面。由于在目前团队中的前端开发需求都是相对比较零碎的(大部分为优化、调整类的需求),但完成这些需求大部分的时间花在了沟通和协商上,这样的工作的性质也就导致了工作期间的时间被碎片化了。在这样的工作环境下如果我们想要把所有的工作内容都处理好,那就需要具有很好的时间管理能力。

在这过去半年的前端开发工作中,自己本身对于新技术没有做到积极主动的去了解、去学习、去应用;另一方面,在工作中没有做好时间上的统筹规划,也导致自己疲于应付公司的各类需求。最后也就导致了本身的技术水平始终原地踏步的现状。这两方面也是本人接下来需要努力的重点。于此与大家!共勉。