2016 年在开发者圈子中许多新的技术和概念层出不穷,人工智能、机器学习、Progressive Web Apps 等等,各种语言、框架和工具的更新也是让人看得眼花缭乱。2017 年,作为开发者应该跟随潮流还是理性选择新技术?
软件开发行业继续向前大步迈进。 在 2016 年,我们看到了很多新版本的流行语言、框架和工具。它给了我们更多的支持,也改变了我们的工作方式。紧跟潮流是很难的,所以在每年年底,我们会给你介绍什么是重要的,而且应该在未来十二个月内学习。
一、趋势
Progressive Web Apps
在 2016 年,我们看到了 Progressive Web App 概念的兴起。它代表了脱机工作的 Web 应用程序,并提供类似 Native App 的体验。它们可以添加到你的智能设备的主屏幕,甚至可以给你发送推送通知,弥补了与本地移动应用程序的差距。我们认为,在 2017 年,PWA 将变得更加重要,更值得探讨。
Progressive Web App(PWA) 是 Google 在 Web 平台开始推广的一个新概念,可以理解为是尽可能借助目前的新技术(比如 Service Worker,Push Notification 及其他展现层的新技术)以增强 Web App 的体验和功能,让 Web App 的体验无限接近 Native App。PWA 并不只是在移动设备上使用,有现代浏览器存在的地方就可以有 PWA。PWA 也不是 Chrome Only,现代浏览器基本都支持。
聊天机器人
现在每个人都在谈论聊天机器人。从运行它们的平台到构建它们的框架,社区也正在忙于各种活动(阅读介绍)。机器人是新的移动应用程序,如果你快点的话也可以在大家都感到新奇时赶上浪潮。一旦新奇消退,机器人可能会被降级到一些无聊的角色,如自动客服。但无论怎样,我们都可以梦想嘛!
前端框架的合并
在 JavaScript 社区,有着令人难以置信的框架和工具的混合,几乎每个星期都会出现新的。直到最近,人们期望旧的工具将被新的替代,但这不是我们在 2016 年看到的。相反,我们看到了流行的框架交换想法以及采纳由新诞生的框架提出的创新。所以在 2017 年,该选择哪个框架作为主要 JS 框架不是很重要,它们的功能大多是可比较的。
各地的公司和开发者都在积极地拥抱“云”。云是虚拟化的计算机基础架构,可根据需要提供,并可从控制面板中完全配置。目前三大云提供商分别是 AWS,Google Cloud 和 Azure。由于其持续的竞争价格一直在下跌,因此小公司和个人开发者也将其纳入预算中。熟悉云工作流程将是 2017 年一笔不错的投资。
机器学习
机器学习在过去的十二个月中已经呈现爆炸式的增长。通过在今年 3 月份的 AlphaGo vs Lee Sedol 的历史性比赛,它进入了主流。从原始数据中学习的智能计算机系统正在改变我们与移动设备交互的方式。看上去,机器学习将是 2017 年更大的影响因子。
二、编程语言
学习其中的一门或多门:JS(ES2017),TypeScript,C#,Python,Ruby,PHP7,Java/Kotlin/Scala
JavaScript
JavaScript 继续着它令人难以置信的创新步伐。由于 Web 浏览器的快速发布计划的推动,JS 标准每年都会更新。下一个版本,ES2017 预计将于 2017 年中期完成。它将带来许多 JS 开发人员渴望的特性 — 用于处理异步函数的 аsync/await 。感谢 Babel,即使在今天,你也可以在每个浏览器中编写 ES2017。
TypeScript
TypeScript 2.1 于 2016 年年底发布,为旧浏览器带来了 async/await,并改进了类型推断。TypeScript 是一门编译为 JavaScript 的静态类型语言。它增加了强大的功能,如经典的 OOP 模型和可选的静态类型,使得巨大的代码库更容易维护。它是编写 Angular 2 应用程序的首选语言,建议各位尝试。这是关于它的快速入门指南。
C#
C# 7.0 预计在 2017 年发布,作为一门优秀的语言将会有更大的改进。当微软推出开源 Visual Studio Code 编辑器 和 .Net Core 时,每个人都感到惊讶。它们都可以在 Linux,Windows 和 macOS 上运行,并允许你用 C# 编写快速、高效的应用程序(点击这里阅读更多)。这些工具促成了一个充满活力的社区。
Python
Python 3.6 将于今年 12 月发布。它正在巩固其作为开发人员、IT 专业人员和科学家的脚本语言的选择的地位。它适用于自动化、Web 开发、机器学习和科学计算。Python 2/3 的选择对于社区来说是一个长达数年的斗争,但是现在你可以自信地选择 Python 3 并享受完整的库支持。对于那些需要额外的性能的使用者,他们可以看看 PyPy — 一个可启用 Python 运行时的 JIT 替代品 。
Ruby
Ruby 2.3 今年早些时候发布了,并带来了性能改进。作为通用脚本语言,Ruby 也是一个好选择。 Ruby 3×3 的倡议已经公布,这将使即将到来的 Ruby 3 比当前版本快 3 倍,而且会在更多的情景中打开使用 Ruby 的大门。
PHP
PHP 7.1 是在 12 月发布的,并带来了细小的增强。 这是基于去年 7.0 版本中的主要性能改进,将 PHP 转变为构建 Web 应用程序的快速平台。我们建议把 PHP The Right Way 作为良好的做法和构建 Web Apps 的现代做法。
Java
Java 9 预计在 2017 年发布,并将带来备受欢迎的新功能,例如用于评估代码的 repl、对 HTTP 2.0 的支持和新的 API。有才能的 Java 开发人员和使用该语言开发项目的人对于这些特性有强烈的需求。如果 Java 不是你需要的,有一些基于 JVM 的语言,如 Kotlin 和 Scala,可以去了解。
Swift
Swift 3 于今年早些时候发布。这是苹果对现代编程语言的愿景 — 简化 iOS 和 macOS 上应用程序的开发。Swift 是开源的而且吸引了大量的社区。版本 4 计划于 2017 年发布,将改进语言特性和引入服务器 API,使其成为编写 Web Apps 和后端的一个不错选择。
其他
如果你正在寻找更令人兴奋的东西,可以尝试 Crystal 和 Elixir,它们结合了一个友好的类似 Ruby 的语法且有着卓越的性能。或者你可以看看函数式语言如 Haskell 或 Clojure。另外两门推荐的快速语言是 Rust 和 Go。
三、前端
学习以下一个或多个:Angular 2,Vue.js,Ember,Bootstrap,LESS/SASS
Web 平台最近取得了两个重大进展 — Web Assembly 和 Service Workers。它们为构建快速和高效的 Web 应用程序打开了大门,而且弥补了与 Native App 之间的差距。Service Workers 尤其是 Progressive Web Apps 的启用技术,并为 Web 平台的通知提供支持,将来也还会有更多的 API。
Angular 2
Angular 2 于今年发布。该框架由 Google 支持,非常受企业和大公司的欢迎。它具有大量的功能,使在从网络到桌面和移动应用程序中编写任何东西成为可能。框架使用 TypeScript 编写,这也是在框架中编写应用程序的推荐语言。学习它有很多需要阅读的内容,但我们认为在 2017 年学习 Angular 2 将是一个很好的投资。
Vue.js
Vue.js 今年也发布了 2.0 版本。它借鉴了 Angular,React 和 Ember 中的好想法,并将它们放入一个易于使用的包中。它也比前两个更精简和更快。建议各位都去尝试一下,可参考入门教程。
Ember.js
Ember 是 JavaScript 框架的另一个坚定选择。它支持数据绑定、自动更新模板、组件和服务器端渲染。与其竞争对手相比,它的一个好处是更成熟和稳定。重大更改的频率要低得多,而且社区也重视向后兼容性。这使得该框架成为生命周期长的应用的不错选择。
其他
另外两个值得一看的框架是 Aurelia 和 React。过去的一年中 React 的生态系统变得越来越复杂,因此很难向初学者推荐。但经验丰富的开发者可以将库与 GraphQL,Relay,Flux 和 Immutable.js 组合成一个全面的全栈解决方案。
没提到 Bootstrap 的前端汇总是不完整的。Bootstrap 4 目前正处于 Alpha 阶段,预计在 2017 会正式发布。值得关注的变化是新的通用卡片组件和 Flexbox 网格,这使得框架更现代化而且让用户使用它工作更舒心。
SASS 和 LESS 仍然是当今最流行的两种 CSS 预处理器。虽然 vanilla CSS 最终对变量进行了支持,但 SASS 和 LESS 仍然优先对 mixins,函数和代码组织进行支持。 如果还没有了解它们,可查看这里的 SASS 和 LESS 快速入门指南。
四、后端
学习其中之一:全栈后端框架,一个微框架
后端有很多选择,所有这一切都取决于你对编程语言或特定性能需求的偏好。Web 开发中的一个持续趋势是远离后端的业务逻辑,并将该层转换为由前端和移动应用程序使用的 API。但一个全栈框架通常是能更简单、更快速地用于开发,并且是许多 Web Apps 的有效选择。
Node.js
Node.js 是在浏览器外运行 JS 的主要方式。今年我们看到它发布了许多新版本,提升了性能以及添加对整个 ES6 规范的覆盖。Node 具有快速构建 API、服务器、桌面应用程序甚至机器人的框架,以及创建可以想象到的各种模块的庞大社区。一些你可能想研究的框架:Express, Koa, Next, Nodal。
PHP
PHP 首先是一门 Web 语言,并且有大量的 Web 框架可供选择。由于其出色的文档和功能,Laravel 构造了一个积极的社区。Zend Framework 发布了第 3 版,这标志着这个面向业务的框架的巨大升级。Symfony 在今年也发布了很多新的版本,使它作为一个全栈解决方案成为一个更好的选择。
Ruby
对于 Ruby,Rails 框架是首选。5.0 版本已于 2016 年发布,为 Web Sockets,API 模式等提供支持。Sinatra 也是小应用程序的不错选择,2.0 版本预计 2017 年发布。
Python
Python 有以 Django 和 Flask 的形式组合的全栈/最小框架。Django 1.10 在 8 月发布,为 Postgres 引入了全文搜索和一个大修改的中间件层。
Java
Java 生态系统还有流行的 Web 框架可供选择。Play 和 Spark 是两个坚定的选择,作为奖励,它们可以与 Scala 一起使用。
其他
对于爱好者,还有 Phoenix 可供选择,这是用 Elixir 语言编写的,并试图成为一个功能完全替代 Rails 的框架而且具有卓越的性能。如果 Elixir 是你想在 2017 年学习的语言之一,不妨尝试 Phoenix。
五、数据库
学习以下其中之一:Postgres,MySQL,CouchDB,Redis
PostgreSQL
PostgreSQL 今年发布了两个完整版本 — 9.5 和 9.6。它们带来了期待已久的 UPSERT 功能(又名 ON DUPLICATE KEY UPDATE)、更好的全文搜索和速度改进,这都归功于并行查询,更高效的复制、聚合、索引和排序。Postgres 适用于大规模、TB 级规模的数据集以及繁忙的 Web Apps,所以这些优化都很受欢迎。
MySQL
MySQL 8.0 将是该数据库的下一个主要版本。正式版预计 2017 年发布,将给系统带来很多改进。MySQL 仍然是最受欢迎的数据库管理系统,整个行业都受益于这些新版本。
NoSQL
对于 NoSQL 的粉丝,推荐 CouchDB。它是一个快速和可扩展的 JSON 存储系统,公开了一个 REST-ful HTTP API。这个数据库易于使用,性能卓越。PouchDB 是一个开源的 JavaScript 数据库,完全在浏览器中工作。可通过 Couch 同步数据。在应用程序离线的时候,可以将用户数据保存在本地,在网络连接可用后自动同步。
Redis
Redis 是最受欢迎的 Key-Value 数据库。它体积小,快速而且通用性好。作为 NoSQL 数据存储或进程消息传递和同步通道,你可以将其作为智能内存缓存的替代方案。它提供了大量的数据结构可供选择,并且即将到来的 4.0 版本将有一个模块系统和改进的复制功能。
六、工具
尝试其中的一个或多个:Yarn,Git,Visual Studio Code,Electron,Ansible,Docker
Yarn
Yarn 是由 Facebook 开发的 Javascript 包管理器。它是对 npm 命令行工具的升级,提供了更快的安装,更好的安全性和确定性构建。它仍然使用 npm 包注册表作为其后端,因此可以访问同一个 JavaScript 模块的生态系统。Yarn 与 npm 使用的 package.json 格式相兼容。
Visual Studio Code 和 Atom
两个最受欢迎的开源代码编辑器 — Visual Studio Code 和 Atom 在过去 12 个月中进行了很多不可思议的创新。这两个项目都使用网络技术构建,并吸引了大量的粉丝群体。编辑器有针对大部分语言的语法检查,linting 和重构工具的插件。
Git
Git 是最流行的源代码版本控制系统。它是无服务器的,你可以将计算机上的任何文件夹转换为存储库。如果你想共享代码,有很多选择,像 GitLab,Bitbucket 和 Github(当然还有码云)。2017年,建议熟悉 git 命令行,因为它会在比你想象中更多的场景派上用场。
Electron 和 NW.js
桌面应用程序还没有死,即使 Web App 变得越来越强大。有时你需要强大的功能和 API,这是网络平台无法提供的。使用诸如 Electron 和 NW.js 之类的工具,可以通过使用 Web 技术编来写桌面应用程序。你可以完全访问操作系统和 npm 可用的广度模块。要了解这些工具的更多信息,请阅读有关 Electron 和 NW.js 的教程。
软件开发中的最近趋势是让开发人员负责自己的系统部署 — 也称为 DevOps,这能产生更快的发布和更快地修复生产中的问题。具有运维经验的开发人员会受到公司的高度重视,因此从现在开始熟悉能实现这一目标的技术将是巨大的进步。推荐的一些工具是 Ansible 和 Docker。拥有 Linux 命令行和基本的系统管理技能也会为助你一臂之力。
七、技术
学习其中之一:云部署,机器学习库,VR 开发
云已经赢得了整个软件行业,可以看到大型公司关闭了他们的数据中心而且将其整个基础设施迁移到了云上。目前三个主要平台是 AWS, Google Cloud 和 Azure。这三个平台都有着功能强大,不断扩展的功能集,包括虚拟机,数据库托管,机器学习服务等。而且价格也正在迅速下降,所以云是小公司和个人开发者可以接触到的。对于 2017 年,部署一个业余的项目到这些提供商的平台将会是一次很好的学习经历。
人工智能
人工智能是 2016 年的流行词。语音识别和图像分类只是该技术面向用户的两种应用,人工智能的机器达到甚至超过了人类的性能。当下有很多创业公司将 AI 和机器学习应用到新领域,也有许多开源项目发布,例如谷歌的 Tensor Flow 和微软的 Cognitive Toolkit。机器学习是一个与数学非常相关的主题,对于刚刚开始的人,这里有全面的在线课程。
虚拟现实和增强现实
虚拟现实(VR)和增强现实(AR)已经存在了一段时间,最终该技术已经成熟到足以提供一个引人注目的体验。Facebook(Oculus Rift),Google(Daydream)和 Microsoft(Windows Holographic)都有欢迎第三方开发者加入的虚拟现实平台。VR 头戴设备仍然面临挑战,如消除恶心的感觉和在游戏之外提供引人注目的用例。