圣经旧约有个巴比伦塔的故事:当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。

上帝似乎也在阻止码农建立巴比伦塔,我们有太多的编程语言,程序与码农之间、不同语言的程序相互之间的沟通变得无比复杂。SUN一直有"not invented here"的情结,仿佛不发明毋宁死。公司里不乏创造编程语言的高手,除了Java的高斯林,还有来自伯克利大学的Tcl/Tk发明者,XML的发明者,JavaFx的发明者。我以前做过几个编译器,很有发明一种新语言的冲动,感觉这是青史留名的机会。但是这个冲动被巴比伦塔克制了,我们是否真正需要为云编程设计一种新的语言?正因为对程序语言设计和编译实现有比较深入抽象的理解,我们开始探索如何利用流行的语言表达云编程的方言特色。

Java经过六代,已经变得过于笨重庞大,尤其是自我解析的Reflection部分算不上通俗,以致多数码农并不熟悉如何使用Reflection进行自造,而我很坚持云编程一定要有超强的程序自己制造程序的能力。当时,既流行也轻巧的Javascript成为我们的首选,毕竟,Javascript也是Netscape网景与SUN合作的成果,借了Java的名。青睐Javascript的原因除了流行性,更因为它是一种深受Scheme语言影响的函数编程语言。函数编程里,代码封装在函数的容器里变成了数据,代码和数据可以混为一谈。这样让程序方便地在云里跑来跑去,并且随时可以让程序自造代码。

既然云把一切变成了服务,云编程的特色应该把程序自身也变成服务。Javascript的函数编程特色,用来把代码封装成云里可以输送和享用的服务。而Javascript的代码自造,能够带来非常智能的云服务。代码级的云服务比当时Amazon亚马逊的AWS要细腻太多。当年还没有清晰的云服务层次划分,用现在的术语,Amazon的云服务是IaaS,提供计算、存储、带宽这样的基础资源。IaaS不考虑应用的问题,只考虑操作系统层面的资源服务。后来出现了PaaS,提供应用层面的支撑,例如Google在2008年推出的GAE,提供不同语言的运营环境、数据库、中间件。这样的PaaS,只考虑应用支撑层面的资源服务。简单说,你把程序写好交给PaaS,不用操心安装和运营Tomcat和MySQL之类的应用支撑软件。然而这种PaaS,不考虑你如何写程序的问题。我们的目标是最大限度地利用云,用云的方式来写出在云上跑的程序,打造一个“面向服务 service-oriented programming”的云编程模式。用浏览器在云上编程只是一个方面,更重要的是,一段可复用的程序,例如一个Class,应该成为一种云服务。由于Javascript的码农已经很熟悉Ajax的API服务调用,我们顺着这个思路,构造了两类服务:

  1. Service: 用Javascript可以写出后台的数据API服务。后台部分需要在Java里面跑Javascript,我们用了SUN欧洲同事研发的Rhino。经过精心的映射和封装,码农不需要Ajax那么麻烦,可以用一行代码搞定API的调用,类似于 var reviews = Service.bookStore.getReviewsByItem(item_id);
  2. Widget: 用Javascript,HTML,CSS一起写出前台的Web页面部件。而一个页面里,用Javascript可以方便地引用和复用Widget。
Service和Widget都是云服务。和亚马逊谷歌的云服务道理一样,亚马逊提供Linux虚拟机,谷歌提供Tomcat,我们提供更细颗粒的应用程序服务。为了简化API调用的界面,程序级的云服务一概使用命名空间,例如Service.bookStore.getReviewsByItem就是一个云服务,这样非常符合码农的习惯。

