24步成为后端开发工程师(2018版)

来源:Python程序员

ID:pythonbuluo

今天的网站开发已经大不同以往,有很多的东西会对进入此领域的人造成困惑,这就是我们写这系列文章的原因——给大家指导如何在开发过程中胜任特定的角色。

大约1周以前,我们发布了一篇名为“现代前端开发--2018”,同时我们承诺了会发布一篇“后端以及开发运维路线图”。兑现这一承诺,这篇文章就是关于现代后端开发者的。如果你还没有查看过前端开发路线图,可以去瞧瞧先。

在此之前,后端路线图就是简单粗暴的给出了你需要掌握的技术,而没有清晰的方向以及学习的合理顺序。我们像前端一样以循序渐进的方式重绘了后端路线图,希望给你更好的指导。

言归正传,我们开始吧。详细的路线图在下面的图片中,同时我会逐步的详细讲解。

下面的章节,我们将之分解开来逐步讲解。

开始之前,虽然我们没有将HTML/CSS列举在路线图中,但是我们还是建议用户具备基础的HTML/CSS技能,至少能够写一些基本的HTML/CSS。

1. 学习一门语言

语言的选择有很多种,为了方便您的选择,我将它们进行了分类。对于刚接触后端开发的新手,我强烈建议你们选择一门脚本语言,因为它们的需求很多且上手较快。最好的选择当然是Python,它的需求正在急速增长,有大量的职位可供选择。

2. 学以致用

最后的学习方法就是动手实践。一旦你选择了语言,然后对其有了基本的了解,开始使用它。运用它进行尽可能多的练习,写一些小程序练手,熟悉它。下面是一些小例子,可以帮助你开始。

* 实现一些bash中你常用的命令, 比如ls的功能

* 写一个从reddit的/r/programming频道抓取数据并将之保存为JSON格式的小程序

* 写一个程序将目录结构保存为JSON文件。

* 根据上面生成的JSON文件,生成目录结构。

* 想想日常工作中的任务,尝试将之自动化。

3. 学习包管理器

一旦你了解了语言的基础,同时用它写过些示例程序,接着学习该语言的包管理器。包管理器可以帮助你使用第三方库,同时你也可以通过它发布自己的库以供他人使用。

假设你选择的是Python,你应该已经学习了Pip。Node.js有NPM或Yarn、PHP有Composer,Ruby有RubyGems。无论你选择了什么,进一步去学习它的包管理。

4. 规范以及最佳实践

每一种语言有其规范以及最佳实践。你需要掌握这个东西。比如Python有PEP8跟Google Python代码规范。Node.js各社区有不同的规范。其他语言的状况也大同小异。

5. 安全

务必要掌握安全最佳实践。读读OWASP指南,了解不同的安全问题,同时要知道如果避免这类问题。(你选择的语言)

6. 实践

现在你已经掌握了语言基础,最佳实践,安全相关以及包管理,你可以去开发自己的库供他人使用了。如果你用Python,你需要发布在Pypi,如果是Node.js,你需要发布在Npm。

到此,你可以在Github上找一些项目,参与进去。

* 重构,实现你学到的最佳实践

* 修复已知的问题

* 添加新的功能

7. 测试

测试分很多种,要了解每一种测试的类型以及其目的。但是现在,首先学习单元测试以及综合测试,应用在你的程序中。此外,还要了解不同的测试术语,比如mocks,stubs等等。

8. 实践-测试

为你所写的所有程序编写单元测试,特别是在Github上参与的项目。

同时,学习覆盖率的概念,计算测试代码的覆盖率。

9. 关系型数据库

学习利用关系型数据库保存你的数据。在学习之前,首先掌握数据库相关的术语。比如: keys,indexes,normalization,tuples等。

可供选择的数据库很多,你只需要掌握一个,其他的也会变得很简单。流行的有MySQL,MariaDB(MySQL分支,与之非常相似),PostgreSQL。推荐选择MySQL开始。

10. 动手时间 - 实践

到了将所学融合的时候了。

创建一个简单的应用,运用你所学的一切。实现一个想法,可能是创建一个简单的博客站点,实现一下的特性:

* 账户系统——注册&登陆

* 注册用户可以创建blog

* 用户可以查看自己创建的所有的blog

* 用户可以删除自己发布的blog

* 保证用户只能看到自己发布的blog,不能看其他人的

* 为应用编写单元/综合测试

* 为查询创建索引。分析查询,确保索引生效

11. 学习一个框架

根据你的项目类型以及你的语言的不同,你可能会需要一个框架辅助开发。(也可能不需要)。每种语言都有不同的选择,选择一个合适的即可。

如果你选择了Python,建议你选择Django,对于微框架,建议Flask。

对于Node.js,最知名的框架是Express.js。

12. 实践-框架

利用选择的框架重构你的博客应用。不要忘记了集成测试代码进来。

13. 学习NoSQL(not only SQL)数据库

首先了解什么是NoSQL,以及它们与关系型数据库的差别,同时为什么需要它们。NoSQL数据库也有多种选择,了解并比较它们之间的特性以及不同之处。常用的有MongoDB,Cassandra,RethinkDB,Couchbase。建议选择MongoDB开始。

14. 缓存

学习如何在你的程序中实现应用级的缓存。了解如何利用Redis或Memcached实现缓存,同时在你的博客应用中实现缓存功能。

15. 创建RESTful APIs

了解REST,学习如何编写RESTful APIs,阅读关于REST的白皮书。(By Roy Fielding)。理解REST不仅仅是HTTP APIs。

16. 学习不同的认证方法

学习不同的认证以及认证方式。你需要明白它们是什么,它们的不同点,以及它们适用的场景。

* OAuth--Open Authentication

* Basic Authentication

* Token Authentication

* JWT--JSON Web Tokens

* OpenID

17. 消息代理

学习消息代码,了解什么时候以及为什么使用它们。有很多可供选择,最知名的是RabbitMQ & Kafka。建议从RabbitMQ开始学习。

18. 搜索引擎

随着应用程序规模的增长,简单的查询已经无法满足要求。这个时候,你需要用到搜索引擎。同样有多种选择,每一种有自己的特点。

19. 学习使用Docker(容器)

Docker可以为你的开发提供巨大的便利。它可以让你的开发环境与生产环境保持一致,可以让你的系统保持干净,可以加速你的编码,可以测试部署。Docker的好处,请自行google。从现在开始,学习Docker。

20. Web服务器的知识

到了这个时候,你可能已经处理过服务器相关的问题。这一步骤主要是了解不同的服务器之间的差异,局限,以及不同的调优方法。

21. 学习Web Sockets

虽然不是必须,但是具备Web Sockets的技能是有好处的。学习编写实时的web应用。可以在博客应用中,实现即时更新blog列表。

22. 学习GraphQL

学习GraphQl的APIs。了解它与REST的不同,然后为什么它被称之为REST 2.0。

23. 研究Graph数据库

Graph模型具备非常好的灵活性——在处理数据间的关系的时候。Graph数据库提供高速&高效的存取以及查询。学习了解Neo4j或者OrientDB。

24. 不停探索

在你的学习以及实践过程中,肯定会碰到路线图里没有提及的东西。你只需要保持开放以及饥渴去学习新的东西。

时刻谨记,学习的关键是实践。多动手!刚开始的时候,你可能会感觉不大好,随着你的坚持以及时间的推移,你会变得越来越好。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-04-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4688
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4828
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2625
来自专栏落花落雨不落叶

canvas画简单电路图

59811
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2697
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2132
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

30910
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2632
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4818
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6688

扫码关注云+社区