软件设计奇遇记(四):领域杂谈

清代 陈澹然 在 《寤言二·迁都建藩议》 中这样说,

不谋万世者,不足谋一时;不谋全局者,不足谋一域。


当我们考察一个细分领域的时候,

最好的办法,就是从时间和全局角度,自上而下的进行了解,

前几篇文章中的分析思路,也正有此意。


从本文开始,就开始介绍 web 前端开发领域了,

包含了我在开发过程中,对前端领域本身的一些体会和理解。

分工

首先我们得了解 web 前端这个岗位是怎么来的,

这个问题,有助于我们理解软件行业的社会化分工。


在进行大规模工业化生产的时候,有两种常用的模式来提升产能,

一个是提高单位人工的生产力,另一个则是扩大规模。

这两种方式,在软件工业化时代,都曾发生过。

黑魔法

那么如何提高生产力呢?以前看到过这样一句话,现在想想深以为然,

Any sufficiently advanced technology is indistinguishable from magic.

翻译过来是:任何真正的高科技,看起来都像是黑魔法。


在软件行业就是这样,“黑魔法” 特征是由其 “知识生产” 的属性造成的,

一些软件工具、框架、系统、平台,

看起来越匪夷所思,它的科技含量也就越高。


又让我想起入行之前看过的一篇文章了,《论“炫技”的四个层次》,

作者将每个领域的 “玩家” 分成了 4 个层次,

  • 不炫技、扎实的基本功派

  • 炫技派

  • 不炫技但不畏技的王者

  • 炫技狂魔


我认为真正的 “黑魔法” 应来自于第三和第四段位,

要么有扎实到逆天的基本功,要么就是技能已超出了普通人的理解范围。


“炫技狂魔” 往往是引领时代的那个人,

普通人根本不懂这 “神技” 是如何弄出来的,甚至没有意识到他们在 “炫技”,

或者说根本不知道他们炫了什么技。


回想一下软件行业,个人计算机、编译技术、互联网、云计算、区块链,

我认为都是所属时代中,难以企及的巅峰。

web 前端也有这样的关键节点:jQuery,React,Node.js、webpack、TypeScript 等等。

规模效应

不能小看规模效应,能让更多的人参与到生产活动中,

跟提升科学技术生产力一样,可以大幅度的提升产能。


一个简单的公式就能说明问题,产能 = 效能 * 人数。

科学技术的发展,能提升效能;工业化生产增涨了人数,可以扩大规模。


软件行业的先驱们,也很明白这个道理,

所以一直以来,都在不遗余力的降低软件的研发门槛。

从穿孔纸带,到现在强大的 IDE 加持、或 lowcode 的编码平台,

人们无时不刻不在做的事情就是,让普通人更容易的创造应用程序。


这也是为什么有很多公司采用了 “工程师 + 外包” 的组织阵型,

工程师们做一些上游的基础设施层面的研发工作,

外包做一些下游的应用层的研发工作。


值得一提的是,这样区分并不是在褒贬任何一方,

而只是让专业的人做专业的事情,

协同开发过程中,区分上下游是不可避免的。


同时这也是领域足够复杂所导致的,

不同的软件开发者之间必须划分界线,降低沟通成本。

界线意味着,组织架构分层,以及软件架构分层。

前端岗位

正是有了科学技术的发展,门槛降到了足够低的水平,

所以,才有更多的人参与进来。


参与的人多了之后,领域也会变得繁荣起来,变得越来越复杂。

复杂又会导致划分界线。


web 前端这个岗位就在互联网时代应运而生了。

界面技术

从软件测试的角度来讲,界面和逻辑具有不同的性质,

为了提高测试覆盖率,将界面从逻辑中分离出来是一个常用的办法。


对于界面,不容易进行自动化测试,而业务逻辑则更容易。

所以一个足够复杂的系统,界面层肯定是要跟逻辑层进行分离的。

这不论从设计角度、维护角度、架构角度,都是合情合理的。


