对于编程语言的学习,我一向推崇理论+动手实践的学习方法,书本只能告诉你每一个专业名词、语法的概念及用法,而动手实践能够让你更加深刻理解它们的含义,让你对语言的学习进一步得到升华。
大学期间唯一和编程相关的课程就是C语言,但是由于专业为数学,所以平时大多数是和书本、公式、推导证明打交道,很少使用编程语言,也可以称得上接近零基础,后来实习期间自学Python,来说一下我的学习方法吧。我创建了一个知乎圈子:【平凡而诗意】,专注于分享前沿技术、编程开发、实用工具等方面内容,感兴趣的可以首页搜索【平凡而诗意】加入我的圈子,让我们一起玩耍吧!
1. 入门阶段
就如同前面所说的,如果有一点的C语言基础,对于学习Python会有很大的帮助。如果纯粹的零基础也没关系,需要花费一些时间去理解编程语言里面的一些通用概念。
我认为入门Python相对容易,因此我更加推荐网上免费的在线教程,非常多,而且非常好,当然如果喜欢纸质书籍的也可以购买书籍学习。
尤其的基础知识相对简单,如果有一点的编程基础一周或者更短的时间内即可对Python基本语法做一定的了解,如果购买在线课程,我认为会耗费很多时间。
关于入门阶段的在线教程我推荐两份:
Python菜鸟教程Python 基础教程 | 菜鸟教程www.runoob.com
廖雪峰PythonPython教程www.liaoxuefeng.com
关于入门书籍,我推荐一本不错的书籍,
《Python编程从入门到实践》
2. 进阶阶段
关于进阶,我推荐两本书籍:
第一本:《Python Cookbook》
我认为这是一本很适合有一点Python基础的开发者,这本书应该很多Python开发者都有所耳闻,它在基础语法的基础上进行了一些提升。 />
就如同上面这个例子,它会抛开入门的那些简单语法去讲解一些Python高级实用方法和技巧,例如抽象基类、单例模式、接口等。每一个知识点它会对应提出一个问题,然后给出相应的解决方案,并且告诉你这样用的意义何在、怎么样更加高效的使用Python,怎么设计更高效的软件模式。
第二本:《流畅的Python》
这是一本经得起考验的Python书籍。
举一个最简单的例子,在绝大多数教程都会讲到循环和条件语句,千篇一律的告诉你"if..else..", "for...while",这个有一点编程语言的同学都知道,但是在Python里面循环和条件语句有什么特殊的地方吗?该怎么用好它?
在很多博客、教程中都不会深入介绍,但是这本书会详细的介绍Python深入的内容。
它和大多数书籍和在线教程蜻蜓点水式的讲解不同,它更加深入,深入而不冗余,在你看这本书的时候你会发现,它的每一段话都是有意义的,没有什么废话。
它分别从数据结构、字典集合、文本和字节序列、函数、设计、装饰器、闭包等讲起,然后对每一块知识进行展开,详细介绍里面最根本的原理,然后告诉你,该怎么用好它,高效的使用它。
3. 练手项目
除了书籍之外可以找一些练手的小项目去熟悉一些Python的用法,在动手中理解学习到的概念,感兴趣的可以看一下我的另一篇回答,介绍了一些Python练手项目,Python 的练手项目有哪些值得推荐?www.zhihu.com
4. 实战
实战阶段我认为可以选定一个感兴趣的方向,比如数据分析、网页爬虫、CV等,然后去设计一下系统架构,并且逐步编程实现它。
当然这方面也有很多开源的项目可以解决,以CV为例,AlexNet、R-CNN、YOLO这些经典的CNN模型都会开源他们源码,可以克隆下来阅读一下它们的代码,学习一下,然后实现自己的系统。
因为个人是做机器学习方向的,所以我推荐一些机器学习方面的学习+实战项目,感兴趣的可以看一下我的另一篇文章,Jackpop:干货!机器学习平台优质学习资源推荐zhuanlan.zhihu.com
5. 强化
编程语言都有一个共性:入门容易,精通困难,包括Python这门被大多数人认为容易的编程语言在内,也是这样。
就如同我在另一篇回答下所说的那样,不仅限于熟练一门语言的语法,或者使用一门语言实现某项功能,更不是熟练使用某个框架或者库,而是超越语言本身、对编程语言之外的内容有深刻的认识和理解,例如,算法
数据结构
设计模式
依赖度
复用性
代码规范
系统的全局认识
......
详细内容可以看我另一篇回答,学过很多门语言,C、python、Java,但是感觉自己都不精通,如何才能把一门编程语言练习到精通呢?www.zhihu.com
书籍
如果想进一步提升编码能力,应该在语言之上学习一些更通用的知识,如上一篇回答那样,强烈推荐好好阅读一下下面这几本书籍,
《代码整洁之道 Clean Code》-- 马丁 著,韩磊 译
《代码整洁之道 程序员的职业素养》--马丁著,余晟 译
《重构 改善既有代码的设计》-- 马丁·福勒(Martin Fowler) 著,熊节,林从羽
《设计模式:可复用面向对象软件的基础》--埃里克·伽玛(Erich Gamma) 等 著
开源项目
就像我在另一篇回答里所说的那样,学习编程思路并不复杂,概括起来就两点:多看别人的代码
多让别人看自己的代码
多让别人看自己的代码
这一点可以通过参与一些开源项目的开发,或者自己再github托管一些项目,每次提交MR时让一些高手检视你的代码,暴露自己的不足,接受别人的指正,在潜移默化之中会发现在开发方面会学会很多东西。
多看别人的代码
这一点可以通过去一些开源社区例如github看一些大公司例如,Google、Facebook、阿里、腾讯等开源的项目,这些项目都是经过多年内部开发,反复优化后开源的,在代码规范、效率等方面做的都很好,可以从其中学到很多东西。
我在这里推荐几个和Python方面比较好的开源项目。
用Python实现了排序、搜索、机器学习、图像、图等相关的算法,覆盖全面而且实现简单,目前Github已经61k+star,学习算法的同时能够从别人开发项目中学到很多开发的规范和经验.
理论与实践相结合,不仅包含基础语法、进阶,还有编程风格、公开课、编程经验总结等方面的内容,目前Github上已经67k+star.
相对于前面两个项目,我更推荐这个项目,前面两个项目更多的是围绕算法再展开,对于Python,只是一个实现的工具,而python-patterns更偏向于软件设计模式,我认为这才是提升阶段最为关键的,能够超越语言层面养成一个高效的软件模式设计思维,目前该项目在Github已经22k+star.
最后再自卖自夸一下,最近我在分享《进阶Python》系列,主要围绕抽象基类、单例模式、装饰器这些高阶用法展开,每一讲代码都会同步到Github,感兴趣的也可以关注一下。
干货干货 | 2019年共享免费资源整理(上):学习资源篇mp.weixin.qq.com干货 | 2019年共享免费资源整理(下):实用工具篇mp.weixin.qq.com
作品精选QQ学习交流群:1077239487~平凡而诗意jackpopc.github.io