0x01 前言

学习Python Web的时候找到的一篇挺好的文章,里面写的也很实在,所有分享出来。

0x02 学习路线

看了这么多是不是还有点懵,笔者当时自学的时候也没人带,没什么方向,走了很多弯路,找工作也不是一帆风顺。如果不是科班出身受过系统的计算机科学理论的训练,是比较吃亏的,只能通过大量针对性学习和练习来弥补。 大概整理下自己学习 python web 的路线,方便大家做个参考(一个合格的工程师不是短时间能练成的)。其实这基本上也是后端工程师的学习路线,换一个编程语言或者框架都差不多。技术更新迭代非常快,后端技术还算比较稳定的,但是知识点很多很杂,有针对性学习比较好。 如果你觉得这个教程列出的东西太多,建议就找最重要的知识点,每个知识点挑一本最合适的书学习,我列举的很多资料对于初学者来说可能短时间内难以消化,会有畏难心理和学习焦虑,建议多加练习通过正反馈提升自己学习的乐趣。(如果你还是个学生那很好,有大把的时间准备)

  • 学习并熟练掌握一门编程语言(学好英语)。这里笔者选择的是最近特别火的 python,它能干很多事。挑一本好的入门教材,通读并实践书中所有代码示例和练习题(练手感,坚持敲,大量敲)。了解该语言如何操作文本、进程、网络编程等,最后达到能熟练运用编程语言表达逻辑的能力。
  • 搭建好开发环境。初学者个人比较推荐 Ubuntu 系统 + Pycharm 社区版,都是可以免费获取的,我经常安利用 linux 或者 mac,和桌面端不同,企业大部分用的都是 linux server 部署 web 应用的(包括 docker 容器技术等都是基于 linux),熟悉 linux 命令行、文件、进程操作等会给你找工作和日常工作带来便利。
  • 熟悉算法和数据结构。对于编程语言内置的数据结构、算法等要数量掌握和使用,常用数据结构和算法了解其原理,会计算时间空间复杂度,会自己实现(常见算法面试笔试常考)。
  • 熟悉网络协议 TCP/IP,HTTP,了解互联网是怎么运作的。既然是做网站,需要对网络运行原理比较了解。
  • 学习 web 框架和 python 库。做东西我们需要大量现成的轮子帮助我们,看下 django、flask 等流行的 tutorial,然后做个简单的网站出来(比如博客网站,一般按照教程撸一遍就入门了,python web 框架的文档非常完善)。最好能深入一个框架了解原理,比如看看 flask 和 Werkzeug 源码。
  • 了解前端知识。如果能独立做一个博客出来,大概对 html、css、js 就有所了解了。虽然是做后端,但是基本的前端知识也是必不可少的。
  • 学习业务常用数据库 mysql 和 redis,业界用得比较多的数据库。了解关系型数据库 mysql 基础概念、语句、索引优化等,了解内存型数据库 redis 的常用数据结构,使用场景、结构设计等。
  • 学习 git 版本控制。公司项目协作的时候都是有版本控制的,方便我们协作、记录、回滚代码等。学习编码规范,培养良好的编程习惯。我建议一开始就遵守 pep8,用好 autopep8,pylint 等工具,写出格式规范的代码,不要走野路子。(学习下文档和规范很棒的 python 开源代码)
  • 在 linux server 部署你的 python web 服务。你需要学习 linux 常用命令,web 服务器 nginx 等。最好能独立部署一个网站出来。(笔者经常安利 linux 或者 mac,即使不用来作为开发环境,也要熟悉 linux 命令,能帮助你在服务器上快速修改和调试代码)
  • 对照招聘网站中意的公司的招聘需求查漏补缺。初期就是要多学多练多 google,不是做项目就是在刷题。可以做一些博客、论坛、管理后台等小网站练手。
  • 老实说相比 java 和 php,python 后端岗位是比较少的,如果你学完了还没找到工作然后来臭骂我一顿我会感觉委屈的。我个人倾向于 python 是因为真爱,并且学习python 性价比很高,可以做很多事。如果你觉得不好找工作或者只是把 python 当玩具玩(比如用 pandas 分析自己的投资收益,回测等),换个语言和技术栈后端路线图基本上还是这些,不会白学的。
  • 建议坚持写技术博客,学习笔记等。你可以使用 hexo 之类的静态博客,或者知乎专栏等现成的服务,或者 readthedoc、gitbook 之类的文档工具。好的技术博客是找工作的一大加分项,笔者工作以后依然坚持写博客记录日常所学,可以是读书笔记、学习心得、对某个技术的理解和实践、甚至是备忘录等。
  • 进阶建议:看《Fluent Python》 之类的进阶书籍;看优秀的源码,比如 python 一些内置库,flask 等优秀的框架源码(可以用 gitx 之类的工具从代码的最初提交开始看起),能学到很多惯用法和稍微底层一些的东西。尝试仿写,比如实现个简单的 web 小框架,大概就了解框架的运行原理了。

求职与面试

最近笔者也开始当面试官了,之前求职的时候每次面试都会充分准备(当然也挂过很多次),提前一个月左右开始回顾重点理论知识(看面试相关的书),刷常用算法,练习手写代码,看相对岗位的招聘需求等。最近面试就发现很多面试者无论是否是有经验都准备不足,忽略了基础知识。 如果没有知名公司或者项目相关背景,很多招聘要求比较高的公司都会比较看重理论基础和学习能力。公司最好能有一份针对初级、中级、高级岗位的题目,尽量覆盖面广泛、难度适中,防止因为面试官的个人喜好影响面试结果。

  • 电子简历尽量用 pdf 格式,方便跨平台打开。doc 等格式在不同的电脑上打开会有排版问题,很多后端技术面试官可能使用的是 mac 或者 linux。
  • 提前复习回顾重点知识,防止卡在基础上。比如 mac 下著名的 brew 工具作者面试 google 就因为没写出来反转二叉树被拒,后来去了苹果😂.(这就只能看人品和运气和眼缘了,如果没见到二面面试官或者 hr,大概率是挂了)。(树、链表、哈希表、二分、快排、TCP/UDP、HTTP、数据库ACID、索引优化等常考点)。
  • 白板编程,练习在纸上手写代码。虽然很多求职者都很抵触手写代码,但是白板编程确实是一种比较好的区分方式。你的思考过程、编码习惯、编码规范等都能看出来。
  • 如果被问到工程里不会使用但是比较刁钻的算法题,建议你和面试官沟通的时候问问这个算法或者题目在开发中有哪些实际使用场景,看看对方怎么说😎。
  • 面试的时候准备充分,简历要与招聘方需求对等。笔者每次面试都会带上白纸、笔、简历、电脑等,即使面试没过,至少也让面试官感觉我是有诚意的,给对方留下好印象。
  • 加分项:github、个人技术博客、开源项目、技术论坛帐号等,让面试官有更多渠道了解你,有时候仅仅根据几十分钟的面试来评判面试者是有失偏颇的。(比如面试者临场发挥不好;面试官个人偏好;会的都不问,问的都不会等)
  • 《interview_python》 python 面试题
  • 《程序员面试金典》 程序员面试,很多公司会比较重视基础知识
  • 《Python后端工程师必备技能》

0X03 参考

https://python-web-guide.readthedocs.io/zh/latest/base/basics.html