云编程那些事4 - 不造巴比伦塔相关推荐

  1. 译文丨伯克利对serverless的看法:简化云编程

    摘要:Serveless计算的目标和机会是让云编程者像使用高级语言那样受益. 本文分享自华为云社区<简化云编程,伯克利对serverless的看法(翻译)>,作者: 二手雄狮. 译者言: ...

  2. 上篇 | 说说无锁(Lock-Free)编程那些事

    1. 引言 现代计算机,即使很小的智能机亦或者平板电脑,都是一个多核(多CPU)处理设备,如何充分利用多核CPU资源,以达到单机性能的极大化成为我们码农进行软件开发的痛点和难点.在多核服务器中,采用多 ...

  3. “百度开放云编程马拉松”中国三大赛区获奖团队及作品新鲜出炉

    2013年7月20-21日,以"绿色生活"为主题,面向广大移动互联网开发者,由百度开发者俱乐部主办.InfoQ和segmentfault社区联办.WWF(世界自然基金会)作为环保公 ...

  4. “百度开放云编程马拉松”武汉赛区25件作品及团队介绍

    7月20日至21日,以"绿色生活"为主题,面向广大移动互联网开发者,由百度公司主办.InfoQ和segmentfault社区联办.WWF(世界自然基金会)作为环保公益合作伙伴的&q ...

  5. 聊聊大数据平台上云这点事

    点击上方 "大数据肌肉猿"关注, 星标一起成长 点击下方链接,进入高质量学习交流群 今日更新| 950个转型案例分享-大数据交流群 作者 | 褚杏娟 如今,企业都面临着日益增长的数 ...

  6. 混合云的那些事:如何做到让公有云和私有云实现1+12

    云计算在 2016 年有了极大的增长.一方面,AWS.阿里云等大型公有云厂商的云计算收入呈爆发式增长且绝对值数据可观:另一方面,通过持续市场培育,云计算的价值逐步被各国政府所认可. 很多大型企业也纷纷 ...

  7. 关于云服务器那些事:如何保障中小企业的安全,顺利上云

    各位小伙伴们,大家好,我是梦想家Alex .相信大家对于云服务器都不陌生,本期文章我想为大家科普关于云服务器的那些事! 目前市面上有很多各种各样的云服务器产品,包括我们熟知的阿里云.腾讯云.百度云.华 ...

  8. 搭建Linux云编程环境

    仅个人记录可参考 本篇解决你想在一台陌生的电脑上ps.Excel.word.敲代码,却无相应环境而又不想安装各种软件和设置环境变量的烦恼. 获取root权限 解bl锁→修补镜像boot→刷入trwp→ ...

  9. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员"熟悉而又陌 ...

  10. 下篇 | 说说无锁(Lock-Free)编程那些事(下)

    6 内存屏障(Memory Barriers) 6.1 What Memory Barriers? 内存屏障,也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器在对内存随机访问的 ...

最新文章

  1. DirectX10 学习笔记2:在多文档框架中初始化DirectX 10
  2. linux相关面试题总结!
  3. 2.5 linux C 进程与多线程入门--(5)使用互斥量进行同步
  4. 深度学习应用实战案例-员工流失预测模型(Python源代码)
  5. 菜鸟教程php多久学完,十天学会php(1)
  6. 美国知名华人学者陈刚被捕,他出身贫寒,是一个不折不扣的工作狂
  7. 前端学习(1928)vue之电商管理系统电商系统之美化一层循环的UI结构for循环ui美化
  8. Loading 遮蔽层 简单实现。
  9. 飞鸽传书 再次报道,回到90年代中期的业界
  10. 消除拖延的方法_如何消灭拖延症,并彻底消除想法
  11. 浅读vue-router源码,了解vue-router基本原理
  12. python语言中浮点数_在Python中截断浮点数
  13. 【好玩的代码雨(附源代码)】
  14. 人工智能 一种现代方法 第3章 用搜索树对问题求解
  15. cmmi证书查询(cmmi认证查询网站)
  16. Android进阶-NDK学习完整版
  17. 数理统计01:线性相关性系数,斯皮尔曼相关性系数计算及详解
  18. 【最短路算法】第二弹:一文弄懂Bellman-Ford(贝尔曼福特算法)
  19. 全国高校人工智能选修课该怎么上?附赠全套PPT
  20. 论文笔记 |【AAAI2022】Best-Buddy GANs for Highly Detailed Image Super-Resolution

热门文章

  1. Linux安装软件报错--正在尝试其它镜像
  2. Ethernet_II帧和802.3_Ethernet帧格式比较
  3. Java实现——求指定年份的父亲节(母亲节)是几月几号
  4. nagios 监控内存和CPU,磁盘等使用情况
  5. 《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流
  6. android h5 指定浏览器_微信h5网页如何实现跳转到手机默认浏览器
  7. 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  8. 搜狗拼音linux 知乎,搜狗拼音知乎专版下载
  9. 人工智能学习-传教士-15数码-拟合-逻辑推理
  10. OpenGL红宝书正序解读(二)