你的App是信息化时代的还是数字化时代的
信息化时代自内而外的包洋葱式开发模式,还适用于数字化时代的App吗?数字化的软件应用,应该具备什么特点?
“数字化转型”,每家企业都在大讲特讲。可是对于很多人来说,数字化也就是信息化的时髦说法而已,换了个马甲罢了。反正就是搞科技、建系统。移动互联网盛行之后,就是搞App。后来App比较难搞、难见效,就搞小程序。一句话,弄一帮IT人,开发!赋能!
Electronic Age - 电算化时代
这个时代并没有过去。从1940年至今,还在进行中。虽然算盘早就被计算器替代了,但是物理世界还有很多依赖传统能源的事物,继续需要被电能所“赋能”的工具替换掉,其中人力也是一种“传统能源”,替换难度比较高,人力并不是一种机械的、死板的简单重复劳动,它还包含一些特殊属性:“判断力” - 再简单的人手工作,还得通过五官的感知才能处理,对不对?“沟通能力” - 不要说工业化大生产,农耕文明时代,也需要协作,协作就需要交流、沟通,有没有?电子化或者说电算化,解决不了自动化的“判断力”、也还没有专门针对“沟通能力”取得突破,它基本上可以说是实现一种人力的部分替代或者补充。
电算化实际上还可以分为两个时代。
Electromechanical - 电子机械时代
实际上人类长久以来都是有“懒惰”的倾向,对“自动化”这事情琢磨了上千年,1450年-1840年这段时期,可以被认为是“机械计算”时代,人们琢磨通过精细巧妙的机械装置进行一些计算,发明出复杂至可以进行多项方程式计算的“Difference Engine”,对于今天的人来说庞大笨重到了荒诞离奇的地步,但是另一方面现在看,这些机械设备的精巧,又像艺术品一样。
电力出现后,把电力嫁接至之前的这些机械设备,替代人力操作,也是顺理成章。所以1940年哈佛大学制造出第一台电力驱动(因此是“自动”的)机械计算机 - Mark 1。
这台机器,高8英尺、长50英尺、深2英尺,总重量5吨。
怎么简单比喻这个时代呢?不是很恰当的说,是一个“人力+机械”向“电力+机械”的过渡时代,电算 = 电力 + 算盘?
Electronic - 电子化时代
众所周知的被称为第一台可编程电子计算机的ENIAC在1946年建造完成,它也是第一台“图灵完备”的电子计算机,这算得上现代计算机的鼻祖。之后的事情,大家都知道了,冯纽曼架构被发明,架构定义出处理器、寄存器/控制器、内存、外部存储、I/O等到今天为止在所有的计算设备 - 上至超算下至手机依然在沿用遵循的计算机基本结构形态。
在商业应用方面,自1964年IBM System 360诞生起,大型机成为每一家大银行必备,可以说开启银行电子化。
然后,计算机就朝着不断缩小体积的道路狂奔:中型机、小型机、微型机(“微机” - 对,一个曾经跟今天任何新技术一样火爆流行但早已被人遗忘的概念)...
服务器、工作站(workstation - 曾经风行于90年代中后期)、PC/Mac、手提电脑、手机、嵌入式设备,都是微机的“后代”。
电算化时代的App是怎样开发的?
电算化时代的Application(“App”),最大的特点是:单机运作。
所以每一台设备都是信息孤岛。和外部的连接能力非常有限,主要靠:行打印机(line printer)、磁盘、磁带... 数据的传播吗?你得靠人肉搬运 - 把磁带磁盘从一处搬到另一处、把计算结果打印出比转头还厚的纸张供阅读...
那个时代的软件是怎么开发的?并没有现在这么细的分工,什么前端、后端、UI设计、产品经理... 不存在的事情,“技术架构”也还没有成为一个buzzword。开发者自己包打天下,你得用MFC、Turbo Pascal、Visual Basic,GUI(Graphical User Interface)你得写、操作系统API你得熟...
随着软件逻辑越来越复杂、需要分工协作的场景越来越多,对应用逻辑的抽象方法、便于多人多团队协作的松散耦合思想开始成型,面向对象设计的理论开始发展,Xero PARC发明的GUI,引领了Machintosh、X Window、Microsoft Windows等图形界面的发展,更进一步促进面向对象设计理论的成熟(九十年代很多关于面向对象设计的经典,都会以图形界面的组件化实现作为例子)。
到了90年代中后期,CASE(Computer Aided Software Engineering)也出现了,不错,就是那个时代的“低代码” - 不要以为低代码是什么新生事物。
Code Reusability(可重用代码)、Design Patterns(设计模式)、Architectural Patterns(架构设计模式)、Code Refactoring(代码重构)等等的方法、观念、最佳实践,都是这一时期得到最大的发展。
Information Age - 信息化时代
这个时代就不用费唇舌多讲了,“信息化”简直被滥用到大家已经忘记了它的本源是什么...
电算化之后,一个个孤岛般的计算机,和外界的连接能力依然非常有限,可以说,算力起来了,可是I/O很弱,连接世界要靠人肉搬运工。此时并无“信息”可言,不能传播的运算结果,靠口口相传?这最多只能算消息,不能算信息。
所以,解决数据的自动化输入输出和传播问题,就迫在眉睫,信息化来了。
在这里,我们只拣几件要事说一说吧。
前信息化时代:Client-Server的兴起
回到大型机时代,程序员、操作员与大型机的交互,通过一种叫做“电传打字机”(Teletypewriter)的东西,嗯,就长这样:
我们现在所熟悉的“终端”,刚开始并没有屏幕(还没有被发明出来 - 计算机并不是一诞生就有屏幕的),就是专门的终端机,配有打印机,键盘,带有一个串口,通过串口传送数据到主机端,然后主机处理完交给终端打印出来。电传打字机(teletype)可以被看作是这类设备的统称,因此终端也被简称为 TTY(teletype 的缩写) - 传说中的TTY!
(今天还能看到TTY的“遗迹” - 为了支持终端设备,Linux 实现了一个叫做 TTY 的子系统。所以 TTY 既指终端,也指 Linux 的 TTY 子系统)
随着显示屏、显卡、鼠标的硬件技术以及图形界面的软件技术的发展,人机交互(Human-Computer Interaction)也形成专门的学科,创新连连。到了80年代末、90年代初,终于发展出Client-Server这种技术架构 - 现代意义上的“客户端”出现了。制造Workstation的厂商Sun Microsystems、Digital、Siclicon Graphics、HP... 一个个响当当的名字,它们就是那个时代的Apple、Google、Amazon吧。
这个时候,计算机的使用者已经可以通过一个局域网,连接到主机进行工作,并且有很多工作在一台强大的工作站本地也可以完成。
后信息化时代:ARPANET和互联网
客户端与服务器端、或者说计算机与计算机之间能够通讯连接,需要网络以及各个不同层级的协议的约定。诞生于1969年的ARPANET,是第一个公共的packet switched网络。FTP、Telnet、SMTP/电子邮件都是诞生在ARPANET。最重要的是TCP/IP这个解决跨网络间通讯的协议,在ARPANET上孕育,最终带来了互联网。
互联网的出现,才真正加剧的“信息化”的变革。网络技术从军用转向民用,计算机软硬件技术都在向着不断降低使用门槛、降低使用成本、缩小体积、变轻、优化终极体验的方向狂奔 -
- 计算机从大型机变成工作站,最终被家用的PC替代
- Client-Server软件架构中的Client,从专业门槛很高的“工业软件”,变成在浏览器里运行的轻量客户端
- 人机交互从打字机一样的终端变成鼠标、可视化图形界面
这个时候,计算机的使用者,可以通过互联网获得信息,可以通过网络远程交互,可以通过强大的服务器完成复杂计算任务或者实现协作。
可以说,打破了计算机之间的孤岛,形成了数据的流动和传播,这才是信息化的本质。
Open System自然出现
对于网络系统来说,open也是一件顺理成章的事情,因为计算机之间、软件程序之间,需要远程的对接、调用,彼此要打破信息孤岛、实现数据交换,不开放怎么整?
开放,随之而来的是:开放的API接口、公开的网络协议、明文的消息包数据格式,以及封装它们的软件工具包(SDK)、插件框架(plugin)、回调机制(callback & Web hook)。
Open System,在90年代也曾经是最火爆最时尚的理念(和技术产品营销口号)。确实,要实现信息化的话,想不出如何能不开放,如果说数据变成信息是因为它流动、传播,那么把封闭就可以说和信息化背道而驰。
信息化时代的App是怎么开发的?
这个时代的应用系统,特点上如果只能用一个词形容,那就是“转接”。所谓的企业信息化,很大程度上是在干这事。
很多企业,尤其是大型企业,已经经历过电算化的阶段,累积了一系列的“电子系统” - 大型机时代的历史遗留系统、Client-Server时期的应用系统、仅供员工使用的内部系统等等,到了互联网来临,不得不被迫重用这些系统与互联网对接,在90年代末至本世纪初,IT部或系统集成商最常遇到的项目是这样的:
- 甲方企业已经有历史遗留的库存系统、ERP、交易系统、其他各种行业特有的系统,仅供内部员工进行使用。员工基于使用结果,再人工的与提出业务诉求的客户进行交流、交互(打电话、填表、现场拜访...)
- 现在想把部分功能“封装”成网页,供网上客户进行一定程度的自服务
IT/系统集成商的工作,就是通过各种手段,把原来密封的系统,无论通过倒数据、批处理同步文件还是通过网络接口,把信息给弄出来或者弄进去。这过程中,往往不能触碰或者改造历史遗留系统,而需要建设一个中间层,充当一个转接器,转接到互联网上,并解决高并发、网络安全、数据加工、协议转换等问题,从而实现了两类异构的技术的对接。
从Web1.0开始,企业信息化进程,就是一个由内而外的洋葱逆生长过程 - 企业内部的业务能力,先电算化,再层层包装输出。
即便是以互联网化的技术新建的系统,也差不多就是:需求分析 --> 数据建模(data model、ER diagram...)--> 领域建模(domain modeling - 但往往被省略)--> 整数据库 -> 包装一些服务(开始是SOAP/XML/SOA,后来是REST/RPC/GraphQL)--> 前面画张皮(HTML/JavaScript/AJAX)。
相应的,IT也出现更加精细的分工协作:产品经理、测试工程师、Web前端、移动端、后端、DBA、运维...
这就是信息化时代软件开发的特点。
Digital Age - 数字化时代
时间来到了现在,技术界、媒体又发明出新的概念,叫做数字化,正如大部分老百姓不会弄明白电子化电算化和信息化的区别一样,这回出来的数字化和信息化有什么异同,包括很多企业的决策者在内,都不见得能搞清楚,反正就是IT投入 - 硬件、软件、开发,建系统、搞App...
数字化反正是众说纷纭的概念,麦肯锡有麦肯锡的定义、IBM有IBM的说法。在这里,我们也拣跟软件技术相关的事情说几件。
数字化的技术起因
技术成因,起码有这几个:
- 智能手机诞生,移动互联网出现。智能手机的算力和尺寸(form factor),让普通人手里掌握了突破时空约束的工具。倒逼各行各业与之进行连接。过去开门营业的时间地点企业说了算,现在消费者说了算
- 社交网络兴起。形成人与人之间史无前例的连接、互动能力,任何信息传播产生巨大的网络效应
- 软件工具的“普惠”。文字博客、视频直播,都普及到任何人手中,内容生产可达过去只有专业人士才能制作的水平。互联网从1.0的只读型的Fan-Out(一点输入、多点阅读)架构,变成了Fan-in + Fan-out(万众参与,多对多读写)架构
云计算、大数据,开始时都不过是副产品。
数字化技术的特点是:平台化、网络效应、连接。
数字化并不是替代信息化
说是几个不同的时代,可是它们之间没有完全替代彼此。首先,物理世界还在电子化的进程中,以电能替代其他“能”,还没有最终完成。其次,电子化电算化必然导致系统、网络、异构技术之间的信息流通,信息化和电算化已经融合。但信息化同样也没有完成,企业的信息化建设,永远在进行中。第三,信息化是一个由内而外的、内力驱动的过程,数字化是由外而内的、以不断建立连接为导向的过程。与其说数字化是信息化的下一阶段或者新马甲,还不如说它们是互补的。
数字化建设,也无需等到信息化完成。信息化程度低,要补课是肯定跑不掉的,但是也不等于就无法展开数字化的尝试。国内很多企业,实际上并未经历过真正的电算化 - 六十至八十年代的这个时期基本错过。但是此后不是就一步迈入信息化时代?技术的发展趋势,总是在不断降低门槛、降低使用成本,挑战在于企业经营者能否与时俱进,思维上接受和认知上理解,让自己的企业经营能适应技术的变革。
数字化甚至不仅是一个技术议题,它涉及平台经济、数字合规、隐私保护、组织结构、企业文化、价值体系方方面面,它甚至促生CDO(Chief Digital Officer)这样的有别于CTO、CMO的领头人职能。不在本文探讨范围。
数字化时代的App是怎么开发的
符合数字化时代特点的App(不仅限于iOS/Android),技术上不能单纯的走信息化、Web1.0时代的老路,技术特点主要体现在:连接能力强 - 内容的转发、传播、分享达成网络效应;生态化 - 这是信息化时代Open System的自然延伸,既然是全靠网上讨生活,就必须开放API、开放插件机制,让他人接入,或者主动去连接合作伙伴的接口、入驻他人的网络空间,实现你中有我、我中有你;平台化 - 在网上你不再只有一个公司大门、一圈公司围墙,企业边界被重新定义了,企业是通过网络同时接触多边的,有“客户侧”、有“伙伴侧”、有协作竞争的“同业机构侧”,金融等行业还有“监管侧”,在数字化网络中,你无法奉行“单边主义”,所以把自己定位成一个平台去“调度”、“撮合”多边,是合理的,并不只有大企业大公司才能拥有平台思维。
互联网公司的App技术,数字化色彩比较强,因为它们就是在网上的营生、云上的干活,具备较强的连接基因。相比之下,很多传统企业的IT,依然囿于传统电算化、信息化软件开发思维模式的窠臼。
改变思维习惯并不容易,有没有什么好的办法?
我们想从开发用的技术工具入手。
“我们铸造了工具,此后工具塑造了我们”
原文是“We shape our tools and, thereafter, our tools shape us” - 这句出于一位学者John M. Culkin在50年前的话,近年来又被重拾。因为智能手机这种人类发明的技术,对人类本身的未来影响太大了;同理,人工智能作为一种技术工具,它对“我们”的改变又会是什么?
扯远了一点,在这里我们只想谈一下数字化时代的App怎么开发,能否提供一个工具,让开发者无需去回顾、反省、理解上述的什么电算化、信息化、数字化,以之开发即可生产出一款符合数字化特色的应用?
我们的方案,是FinClip小程序容器技术。这个技术帮助开发者实现:
- 连接。只要把FinClip SDK嵌入到自己的App中,马上获得小程序运行能力。小程序已经在互联网上被充分证明是一个非常有效的促进连接的技术形态
- 生态。让开发者、企业拥有自己的小程序应用商店,在这里可以实现与合作伙伴的资源整合 - 例如让合作伙伴把数字服务以小程序方式上架、投放到自己的App中
- 敏捷。把业务功能碎片化、轻量化,符合移动互联网上用户时间碎片化、随需随用、用完即走的使用特点。功能点的粒度可控,小程序化的进行灰度发布、AB测试、实时上下架管理,让试错成本得到最大降低、试错风险得到最大控制,可以说是数字化应用敏捷发布的必由之路
- 多端。连接强调的是和用户的多点触达,同一个商业场景,小程序化之后,可以展现在手机端、也可以运行在PC端、更可以出现在智能电视和车载大屏上,多端同步、转发分享、一致体验,甚至可以无缝对接至互联网公共平台,代码只写一次,多处运行
使用这样的技术,可以非入侵性的把FinClip嵌入到现有的App中;只有小程序没有App?可以让FinClip帮你反向生成 - 给它一个小程序,它会给你一个App。
数字化转型?IT自己先数字化
信息化时代开始形成的企业IT岗位职能的专业化细分,也面临一个挑战,就是岗位之间的协同、软件生产流水线的效率。优化的最佳手段,是这条流水线自身的数字化。
你的企业IT软件生产流水线,是否数字化了?先看看这几个问题:
- 是线下的还是线上的?
- 牵涉的岗位、部门范围有多广?
- 限于内部的还是对接外部资源的?
如果IT的生产流程,主要依赖线下封闭开发、线下会议,走个UAT提测或者上线流程主要靠OA、邮件方式打报告,那么它就是线下的,非数字化的。
如果涉及的协作岗位仅限于IT内部,例如合规法务审核、业务部门验收、系统上线发布等等流程都是各自独立的、脱钩的,那么它是有部门墙和比较低效的,非数字化的。
如果所用到的外包商、开发商的技术人员,离开现场就无法安全合规工作、或者受制于各种约束无法与正式员工实现线上协作,那么它也是非数字化的。
一些互联网大平台,为什么能够安全支持数以百万计的网上开发者、安全运行数百万的小程序?无疑有一些好的实践可以借鉴。FinClip帮助企业IT解决了其中部分问题,例如它帮企业建立小程序的“开发者中心”,无论员工、外包还是外部合作伙伴,均可以开发上架应用,有灰度发布和实时下架的能力,风险得以一定程度的控制。此外,小程序化的业务场景,在灰度发布后,可以通过白名单设定可见范围,由企业内部指定部门例如合规、风控、法务、业务部门“业主”等相关的岗位人员进行测试验证、转发分享,在获得第一手的体验感知之后,才准确判断业务的风险,作出上线决定。这就是在线的协作,与过去IT以外部门仅通过OA流程里的文字报告、系统截图来作出判断,无论在效率上还是在风险控制上,都不可同日而语。
IT自身做好跨岗位、跨部门、跨企业边界的连接与协同,逐步实现自己的数字化,是企业数字化转型的第一步。以数字化协同文化、用数字化开发工具,开发数字化的业务应用,是顺理成章的事情。