Contents

前几天发了条长微博介绍Python学习经验,顺便整理下同步到博客上来略微提高下活跃度……

作为一名纠结的Ruby粉丝,曾经在网上搜索了无数次Ruby vs Python的各类探讨话题,甚至还蛋疼地去查两者的性能比较数据。有这点闲功夫真该多刷几门Coursera学点真本领啊……后来由于工作需要基本就全面投入了Python的怀抱,而且Python的确比Ruby流行许多,很值得向有志于从事IT行业的同学们推荐!以下就是我的一些学习经验:

首先还是推荐一下编辑器。一开始学习不需要写大项目,完全可以用print大法来调试,用简单迅捷的Sublime Text 2/3就基本可以了。该有的功能基本都有,基本的跳转也很方便,各种定制可以把编辑器搞得非常漂亮!后面如果想要完整的IDE必须首推PyCharm!输入提示更强大,跳转更方便,还有PEP8拼写检查等各种利器,整合各种源码管理系统,用过都说好啊!此外用IPython替代自带的REPL也是相当舒适……在交互调试时按tab键会有自动补全,还有各种session保存恢复功能,调试服务器之类的很给力!

一开始学Python语法入门,可以看Coursera的这个课程。非常简单,讲的也很好……适合没什么基础的同学。美中不足的是做作业的网站需要翻墙……另外还有一个很好的选择是Codecademy,交互式学习趣味性十足,也是面向零基础的同学的。像Python这么贴近自然语言的语法和关键词,应该入门都是分分钟的事情了……

会了语法之后就需要进行实践。个人觉得可以自己动手尝试用Python去实现一些算法,比如quicksort,二分查找之类的。写完之后可以去搜索一下网上别人的实现,因为如果你用惯了C/Java之类的话其实有很多更简洁的惯用表达不一定能直接想到。很多时候学习一门新的语言就是要学习它的惯用表达方式啊。用写算法实现来做练习一来代码量不大,能带你熟悉各种Python标准库里的东西,而且还能顺便把算法也练了,一举两得!搜别人算法实现时经常会搜到这个站,感觉挺不错的……上面那个链接就是寻找LCS的算法实现,既有递归又有动态规划的范例,相当完备实用。另外还有本书叫Python Algorithms,据说写的相当好,可以顺带一起读读。自从学了Python,我在Coursera上课时只要没有要求编程语言的作业就基本都用它来写了,20来行就能写个Page Rank算法,实在太方便……

接下来就比较自由了,可以尽量在平时工作中把Python用起来,或者自己去写一个小项目……无奈我好像在这方面很缺乏创意,好像写的“小项目”都是“计算10级黑鸟买回魔与买能量球所产生的额外法球攻击次数的期望值”之类……所以一般也就是在工作中用它来处理处理日志,写写自动化测试之类。写完之后也同样可以去找找开源的项目对比下同样的功能它们会怎么实现。据说有几个不错的Python开源项目值得学习:flask, requests(一万多颗星……恐怖), web.py, fabric……牛人的话就可以直接参与感兴趣的开源项目了!看issue,提pr,经验值蹭蹭蹭的。本菜鸟最近在学习传说中高大上的自动化测试项目autotest,还不怎么得要领的样子……

关于Python的书和文章有很多 入门的我只看了Python基础教程,感觉中规中矩没什么特别深刻的印象。然后最近看了编写高质量代码:改善Python程序的91个建议这本书,还是不错的!虽然很多印刷错误(可能编辑不知道缩进对Python代码会有很大影响),元编程那部分没有什么特别透彻的解释,但是其它部分比如讲Python设计模式,工具链,测试驱动开发,各种Profiler的介绍,常见库的使用等内容看看还是很有帮助的!与此类似的还有雨痕的书,Dongweiming在douban的讲座,这些资料涵盖了很多常用的Python高级主题如描述符,生成器,装饰器等,对阅读理解开源代码,提高自身逼格都很有益处,非常值得推荐!

Python的应用实在是极其广泛……作为Ruby粉丝,我一直都觉得Python的各种下划线看起来很难看难懂……还有什么新式类/经典类,string/unicode的区别,__getattr__/__getattribute__/getattr的不同都让人感觉“意外”,但人家的流行程度就是甩了Ruby好几条街啊!这里有一篇文章很好地比较了下这两种语言在元编程上的不同之处,当然虽然Python的双下划线难看,但在实际工作中的确很少用到元编程,不好维护啊。关于Python无比广泛的应用,感兴趣的可以看一些相关的书和资料,常规点的应用有Web开发(Django, Flask, Pyramid),系统管理之类,这些Ruby可能还可以一战,不过其它方面就……比如安全就是Python应用一大领域,很多黑客都非常喜欢用Python,于是就有了很多相关的库,进而就有了很多相关的项目……如Fuzz框架如Peach,还有逆向框架白眉等等。这本Python灰帽子这本书中也有不少介绍。我在上Stanford Crypto的课时基本都默认你用Python写破解脚本的。Python在科学计算方面也有很多应用,比如SciPy/NumPy,可以看看这本两本SciPy and NumPy利用Python进行数据分析。还有高大上的机器学习自然语言处理。还有很多超乎想象的应用,比如真实世界的Python仪器监控,当年搞蓝牙时还借来看了一阵……分分钟实现物联网啊!甚至游戏开发机器视觉这种竟然也都惨遭染指……真有种学好Python走遍天下都不怕的感觉了。

如果大家有什么好的Python学习资源,学习经验欢迎推荐交流!让我们共同进步!

Contents