在腾讯的第七个两年

Ghostzhang 发表于

这两年过得比以往丰富多彩。学会了利用空闲时间看书、听书。这一年读过的书比前面10年加起来都多,读书确实开阔了视野,让自己更加脚踏实地。

这两年也想了很多东西,工作、生活、生命等等。不知怎么大家开始关注起『死亡』,原来还在担心30岁之后还能不能写代码,后面变成35岁能不能有工作,再后来就是不知道什么时候实然就『猝死』了。怕死就不会死吗?那有什么好担心的呢?没想到2020年的春节又遇上了很严重的新冠病毒事件,至今仍在全球传播。搞得全世界各国都手忙脚乱,也许世界的格局也将在这次事件之后发生很大的变化。

经历了一次更大的转折,响应了公司『管理人员可上可下』的号召,虽然我之前根本算不上什么管理者。但经历过了,眼界就开了。生命有时候是被动的,你能做的只是主动去适应。

在后端同学的身上能感受到是从产品、从解决问题的角度在思考如何出方案的,而前端的同学身上更多的时候感受到的是『懒』(笑脸)。可能我接触的后端同学都比较厉害,让我有了这样的感觉。接触了领域驱动设计1的相关理论,做为一个后端小白,算是打开了一扇新的窗,给我最大的触动就是前端所接触的东西确实是比较窄的。也因此对前后端的岗位有了一些思考。

前后端的差异

所谓事在人为,那我们先来分析下做『事』的人,为什么做这些事的是这些人,而不是别的人。不是说别人不能做,能不能做是一部分,愿不愿意做是另一部分。当然是不是自愿可能也是问题。

面试过不少前端的同学,我总会问到一个问题:『你是因为什么原因选择走前端这条路的?』得到的回答基本上可以概括为:『前端所见即所得,觉得比较有成就感』、『前端变化比较快,能学到比较新的东西』,我自己也是差不多的原因。从这些回答可以看得出一些特点:

  1. 对反馈的及时性要求较高
  2. 偏向视觉系,对视觉刺激比较敏感
  3. 对新事物比较好奇
  4. 对『成就感』敏感,有趣的事更有吸引力

前端人员对看不到效果的方案都是不太能接受的。不怕折腾,就怕看不到变化。还有就是怎么方便怎么来,总想绕过规则。前端的人不太能静下心做事,对新东西很有兴趣,受不了重复性的工作,喜欢被关注,但前端又是很容易达到天花板的岗位,就像麦兜里的吃火鸡一样,除了一开始的新鲜感,之后其实就是“吃下去”的机械工作。受不了了,怎么办呢?折腾新东西呀,从工具、库、框架;跨界折腾,做产品出交互画UI码代码塔服务做运营…美其名曰『全栈』。

所处环境

前端跟终端打交道比较多,各位浏览器、屏幕,各种版本、尺寸、分辨率;前端代码运行在浏览器中,而后端代码运行在服务器端,两者算力的差距也让代码的实现方式有明显的差异,如后台代码可以在架构上尽可能的分层以划分逻辑,但前端的代码如果写得太复杂,有可能浏览器就给你『白屏』看。

关注点

前端2所关注的问题集中在界面的展示与操作上,设计稿还原是最基本的要求,在此之上是设计理念的还原,这部分可能不仅仅局限在前端的部分,也包含了对产品的理解及后端的实现。前端和后端都是一个产品必不可少的组成部分,都很重要,都应受到理解和尊重。界面做得再酷炫,服务总是出问题,是无法使用的;同样,后端服务再稳定可靠,前端体验各种不顺畅,用户也是不会埋单的。

而前端里面又细分为负责界面实现的『重构3』及负责交互体验的『前端4』两部分,为什么还要再细分呢?个人观点:虽然都是写代码,但关注的东西是不同的,重构关注的是视觉的呈现,如何使用代码在终端上尽可能的呈现出产品所想传达的视觉表现;而前端关注的是如何与后端更好的数据交互及将数据在合适的时间展示到合适的位置上,这里会涉及终端的性能、网络等的研究。

分工的细化同时产生了很多边缘的工作,边缘的工作谁做?这些边缘的事多是连接上下游的事,而处理边缘性工作的人相对来说广度比深度更好。深度的工作需要有环境、制度的支持;而广度为主的工作会更容易生存,但相对成就感低。不过沉淀到一定程度后都是差不多的,差异是在普通人身上。

比较有争议的是部分表现的实现是需要借助js5来实现的,这使得无法简单的以使用哪一类开发语言来区分重构和前端,也就是边界模糊的问题,而不管哪一边,剥离了这部分的js,都将变得更加的『简单』,不够『酷』。于是都想把js的部分划到自己的技能树里,最终的结果只能都做。再加从业人群的特点,『全栈』的流行也就不难得出了。当然背后更大的一个推力是因为MVC等前端架构的出现,让组件成为最基础的部分,当前端架构把原先运行阶段的『分离』给搞成『不分离』了,那作为开发者,你不『全栈』一下,连个组件都做不好。这算是『被全栈』了。

