一周以前, 我们发表了一篇文章 Modern Frontend Developer in 2018 ,我们承诺了为后端和DevOps发布最新的路线图。现在履行承诺, 这篇文章是关于现代后端开发者的。 如果你还没有查看前端开发者路线图的话,去看一下吧。
之前的后端路线图只是一个纯粹的技术推荐,没有明确的方向和应该遵循的顺序。所以我们像前端路线图那样重新绘制了它,让它可以一步一步的引导以给你一个更好的建议。
我们现在在为 DevOps 努力绘制路线图,并有希望在下周发布。届时,我们也将会发布一篇与之相关的文章, 在这里 link to the repository 你可以查看最新的更新情况。
言归正传,让我们开始吧。你可以在下图中看到详细的路线图,同时我也将在后面的描述中解释每一步。
中文图片来自 developer-roadmap-chinese 让我们把它分解一下并在下面的部分对每一步进行解释。
在我们开始之前, 尽管我们没有把 HTML/CSS 的相关知识列在路线图上面,但是建议你至少了解一点并且知道怎么编写一些基本的 HTML/CSS。
第 1 步:学习一门语言
当我们谈到语言时,你会有无数种选择。为了方便你做决定,我把它们分成几类。对于刚开始进入后端开发的初学者,我建议你随便选一门脚本语言去学,它们都有大量的需求,也能让你很快地成长。如果你已经有了前端开发的一些知识,你可能会发现 Node.js 会比较容易,再加上它有很大的就业市场。
如果你已经开始做后端开发的工作并且已经掌握了一门脚本语言,我建议你不要去再学习一门新的语言了,而是挑选「功能(Functional)」和「多范例(Multiparadigm)」的一些内容去学。举个例子,如果你已经在用 PHP 或者 Node.js 开发了,不需要再学 Python 或者 Ruby,而是去尝试 Erlang 或者 Golang。这一定会帮助你扩展思维、开阔眼界。
第 2 步:练习你所学
没有比练习更好的学习方式了。当你学习了你的语言并且对它的概念有了最基本的理解时,请把它们应用到实践。要做尽可能多的小应用。下面只是一些能让你开始的想法:
- 实现你在 bash 中运行的一些命令。例如,尝试去实现
ls
的功能。 - 写一个命令,从
/r/programming
获取 reddit posts 并用 JSON 文件的格式保存。 - 写一个命令,用 JSON 格式表示一个目录的结构。例如,
jsonify dir-name
能够给你一个带有dir-name
内部结构的 JSON 文件。 - 写一个命令,能够读取上面步骤的 JSON 文件,并且创建这样的目录结构。
- 考虑一些你每天做的事情,并且尝试让它们自动完成。
第 3 步:学习包管理器
一旦你已经有了语言基础,并且做过了一些示例程序,那么你就该为选择的语言学习使用包管理器。包管理器可以帮助你在你的应用中使用外部的库或者发布你自己的库以供他人使用。
如果你选择了 PHP,你就必须学习 Composer。Node.js 则有 NPM,Python 有 Pip,以及 Ruby 有 RubyGems。无论你选择了哪一种语言,都应该进一步学习如何使用它的包管理器。
第 4 步:标准和最佳实践
每一门语言都有自己的标准和最佳实践。为你选择的语言学习它们。比如 PHP 有 PHP-FIG 和 PSR 规范, Node.js 则有很多不同的社区驱动指南,其他语言也是如此。
第 5 步:安全
务必阅读安全方面的最佳做法。阅读 OWASP 指南,了解不同的安全问题并在您选择的语言中规避它们。
第 6 步:练习
现在你已经知道了语言基础、标准和最佳实践、安全以及怎么使用包管理器。现在开始创建一个包并发布给他人使用,然后确认遵循了你目前学习到的标准和最佳实践。例如,如果选择了 PHP,你可以把它发布到 Packagist 上;如果选择了 Node.js,你可以把它发布到 NPM Registry 上,等等。
如果你已经做完了这些,请在 Github 上搜索一些项目并发起 Pull 请求。对此的一些想法,有:
- 重构并实现你学到的最佳实践
- 研究公开的 Issues 并尝试解决
- 添加其他的附加功能
第 7 步:学习测试
有几种用来测试的不同测试类型。了解这些类型各自的意图。但现在先学习如何编写单元测试和集成测试。此外,了解不同的测试术语,比如 Mocks,Stubs 等等。
第 8 步:实践
至于实践, 请继续编写你已经完成任务的单元测试,尤其是在第 6 步中所做的练习。
还要学习和计算你所写测试的覆盖率。
第 9 步:学习关系型数据库
学习如何将你的数据持久化到数据库。在你选择要学习的工具之前,先理解一些数据库的术语,比如说键,索引,范式,元组等等。
数据库在这里有一些选择。如果你学会了一个数据库,其他的数据库也学起来比较容易。你想学习的数据库有 MySQL,MariaDB (大部分相同并且是 MySQL 数据库的一个分支),PostgreSQL 。你可以选择 MySQL 开始学习。
第 10 步:实战的时间
是时候把你目前所学的一切,去实际中应用了。
创建一个简单的应用程序,把你目前所学的知识都用到这个应用里面去。可以选择任何想法去实现,也可能就是创建一个 blog 去实现下面提到的功能点
- 用户账号管理--- 注册和登陆
- 已经注册的用户可以发表博客
- 用户可以浏览自己发布的所有博客
- 用户可以删除自己的博客
- 确保用户只能够看到自己个人的博客而且不能看到其他人的
- 编写应用程序的单元/集成测试
- 你应该为一些查询数据添加索引。分析查询语句确保有用到索引。
第 11 步:学习一款框架
根据你选择的项目和语言,你可能需要一款框架。每一门语言对此都有几个不同的选择,继续来看你所选择的语言有哪些可选的框架,然后从中挑选一个。
如果你选择了 PHP,那么我建议你使用 Laravel 或者 Symfony 以及微框架 Lumen 或 Slim。如果你选择了 Node.js,将会有几个不同的选择,但比较好的是 Express.js。
第 12 步:练习时间
为了实现这一步,请用你选择的框架对你在第 10 步完成的应用进行重构。并确认移植了一切内容,包括测试。
第 13 步:学习一款 NoSQL 型数据库
首先要理解它们是什么,它们与关系型数据库有什么不同,以及为什么需要它们。这里有几个不同的选择,研究看看它们的特点和差异。一些常见的选择是 MongoDB,Cassandra,RethinkDB 和 Couchbase。如果你必须选择一个,请从 MongoDB 开始。
第 14 步:缓存
学习在你的应用程序中实现应用级缓存。了解怎样使用 Redis 或 Memcached 并对你在第 12 步中构建的应用实现缓存。
第 15 步:创建 RESTful API
了解 REST 和学习如何创建 RESTful API,请务必从 Roy Fielding 的原始文章中阅读 REST 相关部分。然后可以确认,如果有人说 REST 只是 HTTP API,你将能够与他们争论。
第 16 步 : 学习不同的认证方法
学习不同的认证和授权方法,你应该知道他们的不同和优劣,什么时候更适合用什么方式去实现。
- OAuth --- 开发认证
- HTTP Basic 认证
- Token 认证
- JWT --- JSON Web Tokens 认证
- OpenID
第 17 步:消息订阅发布系统
理解各种消息订阅发布系统,知道什么时候什么场景适合用什么技术,现在有很多种技术可以选择,最突出的是 RabbitMQ 和 Kafka,你可以先开始学习 RabbitMQ 或者 Kafka。
第 18 步 : 搜索引擎
随着应用程序的增长,对关系数据库或者 NoSQL 数据库简单的查询已经无法满足你的需求,所以你不得不求助于搜索引擎。对于搜索引擎我们有很多种不同的选择,并且每一种都有它自己的特性。
第 19 步 :学习如何使用 Docker
Docker可以极大的促进你的开发,无论是复制与生产环境相同的环境,保持操作系统的整洁还是加快编码、测试或部署的速度。我将把 “ 它将如何帮助我 ” 的答案留给你们去搜索。在这一步中,继续学习和如何使用 Docker。
第 20 步:Web 服务器知识
如果你已经学到了这里,你可能已经在前面的步骤中使用过服务器了 。这一步的主要任务是找出不同 Web 服务器之间的差异,了解服务器的一些限制以及不同的服务器的可用配置,最后最大限度的利用这些限制去编程。
第 21 步:学习如何使用 Web Sockets
Web Socket 不是必须要掌握的,在你的知识库中有这些知识,对你来说是很有好处的。学习如何使用 Web-sockets 编写实时 Web 应用程序并使用它创建一些示例应用程序。你可以用在 blog 的应用程序中,实现 blog文章列表的实时更新。
第 22 步:学习 GraphQL
学习如何利用 GraphQL 创建 API 。理解 REST 和 GraphQL 的不同,以及为什么 GraphQL 被称作 REST 2.0 。
第 23 步:研究 图形数据库
图模型代表了一个非常灵活的处理数据关系的方式, 并且图形数据库为它提供了快速高效的存储,恢复和查询 。 去学习一下怎么使用 Neo4j 或者 OrientDB 吧。
第 24 步: 持续探索
一旦你开始了学习和练习,你必然的会遇到一些不在路线图里面的事物。不过只要对学习新事物保持一个开放的心态和积极的兴趣就好。
记住,关键是尽你所能的去练习。刚开始会看起来很吓人,你可能会觉得对所有东西都不理解,但是这是正常的,随着时间的推移,你会感觉好一点的。
就这样, 这篇文章到这就结束了。 你可以在 twitter 和我做朋友,或者通过邮件 email和我联系。当然也别忘了去 watch the repository 查看未来的一些更新。 请继续关注!
转自 PHP / Laravel 开发者社区 laravel-china.org/topics/1339…