软件一直在吞噬世界,而且远不止四年。但开发者对软件的看法略有不同。就我们解决现实世界问题而言,我们主要不是考虑硬件。随着问题变得越来越大,解决方案变得越来越复杂,实用(且不太泄露)的抽象变得比以往任何时候都更加重要。
结果是:从以生产力为导向的开发者的角度来看,框架正在吞噬世界。但是,哪些框架正在吞噬世界的哪些部分,吞噬了多少呢?
考虑到有如此多种优秀的开源框架可供选择,我从堆栈的各个层面挑选了我们 2015 年的 5 大开源框架,而不是从单一的排名顺序中挑选。(对于前端,我专注于 Web,更狭义地说是真正的客户端框架——仅仅因为浏览器和移动设备的功能越来越强大,并且因为 SPA [单页应用程序] 等避免了不必要地通过网络发送数据。)
1. 展示层:Bootstrap
让我们从堆栈的顶部开始:展示层,开发者和我们用户都会接触到的东西。在这里,明显的赢家仍然是 Bootstrap。 预测看起来非常出色,将旧的替代方案(如 Foundation)和新的后起之秀(如 Material Design Lite) 远远甩在后面。Bootstrap 在 BuiltWith 上的使用趋势中占据主导地位,并且在 GitHub 上仍然是 星标最多和 fork 最多的框架。
而且 Bootstrap 仍在积极开发中。8 月,Bootstrap 通过 版本 4 alpha 版本发布庆祝了它的四周年,这是对已经强大的功能集进行重大简化和扩展。更新的要点:一切都变得更加程序化。Bootstrap 从 Less 迁移到 Sass,将所有 HTML 重置集中在一个模块中,将大量样式自定义直接放入 Sass 变量中,并将所有 JavaScript 插件 ES6 化。该团队甚至推出了一个官方 Bootrap 主题市场,以补充已经庞大的 主题生态系统。
2. Web MVC:AngularJS
随着 Web 平台的不断成熟,开发者越来越享受与仍然带有标记颜色的 DOM 之间精心设计的抽象距离。XMLHttpRequest 开始的工作在现代单页应用程序 (SPA) 中达到了顶峰,并且 最 流行的 SPA 框架是 AngularJS。
AngularJS 有什么特别之处?用一个词来概括:指令。只需一点点 ng-
就可以将(静态的、标记的)标签带到(动态的、执行 JavaScript 的)生命中。(依赖注入也很棒,并且像 Angular 的许多功能一样,旨在简化维护并更充分地从 DOM 中抽象出来。)基本原则只是将声明式视图与命令式域逻辑完美合理地分离,任何扫描过 POM 文件或与 ORM 搏斗过的人都很熟悉(嘿,我们中的一些人过去也很喜欢 XAML)。这既令人兴奋,又令人解放,又有点奇怪——赋予 HTML 它真的不应该拥有的力量。
也许有点可悲的是,AngularJS 背后的最激进的概念——双向数据绑定,它可以轻松地保持视图和模型的同步——在 Angular2 中正在消失,而 Angular2 “非常接近” beta 版本发布。因此,一些魔力将会消失,但一些大规模的性能难题和一些令人抓狂的调试也将消失(只需考虑一下双向,感受一下脚下的悬崖),这种权衡随着页面大小和 SPA 复杂性的膨胀而变得更有价值。
3. 企业 Java:Spring Boot
Java 有什么优点?快速、成熟、全面的类库、庞大的生态系统、一次编写,到处运行、活跃的社区——但不是无痛的引导。即使是硬核 Java 开发者也会求助于 Ruby 或 Python 来编写快速的一次性程序(承认吧)。然而,由于上面列出的其他原因,Java 继续在企业领域占据主导地位。
Spring Boot 横空出世,它是一个样板代码蒸发器——一个框架,让您可以用一条推文容纳一个工作的 Spring 应用程序
@Controller class ThisWillActuallyRun { @RequestMapping("/") @ResponseBody String home() { "Hello World!" } }
— Rob Winch (@rob_winch) 2013 年 8 月 6 日
没有令人不快的 XML 配置,没有草率生成的代码。这怎么可能?很简单:Spring Boot 有一些非常强烈的观点。阅读上面的推文,突然一切都变得有意义了!当您意识到框架自动启动一个嵌入式 servlet 容器来处理端口 8080 上的传入请求时——这是一个您没有明确配置它做出的决定,但这是一个传统的(且防火墙友好的)调用。
Spring Boot 有多热门?到目前为止,它是 fork 最多和下载次数最多的 Spring 项目(不包括主框架本身)。在 2015 年,谷歌首次记录到 spring boot 的搜索次数多于 spring framework。
4. 数据处理:Apache Spark
很久以前(2004 年),谷歌开发了一个编程模型 (MapReduce),该模型概括了许多分布式批处理作业结构,然后撰写了一篇著名的论文;然后一些 Yahoo 员工编写了一个 Java 框架 (Hadoop),该框架实现了 MapReduce 和一个 分布式文件系统,以简化 MapReduce 任务的数据访问。
尽管 Hadoop 解决的问题空间有限(最佳)批处理——部分原因是商业和科学用户已经习惯于对大型数据集进行批处理分析——但近十年来,Hadoop 一直主导着 “大数据” 框架生态系统。但并非所有大型数据集都以最佳方式进行批处理。特别是,流数据(例如传感器输入)和迭代分析的数据(如机器学习算法喜欢做的那样)不喜欢批处理。因此,诞生了数十个新的大数据框架,新的编程模型、应用程序架构和 数据存储获得了关注(包括 新的集群管理系统,与 Hadoop 本身的 MapReduce 解耦)。
但在所有这些新框架中,Apache Spark(在伯克利 AMPLab 开发)是 2015 年当之无愧的佼佼者。调查 (DZone 报告;Databricks 信息图;Typesafe 报告) 显示 Spark 的采用率大幅增长。自 2013 年以来,GitHub 提交数量一直在线性增长,而 Google 趋势显示 2015 年的搜索量呈指数级(是的,字面意义上)增长。
所以 Spark 很受欢迎。但它有什么作用呢?嗯,非常快速的批处理;但这取决于一个关键特性,该特性允许比 Hadoop 更多的编程模型。Spark 使数据在弹性分布式数据集 (RDD) 中可用,这些数据集在处理后保留在多个节点上的内存中,但没有复制(通过存储关于如何重新创建的信息;与 CQRS、实用主义、柯尔莫哥洛夫复杂度 进行比较)。这(显然)让算法能够迭代,而无需从分布式内存层次结构的(较慢的)较低层重新加载。这意味着批处理不再需要遭受 Nathan Marz 的 lambda 架构“长行程”的屈辱。RDD 甚至允许 Spark 通过以足够快的速度运行小批量作业来模拟真正的(推送)流处理,从而将延迟保持在许多应用程序的“有效流”范围内。
5. 交付:Docker
好的,所以 Docker 并不是“框架”,其定义为“代码库,广义上定义,它施加一组特定的约定来解决大型和重复出现的问题集”。但是,如果框架只是让您在更合适的抽象级别编写代码的东西,那么 Docker 就是一个非凡的框架。(让我们称之为外骨骼框架,只是为了让人困惑地混合隐喻。)如果不将 Docker 包含在列表中,那么命名“开发者 2015 年最佳事物”会感觉很奇怪。
为什么 Docker 很棒?首先,为什么容器(早期:FreeBSD Jail、Solaris Zones、OpenVZ、LXC)很棒?很简单:隔离,无需完整的操作系统;或者说,VM 的安全性和便利性,但开销要少得多。但隔离有很多形式(chroot
浮现在脑海中,或者实际上任何虚拟内存系统),并且在没有 Docker 的情况下 systemd-nspawn
也非常容易。仅仅能够隔离进程是不够的。为什么 Docker 特别棒?
两个原因:Dockerfiles(“新的 tarballs”)增加了可移植性;而且 Dockerfile 格式现在已成为事实上的标准。第一个消除了应用程序交付的痛苦(而早期的容器只是创建了更轻量级的 VM)。第二个使容器共享具有社交性(而不仅仅是在 DockerHub 上)。我可以尝试您的应用程序,而无需花费数小时的时间不尝试您的应用程序。(还记得 apt-get
的自由感觉吗?)
评论已关闭。