转载

互联网时代的无栈开发

感谢CSDN的邀请,我能在2015年度SDCC大会的编程语言专场作为演讲嘉宾,做《易开发的无栈开发之路》的主题演讲。 演讲之后我和很多业界朋友进行了交流讨论,又有诸多启发。

本文属于对演讲内容和后续讨论的一个总结, 分析了软件应用开发若干不合理现状,以及未来无栈化趋势。 作为程序员的我们,该如何规划自己的职业发展路线,顺应未来发展的潮流。

1. 软件开发的战国时代

软件开发面临着全新的移动互联网时代。 用户需要更好的用户体验,更大的负载支持,以及海量数据的处理能力。

为了满足这些新的技术要求,大量新的技术层出不穷,程序员应接不暇。从语言,到Web框架,都是如此。Python2还是Python3是个问题;Rails的2个版本完全是2个世界;JavaScript也是不断升级;前端框架那更是一个乱;后端数据库没消停; Java的世界已经扭转那么多次;新的语言也在挑战旧语言;一旦基础技术非主流,产品也就非主流,不能维护的产品就没有生命力了。

当前技术领域创新过快,其实表示的是基础工业还不成熟。 这种不成熟,对应用的危害是非常大的。

一个应用的生命周期非常短, 程序员的代码活不了几年就灰飞烟灭了。 因为过了几年,之前的技术就全部变了,之前的代码也没法维护了。 老人逐步退出战场,但新人都在用新技术。所以每次升级,代码都基本重写。

特别地,当前前端技术相当不成熟,技术变得非常复杂,学习成本非常高。 这导致前后端分栈开发成为普遍现象。一旦分栈,沟通成本高, 开发效率变低,成熟的开发人员变成稀缺,最终对创业者非常不利。

2. 理想:无栈开发

为了简化开发,越来越多的开发者服务出现,特别是BaaS(移动端后台云服务)以及 aPaaS(应用开发平台 Application Platform as a Service)。

这些服务,都是基于平台提供的API,屏蔽底层技术,让用户进行快速应用开发。

一个典型的例子就是,最近BaaS服务商Parse 从 Ruby 迁移到 Go后, 所有Parse上的成千上万应用得知平滑迁移,完全不必知晓内部细节。

另外,salesforce的force.com平台, 也是提供了从后端建模到移动端的全套方案,使得企业应用的开发最简。我将这种开发模式称为无栈开发,属于未来的基于平台的应用开发者。

无栈开发,对应于全栈开发。 二者的结果都是一样的,都是一个人单兵完成应用开发任务。 全栈开发者凭借自己的超人技能取胜,少之又少; 而无栈开发者是凭借手中的强大武器完成任务,那就是开发平台。无栈开发者是面向最终用户的应用开发者,关注需要解决的问题,对技术不关注。 希望技术最简单,不要经常改变。 他们通常做些脚本级别的开发,不需要懂类、集成这些东西。 甚至不需要懂html/css/js这类的东西。也不需要懂数据库内部的细节。 应用开发者会更关注产品,利用平台工具做出最好的产品。

另外一种开发者是平台开发者,他们为无栈开发者服务, 关注技术问题,关注每一个技术变化,关注技术变化趋势, 为应用开发者提供稳定一致的接口。

我认为,未来大部分的应用开发者,会利用平台进行无栈开发。 当然条件是,有各个领域的开发平台足够成熟。

3. 易开发的无栈化方案

易开发(easydo.cn)是一个企业应用领域的应用快速构建平台, 我们希望开发者掌握最少的技能,就可以进行可持续的企业应用软件的开发,屏蔽底层技术的变迁。

易开发做到了,使用一种Python语言,进行Web、桌面、微信的全端开发。 这样即便刚毕业的三脚猫功夫的半路出家开发者,可能也可以基于平台进行开发。

3.1 Web前端

Web前端的去栈思想,是如何能借鉴桌面应用开发的经验,让后端开发者能开发前端。

最终的方案是,使用Python来生成一切!

  • 使用Python生成html界面组件 (ui接口)
  • 借鉴bootstrap的接口,提供组件化的接口,来生成html,屏蔽html实现细节。 这也是顺应html组件化规范。

典型写法如下:

ui.panel()/

