腾讯分分彩组三杀号 > Web分析 >

人工智能浪潮下的 Web 开发程序员该如何上手?

2018-07-05 23:11

  经历了网络互联的 Web 1.0 时代、社交的 Web 2.0 时代、基于移动的 Web 3.0 时代,如今的我们正逐步迈向知识分配的 Web 4.0 时代。与此同时,随着人工智能的兴起,聊天机器人和会话式 UI 也开始渗透 Web 领域,所以说,现在的 Web 开发已经和几年前完全不一样了。

  当面对日新月异的技术、错综复杂的网站时,新入行的开发者很容迷失方向。以下这篇指南,展示了后端开发的全景、运维的趋势,希望给从事 Web 开发的程序员们一个清晰的概念,去其糟粕取其精华。

  以前,后端的路线图只是一些平铺的技术介绍,而无法给出任何有关趋势的方向。而在这篇文章中,有详细的后端学习路线图,可助前行路上的开发者一臂之力。废话不多说,现在就开始吧。

  开始之前要说明一点,虽然我们在图中没有列出 HTML/CSS 的知识,但建议你至少懂得一点,并会写一些基本的 HTML/CSS。

  选择语言时总是会遇到无数种选择。我把语言按照类别分开,以便你作出决定。对于刚刚进入后端开发的初学者,我建议选任何一种脚本语言,它们的市场需求都很大,因此你可以迅速进步。如果你有前端知识,Node.js 会很容易,而且工作机会也很多。

  如果你已经在从事后端开发,并且会某种脚本语言,我建议你不要再选另一种脚本语言,而是从“函数式”(Functional)或“多重编程”(Multiparadigm)中选择一种。例如,如果你会 PHP 或 Node.js,那就别再学 Python 或 Ruby,而是尝试下 Erlang 或 Golang。这样能开阔你的思维和视野。

  学习知识的最佳途径就是练习。选好语言并了解一些基本概念之后,就应该学以致用,用它多做一些小应用。下面是一些建议:

  理解语言的基础知识并做了一些简单的应用后,可以学一下那门语言的包管理器如何使用。包管理器可以帮你在应用中使用第三方库,还可以把你的库发布给其他人使用。

  每种语言都有标准做法和最佳实践。学一学你选择的语言的这些知识。例如, PHP 有 PHP-FIG 和 PSR。Node.js 和其他语言都有许多社区主导的规范。

  务必要读一读有关安全性的最佳实践。阅读OWASP()的规范,理解各种安全问题,以及如何在所选语言中避免这些问题。

  现在你已经了解了语言的基本知识、标准做法和最佳实践、安全信息,以及如何使用包管理器。现在可以去创建一个包,并把它发布给其他人使用了。在这个过程中要时刻遵循你学到的标准和最佳实践。例如,如果你选了 PHP,你就应当在 Packagist 上发布。选择了 Node.js,就应该在 Npm 上发布等。

  完成这一步之后,可以在 Github 上找一些项目,然后试着建一些 pull request。一些建议:

  测试有好几种类型。要理解这几种类型的测试,以及每种测试的目的。不过,可以从给你的应用编写单元测试和集成测试开始。同时,还要理解各种测试的术语,如 mock、stub 等。

  作为练习,可以为你之前的项目写一些单元测试,特别是给第 6 步做好的那些项目。

  学习如何在关系型数据库中永久保存数据。在选择要学习的数据库之前,要先理解各种数据库术语,如键、索引、正规化、元组等。

  学习数据库有好几种选择。不过,学完其中一个数据库后,再学其他的就会很容易。可以学习 MySQL、MariaDB(是 MySQL 的一个分支,与 MySQL 几乎完全相同)或 PostgreSQL。建议先从 MySQL 开始。

  用学到的所有知识做一个简单的应用。选一个点子,比如建立一个简单的博客应用,并实现以下的功能:

  根据项目和语言不同,你可能需要框架,也可能不需要。每种语言都有多个框架供选择,应当去看看你选择的语言都有哪些框架,然后选一个关联最大的。

  如果你选的是 PHP,我建议学习 Laravel 或 Symfony,如果需要微型框架的话,可以选择 Lumen 或 Slim。如果选择 Node.js,也有多种框架可以选择,但最流行的就是 Express.js。

  这一步的练习,可以将你之前在第 10 步创建的应用改成用框架实现。同时要保证移植一切功能,包括测试用例。

  首先要理解 NoSQL 是什么,它们与关系型数据库有何区别,以及为什么需要 NoSQL。NoSQL 数据库也有许多种,做一点研究,比较它们的功能和区别。常见的选择有 MongoDB、Cassandra、RethinkDB 和 Couchbase。如果必须选择其一,可以用 MongoDB。

  学习如何在应用级别实现缓存。理解如何使用 Redis 或 Memcached,并在第 12 步创建的应用中应用缓存。

  学习各种认证和授权方式。你应该知道它们的含义,它们之间的区别,以及何时该用哪个。

  学习消息传递机制,理解为何、何时要使用消息传递。也有多种选择,但主流就是RabbitMQ和Kafka。如果只能选择其一,可以先学习RabbitMQ。

  随着应用程序变得越来越大,在关系型数据库或 NoSQL 上的简单查询将无法满足需求,这就必须使用搜索引擎。搜索引擎也有多种选择,每种都有自己的优缺点。

  Docker 可以大幅度降低开发的难度,它能复制与生产环境完全相同的环境,能保证操作系统干净,还能让编码、测试和部署更快捷。读者可以自己搜索“Docker 有哪些好处”的答案。在这一步,只需要去学习如何使用 Docker。

  如果你已学到这里,那么在前面的步骤中你一定已经接触过了服务器。这一步主要是要找出不同 Web 服务器之间的区别,了解其限制和不同的配置选项,并理解怎样编写应用才能更好地利用这些限制。

  尽管这一步不是必须,但掌握 WebSocket 总会有好处。学习如何利用 WebSocket 编写实时 Web 应用程序,并用它写个示例应用。可以在前面完成的博客应用中使用 WebSocket 实现实时更新博文列表。

  图模型能灵活地表示并处理数据之间的关系,而图数据库提供了快速、有效的方式来存储、读取并查询图。学学如何使用 Neo4j 或 OrientDB。

  一旦开始学习并练习后,你一定会遇到很多我们没有覆盖到的东西。保持开放的心态和健康好学的态度,去学习新东西吧。

  记住,关键就是要多练习。刚开始可能有些不使用,但很快就会习以为常,时间长了还会觉得越来越好。

  作者:Adnan Ahmed,tajawal 的首席工程师,喜欢 Web 开发、新技术,崇尚简单,开源的忠实粉丝。