作者:彭猫
链接:https://www.zhihu.com/question/29138020/answer/72193349
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


Python 的设计哲学之一就是简单易学,体现在两个方面:

  1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。
  2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。

废话不多说,学会一门语言的捷径只有一个: Getting Started

¶ 起步阶段
任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识。

°1 硬知识
“硬知识”指的是编程语言的语法、算法和数据结构、编程范式等,例如:变量和类型、循环语句、分支、函数、类。这部分知识也是具有普适性的,看上去是掌握了一种语法,实际是建立了一种思维。例如:让一个 Java 程序员去学习 Python,他可以很快的将 Java 中的学到的面向对象的知识 map 到 Python 中来,因此能够快速掌握 Python 中面向对象的特性。

如果你是刚开始学习编程的新手,一本可靠的语法书是非常重要的。它看上去可能非常枯燥乏味,但对于建立稳固的编程思维是必不可少。

下面列出了一些适合初学者入门的教学材料:

❖「笨方法学 Python」:http://learnpythonthehardway.org/book/
这本书在讲解 Python 的语法成分时,还附带大量可实践的例子,非常适合快速起步。

❖「廖雪峰的 Python 2.7 教程」:Home - 廖雪峰的官方网站
Python 中文教程的翘楚,专为刚刚步入程序世界的小白打造。

❖「The Hitchhiker’s Guide to Python!」:The Hitchhiker’s Guide to Python!
这本指南着重于 Python 的最佳实践,不管你是 Python 专家还是新手,都能获得极大的帮助。

❖「Python 官方文档」:Our Documentation
实践中大部分问题,都可以在官方文档中找到答案。

❖ 辅助工具:Python Tutor
一个 Python 对象可视化的项目,用图形辅助你理解 Python 中的各种概念。

Python 的哲学:

用一种方法,最好是只有一种方法来做一件事。

学习也是一样,虽然推荐了多种学习资料,但实际学习的时候,最好只选择其中的一个,坚持看完。

必要的时候,可能需要阅读讲解数据结构和算法的书,这些知识对于理解和使用 Python 中的对象模型有着很大的帮助。

°2 软知识
“软知识”则是特定语言环境下的语法技巧、类库的使用、IDE的选择等等。这一部分,即使完全不了解不会使用,也不会妨碍你去编程,只不过写出的程序,看上去显得“傻”了些。

对这些知识的学习,取决于你尝试解决的问题的领域和深度。对初学者而言,起步阶段极易走火,或者在选择 Python 版本时徘徊不决,一会儿看 2.7 一会儿又转到 3.0,或者徜徉在类库的大海中无法自拔,Scrapy,Numpy,Django 什么都要试试,或者参与编辑器圣战、大括号缩进探究、操作系统辩论赛等无意义活动,或者整天跪舔语法糖,老想着怎么一行代码把所有的事情做完,或者去构想圣洁的性能安全通用性健壮性全部满分的解决方案。

很多“大牛”都会告诫初学者,用这个用那个,少走弯路,这样反而把初学者推向了真正的弯路。
还不如告诉初学者,学习本来就是个需要你去走弯路出 Bug,只能脚踏实地,没有奇迹只有狗屎的过程。

选择一个方向先走下去,哪怕脏丑差,走不动了再看看有没有更好的解决途径。

自己走了弯路,你才知道这么做的好处,才能理解为什么人们可以手写状态机去匹配却偏要发明正则表达式,为什么面向过程可以解决却偏要面向对象,为什么我可以操纵每一根指针却偏要自动管理内存,为什么我可以嵌套回调却偏要用 Promise...

更重要的时,你会明白,高层次的解决方法都是对低层次的封装,并不是任何情况下都是最有效最合适的。

技术涌进就像波浪一样,那些陈旧的封存已久的技术,消退了迟早还会涌回的。就像现在移动端应用、手游和 HTML5 的火热,某些方面不正在重演过去 PC 的那些历史么?

因此,不要担心自己走错路误了终身,坚持并保持进步才是正道。

起步阶段的核心任务是掌握硬知识,软知识做适当了解,有了稳固的根,粗壮的枝干,才能长出浓密的叶子,结出甜美的果实。

¶ 发展阶段
完成了基础知识的学习,必定会感到一阵空虚,怀疑这些语法知识是不是真的有用。

没错,你的怀疑是非常正确的。要让 Python 发挥出它的价值,当然不能停留在语法层面。
发展阶段的核心任务,就是“跳出 Python,拥抱世界”。

在你面前会有多个分支:科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,这些都不是仅仅知道 Python 语法就能解决的问题。