因此,前端是负责界面技术的一群人。

我没有将前端的职责范围,限制在浏览器端的网页技术中。


一个软件系统总是要跟外部产生交互,才能产生价值,

也就是说,不论这个系统是简单还是复杂,总要考虑 “如何与外部交互” 这个问题。


前端正是天然要解决这一问题的一类人。

他们的技术,起源于浏览器端的人机交互界面,

繁荣于各种端技术,例如移动端,物理网/车联网,甚至小程序。


所以前端主要是在处理 “界面” 的,考虑外部参与者如何与给定系统进行交互,

这个界面指的是系统的界面(交互层),而并不仅限于肉眼可见的图形界面。

例如常见的界面还有,命令行界面,Open API,等等。

内忧外患

自从 web 前端正式作为一个软件参与者的角色出现之后,

他们自身的发展,也是由内忧外患所驱动的。


上文我们提到了分工,以及新行业的产生,之所以能吸引一大批人来参与生产,

这是因为前端存在之初,门槛已经变得非常低了。

所以,当时就存在这样的一个红利期,各行各业的人都可以转行做前端。


这是一件好事,也是一件坏事。

好的部分是表明前端是一个年轻的行业,年轻人更有机会,且人才缺口很大,

不好的部分在于,行业发展太快,导致从业者的经验迅速过时。


所以老一辈的前端开发者们,能明显的感觉到自己基础能力的不足,以及学不过来,

甚至有时候还会处于 “不知道自己不知道” 的危险状态之中。

所表现出来的现象是,前端开发者们几乎把前辈工程师们趟过的坑都重新踩了一遍。


除此之外,基本功不扎实的附加效应是,更容易被技术营销所带偏,

换汤不换药的技术术语,在前端群体之中更容易滋生发酵,

导致一次又一次的集体狂热事件。


幸运的是,最近一两年已经有所好转了,得益于国内外行业领先公司的标杆作用,

给整个浮躁的前端圈子奠定了稳扎稳打的基调,

让人们可以冷静下来,重新从多方案跨技术领域的角度考虑问题了。

研发生态

除了岗位本身的产生和内忧外患之外,前端开发者生态也越来越齐全了,

记得一开始写前端代码,我用的是 windows 自带的 notepad,

后来辗转用过 notepad++,emacs,直到现在用着 VSCode。

但比起 Java 开发者早就在用的 Eclipse,IntelliJ IDEA 仍然有天壤之别。


从几年前连一个基本的工具库都没有,到现在 npm 成了最大的包管理平台,

前端的底层设施、社区环境,也变得越来越稳定和繁荣了。

从 JavaScript ES3 到 ES6,TC39 Proposals,到 TypeScript,

前端也有了自己可控的编程语言了。


研发流程方面,脚手架、编译构建、打包部署、发布,都已经自成体系了,

并不像以前那样依托在其他的技术栈之下作为附属产物,

前端有了自己的交付产物,有了自己部署方式。


除此之外,前端借着 Node.js 的机会,进行了一次能力的横向扩展,

当前桌面端、移动端、甚至网络层,也都有了前端的身影。


所以 阿特伍德 才这样说,

Any application that can be written in JavaScript, will eventually be written in JavaScript.

任何可以用 JavaScript 来写的应用,最终都将用 JavaScript 来写。


这表现了前端领域的强大生命力。

结语

本文从社会分工和发展趋势的角度,介绍了我在前端领域的见闻,

主要讨论了科学技术对提高生产力的作用,以及规划化生产的重要意义。


前端从最初的 “被分工”,到现在的泱泱大军,经历了很多故事,

内忧外患之中,浏览器人机交互切图仔,也已逐渐成长为负责系统界面的专业人员了。

这会导致,前端工作者更加的擅长与不同角色进行沟通,

更能体会到信息、文档、API、需求等,能产生外部效应产物的重要性。


以后前端工作者会参与到更多领域的开发工作之中,

这可能是一件有趣的事情吧。