大家都是怎么样自学python的?

可刚开始学一些基础还明白,到后来跟着做项目就看不懂了
关注者
59
被浏览
7,368
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

毕业后自学了很多知识,或许程序员都这样。故存了一些胡思乱想,借你问题写出来,说的不好请见谅。

---------------------------------------分割线-------------------------------------------

先来闲扯一番

不知道你做的是什么项目。不过这个是很正常的事情,做任何事情都是这样。可以用我们经常听到的一句话来对比这件事:听了那么多道理,依然过不好这一生。

现在你学的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系统的运行要依赖许多的外部服务。比如数据库、缓存、代理服务器、操作系统等

先说说数据库,大学时期应该都会学的一门课(电子信息专业的我没学!脸特别疼)。在大学听到最多的数据库软件是oracle和sqlserver,不知道现在怎么样了。其实现在很多互联网企业都在用MySQL,这是一款开源的关系型数据库存储系统。

我认为无论现在用什么数据库系统,有些内容还是一定要学的,此处主要以MySql为例,其他数据库我也不太了解。比如:

  • 掌握基本的SQL操作。比如DDL定义、DML操作,DCL权限、TCL事务的操作使用;
  • 熟悉数据库索引,比如建立索引,了解不同索引的数据结果;
  • 了解慢查询和其分析方法,会使用mysqldump或其他一些高级工具分析慢查询;
  • 掌握一些常用性能分析方法,学会通过explain、profile分析SQL;
  • 熟悉一些常见语句的查询过程,避免如子查询和连接查询等SQL导致系统问题;

如果继续往下深入的话,进一步提升数据性能,还需要进一步提升,比如:

  • 了解数据库的主从复制,以及主从复制会带来什么问题;
  • 如何进行分表分库缓解服务器压力及如何解决分表分库带来的一些问题;
  • 使用什么集群方案,比如一些公司提供的解决方案,如pxc、mycat怎么用;

等等。有些是DBA需要掌握,不过对开发也是有益无害,可帮助我们开发出更稳健的系统。

不写了,就到这里吧!最近发现网上这种资料挺多的,我还是去忙我现在该做的事情吧。喜欢 Go 语言的朋友,欢迎去关注我的专栏。