拿爬虫举例,如果你对计算机网络,HTTP协议,HTML,文本编码,JSON一无所知,你能做好这部分的工作么?而你在起步阶段的基础知识也同样重要,如果你连循环递归怎么写都还要查文档,连 BFS 都不知道怎么实现,这就像工匠做石凳每次起锤都要思考锤子怎么使用一样,非常低效。

在这个阶段,不可避免要接触大量类库,阅读大量书籍的。

°1 类库方面
「Awesome Python 项目」:vinta/awesome-python · GitHub
这里列出了你在尝试解决各种实际问题时,Python 社区已有的工具型类库,如下图所示:

<img src="https://pic4.zhimg.com/50/6c1f92cc8dcafe556369c272346852c8_hd.jpg" data-rawwidth="1454" data-rawheight="1348" class="origin_image zh-lightbox-thumb" width="1454" data-original="https://pic4.zhimg.com/6c1f92cc8dcafe556369c272346852c8_r.jpg">

你可以按照实际需求,寻找你需要的类库。

至于相关类库如何使用,必须掌握的技能便是阅读文档。由于开源社区大多数文档都是英文写成的,所以,英语不好的同学,需要恶补下。

°2 书籍方面:
这里我只列出一些我觉得比较有一些帮助的书籍,详细的请看豆瓣的书评:

科学和数据分析:
❖「集体智慧编程」:集体智慧编程 (豆瓣)
❖「数学之美」:数学之美 (豆瓣)
❖「统计学习方法」:统计学习方法 (豆瓣)
❖「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)
❖「数据科学实战」:数据科学实战 (豆瓣)
❖「数据检索导论」:信息检索导论 (豆瓣)

爬虫:
❖「HTTP 权威指南」:HTTP权威指南 (豆瓣)

Web 网站:
❖「HTML & CSS 设计与构建网站」:HTML & CSS设计与构建网站 (豆瓣)

...

列到这里已经不需要继续了。

聪明的你一定会发现上面的大部分书籍,并不是讲 Python 的书,而更多的是专业知识。

事实上,这里所谓“跳出 Python,拥抱世界”,其实是发现 Python 和专业知识相结合,能够解决很多实际问题。这个阶段能走到什么程度,更多的取决于自己的专业知识。

¶ 深入阶段
这个阶段的你,对 Python 几乎了如指掌,那么你一定知道 Python 是用 C 语言实现的。

可是 Python 对象的“动态特征”是怎么用相对底层,连自动内存管理都没有的C语言实现的呢?这时候就不能停留在表面了,勇敢的拆开 Python 的黑盒子,深入到语言的内部,去看它的历史,读它的源码,才能真正理解它的设计思路。

这里推荐一本书:
「Python 源码剖析」:Python源码剖析 (豆瓣)
这本书把 Python 源码中最核心的部分,给出了详细的阐释,不过阅读此书需要对 C 语言内存模型和指针有着很好的理解。

另外,Python 本身是一门杂糅多种范式的动态语言,也就是说,相对于 C 的过程式、 Haskell 等的函数式、Java 基于类的面向对象而言,它都不够纯粹。换而言之,编程语言的“道学”,在 Python 中只能有限的体悟。学习某种编程范式时,从那些面向这种范式更加纯粹的语言出发,才能有更深刻的理解,也能了解到 Python 语言的根源。

这里推荐一门公开课
「编程范式」:斯坦福大学公开课:编程范式
讲师高屋建瓴,从各种编程范式的代表语言出发,给出了每种编程范式最核心的思想。

值得一提的是,这门课程对C语言有非常深入的讲解,例如C语言的范型和内存管理。这些知识,对阅读 Python 源码也有大有帮助。

Python 的许多最佳实践都隐藏在那些众所周知的框架和类库中,例如 Django、Tornado 等等。在它们的源代码中淘金,也是个不错的选择。

¶ 最后的话
每个人学编程的道路都是不一样的,其实大都殊途同归,没有迷路的人只有不能坚持的人。虽然听上去有点鸡汤,但是这是事实。

希望想学 Python 想学编程的同学,不要犹豫了,看完这篇文章,Just getting started~

另外,欢迎私信本喵交流 Python 的学习经验哦 > .<