.add(ui.button(‘Click me’)/

.add(ui.text(‘Hello, world’))/

+ ui.button(‘新增’)/

.icon(‘add’)/

.loading(‘正在提交….’)/

.on(‘click’, ‘@zopen.test:test’)

显然这样的表达,比直接的bootstrap要更直观,并且即便bootstrap升级,也能平滑适配过去。

  • 使用Python生成界面行为指令 (view接口)

借鉴jquery的组件定位方法,直接操作组件,屏蔽底层的js实现。

典型写法如下:

# 显示出错提示

view.message(‘出错了’, type='error', )

# 在最近的tab页面组件显示 hellow world

view.closest('tabs')/

.active_panel()/

.set_content(ui.h1(‘hello, world’))

实现上述ui组件和view指令之后,可以不用学习js/css/html开发复杂的界面。

当然我们在浏览器上前端提供了一个web组件引擎,可以渲染ui组件和执行view指令。 本质上,这个web组件引擎,将渲染html的网页浏览器,适配成了一个执行企业应用逻辑的应用浏览器。

3.2 微信号开发

微信企业号、公众号,其实也是web开发。区别在于,需要集成单点登录,可以使用特殊的js sdk。易开发为了支持微信,在微信浏览器上运行一个微信组件引擎,提供:

  •  Web组件引擎的所有功能
  • 微信的单点登录
  • 初始化微信 jssdk
  • 渲染微信特有组件:如图片上传、位置信息、扫一扫:

ui.wechat.image_upload(...)

ui.wechat.location(...)

ui.wechat.scanner(...)

  • 执行微信特有的view指令,如界面菜单设置等:

view.wechat.hide_option_menu()

view.wechat.close_window()

view.wechat.open_enterprise_chat(…)

这样,由于平台层的支持,开发微信应用几乎不需要虚席额外的知识, 直接使用Python在后端就可以完成。另外,平台还自带了一个菜单编辑器,直接将开发完成的界面,部署到微信菜单。

3.3 桌面端

尽管浏览器功能不断加强,但是仍然是存在沙箱限制,而且大量用户使用旧的浏览器。 如果让浏览器用户也能进行文件同步、断点续传、消息通知、在线编辑这些桌面软件才能实现的功能?

我们借鉴了豆瓣的开源项目 OneRing,开发了桌面助手模块。 桌面助手是一个运行在桌面的Web服务器,用来增强浏览器的功能。 对于浏览器无法实现的桌面原生功能,会委托桌面助手来完成。

桌面助手对桌面浏览器的增强,其实和微信对webkit浏览器的增强,道理是类似的。

我们也扩展了一组ui组件,比如选择文件:

ui.assistant.select_folder()

以及view指令:

view.assistant.view(file)

view.assistant.edit(file)

view.assistant.upload(folder)

view.assistant.download(file)

View.assistant.sync(folder)

这样,使用桌面编辑器,编辑一个线上文件,只需2行代码:

view.assistant.edit(context)

view.message(‘已经启动桌面助手进行编辑’)

桌面助手的实现,使用了QT/Flask/Gevent/pyInstaller等技术。

3.4 数据库

传统关系数据库的门槛在于,需要了解关系数据库理论, 需要管理数据的缓存,需要学习SQL语言。我们在对象数据库的基础上,封装了一个文档数据库:

  • 可以层次树状存放数据
  • 自由定义属性,这也是NoSQL数据库的特性
  • 访问的对象自动缓存
  • 内置授权权限机制
  • 表单可视化设计字段

这样最终用户几乎感觉不到数据库存在,直接使用Python对象即可。

数据如何高效索引也是一大难题。平台底层使用elasticsearch, 对所有属性都进行索引,提供查询API:

result = QuerySet()./

anyof(path=[container])./

anyof(subjects=[‘aa’,’bb’])./

range(created=[None, datetime.datetime.today()])./

parse('我爱北京', fields=['title'])./

sort(‘-created’).limit(5)

最终用户使用这个接口,屏蔽了底层使用API,也不需要学习SQL,使用更简单。

4 . 无栈开发的好处

有了基于平台的无栈开发, 首先可以改变开发者不够用的情况,刚毕业的也可以招进来, 大专、职业学校也可以用,更多跨界开发者带来更多创新。无栈开发可以带来更高的开发效率,更可维护的代码。 最终让创业成本更低、风险更少。

易开发自身的平台也正在经历无栈化重构,之前庞大的代码,减少一半以上; 一种语言进行前后端开发,使得一个小的开发团队就可以进行维护。

5 . 无栈开发的未来

无栈开发本身,其实是云计算发展的续集,是云计算走进领域的结果。未来,大部分开发者,都将从事无栈开发。 开发会回归到简单,编程越来越人性化,最终人人编程不会是梦想。作为我们开发者,应该无栈开发潮流,更多关注产品,更多关注如何解决用户的问题, 迎接将来的无栈应用开发时代。

互联网时代的无栈开发

作者简介: 潘俊勇, 易开发创始人&CTO,珠三角技术沙龙组委成员,曾就职中兴通讯。10多年Python开发经验的老coder,是Python语言在国内推广的早期布道者,曾经的Zope/Plone中国用户社区组织者。专注于企业级领域产品的开发,对企业级产品的需求、架构设计有丰富的经验。易开发是多年企业应用领域钻研的结晶,是一个人性化的企业应用的快速构建平台。

(责编/夏梦竹,关注编程语言和数据库领域,寻求报道或者投稿请发邮件xiamz@csdn.net)

正文到此结束
Loading...