对于编程零基础,第一个语言是 Python 的人有什么建议?

lz以前完全没接触过编程,现在开始学python,想问下有没有人也是在这种情况下学习python的经验,很多人都是学C或和C+再学的python,那些经验借鉴不来。现在在codecademy上,刚开始学。lz法科生,计算机水平可以满足一般的生活学习,在教程不详细的情况下装coursera视频下载的python脚本装不了。
关注者
1829
被浏览
74170

19 个回答

又看见「黄哥」了,是个Python的问题都能看见您,您真是打不死的小强。
@解灵运的答案是相对靠谱的,他推荐的书适合你,但是我不同意他的「英语基础好的话建议……」,我后面会说到这点的。

比较巧的是我的情况与你相当,因此我的经验应该对你有所帮助。
先说说我的情况。我是没有任何编程经验的,之前一直从事的是产品设计相关岗位,而且我英语水平实在一般,所以总的来说我比你底子还要低,另外,我27岁(年轻点应该学的更快,也更有精力)。


再说说我目前的情况。目前我已经能利用Python基于Flask框架写一个CMS网站(内容管理系统),这肯定包括MySQL、前端的一些工作了,而且可以去把网站部署到VPS上(基本的服务器操作、Python环境配置、Nginx相关配置)。
目前我正在利用闲暇时间编写自己一直想做的网站,之前是那个经典笑话:我有一个想法,就差一个程序员了。

我不打算告诉你具体该看什么,做什么,我觉得我没资格当你老师。但我可以把我的经历告诉你,你可以参考,拿走对你有用的部分。无论如何,希望帮到你,希望多一个热爱Python的人。

