NC3:看不懂 Python 代码陷入自我怀疑?有人却学得不亦乐乎?

一次彻底的心智训练

对于入门 Python 来说, 很多初学者通过一些编程书籍或市面上的各种入门课程视频, 对于 Python 的语法与结构有所了解, 也开始尝试做一些小的程序, 但在进一步尝试的路上却陷入了近似深渊一样的体验

------当自己去参照其它的开发者的程序时, 完全不知如何下手, 或者明明知道这一段代码是用于何种用途的, 却迟迟无法运用得当....

进而开始怀疑自己, 我到底会不会用 Python, 到底有没有学会 Python?

困难总是存在的, 这就像那些编程学习之路上, 你所踩过的, 将踩的以及默默在等候着你的坑一样, 无法逃避.

在往期的课程每周例会上, 有学习 Python 入门的蟒营同学提出一个问题:

当我知道我要实现什么功能, 然后我去 Google 搜索, 可以找到相关语句支撑. 但对于语句本身是怎么运作的, 我了解得很少. 所以, 当满足复杂功能的一整段语句(其中涉及到结构和单个语句)出现时, 我基本上看不明白.

冲突

这个问题, 在编程初学者中极具典型性, 小白学会了搜索大法, 但面对搜索到的信息仍无法理解和入门, 怎么破? 就如同婴儿面对大餐却无法自己动手吃一般.

对小白来说, 要如何阅读别人的代码, 如何理解进而自己写好代码?

点解?

那蟒营怎么'看'这个问题呢?

首先, 是关于阅读别人的代码这一点--- 这种感觉在进入任何一个陌生领域知识时, 其实都是相似的: 好比开始学习英文时:

刚刚知道字母以及如何查字典,
掌握的单词还没超过 42 个时,
看英文名著当然是根本看不下的. 
几乎每一句什么意思, 都要查字典..

那么, 我们如何跨过这一阶段的? 以往的学习经历告诉我们:

多查字典
多看文章
多写文章
多背名句
...

是的, 非常非常笨以及老土的方法.

对于编程来说, 也一样.

读代码

具体到 Python 这门语言的学习,Python 对国人有着非常友好的一面:

  • Python 是已知语言中最接近自然英文的开发语言之一
  • 如果将变量名设计好, 脚本几乎能视为一篇比较怪的作文来看
  • 回溯到源头, Python 原型 ABC 语言的设计目标就是儿童教育...

总而言之, 阅读代码本身就是编程的一个重要环节.

在阅读他人代码的过程中, 吸收软件设计/工程管理/行业惯用/命名学/... 的知识.

当然, 在代码的选取方面, 我们应当优先去阅读的, 是优秀 Python 作品的代码.

好代码如何好

有同学可能会问, 什么样的代码才称得上'优秀'呢?

粗暴的说, GitHub 中 star 超过 1000 的一般可以算是. 又其实, 当前蟒营 Py 班同学间互访问代码分支, 也是一种锻炼阅读代码的能力.

因为, 同学们完成的代码都是为实现相同功能:

  • 只是各自用了自己掌握知识点的组
  • 可以说就是回字的 4 种写法

这对你来说, 可能就不是看细节, 而是多看整体: 大家如何组织代码的? 如何切分函式的? 如何设计变量名的?...

所谓'三人行必有我师', 从阅读同学的代码中, 了解到相同功能的不同实现方式, 也会无意识的思索哪种方式好在哪里, 不足在哪里, 我选择用哪种, 各种决断能力'嗯哼'.

好代码如何写

我们回过头来, 再来审视一下本文开头那个问题所提到的难点:

所以, 
当满足复杂功能的一整段语句出现时, 
    我基本上看不明白.

这里其实隐含着一点, 这段满足复杂功能的语句, 也有可能并不是友好易懂的'优秀代码', 或者其实是非常好的代码, 但回答者并没有通俗易懂的呈现出来, 看不明白不一定是小白的锅. 但小白确实是看不出来这整段语句是否是好代码. 到底什么是好代码? 如何写出别人也容易看懂的好代码? 在此, 需要明确的是:

代码第一读者是人, 而不是机器.
简洁直白的代码才是好代码.

但是, '直白'的定义, 是随着学习在变化的, 就好比说英文学习历程中:

  • 开始时, 只有 this is, that is, 这种 4 个单词以内固定句式的对自己算直白.
  • 但随着经验/语感的积累, 感觉直白的句子,其实在逐渐变得复杂起来..
  • 所以, 当前这种'看不明白'状态是自然的, 必然的, 不可以忽略的...
  • 那, 问题又来了, 自己作为一个初学者 , 如何快速冲破这种拘束状态?

作为一个初学者 , 如何快速冲破这种拘束状态?

  • 坚持...每天尝试写/运行/理解找来的代码
  • 坚持...每天尝试写/运行/理解找来的代码
  • 坚持...每天尝试写/运行/理解找来的代码
    • ...直到你习惯 Python 的形式

蟒营如何教?

蟒营™Python入门班课程, 在学员学习时可以提供的切实辅助就是: 在这个坚持学习编程的过程中, 任何自己无法理解的知识点/形式/模块/概念/...., 都可以及时来问, 以 Issue 的正式形式来驱动问题的解决. 此处, 重要的事情再重复三遍:

以 Issue 的正式形式
以 Issue 的正式形式
以 Issue 的正式形式

... 是的, 正如 Eric Steven Raymond 在"提问的智慧" 中给出的经验.

但是切记, 前提是:

"
只有你认真, 大家才可能认真.
"

认真的力量是很惊人的, 试过就知道.

除此之外, 无它.

什么是蟒营?

所以, 什么是蟒营呢?

嗯哼

正如隔壁队长说的:

一个十分开放的课程, 开放到它只给你一个框架, 内容完全由自己来填写, 任何形式任何方法都可以得到包容, 也没有人说'哎呀这个应该这样做', 他完全靠自己实际操作来触发一系列隐藏任务, 而大妈则是'和蔼'的站在背后不时的看看你, 指引你, 帮助你把这个发现的问题狠狠的踩下去, 推动你去弄个明白. 这就是蟒营.

综合来说, 蟒营可以激发学员获得各种价值 ---

  • 在职非 Python 程序员 <- 实用工程经验, 包含团队管理体验
  • 在校大二/三学生 <- 完备软件经历, 无论是否专业相关, 都能独立用 Python 完成实用脚本开发
  • 真小白无基础人士 <- 切实编程自信, 真正理解什么是编程, 并熟悉 Python 技术生态,能基于工程思维来解析具体问题..
  • 以及所有学员能获得的:
    • 高效问题讨论习惯
    • 实践自学社区协作

而这一切的技能与成果, 都在 6 周里即可达成.

PPS: 14 岁~72 岁都能学, 嘦:

0: 想学编程 
1: 有个人电脑 
2: 每周能挤出10+小时自主学习时间 
3: 英文能查字典看懂



蟒营®编程思维提高班 Python版/第14期 正在报名

精品小班/ 永久答疑

扫描报名: 101camp14py

蟒营®式 原创课程

theory101camp_v3

官网: py.101.camp


任何问题可先进入知识星球(免费)咨询:
FAQ

关注公众号, 持续获得相关各种嗯哼:
zoomquiet

追问

任何问题, 随时邮件提问可也:
askdama@googlegroups.com