前言
最近阿里云新推出了一个【组装式应用集成开发平台】叫做“云巧”,我从官网下载了白皮书了解了下(官网地址:https://gts.work/portal/yunqiao?spm=a2c6h.12873639.article-detail.6.5a81e4fc4QxPZl),可以从下图看出,云巧集成的功能还是蛮强大的。
只是【组装式开发】这个新概念可能很多人会感到困惑,正好我主要是做Python数据挖掘方向的,这里我想拿最简单的编程语言之一——Python举例,来带大家简单理解【组装式开发】。
在正式介绍这个概念之前,请允许我先讲一个自己的小故事。
一、我的代码Copy简史
我相信大家都有过部分功能开发不出来,问了身边的大佬也没有很好的解决方案,不得不面向谷歌编程,Copy一下别人代码的经历,作为一个键盘上只有3个按键的伪程序员(如下图),我的Copy经历大致经历了以下5个阶段的发展:
1、【Ctrl C+Ctrl V】阶段
一开始是完全靠自己写代码,从最基础的import numpy as np
开始一点一点码,通过搜索引擎到CSDN、Stackoverflow等知名“救火”平台查找解决方案,但毕竟是别人的代码,每次使用都还要从头到尾去学习每一行的功能,可以说效率非常低下,缺点一大堆:机型和环境适配差,80%的解决方案都只有代码却没有接口文档,并且根本不会告诉你相关依赖库,而针对自己实际情况的提问又很难得到回答……
2、【封装代码库】阶段
后面随着不断学习,发现其实有很多大佬开发的、比基础Python库更高级的封装库,比如能够调用SQL来处理Dataframe的sqldf、中文分词jieba、能绘制出超级棒图表的pyecharts等。
这些库基本覆盖了Python基础库无法处理的所有问题,使用时也不用去学习源代码每一个函数的耦合关系是怎样的,并且很多Github高星的库会有官方文档,实在不行你还可以根据自己的问题在Github的Issues找到答案。
不过还是有问题,因为不同函数的参数不同,学习成本依然比较高,遇到特别困惑的还是得去一点一点去看官方文档,很多官方文档虽然很棒,但还是有一定的学习难度。
除了【封装代码库】以外,我在这个阶段还接触到了一个神奇的IDE——Jupyter Notebook,它最大的特色就是写代码像堆积木一样,每一个区块你可以指定它实现的功能,我以后Copy别人代码就只用Copy自己用得到的功能就行,也方便了我调试,一些最基础的数据清洗工作我也能够通过复制Cell实现快速复用。
3、【Docker+API】阶段
如果要问一个windows平台的程序员最痛苦的时候是什么,那一定是【搭建环境】,当linux平台的开发者通过一行sudo apt install XXX
一步搞定环境的时候,我还在改windows的环境变量。
并且由于每次我使用新的第三方库都需要安装新的依赖库,导致我的Python原生编译器已经被各种第三方库占满了,可又不知道哪个有用哪个没用,所以我一直期望有一款神奇能够一键解决开发环境问题,直到我遇到了Docker。
Docker我相信大家都知道,它通过容器封装了运行代码所需要的全部环境、依赖、源码,想要实现某个功能,可以说是直接Docker pull就能够解决,并且学习成本比上面的方案还要更低。
不过Docker还是存在一个问题,那就是很多容器都很大(几个G)左右,虽然在千兆网下下载用不了多久,但可能大家还是好奇:
“有没有不用下载,不用怎么学习就能够直接用的Copy别人代码的方法?”
那就是API,API我相信大家都很熟悉,这里就不详细介绍了,仅需要一个接口文档,就能够在开发者平台调用N多种功能,最重要的是API的学习成本应该是最低的,如果你觉得难,那应该是要实现的功能比较复杂,可以看到某地图的API,一行JS代码,0技术基础调用起来都非常简单。
4、低代码/无代码
我很长一段时间都以为,Docker+API调用就是Copy别人代码的究极形态了,但我一直没有考虑到一个问题:上面3个Copy别人代码的过程都是面向技术人员的,有没有非技术人员也能够自由搞开发的方式?
如果有的话,那一定是【低代码/无代码】,比如钉钉宜搭,看不到半句代码,全都是人类语言,不需要设置参数和管理接口,只需要拖动模块就能够像搭积木一样构建起一个Web应用,因为界面设计简单,我司的HR就使用过它搭建过疫情管理应用,并且还不需要类似DevOps、敏捷开发之类的工程管理思想,上线即可用。
可惜的是,【低代码/无代码】唯一的缺点就是目前适用范围很小,并且生态相对封闭,导致能够实际开发的应用比较少。
二、回到【组装式开发】
上面说了这么多,你可能会问:“这上面的这些到底跟组装式开发有什么关系啊?”
其实,在我开来,组装式开发可以说得上是继【低代码/无代码】之后“Copy别人代码”的第五阶段,它可以说是囊括了上面这些Copy方式的大部分优点,改进了很多缺点。
比如:
组装式开发能够像【API】一样,不需要懂源码,就能够直接调用,也可以像最原始的【Ctrl+C和Ctrl+V】一样,你能够克服【低代码/无代码】的缺点,查看到源码实现高度定制化。
组装式开发开发过程就像【Jupyter Notebook】一样,所有的关键功能都可以像拖积木一样加入你的开发过程中而无需太高的学习成本,环境问题也不用担心,组装式开发像【Docker】一样提供了镜像。
……
如果你要问我“组装式开发”有什么缺点,我个人觉得组装式开发就像开发领域的瑞士军刀,汇聚了很多功能,基本上能解决大部分问题,我们不再需要去学习底层代码及其接口文档(至少对我这种低级程序员来说是这样的),可汇聚了这么多功能的平台学习起来应该不会太简单。
最后,我一直觉得组装式开发只不过是代码协作开发的一个新阶段而已,无需用太多复杂的修辞去描述它,毕竟工具只是手段,技术需求才是目的,如果把代码开发比作一场战斗的话,尽管现在很多人手里的家伙已经换了一轮又一轮,但总有人还是喜欢用最朴素的方式去解决技术问题。