我的学习之路大致是这样的,供你参考:
  1. 我是15年4月份正式开始学习Python语言的,入门读物是一本书《父与子编程》。当中关于客户端(GUI)的操作,浅尝辄止。
  2. 关于第1点,我需要进一步强调:因为我目标非常明确,利用Python进行Web编程,通俗的讲,我要自己写个网站。所以凡事和写网站不相干的实践我通通跳过或稍微尝试做下。我到现在还认为这样的学习方式是正确的,因为Python能做的事情非常多,覆盖各种领域。在了解Python基本的语法之后,进行不同领域的实践又要学习很多不同的东西(不同的包的用法和相关知识),所以,我非常建议你在学习Python之前明确掉你学Python的最终目的是什么?然后集中精力去学习与目的相符的知识点。比如你学习Python和我一样是做网站,那么爬虫、数据统计、数学处理、客户端软件编程、设计游戏等这些事情一律先跳过不深入;如果你学习Python是为了做数据分析,那么像做网站的实践、Web框架这些应该先跳过。其实道理很简单,精力和时间有限,因此集中去攻克和目的相关的内容,不容易分散精力,学习也很快。我深以为那些建议新手做这做那,去Github去做那个很多小实践的项目是错误的,至少对你我这样的人不合适,我试过的。
  3. 之后,入门进阶读物还是一本书,就是《Learning Python》(俗称“老鼠书”)。这本书很厚,而且还有一部分高级操作是电子版的。这都不重要。你只要读好这本书「纸质版」包含的内容即可。这本书有中文版的,翻译质量上乘,这是我之前说反对@解灵运那个观点的原因。至少我英语这么渣的看起来不吃力,而且这本书有编程基础的看不上的,你去亚马逊看这本书的差评就知道了,不管人家怎么说,这本书很棒。
  4. 在看《Learning Python》的同时,我会随手根据书上学到的东西编写对应的实践看看代码的运行效果。这时我遇到一些问题:怎么让电脑可以写Python代码?用什么写Python代码好?
  5. 第一个问题我先想到Python的官网是否有安装包,结果当然是有。虽然英语渣,但软件下多了,还是知道跑到downloads页面去找的,安装包安装很方便,和装一般软件没什么两样。(现在觉得这是比Ruby做得好的地方)。
  6. 第二个问题,求助了万能的知乎(搜一下问题就好),看到多数人推荐Pycharm,自己就下载用了,开始没感觉特别(没用其他的所以没对比),之后觉得难用(英语渣导致),最后觉得超-级-爽(熟悉后)。然后问搞技术的同事后,了解到其实这家出的其他语言编辑器也非常棒。
  7. 解决了上述两个问题后,眼下就是巩固知识多学多看的事情了。
  8. 学习完部分《Learning Python》后(见备注),我对 Python基本的基础语法已经了解,但很容易忘,因此进阶学习是看网络教程,这里尤其推荐廖雪峰的教程。网络教程包含更多的基础实践,没书里那么细,因而「温故而知新」的效果很好。
  9. 看完廖雪峰的教程后,我基本语法已经没问题。但类似@装饰器这样的高阶应用我无法理解,更不知道具体用场,虽然教程讲的因果我理解,而且感觉是这么用,但例子终究是个例子,没具体用上还是不明白「究竟的用场?」。很多高阶应用知识的问题在这个阶段产生,我都似懂非懂。我最后的处理办法是:将这些问题先放在了一边。
  10. 之前讲过,我目的非常明确:做网站。所以基本语法掌握后,我跃跃欲试,又是万能的知乎,给我了下一步的方向,但也带给了我更多的困扰。
  11. 在学习完廖雪峰的教程后,我知道我下一步是了解Python的更多周边信息,了解如何利用Python去写网站的,了解编程学习的进一步应该学些什么。
  12. 在知乎关注Python和一些编程话题后,知道知乎有「三大软狗:温、赵、轮」,还有一个「萧井陌」,这四个人是程序界在知乎的有名人物,这其中我感觉萧井陌接触Python多一些,其次是轮子哥。按照萧井陌在某一问题下的答复(他说把他答案全看一遍再说),我就老老实实的把萧井陌的答案全看了一个遍,之后又同样的做法看了轮子哥的。
  13. 完成第12点后,如果说具体的收货,我讲不出很多,但是看完他们的答案后,感觉认识层次有提升,而且不小,关于这点真的「只可意会不可言传」,你试试就知道了。
  14. 在学习第二本书的时候,我就知道Python有版本之争,但在知乎搜索有关问题看更多后,我发现这个争论还不小。我倒没那么纠结,果断的上Python3.x,可能我是搞产品的,不喜欢陈而不新的东西。这之后我所有的实践,包括现在编写网站,全部基于3.x。当然这绝对不是说2.x就不应该去了解,只是3.x是主要的。
  15. 悲剧的事情来了。因为在知乎看得太多,我陷入了「Python还是Ruby」的深深纠结当中。这和我目的是WEB方向有关。如果题主学习Python不是做网站,不会遇到这个问题。
  16. 为了解决第15点的问题,我的做法是买了Ruby的经典入门书,结果看到30多页的时候,突然充满恶心和厌恶,直接甩书。
  17. 这之后进一步了解到WEB框架,知道Python的几个主力WEB框架。知道Flask,了解这些框架的设计理念之后,我选择了Flask,就跟我学习Python一样,我认同他们的设计理念。
  18. 进一步,我进阶学习还是一本书《Flask Web开发》,通过这本书,我开始尝试编写网站。然而我发现书上的知识是远远不够的。并且,书开始涉及一些高阶语法应用,比如@装饰器,这时,在第9点放下的东西我开始重拾。
  19. 在学习《Flask Web开发》的过程中,我几乎是边回头看廖雪峰的教程,边GG(谷歌搜索)过日子。这之中几乎每天都会被一个问题挡住,然后每天又解决一个问题。这种感觉很棒,感觉每天都有成就感的活着。
  20. 在《Flask Web开发》看到一大半的时候,我发现光有Python相关的知识已经不够用,我不知道MySQL怎么用,不知道ORM为何物,不知道HTTP协议的具体细节。总而言之,深感知识的荒芜。
  21. 我暂时放下《Flask Web开发》,开始学习上面谈到的这些东西的相关知识。方式以GG为主,后来知道程序员有专门的问答网站,在国内这个网站是segmentfault,通过这个网站也学习到上述的不少相关知识。关于MySQL看了一本书,这本是现在买不到了,这里我就不提了,应该有更好的,你自己搜一下(MySQL的书是我2年前买的,当时是因为要考试,看了一点点就放在那,之后全忘记了)。
  22. 在补充了相关知识后,《Flask Web开发》绝大部分都看得懂了。我开始动手编写我想做的网站,一直到现在。
  23. 一直都会遇到问题,但都是零碎的知识点,我哪里不懂GG哪里,目前没遇到GG之后还学不会的。
  24. 《Flask Web开发》看完后,开始看《Python核心编程(第2版)》,这本书有些问题(后面会谈到),不过很受用,因为本身是教科书的形式,知识脉络比较规矩和全面。
  25. 目前《Python核心编程(第2版)》看到P417,然后边看边写网站。偶尔还会参考《Flask Web开发》,多数情况下看各种官方文档了,比如Flask的。哦,忘记说了,我很早就知道各种程序总有作者编写的文档的,国内会有一些人热心翻译。我总能通过GG找到这些资料。这些资料是非常一手的好东西,但是没前面的基础工作一样看不懂。
  26. 越来越喜欢Python,喜爱编程,看见程序员就想和他们交朋友,觉得他们是一群很棒的人!

