姿势提升
大牛说:
上手python的正确姿势是:立刻开始写代码!
学习编程最大的错误是:没有立即开始写代码。
没错,正确,很对。学编程需要大量的实践,就像是学习游泳,不下水肯定学不会,把游泳的方法技巧步骤流程都背下来也学不会。必须下水练习,在水里扑棱过,喝到水呛过,然后找到感觉。
学习编程像学习游泳,但不是真的是学习游泳,或者说不是一个有常识的成年人学习游泳。你听说过一个正常的成年人学游泳问这些问题吗?
- 泳池在哪里?(在眼前啊)
- 我怎么从水里出来?(泳池旁边就是栏杆可以爬上来啊)
- 穿T恤牛仔可以下水吗?(当然不是,要换泳衣泳帽啊同学)
- 我害怕被淹死。(不是深水区,踩到底脑袋就可以露出来呼吸了)
这些问题很傻是不是?纯小白学习编程,就是会有很多很多“蠢问题”。对于大牛来说,答案简直显而易见,对于小白来说,就是死磕一夜。
你摩拳擦掌准备好好学python,撩起袖子开始写代码。对啊对啊,学习写代码就和学游泳一样,就是要写起来。
然后还没迈出步子,你就被绊倒了。你站起来,又被绊倒了。为什么?姿势水平太低了。对于24k纯小白,不知道游泳池可以从侧边的栏杆攀爬下去,不知道要穿让阻力最小的贴身泳衣,不知道要戴上防水泳镜。
对于有编程基础的同学,立即开始写代码是正确的。对于没有编程的纯小白你,虽然没有错,但同时,你也必须知道,提升姿势水平更为迫切。
纯小白的python入门路线
提供一条针对纯小白的最小可行的入门路线。对于纯小白,很大一部分是和姿势水平有关系的。一开始姿势水平低一点没有关系,但是再往后学的python时候,不要忘了提高自己的姿势水平。
这个路线图上的技能,学完了即可往前走。没解决的话,选择放弃,或者继续,或者暂时mark,先往前走,遇到问题,定位问题触发的点在哪里,找哪些途径解决,回头补上。
纯小白定义:没有学过任何一门编程语言。
第一关:基础能力
- 一定的英文水平,能看外文资料
- 科学上网,懂的,知道
- google,习惯一次输入3个以上的关键字
- 有靠谱环境(Linux/MAC比windows好)
第二关:编程思维
- 正念
- 愿意尝试不同的编程体验
- 不纠结类似 括号一定要单独一行,这种细节
- 明确学习目标
"学习 Py 的目标本身,从来不是 Python , 而是只有通过编程思维才能理解/接触到的真实世界的Cyber维度!"——大妈
- 建立编程的概念
- 一个神奇的故事——为什么程序能够工作
- 如何向完全没有任何编程知识的人介绍编程
- 建立程序思维
- 为什么程序中的计数从 0 开始
- 如何运行一个脚本
- 如何输入/输出
- 常见的数据类型
- 常见的流程控制方式
- 通过编程经验,掌握编程的基本元知识,建立起来基础的程序/代码/运行时等概念
可先学习JavaScript:这样,目测得追加4小时
- 0.5 小时熟悉 Chrome 的调试工具
- 1 小时通读 JS 教程, 理解 DOM 的操作概念和过程
- 1 小时练习 JS 基础数据结构
- 1 小时练习 JS 函式的使用
- 0.5 小时,完成一个简单的页面交互
告诉自个儿,完成了一个软件的半成员
第三关:编程环境配置
CLI
既然都要学编程了,那么用计算机的语言和计算机对话就是必须了。
markdown
标记语法,不用花精力在排版上,专注于文字创作本身。
git
代码很难管理,高级管理思想,释放代码管理中的精力,专注于写程序本身。
Github
不仅可以通过git托管,还可以方便看代码,方便互相撩。
gitbook
学不会编程,学会用git思想进行内容创作,管理文档,也是极好的。
第四关:上手python
- 独立完成 Python 环境的安装
确认在命令中输入 python 系统反馈正确的信息
Yina$ python3
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
- 配置好 Python 的常用环境
yyuu/pyenv
支持你任性的使用指定版本的 Python 环境
pip
支持你任性的安装想安装的第三方模块
IPython
支持你任性的用各种姿势探索 Python
- python第一印象:Python脚本直解!
这42行代码,是可执行的
同时包含了几乎 80% 的 Python 代码常见情景
4.用4天时间来建立程序思维
day0 为什么程序中的计数从 0 开始? 先尝试回答这一问题
day1 明确如何运行一个 Python 脚本,以及如何输入/输出
day2 体验 Python 中常见的数据类型
day3 探索 Python 中常见的流程控制方式
- 进入 IPython 交互式编程环境中
参考官方文档中的教程
或Learn Python The Hard Way 前 21 课中有关部分
多使用 dir(),help() 来检验运行时内存里的 Python 对象是否如自个儿的设想
用10分钟,专心熟悉以下核心数据类型:
- 数字
- 文本, UTF-8/中文 文本
- 列表,嵌套列表,列表推导式 简单的 for in 循环
- 字典,嵌套字典
- 用 Sublime Text 编写几个简短的脚本
6.在终端上运行, 检验自个儿的想法是否正确
完成以下常见工程行为:
- 函式, 完成一个函式,可以拼接两行文本为新文件保存到硬盘
- 模块, 将函式发布为一个模块,可以在另外一个脚本中调用
- 文件, 调用此模块,将两个指定 .txt 文件的内容,逐行交错合并为一个新文件
- 网络, 改进此模块,可以将两个指定网页的内容, 逐行交错合并为一个新文件
或是Learn Python The Hard Way 参考 22 课之后的有关部分练习
在 32分钟以内, 完成以上建议的行为
程序思维:编程元知识
程序的每个部件都有自己独特的功能,我们只要负责将这些部件以合适的逻辑连接起来,就可以完成新的功能。——《一个神奇的故事:为什么程序能够工作》
编程为什么难
编程语言的交流对象是计算机。编程语言的理解并不难,和自然语言学习相比,困难点在于,计算机语言的容错性极低。不能出错误,否则就无法成功交流。
假如你在学习一门自然语言,可能学的不是很好,比如:I speak a little english.虽然用词,语句组织都只有60分,但是可以让绝大多数会英语的人懂你。
"写程序和写诗一样需要练习 我的程序无法将电脑写炸了 电脑很笨需要告诉丫怎么作"——大妈
冷冻疗法和编程思维
背景:部署heroku遇到一系列问题,在群里求助:
@yina
卡在buildpacks这里了。虽然已经设置buildpacks,并且确认已经设置到app,但是git push后,返回的错误信息书Failed to detect set buildpack。这是什么原因呀?我已经发了issue,各位教练同学有空求指点一二。
@Zoom.ོQuiet
@yina
其实大妈提供的这几个链接,基本都看过,各种方案,也都试过,但是还是没有成功
@Zoom.ོQuiet
这时,俺的经验就是:杀光,重新部署,从0开始, 一步步进行,先完成一个干净的无/最小 app 的空间部署,再逐步追加,直到发现崩溃的那一个配置行。
即,冷冻疗法
因为能自主设计发现/证明/纠正/改进/预防... 错误的一系列思维,就是编程本身哪....而根本不是各种课程宣称的语法/OOP/框架/etc.
其实相同的经验大家都有:中学作物理/化学 实验失败了怎么作?学霸们一眼看出哪儿有问题,解决就好...俺只能还原所有东西, 重新按照实验手册一步步重新来,然后发现次序/计量/方向....各种基础错误
在成功的基础上步进, 才知道哪儿出错的,否则,再怎么嗯哼, 也只是拼运气了
MVP:最小可执行流程
因为部署heroku失败,于是在这一周,我放弃了这周任务的部署,跟着一个YouTube的教程,完成了MVP的flask框架的python应用在heroku的部署。
同时,教程也分享了大妈在上期课程中,用ch1的任务演示MVP的流程。
所谓MVP,就是最小可走通的流程。
MVP的步骤
- 建立空代码
一个正确的开始就是,可运行的没有任何问题的空代码
- pythonMVP空代码
#!/user/bin/env python
#coding:utf-8
if __name__ == '__main__':
pass
- flask框架的MVP空代码
import flask
Flask = flask()
@route(/,)
return index
- 每走通一个功能,就记录一个版本
MVP的好处
及时给予正面反馈,提升自我效能感
学习体验比较好
为什么要学习编程
刚写这篇教程的时候,学习python已经经过了4周,种种折腾:
- 《learn python the hard way》
- CLI
- github、gitbook、git……
终于可以假装自己像一个hacker一样写代码了,准备下水游泳了。老是被呛,怀疑自己要学习python这个选择。它到底是啥,为什么要选择要趟这个水?
想清楚目标,才有坚持的理由。给自己一个MVP, 完成比完美更重要。
Python营销观点
人生苦短,我学python
很赞的一句Slogan。可是没有学过任何一门编程语言之前,我并没有能力判断这句话是不是真的。
python是最容易的编程语言之一
再简单也是计算机语言,既然是计算机语言,它就和自然语言不一样,需要克服我们自然语言的思维方式和使用方式。更何况,学习一门新的自然语言也并非易事。说它简单,那个是和其他计算机语言相比较的结果。
所以,学习python既不会轻松,也不会容易和美好。对于真小白,真的是虐心之旅。
求知欲和好奇心
计算机语言是真正意义上的通用世界语,规则稳定。因此,作为一名知道分子,想选择一门容易入门的编程语言感受一下。如果有能力做自己想做的事情,当然是最好不过的。
这个理由说的过去,但是假大空,遇到困难就会满足于“好像懂了”,但是不会死磕把东西做出来。反正也不是想转行做程序员啊,做不出来也不会对不起老板发的工资。
所以求的不是知识,而是获得hacker思维。
"学习 Py 的目标本身,从来不是 Python , 而是只有通过编程思维才能理解/接触到的真实世界的Cyber维度!" ——大妈
另一个令我记忆深刻的例子是很小的时候学习编程语言。受影响最深的是一种思考方式──在跑程序之前,要反复浏览代码,在脑子里进行预演;而不是写完程序直接跑,出错了再说。这是节省时间提高效率的重要方式。——笑来 「把时间当做朋友」
练习英语和写作
学习了十几年的英语。但是学习英语的课程还是遍地开花。营销点往往是更标准的发音,口语这些。然而语言还是扩大世界的语言工具而已。学编程最靠谱的资源当然是一手英文文档咯。同理,写作也是。硬核学习要强调输出,自己写教材。
在真实的场景,学习写作,学习英语,比教材中模拟的场景,更有意义。
个人网站
第五周的学习任务是web端的网站开发。跟着书一步步做,打了一周的出租车,每天熬夜到十二点后,还是不会做!得到这样结果,很有挫败感。放空了两天,洗完澡就睡,写写宣泄情绪的日记,回头整理教程,看自己漏掉什么?还有几周就要结束课程,最后几周,就要组队交大作业。既希望这么辛苦的时间早点过去。也希望自己真的学有所成。
编程经验->作什么?好象没有直接关系,其实,这就是为什么要学习编程的根因之一。世界已经基本上被电脑管理了。除了编程,普通人很难能通过数据模式来理解/改进世界。
回到一开始这个问题。有一个答案是:我想建立一个个人博客。之前听极客电台,有一期节目是,要嫁就嫁一个有个人网站的人。原因是:
- 个人博客通过时间累积,持续不断产生价值,累计产生价值。
- 相对于第三方托管,内容审核的风险比较小。
对小白友好的python教程
这个目标,是在学习过程中产生的。以我的编程能力,做不了太牛的项目。但我确实感受到,程序浸透我们当下的生活,编程语言以及内在的编程思维,对于未来的人类,是很重要的一种能力,我也希望通过我的一己之力,影响到一些人。