简评:以前,后端开发路线图仅仅是一个技术推荐,且没有明确的方向指明应该遵循的顺序,这份从新制做的指南将会给你一个更好的方向。前端
如今的 Web 开发与几年前彻底不一样了,有不少不一样的东西能够轻易地把人拒之门外,这也是咱们决定制做这个按部就班指南的缘由之一,并让任何人能够清楚地了解他们在 web 开发中扮演的角色。web
能够在下面的图片中找到详细的路线图,而我也将在下面的描述中解释每个步骤。sql
在开始以前,虽然咱们没有在下面的路线图中列出 HTML / CSS 的知识,但建议读者至少要了解一些基本的 HTML / CSS 知识。docker
语言有不少选择,我已经将它们分红几类,以便更容易作出决定。对于刚开始进入后端开发的初学者,我建议你选择任何脚本语言,由于它们有不少功能,可让你快速起步。若是你有一些前端知识,你可能会发现 Node.js 更容易(还有一个很大的就业市场)。数据库
若是你已是后端开发并了解一些脚本语言,我建议不要选择其余脚本语言,而是从「函数式(Functional)」或「多范式(Multiparadigm)」中选择。例如,若是你已经在使用 PHP 或Node.js,请不要使用 Python 或 Ruby,而应该尝试使用 Erlang 或 Golang。它必定会帮助你延伸思惟,并将你的思想带到新的视野。json
没有比实践更好的学习方式了。一旦你选择了语言,而且对这些概念有了基本的了解,就可使用它们,尽你所能制做尽量多的小应用。下面是一些让你开始的 Idea:后端
/r/programming
文章的命令,并保存为 JSON;了解该语言的基础知识并制做了一些示例应用以后,须要了解如何使用该语言的软件包管理器,包管理器可帮助在应用程序中使用外部库,并分发你本身的库供其余人使用。api
若是你选择了 PHP,你将学习的是 Composer,Node.js 有 NPM 或 Yarn,Python 有 Pip,Ruby 有 RubyGems。不管选择什么,请继续学习如何使用其包管理器。缓存
每种语言都有本身的标准和开发的最佳实践,例如 PHP 有 PHP-FIG 和 PSR,使用 Node.js 有许多不一样的社区驱动指南,其余语言也有相同的指导。安全
请务必阅读有关安全的最佳实践,阅读 OWASP 指南并了解不一样的安全问题以及如何以选择的语言避免它们。
你已经掌握了语言、标准和最佳实践的基础知识,安全性以及如何使用软件包管理器。如今开始建立一个包并分发给其余人使用,并确保遵循迄今为止学到的标准和最佳实践。例如,若是您选择了 PHP,那么能够在 Packagist 上发布,若是选择了Node.js,那么能够在 Npm 上发布,等等。
若是完成了,在 Github 上搜索一些项目,并在某些项目中提一些 PR。下面是一些 Idea:
了解如何在应用程序中编写单元测试和集成测试,另外,了解不一样的测试术语,如mocks
, stubs
等
为目前为止所作的实际任务编写单元测试,尤为是步骤 6 中所作的练习。还要学习和计算编写的测试的覆盖率。
了解如何将数据保存在关系数据库中。在选择要学习的工具以前,请先了解不一样的数据库术语,例如键,索引,规范化,元组等。
这里有几个选项,但若是你学习一个,其的应该也是至关容易去学。你想学习的应该是 MySQL,MariaDB 和 PostgreSQL。能够选择 MySQL。
如今是时候把学到的东西拿来用了,使用迄今为止学到的全部内容建立一个简单的应用程序。选择任何一个 idea,能够是建立一个简单的博客,并实现其中的如下功能:
根据选择的项目和语言,可能须要也可能不须要框架。每种语言都有几个不一样的选项,继续看看选择的语言有哪些选项可供选择,而后选择一个。
若是选择了 PHP,我会建议使用 Laravel 或 Symfony 以及微架构(Lumen 或 Slim),若是你选择 Node.js,有几种不一样的选择,但突出的是 Express.js。
将 step10 中建立的应用程序转换为使用选择的框架,还要确保移植包括测试在内的全部内容。
首先了解它们是什么,它们与关系数据库有什么不一样以及为何须要它们。 有几种不一样的选择,稍微研究下看看,并比较它们的特色和差别。 能够选择的一些经常使用选项有 MongoDB,Cassandra,RethinkDB 和 Couchbase,若是必须选择一个,请使用 MongoDB。
了解如何在应用程序中实现应用程序级缓存,了解如何使用 Redis 或 Memcached,并在 step 12 中建立的应用程序中使用缓存。
了解 REST 并学习如何制做 RESTful API,在 Roy Fielding 的文章中阅读关于 REST 的部分,若是他们说 REST 只适用于 HTTP API,那么确保你可以与他人争论。
了解不一样的认证和认证方法,你应该知道他们是什么,有什么不一样以及何时使用偏好。
了解消息代理并了解什么时候以及为什么使用它们。一样有多种选择,但突出的是 RabbitMQ 和Kafka,若是你想选择一个的话,能够先从 RabbitMQ 开始。
随着应用程序的增加,关系数据库或 NoSQL 数据库的简单查询不可以知足要求,而不得不求助于搜索引擎。
不管是在复制与生产环境相同的环境,保持操做系统清洁或加快编码、测试或部署,Docker 能够在开发过程当中大大方便工做,学习如何使用 Docker。
若是你已经走到这么远了,你可能已经在前面的步骤中使用了服务器,这一步主要是找出不一样Web 服务器之间的差别,了解限制和不一样的可用配置选项,以及如何最好地利用这些限制编写应用程序。
虽然不是必需的,但在工具带中有这些知识是有益的,学习如何使用 web-sockets 编写实时Web 应用程序并使用它建立一些示例应用程序。能够在上面制做的博客应用程序中使用它来实现博客文章列表中的实时更新。
学习如何使用 GraphQL 制做 API,了解它与 REST 的不一样之处,以及它为何被称为 REST 2.0。
图模型表明了一种很是灵活的处理数据关系的方式,图数据库为其提供了快速高效的存储、检索和查询方式,学习如何使用 Neo4j 或 OrientDB。
一旦你开始学习和练习,你必定会遇到咱们在这个路线图中没有涉及的东西,只要保持开放的心态和对新事物的渴望就好。
关键是要尽量多地练习,起初你可能会以为你并无抓住任何东西,但这是正常的,随着时间的推移,你会以为愈来愈好。
原文:https://medium.com/tech-tajawal/modern-backend-developer-in-2018-6b3f7b5f8b9
译文:https://zhuanlan.zhihu.com/p/35620194