一些备注:
  1. 用GG(谷歌)而不是百度搜索。百度搜一些专业性的东西不精准,结果少。
  2. 学会翻墙,因为要用GG啊。
  3. 《Python核心编程(第2版)》是基于Python2.x的,很多知识滞后,不适合一上来看这本书,因为看了会更困惑。这本书是教科书式的,和《Learning Python》是两种截然不同的成文风格,而且一些知识点篇幅很短,对于有编程基础的,是适合的,对于新手相反。
  4. 一定一定要有一个目的,漫无目的去学习Python会被坑。Python犹如汪洋大海,漫无目的犹如在大海行一页扁舟,却没有目的地,只能作死。
  5. 一开始要接受Python的设计理念,这对学习激情有帮助。当然,之后接触更多语言可以带着辩证的观点去看待更多。
  6. 《Learning Python》学习时,我在学到「类」的知识后中断了学习去看廖雪峰的教程,之后根据应用(WEB开发)遇到进行不下去的情况,再继续的学习。我认为这是种正确的方法。即不能《Learning Python》看到底。越往后的东西,如果不在实际应用中遇到问题,会导致就算明白了也是似懂非懂的感觉,而且无法深刻领会一些东西的含义。
  7. 坚持和兴趣很重要。不要轻易放弃,并尝试喜欢上他。
学习时间和进度情况:
  1. 我从15年4月开始学习,4月~6月上旬,绝大情况是每天下班回家2小时阅读和实践时间。6月中下旬,我大概有10工作日在公司全天学习,因为彼时要离职,已经没有工作任务给我,我只做交接了
  2. 6月1日离职后,我开始正式编写我一直想做的网站(当然是玩玩,我还要正经找工作的)。于13日完成后台的编写。15日开始前台的编写。前端是前同事协助完成的,我负责产品原型、UI、后端代码、测试、服务器环境搭建和发布。
  3. 虽然玩玩,还是很规矩的有Github版本控制,Tower控制项目进程,单元测试等,和正经搞没什么两样。原因是通过这种规矩的方式尝试强迫自己学习更多有用的东西。
  4. 我想我现在这个水平混个Python的WEB开发实习生应该够格了。


人物:
轮子哥:vczh
萧井陌:萧井陌

书目与网络教程:
《父与子编程》:item.jd.com/11576833.ht
《Learning Python》:item.jd.com/10059162.ht
廖雪峰的教程:Python教程 - 廖雪峰的官方网站
《Flask Web开发》:item.jd.com/11594082.ht
《Python核心编程(第2版)》:item.jd.com/10062788.ht

资源链接:
segmentfault:SegmentFault
Python的官网安装包下载地址:python.org/downloads/
PyCharm:jetbrains.com/pycharm/
相应的注册码请自行谷歌或者百度。

祝你好运。

--------------------------------------------------
16年6月13日更新:
没想到这么多人关注这个答案,很感谢大家的支持和认同。
今年是16年6月份了,距答这道题已过去一年有余,如今我仍旧喜爱Python并爱上编程。虽然我主要工作还是做产品设计,但靠着不入流的编程手艺,在工作中还是发挥了一些价值。

