Web开发

首页 » 常识 » 诊断 » 前端工程师修炼手册做事的三重境界
TUhjnbcbe - 2022/11/27 21:46:00
白驳风 http://www.zgbdf.net/m/
选择正确的做法

程序员,开发者or工程师

圈内对从事软件开发的同学有很多叫法,如程序员(Programmer)、开发者(Developer)、工程师(Engineer),甚至是码农,“码农”是圈内人用来自嘲的,那其他几个名词呢?表面上看起来都是做软件开发,叫什么真的重要么?

不得不说,叫什么并不重要,不论是自称还是他称,什么学历、几年工作经验也不重要,真正重要的是人所具备的能力。那么既然名称不重要?为什么还要谈论它?名称的真正意义在于能让我积极拓宽自己的视野,不断点亮自己的技能树,在职业发展的道路上不断积累、不断提升。

工程师做事的三重境界是什么?程序员、开发者、工程师这些叫法跟这三重境界又有啥关系?

第1重境界:把事情做成

把事情做成是公司对员工的基本要求,绝大多数入门同学就处在这个境界,这个境界的人可称为程序员(Programmer),对于Programmer通常需要告诉他做什么、怎么做,他所需要的是执行力和基础技能,这里的技能包括:基本的编程技能,至少会一门编程语言,对这门语言的熟悉程度至少能够让他把基本需求解决。具体到前端领域,对Programmer的要求就是需要能够使用JS、CSS、HTML,并且熟悉编辑器、浏览器来完成基本需求。

以常见的WEB端统计为例,为了研究页面关键元素的用户行为,需要对用户的部分交互添加事件统计(更常见的叫法是“埋点”),比如单击事件,表单提交事件,如果使用百度统计,在页面中埋点的方法大概如下:

aonclick=_hmt.push([_trackEvent,checkout,click]);购买/a

或者在JS中埋点:

//需要发送统计的时候

_hmt.push([_trackEvent,checkout,click]);

接下来由于业务需要,相同的统计,需要往GoogleAnalytics发一份,最简单粗暴的解决方案如下:

aonclick=_hmt.push([_trackEvent,checkout,click]);

_gaq.push([_trackEvent,checkout,click]);购买/a

JS中也需要做同样的修改:

//需要发送统计的时候

_hmt.push([_trackEvent,checkout,click]);

_gaq.push([_trackEvent,checkout,click]);

如果网站的页面规模、统计事件量小,变更埋点可能会比较轻松,但当页面和事件数量随着业务发展激增,估计程序员会埋点埋到手抽筋了。这个时候Programmer会不高兴,很可能Boss也会不高兴,因为埋点效率提不上来,并且容易出错。聪明的Programmer会发现,仅仅从表面上把问题解决貌似还不够。该如何破局?

第2重境界:把事情做好

具备什么样的能力才能把事情做好?对基本技术的熟悉程度超过(需要超过一大截)把事情做成的需要;对于业务需求有一定的前瞻性;能给出比较健壮的技术方案,能一次解决一类问题而不是一个问题,知道什么样的方案是不靠谱的,具备这些能力的人可称为开发者(Developer)。

不可否认,Developer是升级版的Programmer,相比而言,Developer大多数时候需要自行找到问题的解决方案并落地实施。通俗的说,面对具体的技术、业务问题,Developer能比Programmer顾及到更多的点,想到更多的方案。但是要实现这两个“更多”,需要的是努力、时间和经验的积累。

当然,从Programmer到Developer的进阶是可以加速的,需要压缩自己的时间在更短的时间内做更多的事情,注意这里不是把相同的事情重复N遍,如果是那样就很容易出现3年工作时间半年工作经验的尴尬。

回到上面提到的埋点方案,简单粗暴的解决方式存在什么问题?

首先,代码扩展性太差,后续如果需求方需要接入自建的统计,前端的工作量并没有减少,反而改起来会需要更加的小心翼翼;

其次,直接发送统计是否能保障精确送达,有没有可能存在漏报的情况,细心的同学肯定能想到这种风险;

最后,前端代码风格,其实不太推荐在HTML中内联书写JS事件,这就是脏代码的典型例子;

Developer会如何解决这个问题呢?先理清楚埋点代码的本质:发送统计的动作、指定统计参数,其中发送统计的动作跟需要接入的统计平台有关,确保统计到达也跟这个动作有关,这个动作跟统计参数无关,而统计参数本身跟节点的关系比较紧密,动作和参数可以解耦开。

基于这样的认知,不难设计出下面的方案,在所有需要埋点的地方约定参数的标记方式,使用data-event-*参数标记事件名称、事件类型以及额外的参数:

adata-event-name=checkoutdata-event-type=click购买/a

然后,在页面级别监听那些埋点的节点,并且恰当的时机发送统计代码,简化版如下:

//相同的参数发送给所有已接入的统计平台,如果平台不同,适配工作也在这里做

constsendEventLog=(name,type,param)={

_hmt.push([_trackEvent,name,click,param]);

_gaq.push([_trackEvent,name,click,param]);

};

//针对单击事件的处理,其他事件可以类似处理

(body).on(click,[data-event-name][data-event-type=click],function(e){

//拿到事件发生的节点

consttarget=(e.target);

//获取事件属性

constname=target.attr(data-event-name);

constparam=target.attr(data-event-param)

;if(!name){return;}

//这里如果是链接跳转,需要走单独的逻辑

sendEventLog(name,click,param);

});

上面探讨了从Programmer进阶到Developer的方法就是积累,那么怎么积累?我行动的基本法则是:做出好的东西先要知道好的东西长啥样。一方面,多读经典的书,仔细读高质量的文章,注意这里面读远比收藏重要,上哪里去找经典的书和高质量的文章?这需要建立自己的信息筛选机制;另外一方面,遇到问题要学会去搜索,找更多的解决方案,然后比较,融会贯通。

不得不承认,从Programmer进阶到Developer需要非常多的努力和积累才行,但是精进之路永无止境,下面说说第三重境界。

第3重境界:把事情做绝

能够把事情做绝的人,可以称得上是工程师(Engineer),那么到底怎么才算是把事情做绝?以统计埋点为例,能够洞悉埋点需求的本质,把日志发送和埋点标记解耦之后,将两者都做到极致。现实中埋点需求的来源通常是运营和产品经理,所有的变更基本都是由他们驱动,如果能够给他们提供工具管理页面中的埋点标记(思路关键词:XPath、微服务、浏览器插件,细节不在本文描述),就能把工程师从这种琐碎需求中解放出来去做更有意义的事情,这样也就改变了组织中不同员工间的协作方式,提高组织的效率。

想成为前端工程师,要先成为工程师。工程师应该具备怎样的能力?要回答这个问题,我们不妨仔细思考下什么是工程,WIKIPEDIA的原文如下:

Engineeringistheapplicationofmathematicsandscientific,economic,social,andpracticalknowledgeinordertoinvent,innovate,design,build,maintain,research,andimprovestructures,machines,tools,systems,

1
查看完整版本: 前端工程师修炼手册做事的三重境界