首先呢,和其他的各种学习都一样,你一定要明白你学习的目标是什么。有的人想要通过学习Python,转行成程序员,实现行业上的转变;有的人希望通过学习Python,在现有的岗位上提升自己;当然也有很多人只是从众,说看到很多人都在学,那不如就学一学。
学习的目的性很重要,因为这样第一是可以给你树立一个远方的方向,你朝着这个方向奔跑,那跑起来就没有那么辛苦,每天都可以看到离目标前进了一些;第二是你可以根据自己的目标,去针对性的学习,例如运维开发、Web服务、数据分析、机器学习等等各个方面的细分领域,去安排自己的学习路径。
回到我自己身上,当年在学校中开始学习,C++是必修的课程,学完之后虽然能够用来完成一些有意思的功能(比如我们当年的大作业就是使用MFC去编写一个地图应用),但是当时一点都没有让我感到编程的乐趣。
我是如何开始Python的学习的呢?当时我有一个目标,是想要去喜欢的一个网站实习,那个网站是用Python进行开发的,以此为契机开始了自己的学习。
对于学习编程而言,可能很多课程、很多同学都会陷入一个陷阱,那就是只知道要学什么,但却不知道为什么去学。如果没有跳出这个陷阱,别看课程上教授的内容很多(我们当年的C++就学了一年呢),但完全没法将学习编程的过程变为自驱的过程——也就是学习本身应该是推动你去进一步学习的。
我们回过头来看看编程的基础,总共就四大块:
这四个基本元素难么?实际上很多同学可能用一天的时间就扫完了对应的知识点。但是简单么?实际上也不简单,因为很多同学,甚至可以毫不夸张的说:有超过70%的普通工程师都还不能脱离搜索引擎写出只有上述的逻辑的业务代码。
编程的本质是什么?本质是利用编程语言,命令计算机按照自己的意思,符合一定的流程去完成功能。学习Python和学习其他的各种编程语言没有特别大的区别,都是要理解“我学的这段代码,它能让计算机完成什么样的事情”。
举几个栗子:
二进制
有很多计算机基础的书籍和课程,上来就是一大堆二进制的计数规则,有的同学可能理解得好些,知道在计算机里,我们只能够用01来表示各种数据,因此也知道了整型是如何存储上去、浮点型是如何存储到二进制上去的。但是随着时间的推移,一般的编程工作根本不会涉及到如何去操纵二进制的数据,只要不经常用,很快这个知识点就会被淡忘了
实际上二进制还可以怎么在现实世界中发挥作用呢?0和1,实际上是可以表达某个事物是否具有某一属性的,比如数据分析中常用的RFM,就是要去判断是否新用户、是否充值、是否大客户、是否频繁购买。而这样的表示实际上就可以通过二进制进行操作:
既然可以用二进制存储某一个用户的标志了,那么就会涉及到:如何读取出来、如何设置上去,也就是读-写的逻辑。
计算机世界有非常多的地方都用到了这个技巧:如下图所示:
控制流:循环、判断
控制是编程最核心的内容之一,因为直接决定了我们如何让计算机帮我们完成繁琐的、重复的工作。
在Python中,循环也和各种数据结构能够无缝连接起来。
基础类型
除了上面我们讲到的整型,字符串这个数据类型也非常重要,整个互联网都是基于字符串和更底层的字节流的。
我们在网页上看到的知乎,也是由客户端组装HTTP请求、服务端返回HTML、CSS、JS、json完成的整个过程,这里面涉及到的都是如何处理字符串。
在使用爬虫,在各种网页中读出数据的时候,就一定会涉及如何处理字符串。
而绝大部分对字符串的处理,Python的字符串成员函数都已经包含了。
数据结构
Python中有四种最常用数据结构,tuple、list、dict、set。
什么是数据结构,实际上是数据按照一定的规则,排布在我们的内存中,以及可以通过数据结构的特性,完成一定的功能,例如列表可以用来做顺序的数据存储,排队、堆积的书籍,都是列表的一种具象表现。字典则可以用来做快速的查找,平时由首字母查到字典中的范围、查看对应关系都可以用字典来表示。
在理解了这些数据结构之后,完成日常的工作就基本没有问题了。
记得当时我学完这一块,就可以用它算出每天空闲的自习室了,实际上就是set的求交集的功能:第一节课没有课的自习室是S1,第二节课没有课的自习室是S2……最后拿到一整天的全部自习室的安排,就把这些个自习室全部求一边交集就好了。这个功能还是相当方便的。
标准库和第三方库
为了简化自己的工作,标准库和第三方库都是非常有必要的,因为很多功能都是前人已经完成的,例如实现一个计数器、发起http请求、解析html网页,以至于现在Python丰富的数据处理生态,从pandas,到numpy,到机器学习sklearn,到深度学习也有TensorFlow和PyTorch。
这些库实际上提供的就是拆箱即用的工具包,可以免费、自由地获取,然后通过短短的几行代码,完成特别繁杂的操作。
最后,学习Python到底是在学什么,很多工作了很多年的工程师都无法脱离搜索引擎,这是为什么,实际上就是他们并没有完整地掌握Python的基础。这些基础实际上就是建筑师的砖头、画家的颜料、印刷术的活字。
编程就是将自己学会的东西组装出程序来,因此真正属于自己的这部分,是你能够用来自由地舞动键法的武器。在编程世界中大杀四方,不仅要学好基础,把自己的武器打造得锋利,而且学习剑法最好的方式是上场杀敌,不如你想想最近有什么工作如何用编程解决,它可以是处理一大批excel文档,也可以是从网页上把所有数据一次取下来,还可以是把庞杂的文件夹整理清楚。
当然!千万别忘了:一场战争之后,最重要的事情是仔细回顾,前面写的程序涉及了哪些基础知识,哪些基础知识是你还掌握不好的,能不能用更Pythonic的方式解决对应的逻辑。