『全栈』是出路吗?『成也风云,败也风云』!送上一张图——技术S曲线,希望能更客观的看待各种技术的出现和消失,不是技术本身的问题,是环境在不断的发展。

技术S曲线

MVC等架构在前端能火起来,很大程度也是环境适合了。移动端兴起,而大部分移动端的界面数量少、复杂度低,适合做单页面;移动端组件规范化程度高、数量有限,更多开发精力集中在数据上。

前端为什么总在处理兼容问题?

后端同学都在搞算法,前端为什么总在处理兼容问题?

运行环境跟不上追求更酷更新的内心。前端的标准大多数是处于草案阶段的,而正式的标准大都处于要被草案代替的阶段。简单来说就是终端的发展很快,而终端的差异性决定了前端总是在处理兼容问题。同时也就有了终端的『统一大业』这一伟大的目标,当前移动端走在前面的要数微信,但在自身版本中同样也存在着差异;而平台端则是Chrome。但这只是终端的差异,从产品角度来看,也是不可能消除差异的,因为要『竟争』,这或者是个无穷尽的问题。有一个有意思的现象,前端总在做一件事——组件库。各种各样的组件库从十几年前在开始有人做,到现在还在做。有段时间我就在想,为什么这么多年下来,总没有一个组件库能实现大一统呢?随意搜索一下『前端库』、『UI库』、『组件库』,你就能看到一堆文章介绍各种各样的库。而库开发者做这一个库的理由中,一定会有这么一个理由:『为了减少差异、提升开发效率』。这工作理论上是行得通的,对于产品来说也是有意义的,但这问题跟环保有得一拼,得看国情。

产品差异化之路

在学习DDD1时,看了到洋葱架构,感觉像看到世界地图,发现原来自己一直只是一个偏僻的小村落里,像一只井里之蛙,以为世界只是一口井。然后就明白『为什么前端总在处理兼容问题』这个问题的答案了,因为生活在地震带上。地缘位置决定了最根本的问题。创新是产品的生命力,而创新就要打破常规,而打破常规如何能不变?

三星、华为、TCL等厂商正争相推出自己的柔性屏终端,可折叠、弯曲,跨屏显示等等新的体验方式,都将给前端带来不小的变化。

TCL的原型机 图片来自 TheVerge

因此,所有试图统一产品表现的工作,都将非常非常困难。

当下与未来

无数的历史案例都能说明,生存环境对生物的影响是巨大的,决定了生物的一些基本特征,如体形、性格、特殊能力等等。但从来都是生物是去『进化』适应生存环境,而不是环境适应生物。人类看起来是个『例外』,因为人能在一定程度上改变环境,让环境更适合人类生存,不过这种改变也是相对的,对于大自然这个大的系统来说,人类的这些改变不足以影响整个大系统,毕竟对于地球几十亿年的生命来说,人类的出现就像细菌进入了人体。《人类尺度》中有这样的观点,当下人们在担心气候变暖,而没有想过可能即将到来的下一个冰期,人类的快速发展得益于地球当前所处的大周期中的相对平稳的时期,而这个周期终将结束,人类也许什么都改变不了。可能不太乐观,但想透了未来,就能更好的活在当下。之所以『活在当下』那么难,不正是因为所有的『当下』都在考虑未来吗?而未来根本就不可预知。我时常会拿股票的曲线举例子,人们总以为能从那根曲线分析出未来的可能性,但下一个点在出现之前根本就不可预知,所有的分析都是基于历史数据的,都是事后诸葛。无非是想找个『理由』,为可能的『后果』讨个开脱的说法。

星球比例 图片来自 网络

在接触了软件方法后,最大的感受就是认识到自己是井底之蛙。自以为很了不起的发现,其实不过是前人思想中的一个小角落,十几年前就己经提出来了,只是因为现在分工的细化,让原本是一整体的内容被拆开了,当然现在的理论和方法会针对当前的情况加以改良,但并无多少的原创性。也就是说,多读书,能少走弯路!

最近的一年也开始转做交互设计相关的事情,是一个新的领域,但也不算陌生,从以前就比较关心用户体验相关的设计,对心理学也有兴趣,甚至一度想过去当心理咨询,不过显然是想简单,只是看了一小段刑侦小说,就感到自己还是太年轻……社会远比想像中险恶。

系列文章

  1. DDD(Domain Driven Design, 领域驱动设计)是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。  2

  2. 指web前端 

  3. 以HTML和CSS为主要开发语言 

  4. 以javascript为主的开发语言 

  5. Javascript的简称 

讨论