Python相比其他编程语言,可读性更强,上手也相对容易。
它自带丰富的模块,让我们免去大量重复工作,配置起来也相对容易。
Python已被广泛应用在各个领域,如:
- 科学计算:数学计算、基础统计、机器学习
- 数据分析:网络爬虫、数据库、数据可视化
- 应用开发:Web开发、自动化运维、运营分析平台
- 文件处理:PDF、Excel表格、Word、图像、视频、音频
- ……
适用人群广泛:火箭科学家、交易员、系统管理员、天文学家、修理工、办公文员、教师、学生……
现在,网上很容易找到几千GB的学习视频,也有上百本相关的图书。
但,学会编程,和有多少教材无关。
你不能寄希望于通过放满书架来获得知识、习得技能。
自学一门技能,尤其是编程的技能,重点不是把整本书记住,而是解决你当下的实际问题。
知识本应简单明了,复杂规则背后体现的,其实是妥协。
在Python解释器中输入下面的代码,看看Python哲学:
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one— and preferably only one —obvious way to do it. Although that way may not be obvious at first unless you’re Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea — let’s do more of those!
简单的翻译过来,就是:
优美胜于丑陋。 明了胜于晦涩。 简单胜于复杂。 复杂胜于杂乱。 扁平胜于嵌套。 间隔胜于紧凑。 可读性很重要。 特例不足以特殊到违背这些原则。 不要忽视错误,除非程序需要这样做。 面对模棱两可,拒绝猜测。
解决问题最直接的方法应该有一种,最好只有一种。
可能这种方法一开始不够直接,因为你不是范罗苏姆。
做也许好过不做,但不想就做还不如不做。
如果方案难以描述明白,那么一定是个糟糕的方案。
如果容易描述,那么可能是个好方案。
命名空间是一种绝妙的理念,多加利用。
不少人中途选择放弃,主要原因有2个:
- 被琐碎的细节磨掉了热情,比如恼人的系统和环境配置,改了N次都不能通过的语法错误等。
- 一开始的目标设定太大,没有阶段性的成就感,比如一开始就瞄准了量化投资,中间涉及到太多需要用到的领域知识和三方模块,学习周期长,见效慢。
推荐的自学路径:
- 选择一本入门教材,从头到尾翻一遍(可以先略过最后的一些高级主题),跟着教材的案例,敲代码体验。在这个过程中,重点是要有信心,可能你一开始会遇到无数的挫折,也许和编程语言无关,比如一些系统配置问题,但是,相信我,所有的程序员一开始都是这么折腾过来的。在这个过程里,你要掌握基本的配置,会用工具调试代码,读懂程序的反馈,比如一些报错的信息;同时也要学会基本的问题搜索能力,比如用搜索引擎查找问题的解决办法、上技术社区翻查别人已经遇到过的同类问题等。
- 设定一个目标,选择一个应用领域,解决一类问题。Python的应用领域非常广泛:游戏、云计算、数据分析、Web建站、爬虫、脚本批处理、量化投资、音视频处理……几乎覆盖你能想到的所有领域。所以在自学的时候,切忌贪多。可以选择自己感兴趣,同时学习路径相对较短的领域,围绕自己的实际问题展开自学。在这个过程中,除了Python本身,你可能会需要额外掌握一些领域的知识。比如你选择了爬虫,那么你还需要了解HTTP和HTML的一些基础知识;如果选择了数据分析,那么你就得额外掌握一些Python的类库,如Pandas……但请相信我,当你用Python解决了问题,那一刻你会发自内心地感受到乐趣。反复练习,持续解决问题的过程,就是你熟练掌握Python的过程,同时也是你的系统和结构化思维提升的过程。
- 当你熟练掌握了某类问题的解法后,就可以开始尝试放大目标。比如掌握了爬虫的应用后,能否把爬到的内容,通过网页展现出来,也就是自动化抓取内容后建站,这就相当于把建站和爬虫两个应用打通了。再比如运维领域中,把脚本的批量处理和建站结合起来,实现自动化监控系统。目标放大的基础,是已经掌握了其中涉及到的主要知识点。同时也可能会引入新的问题,比如需要用到数据库的存储、支持异步的并发队列等。但只要熟悉了问题解决方法,这些都只不过需要时间去练习罢了。这时候,你会发现,自己的思维已经不再局限在某行代码怎么写,而是站在顶层思考系统该如何设计,怎么处理实际问题中的特殊情况,怎样选用第三方模块……
为此,我准备写一套Python入门指南,希望能帮助后来者。
从这里开始吧!
Python自学手册