不维护了,欢迎关注我的知乎:波罗学的个人主页
最近在乎看到了一个问题,尝试去回答一下,答着答着感觉变成了如何成为一名python web开发。内容如下:
地址:https://www.zhihu.com/question/316975464/answer/629473999
毕业后自学了很多知识,或许程序员都这样。故存了一些胡思乱想,借你问题写出来,说的不好请见谅。
---------------------------------------分割线-------------------------------------------
先来闲扯一番
不知道你做的是什么项目。不过这个是很正常的事情,做任何事情都是这样。可以用我们经常听到的一句话来对比这件事:听了那么多道理,依然过不好这一生。
现在你学的Python基础知识,其实很类似于我们生活听的大道理,偏向于纯粹的知识层面。这些道理没用吗?当然不是,只是我们要使之有效的与生活结合需要太多生活阅历。说实话,这是个很难的命题。同理,编程语言与项目结合也需要我们阅历。
那么有没有办法提前了解它们,完全体验是没有可能的。但可以通过前人了解。从能否过好一生这个问题来说,如果我们能对人的一生各阶段的脉络都有大致的了解,那么我们每到一个阶段就不会容易迷失方向。同样,学习编程这件事也是如此,如果有人帮我们指定了学习的路线,也就很难迷失方向。
关于人生,我觉得最好的一本书是中国的《易经》,通过六十四卦理清了人生的脉络。
关于python,先贴个关于如何学习爬虫的回答,从爬虫流程角度出发整理的一套思路:
想学爬虫,但是只会Python的基础,有没有大佬推荐一下书籍啊?
闲扯到此结束
--------------------------------------- 分割线 ------------------------------------------
进入正题,如何自学Python?
先要明确目标
万事开头难,在学习之前我们可以花点时间搞清楚自己为什么学python。如果没有想明白这点,那些基础语法的学习真的没有啥意思。即使是学生的考试必修,为了学好,最好也通过老师或者一些其他定个目标再开始学习。
Python有很多的方向,如web开发、爬虫、数据分析、自动化测试、运维开发、机器学习。根据自己的情况,选择自己适合或感兴趣的方向。
为防止空谈道理而把自己到搞晕了,在开始下面的内容前,先选个方向吧。爬虫的思路在上面的链接中说了部分,这次就选web开发吧。
打牢基础知识
选了目标方向之后,基础就涉及到几个部分了。语言层面:无论什么方向,Python基础语法都要掌握,且是日后必用的知识,这些在网上也比较容易找到免费课程。具体列举一下:
- 数据类型(整型、浮点型、虚数、字符串)和变量以及与它们相关的操作(比较、运算、赋值、位运算、逻辑运算等);
- 掌握数据结构(列表、元组、集合、字典)以及它们的使用方式,是否支持以及如何进行增删改查等操作;
- 学习掌握常见的流程控制语句,比如if-else if-else,while、for等;
- 掌握函数的使用与定义,函数参数等相关知识,可以编写函数,实现代码复用;
- 学习一些基础模块,比如os提供的文件操作,输入输出方法,日期时间相关内容;
学习到此,不同方向路线开始慢慢产生分岔,转到特定领域的学习。比如,数据分析将会开始诸如numpy、pandas、matplotlib、scipy这些具体的库的学习。如果遇到一些问题,基本靠百度、google就可以解决;
提醒:经常发生这样的事情,当开始学习一门新的编程语言时,我们总想抱一本诸如《Python编程手册》从头啃到尾。结果很快就放弃了。我认为并非是你毅力不好,而是方法不当。书中通常有很多对作者而言不能少而我们并不感兴趣而且并不需要知道的知识。
深入编程技能
我们知道web开发是工程化方向。所以这个方向的编码要求会很高,很讲究模块化开发,甚至设计模式也要了解一些。如果公司开发,通常都有一套基本的代码规范,而且还需要代码review。
先来说说还需继续学习一些高级编程技巧吧,如下:
- 要了解Python中的模块,import到底怎么用,怎么开发一些新的模块;
- 了解异常处理机制,掌握try except的使用方法,提高的代码的健壮性;
- 掌握面向对象、类和对象。为什么说python所有变量都是对象,深入变量的存储形式等。
- 掌握网络编程,如何使用socket套接字开发tcp服务;
- 多进程多线程怎么写,可以先熟悉系统提供的包就行了;
有了这些知识我们还不能进行web开发,但是建议如果这个过程有毅力,可以多练习一些案例。以后如果有时间,我也可以整理一些,来提高这些枯燥无味阶段趣味的练习。
掌握领域知识
如果是其他语言转过来的朋友,或许已经熟悉web的流程。我转学python时,已经是一名3年的PHP开发,所以我只需根据这些流程针对性学习python中的相应技术即可。
其中很重要的就是http协议,先说说HTTP协议吧,简单拆分如下几部分,不一定全:
- 了解http与tcp协议之间的关系,了解网络分层模型的知识;
- 必须掌握http的请求响应流程,了解一个网页请求从发出到获取页面涉及了哪些路径;
- 熟悉http协议中的请求和响应结构,可以做个练习,比如用socket模拟http请求下载网页;
- 掌握session和cookie,它们也是http的知识,要深入理解掌握的它们的作用和区别;
- 熟悉http中各种方法,了解它们的区别以及什么是restful,掌握POST和GET的区别;
尴尬说明:在努力回忆自己学过的一些知识。扯着扯着好像成了老师整理课程大纲了。不过大家都知道,在学习的过程,经常梳理一下自己曾经所学也是巩固知识的一种方式。
需要简单了解
聊聊前端一些知识,现在web开发前后端职责分明。以前谈web开发不太区分这些。python主要是在后端,不过前端的知识也需要了解一些:
- 熟悉html的使用,起码要会写一些简单结构的页面,了解各种标签的作用;
- 了解一些js编程技术,起码会做简单的dom操作,可以去学学jquery;
- 至于css是否要学,看自己需求,如果想做些项目且无人合作,可以了解下。
扩展:虽然现在专业的前端已经越来越工程化,node出来后,前端发展很迅猛,诸如es6、typescript、vue、react、webpack、babel、postcss等各种技术五花八门。但是现在一些项目前端仍会采用jquery+bootstrap开发,因为后端毕竟不是专业前端工程师;
聊聊周边服务
一个web系统的运行需要依赖很多的周边服务。比如数据、缓存、代理服务器、运行系统等
待续。。。