GitBook 链接 http://cici19891.gitbooks.io/pythoncamp0/content/source/part3/4.html
大妈视频链接 http://youtu.be/BUoI7TWO8hc
大妈语音链接 http://openmindclub.qiniudn.com/res/tapes/150425-qa-sh/index.html
Q(大妈):这是你们第一次线下聚会吗?之前都没有见过?(是的)为什么呢?
A(阡陌):小组才刚刚成立。
Q(大妈):你们也刚刚才认识吗?有规定你们不可以自己组织吗?是不是因为动画 EVA 中所说的“绝对领域”?
你们在微信上、邮件列表里,有过不下一百万次的照面,为什么不自己组织起来?
为什么我和志平仁波切一开始要选择十个人建立小组,后来又按地域建大腿组?
其实我们是希望你们自发的组织起来的,但一直没有人接到这个梗。(大妈多次说到许多梗都没有被学员 get 到,痛心不已......==。)
权限就在哪,这些权利没有人限制你。从来都是——谁主张,谁执行
。
Q(大妈):权利就在那里,你为什么不用,想过没有,你为什么没有用起来?
大妈的层层追问无言以对。。。
Q(大妈):是怕说错吗?
有些人是这样,知道自己会说错,怕说错,所以就不说。
但有些人,就像安替老师,知道自己会说错但仍要讲,结果是什么,越说越好了。
而如果一个人要自主的(自我驱动)真正学会什么东西,学习中的摔跤是必然的、必须的。
Q(大妈):头脑风暴并不是就刚刚一会儿你们坐在这儿才有的,你们接到这个计划时,脑子里就已经开始计算了,只是还不能适当的提取出来,刚刚你们的讨论是头脑风暴的碰撞。那么你们有想过那一系列问题了吗?
(没有人回答的出来,大妈此行的目的已经明了了,虐我们。。。)
Q(大妈):编程是强逻辑的手艺活
。这是什么意思?编程和现实中的其他事有什么区别?
比如给你一堆木材,要你打一些桌子椅子,你第一步怎么做?
A(阡陌):设计步骤...
A(大猫):??????
Q(大妈):嗯,看来大家都知道如何开始,编程也是一样,就像我们过来这里,要设计线路,要按线路一步步执行,这一切我们都非常熟悉,调用起来非常方便。但现实的程序是很难复现的,比如你做十万次麻婆豆腐十万次都不同,哪怕弄的像在实验室中做实验那样也不可能,对吧。但编程呢?
A(众):精确。
Q(大妈):对,代码写定后,运行几百万次都还是那个结果,编辑器不会故意开玩笑,写对了不给你跑起来,人倒是会这样。
Q(大妈):人的效率能这样简单的叠加吗?
A(众):不能。
Q(大妈):对,可能十个反而需要一年或者更长时间,甚至根本没法完成了。人的效率根本不可能这样简单叠加,所以什么是团队,怎样形成一个团队?怎么分工?
A(大猫):程序是对现实的逐步还原,所以固定追踪,由一个人专门统筹,分派任务和整理进度,由他来调配和分工。
A(阡陌):这样这个人应该还要负责审核每个人并入的代码是否正确。
Q(大妈):这里面很多坑。谁分?怎么分?怎么证明这样分配是对的?遇到问题怎么办?在问题面前如何止损?
A(大猫):就是类似于产品经理这样一个人。
Q(大妈):为什么要一个人这么高智能的生物来做这件事呢?你们知道这意味着什么?
团队有三个人或四个人,我们现在的要求是不超过四个人,其中一个人专门来做这个,也就是直接少了一个程序员,这是极大的浪费。
Q(大妈):所以,更好的方式是什么?
是程序本身,软件是最自然的理解方式
,有什么能比一个可运行的代码更好的沟通两个程序员是想干嘛呢?
软件就是这么写出来的,分布、合并,用软件说话,用可运行的代码说话。
自然而然
。A(大妈):对呀,进度不一怎么办?现在你们就是面临这样的问题,进度不一,怎么办吧。
A(众):大家一起帮他。
A(大妈):对呀!不都知道吗。
A(大妈):我们面对的是什么目标?手上有什么资源,也包括时间资源,有哪些人可以用?当然人也是一种资源。在开始之前有没有问过自己这样的问题?
我们都是由这三者出发来展开我们的项目,这个过程中一旦遇到不可预见的坑,说明什么?我们有没有正确评估者三者的权重,是不是要重新评估?
A(石子佳):可能是目标定高了。是不是可以一开始就准备好一个最高目标,一个优秀目标,然后一个保底的基本目标。
|整理者按:大妈的发布作业时,总是分别列出可用、合格、优秀和天才几个等级。原来处处是伏笔。
A(大妈)(某种难以言传的表情。)嗯。。。
A(大妈):
A(大妈):首先,基本的,在 GitHub 上找。
A(大妈):其次,有哪些筛选条件?
A(学员):最多人 Fork
A(大妈):还有呢?还有呢?(大妈不断的重复追问)
A(学员): 代码行数最少
他人的评价比较好
加星最多
开发的时间比较近
A(大妈):还是那句话,我翻来覆去讲的自然而然
,这些都是常识。
比如,看到一个 09 年的和一个前两个小时刚改动过的,选哪个?看到没有几个人改动,和一个几乎天天有新的变动的?选哪个?当然是刚刚改动过的和开发积极的那个。
A(大妈):你们用了 GitHub 这么久,每天 push 多少次?
A(阡陌):每天两次。
A(石子佳):我是直接 GitHub 上写。
A(Rainvoo):可能写了这么久以来一共几十次。
A(大妈):你们还没有意识到 GitHub 真正的(美好???),我们每天 push 二三十次,甚至更多?为什么要这样,知道为什么要这样?
A(阡陌):为了得到更多改动比较小的版本,当出现错误时,能在更小的范围测试是哪个代码错了。
A(大妈):对,版本越多追溯越容易。
Q(大妈):一个项目、一个程序它的主要框架是什么?(由大到小分步)
A(众):输入/处理/输出
|大妈画逻辑图
Q(大妈):好,继续。输入的是什么?
A(石子佳):碎纸片/条状的
Q(大妈):好,这个条状碎纸片为对程序的输入来说表现为什么形式呢?
A(石子佳):(思索)图片吧。。。
Q(大妈):好,图片。那么输出呢?
A(众):也是一个图片,一个整合的图片。
|大妈画逻辑图
Q(大妈):好,输入、输出完成了。这个让你们写已经没有任何难度。现在我们就当已经获得了这个输入对象,怎么处理它?人工是怎么处理的?
A(石子佳):将接口处吻合起来
A(Rainvoo):将字的偏旁之类对应
|大妈画逻辑图
Q(大妈):好,那工程上是怎么做的呢?工程上的暴力处理?
A(众):...
Q(大妈):人脑最怕做重复的事情,但计算机恰恰相反,它们最擅长的就是重复的计算。计算机获得的输入是,很多张长条的碎片,我们要的是它们最后会整合成为的一张 A4 纸,可不可以这样,不管它怎么排列组合,我们先得到所有的它可能排列组合成的 A4 纸,这正是计算机最擅长做的。得到所有的 A4 之后,我们只要找出我们想要的那一张,输出,就可以了。怎么找?很简单,读取纸张上的文字,找出可识别文字最多的那一张。
众学员一下子明白了。
Q(大妈):这里面几个步骤?
A(众):生成碎片所有可能的排列组合
用一个类似于扫描仪的模块来扫描所有图片
比较可识别文字最多的即成果(用 len(list))
|大妈画逻辑图
Q(大妈):排列组合没有问题,找出最多文字的那一张,也没有问题,已经有同学把用哪个代码都说出来了。所以难点集中在识别文字的模块 —— 一个 OCR 模块。
Q(大妈):有几种解决方式?
A(众):PyOCR
Q(大妈):如果没有呢?NoPyOCR(又一轮不断的追问)
A(众):其他语言的 OCR 模块。。。
自己写一个 OCR
Python 中可以替代 OCR 的模块
Q(大妈):还有呢?
已榨干。。。
|大妈画逻辑图
Q(大妈): 判断工作量,或说评估难度。
Q(大妈):那一种工作量最大?
A(众):自己写
Q(大妈):第二呢?
A(众):调用其他语言的模块
Q(大妈):对,因为说实在的你们根本不会 python 以外的任何其他语言。所以最终找到的路径是,在Python 中找替代物。
(尽说实话。。。)
|大妈画逻辑图
启动样本数据,即处理对象
测试接口的匹配
任何时候可运行、可预期,如何实现?——随时可以测试的样本数据
每天练习,不断练习才能顺利提取
每天进步,这需要形成规律的每日三问
止损,超过一个时间临界点,换一种方式。微信、打电话、发列表等等方式。
尽快写出项目计划书