前几天我把给现在公司业余编写的一套需求管理工具放到了Github上,采用的正好就是Flask框架,我将这个程序所有源码放出来供新手学习参考:GitHub - duzhipeng/Ddesk: 内部用产品需求管理工具

新手同学们如有任何基于Flask编程遇到的问题,可以在这个项目里提Issues,我会定期回复。

写得很烂,我在职期间会持续更新这套系统,希望热爱Python的同学们能踩在我这块烂地上走得更远,跳得更高。

这里给一个合集:

前几天整理了Linux的入门材料Linux运维完全小白入门指南,趁着这热乎劲,又整理了一下自己学Python时候的资料,今天也一并分享出来。 还是之前的说过的,这里只适合初级或者未入门的小白,想看高阶内容的可以再等等,闲下来我会把高级内容放上来。

入门准备

Python是什么

  1. Python是什么?来源:博客园
  2. Python是什么?Python有哪些功能?来源:鸿网互联
  3. Python是什么?来源:CSDN博客
  4. Python是什么?点进来来源:马哥Linux运维
  5. Python来源:百度百科

Python有什么特点

  1. python的优缺点来源:CSDN博客
  2. Python的特点来源:C语言中文网
  3. Python的特点来源:爱程序网
  4. Python 特点来源:菜鸟教程

Python能做什么

  1. Python在人工智能中的作用来源:Python程序员
  2. 大家都用 Python 来做什么啊?来源:知乎
  3. Python 应用领域来源:网易博客
  4. Python优势和用途--perfect!来源:CSDN博客

Python安装

  1. 安装Python来源:廖雪峰的官方网站
  2. Python 环境搭建来源:菜鸟教程
  3. windows下面安装Python和pip终极教程来源:博客园
  4. windows下如何下载并安装Python 3.5.1 ?来源:百度经验

Python基础知识

  1. Python入门*教程 超详细1小时学会Python来源:脚本之家
  2. Python入门神图来源:菜鸟教程
  3. Python3急速入门来源:马哥Linux运维

中级进阶

基础语法

  1. Python 基础语法(一)来源:博客园
  2. Python基本语法_函数属性 & 参数类型 & 偏函数的应用来源:CSDN博客
  3. Python基本语法经典教程来源:CSDN博客

函数

  1. Python3急速入门(三)函数与lambda表达式、闭包来源:马哥Linux运维
  2. Python函数来源:CSDN博客

正则表达式

  1. Python正则表达式详解来源:博客园
  2. Python正则表达式教程来源:廖雪峰的官方网站

高级技巧

这里会空置下来,理由与我的上一篇文章Linux运维完全小白入门指南一样,高级用户对于资料汇总的需求应该比较小,并且高级资料整理起来太费时间,以后有机会再补上。

学习资料

比起Linux,Python的学习资料真的是浩如烟海,即使对于小白来讲,某些高质量的学习资料也是唾手可得,无论是书籍还是其他的教程,都极易获取,免费资料也不少。 所以这里仅大致提一些国内知名的学习资料,大家可以再自行搜寻一下。

文本资料

  • 廖雪峰的官方网站
  • 菜鸟教程
  • 《简明 Python 教程》
  • 《父与子的编程之旅》
  • 《笨办法学Python》

这几项用做入门应该是绰绰有余。 除了以上几个项,还有许多优秀的文字资料未能呈现,不仅是限于篇幅,也限于我的个人能力。如果你有更好的资料,欢迎留言,我会将你提供的资料补充进来。

视频资料

腾讯课堂网易云课堂百度传课

网络交流

CSDNChinaUnix博客园51CTO知乎

写在最后

由于编者本人水平的缘故,整理Python的过程明显比Linux要更吃力一些。 受限于本人对Python的研究深度,本文可能在结构、内容上仍有欠缺,希望大家多多包涵的同时也能在评论中指出不足之处。 本文整理的目的,是为了给入门者提供一条经过前人验证可行的道路,因此本文大部分内容基于我个人的学习经历得来,希望各位在学习的过程要敏于思辨,选择适合自己的方法,因为,单纯追随前人的脚步是没有前途的。

为什么?