当我们谈到语言时,你会有无数种选择。为了方便你做决定,我把它们分成几类。对于刚开始进入后端开发的初学者,我建议你随便选一门脚本语言去学,它们都有大量的需求,也能让你很快地成长。如果你已经有了前端开发的一些知识,你可能会发现 Node.js 会比较容易,再加上它有很大的就业市场。
如果你已经开始做后端开发的工作并且已经掌握了一门脚本语言,我建议你不要去再学习一门新的语言了,而是挑选「功能(Functional)」和「多范例(Multiparadigm)」的一些内容去学。举个例子,如果你已经在用 PHP 或者 Node.js 开发了,不需要再学 Python 或者 Ruby,而是去尝试 Erlang 或者 Golang。这一定会帮助你扩展思维、开阔眼界。
没有比练习更好的学习方式了。当你学习了你的语言并且对它的概念有了最基本的理解时,请把它们应用到实践。要做尽可能多的小应用。下面只是一些能让你开始的想法:
ls
的功能。/r/programming
获取 reddit posts 并用 JSON 文件的格式保存。jsonify dir-name
能够给你一个带有 dir-name
内部结构的 JSON 文件。一旦你已经有了语言基础,并且做过了一些示例程序,那么你就该为选择的语言学习使用包管理器。包管理器可以帮助你在你的应用中使用外部的库或者发布你自己的库以供他人使用。
如果你选择了 PHP,你就必须学习 Composer。Node.js 则有 NPM,Python 有 Pip,以及 Ruby 有 RubyGems。无论你选择了哪一种语言,都应该进一步学习如何使用它的包管理器。
每一门语言都有自己的标准和最佳实践。为你选择的语言学习它们。比如 PHP 有 PHP-FIG 和 PSR 规范, Node.js 则有很多不同的社区驱动指南,其他语言也是如此。
务必阅读安全方面的最佳做法。阅读 OWASP 指南,了解不同的安全问题并在您选择的语言中规避它们。
现在你已经知道了语言基础、标准和最佳实践、安全以及怎么使用包管理器。现在开始创建一个包并发布给他人使用,然后确认遵循了你目前学习到的标准和最佳实践。例如,如果选择了 PHP,你可以把它发布到 Packagist 上;如果选择了 Node.js,你可以把它发布到 NPM Registry 上,等等。
如果你已经做完了这些,请在 Github 上搜索一些项目并发起 Pull 请求。对此的一些想法,有:
有几种用来测试的不同测试类型。了解这些类型各自的意图。但现在先学习如何编写单元测试和集成测试。此外,了解不同的测试术语,比如 Mocks,Stubs 等等。
至于实践, 请继续编写你已经完成任务的单元测试,尤其是在第 6 步中所做的练习。
还要学习和计算你所写测试的覆盖率。
学习如何将你的数据持久化到数据库。在你选择要学习的工具之前,先理解一些数据库的术语,比如说键,索引,范式,元组等等。
数据库在这里有一些选择。如果你学会了一个数据库,其他的数据库也学起来比较容易。你想学习的数据库有 MySQL,MariaDB (大部分相同并且是 MySQL 数据库的一个分支),PostgreSQL 。你可以选择 MySQL 开始学习。
是时候把你目前所学的一切,去实际中应用了。
创建一个简单的应用程序,把你目前所学的知识都用到这个应用里面去。可以选择任何想法去实现,也可能就是创建一个 blog 去实现下面提到的功能点
根据你选择的项目和语言,你可能需要一款框架。每一门语言对此都有几个不同的选择,继续来看你所选择的语言有哪些可选的框架,然后从中挑选一个。
如果你选择了 PHP,那么我建议你使用 Laravel 或者 Symfony 以及微框架 Lumen 或 Slim。如果你选择了 Node.js,将会有几个不同的选择,但比较好的是 Express.js。
为了实现这一步,请用你选择的框架对你在第 10 步完成的应用进行重构。并确认移植了一切内容,包括测试。
首先要理解它们是什么,它们与关系型数据库有什么不同,以及为什么需要它们。这里有几个不同的选择,研究看看它们的特点和差异。一些常见的选择是 MongoDB,Cassandra,RethinkDB 和 Couchbase。如果你必须选择一个,请从 MongoDB 开始。
学习在你的应用程序中实现应用级缓存。了解怎样使用 Redis 或 Memcached 并对你在第 12 步中构建的应用实现缓存。
了解 REST 和学习如何创建 RESTful API,请务必从 Roy Fielding 的原始文章中阅读 REST 相关部分。然后可以确认,如果有人说 REST 只是 HTTP API,你将能够与他们争论。
学习不同的认证和授权方法,你应该知道他们的不同和优劣,什么时候更适合用什么方式去实现。
理解各种消息订阅发布系统,知道什么时候什么场景适合用什么技术,现在有很多种技术可以选择,最突出的是 RabbitMQ 和 Kafka,你可以先开始学习 RabbitMQ 或者 Kafka。
随着应用程序的增长,对关系数据库或者 NoSQL 数据库简单的查询已经无法满足你的需求,所以你不得不求助于搜索引擎。对于搜索引擎我们有很多种不同的选择,并且每一种都有它自己的特性。
Docker可以极大的促进你的开发,无论是复制与生产环境相同的环境,保持操作系统的整洁还是加快编码、测试或部署的速度。我将把 “ 它将如何帮助我 ” 的答案留给你们去搜索。在这一步中,继续学习和如何使用 Docker。
如果你已经学到了这里,你可能已经在前面的步骤中使用过服务器了 。这一步的主要任务是找出不同 Web 服务器之间的差异,了解服务器的一些限制以及不同的服务器的可用配置,最后最大限度的利用这些限制去编程。
Web Socket 不是必须要掌握的,在你的知识库中有这些知识,对你来说是很有好处的。学习如何使用 Web-sockets 编写实时 Web 应用程序并使用它创建一些示例应用程序。你可以用在 blog 的应用程序中,实现 blog文章列表的实时更新。
学习如何利用 GraphQL 创建 API 。理解 REST 和 GraphQL 的不同,以及为什么 GraphQL 被称作 REST 2.0 。
图模型代表了一个非常灵活的处理数据关系的方式, 并且图形数据库为它提供了快速高效的存储,恢复和查询 。 去学习一下怎么使用 Neo4j 或者 OrientDB 吧。
一旦你开始了学习和练习,你必然的会遇到一些不在路线图里面的事物。不过只要对学习新事物保持一个开放的心态和积极的兴趣就好。
记住,关键是尽你所能的去练习。刚开始会看起来很吓人,你可能会觉得对所有东西都不理解,但是这是正常的,随着时间的推移,你会感觉好一点的。