如何系统地自学 Python相关推荐

  1. 零基础该如何系统地自学Python编程?五个阶段带你从小白到大佬

    对于零基础学习或是已经学完基础不知道下一步该干什么的朋友,可以看看这篇缓解迷茫.今天分享下如何系统地自学Python规划目标,有一个学习目标在去行动. 有了目标,怎么行动呢?建议采用视频+书籍的方式进 ...

  2. 没有统计学基础可以学python-如何系统地自学 Python?

    ↑↑↑↑↑↑ 首先得分析什么叫系统地学习,所谓系统地学习,是指通过学习 来构建自己的一套知识体系.关于知识体系,在笔者看来,其主要包含以下四个方面:(1) 基础性知识 (2) 知识的应用 (3) 知识 ...

  3. 零基础如何系统地自学Python编程?这是我看到过回答最好的文章

    零基础如何系统地自学Python编程?最近柏汌的一个粉丝私信我这么问道,我思考了一下谨慎的回答了他,但是感觉很多东西还是没说明白,相信其他朋友也会有这样的困惑,所以今天就好好的跟大家聊一下这个问题. ...

  4. python语言入门自学-如何系统地自学 Python?

    很多同学在学习完python的基本语法后,都会面临着接下来我该干什么的困境! 这是一篇非常详细的,覆盖了Python从入门到后期的全套方法论和相关资料,建议收藏后查阅. 另外我作为从本科到现在读博一直 ...

  5. 自学python看什么书-如何系统地自学 Python?

    0709更: 上周旁听了一个大学学长组织的线上Python交流会,里边不乏充斥着各位行业大牛,讲的内容确实精彩,可能对于Python经验5年+的人来说,是受益匪浅,欢迎程度极高,恨不得跳出屏幕来表示赞 ...

  6. 如何系统地自学python100天_如何系统地自学 Python?

    第一 学习方向:python应用方向很多,必须明确学习方向想全栈开发:就是web应用开发,是用来写网站后台的 数据分析:就是做大数据分析的,数据量级起码是千万级别的,做的是大数据分析 网络爬虫:其实属 ...

  7. 计算机导论python知识点_如何系统地自学 Python?

    我是自学的Python.从对Python一无所知,到在博客上写Python相关的系列文章(Python快速教程),前后有将近三年的时间.期间有不少门槛,但也充满乐趣.乐趣是自学的最大动力.Python ...

  8. 怎么自学python-如何系统地自学 Python?

    更新:补充了图片(昨天居然没图了orz囧) 想要系统自学,首先当然是要搭建Python体系了. 大部分自学者没有知识体系可言,这是无法避免的困局.知识体系并不是你看几篇文章就能搭建起来的--在你对很多 ...

  9. 如何系统的自学python-如何系统地自学Python

    自学编程需要注意的问题 很多人都推荐小白第一门语言选Python,因为语法简单.这句话只说了一半,Python确实容易上手,对初学者的门槛很低.但我发现,对于小白真正的门槛在于系统知识,这就和用什么语 ...

  10. 如何系统的自学python 知乎-如何系统地自学Python?

    感谢邀请 Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位.同样学习编程语言,当然要选择学习业内目前先进.热门.将来应用广泛.有前途和前景的编程语言. ...

最新文章

  1. pilt图像处理_Python用Pillow(PIL)进行简单的图像操作
  2. JavaWeb(二)——Http协议
  3. 为了追到小姐姐,我用 Python 制作了一个机器人
  4. java的内存管理机制
  5. android11beta支持什么手机,Android 11 Beta1发布,新增多种功能,网友:Android基于 Flyme...
  6. Kali Linux2018 上安装open-vm-tools实现虚拟机交互
  7. q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存
  8. git 忽略 部分文件夹_git设置忽略文件和目录
  9. [UE4]控制台命令,生成机器人
  10. SAP自学指南:案例公司的需求分析
  11. QLV格式的视频怎么在线转化成MP4
  12. 网络管理之TCP/UDP篇
  13. 一个layer可以跟着画完的线移动ios程序 好玩啊。
  14. python实现pdf阅读器_PyQt5 从零开始制作 PDF 阅读器(一)
  15. VBA实现dwg批量输出PDF
  16. 给学妹学弟们的看书小建议!
  17. 供应链金融运营研究 -----内容运营
  18. C语言贪吃蛇游戏主要功能,C语言游戏-贪吃蛇
  19. sql语句存储过程的写法(mysql和java)
  20. JS身份证号码校验,JS根据身份证号码获取出生年月日,JS根据出生年月日获取年龄,JS根据身份证号码获取性别

热门文章

  1. 2022-2028全球连续氧化铝纤维行业调研及趋势分析报告
  2. 基于粒子群优化的 OTSU 图像分割
  3. 当IE浏览器设置了代理,改变不了的时候,就需要在右上角设备哪里--找到安全--Inprivate---点击--然后就可以设置了-intenet选项去掉代理了
  4. 基于kaldi训练唤醒词模型的一种方法
  5. FCC认证是什么流程周期?
  6. 希腊字母拼写与读音中英对照一览表 暨 希腊键盘键位对照表
  7. 11、《每周一点canvas动画》——缓动动画
  8. codeforces1271D 2100分贪心
  9. 计算机基础(16)——Office和WPS(3)——什么查看自己的WPS是哪个版本
  10. 微信公众号内的视频下载