第十五次活动记录

第一次组织Py103 meetup,既然是编程者的聚会,必须要“代码上墙”,以Coding和思路交流为主,如果能讨论后留出半小时现场各自Coding“攻克”难题就再好不过了。所以此次选择了一个很特别的地方,只有桌子、椅子、投影仪,连口水都没有(下次注意,起码提供点热水 :) ),极其专注。

情况概述

  • 参与人:张诗颖、郭斌、孙文韬、王琛
  • 时间:18:39 至 20:00
  • 内容:大致按照流程进行,最后超时压缩了时间。
    • 简单自我介绍
    • 汇报目前学习进度,说明已做过的探索和遇到的困难,下一步打算
    • 编程学习方法沟通(浚宇主题分享)

无图无真相,题主照相技术太渣,加上投影关灯,大家感受一下现场气氛就好...(已加入改进清单) 必须有美女的程序员聚会才会热烈讨论~先偷拍一个...

以后投影仪编程,多大的屏幕都弱爆了,直接“代码上墙”

内容感受(浚宇)

自我介绍

  • 张诗颖,唯一菇凉,经济学硕士在读,北京实习。
  • 郭斌,电梯行业设计与管理人员,奶爸一枚。
  • 孙文韬,医药行业经济分析师一枚。
  • 王琛,互联网p2p行业分析师一枚。
  • 浚宇,信息化行业项目经理一枚。

来的人都参与了开智部落,之前多多少少参与过开智的其他课程。结婚的占大多数,还有有孩子的,真心是在工作之外挤出时间写作业,参与线下的沟通。后续的沟通中大家很坦诚,能明显的感受到对Coding的强烈兴趣与执着,不感动,更多的是被激励和鼓舞。在三十岁左右的年纪遇到这样的“异类”是幸福。

Chap1的那些坑

我是唯一提交了作业的,大家由于种种原因都还没有完成。目前主要遇到的大坑有三个:

  • 数据结构化
  • 基础知识的积累不够
  • 思路和行动的不稳定

如何把文本数据转换为结构化的数据

这是所有参与的人都遇到的问题,大家也想到了各种办法,都还在实践的路上。活动中没有“剧透”,浚宇提供了自己的解题思路(后面会提到)。 通过沟通,发现每个人的思路都有可取之处,思路也更加开放,总结一下方法:

    1. 构造空字典,逐行读取数据为字典赋值
    1. JSON格式的转换
    1. 将txt转换为csv,直接调用csv模块转换为字典格式
    1. 构造list
    1. 直接在文本文件中进行搜索,输出对应的文本内容
    1. 利用pandas或者numpy等开源包提供的数据结构处理

这些方法各有优劣,1、2、4、5是比较容易想到的办法,这四种中1最精巧,2的基于格式的转换是另一种思路,4、5可以尝试,完成作业后回顾阶段(这是什么,后面细说)建议再转换方法进行比较。6有独特的优势,特别是在数据量比较大,要对数据进行分析时,更适合。

基础知识的积累不够

诗颖提到了一个问题,如果连最最基本的函数、变量都不太懂的时候,查看官方文档即使搜到了内容,还是一头雾水。@zhangshiyinrunwithcc 在后续的Issue回顾中补充问题,希望 @ZoomQuiet 和各位助教能给予解答。

思路和行动的不稳定

@郭斌 提到问题是既想训练知识点,又想做笔记,还想尽快实现课程的作业,兼顾困难。另外会有各种思路和想法,但是行动上又不太稳定。 我也有过类似的阶段,不过Data103的掉坑和爬坑经历已经走了过来。关于编程思路的思考也在不断优化,利用博客输出。我们大脑的“神经网络”需要训练的过程。所以这个问题的第一个解药就是不要焦虑,刚入门的小白阶段都会有的体验,从个人感受上差不多。另外是多训练,Coding还不够,输出不够,没有形成稳定的思路和方法,建议参考开智课程开始前的几篇文章,逐渐形成自己的“学习清单”。

编程学习方法沟通

  • 基于我的探索过程做了主题汇报,这个过程是自己在Coding时的记录,后期没有做过任何处理。可以清晰的展示自己的整个思考过程。

  • 梳理《怎样解题》的方法应用,重点关注亮点如下:

    • 知识点学习:在书中有一句话给我印象比较深:我们假设学生已经获得了相关的知识。这意味着解题之前,我们需要先对相关的知识点有初步的认识,我的做法是在应用到知识点之前单独建立文件进行代码实验,保持最小行动,一旦到达能够被作业应用的水平就回到作业本身继续向下执行。入门阶段这样的训练会多一些,后面应该是越做越简单。

    • 回顾:作业完成才是学习的真正开始,我给自己的要求是:

      • 第一遍:不借助任何材料,对自己完成的代码进行回顾和知识点的梳理
      • 第二遍:思考有哪些功能的代码可以优化或者使用其他方法实现
      • 第三遍:参考他人的代码寻找思路
      • 第四遍:采用情景学习的原理,自己想象场景,把知识点迁移到自己的案例中编程实现

这样做的好处很多,每一个方法都对应自己的目的。特别是最后的情景学习,我在假设我要处理的不是天气数据,而是学校学生的成绩,如果数据量很大会怎样,自然想到了Pandas处理数据,想到也可以用开源包来做,有了新鲜的思路。

  • 善用Gitbook
    • @ishanshan 在欢迎在此分享你遇到的 ch1 优秀实践中的回复说明了博客和电子书的区别。
    • 我的理解:在Gitbook中可以尝试树状结构展开,每一部分说清楚一个知识点,而不是博客的方式尽量在一篇文章里写清楚。马上开始修改Gitbook的教程内容结构。原来我是准备Chap1的回顾尽量写在一篇中,现在看来,可以拆开,根据review的知识点进行组块划分,这样好处是可以写的更细致,理解起来更容易。
  • 官方文档的阅读
    • 大家都在查官方文档,不知道有没有想过为什么要这么去安排?特别是目录页面的内容,以及每个文档的目录结构。强烈建议大家抽点时间把目录结构看一下,对文档的编制会有新的理解。以后搜索也更有针对性,并且是了解文档全貌的去查找内容。
    • 我在自己写的Numpy学习指南Matplotlib学习指南1:文档导读与基本函数示例中都尝试先检视阅读整个文档,了解结构,有助于后续查询和应用的效率提升。
  • 为什么官方文档不起作用?
    • 关于字典生成,通过Google找到,关于异常值的处理参考了Stack Overflow的回答,在信息化行业经常提到的是业界的“最佳实践”,这些最佳实践往往是行业内优秀的公司或者学者的总结沉淀。这些Google大法下的高质量的内容可以看作最佳实践。
    • 最佳实践和官方文档还是有联系的,可以在回顾中找到两者的联系,比如说字典赋值,在dict的官方文档提到d[Key] = Value的公式。事后回顾,自己对for循环理解不到位,没有产生连接。
  • 必要难度
    • 以前的博文提到过很多次,这里提醒 @郭斌 脱离教程(LPTHW),脱离文档写出来的代码才是自己的代码。
    • 以自己的语言组织输出,书写教程,而不是采用Ctrl CV大法。
  • 节奏,你的节奏
    • Chap1已经感受到深深的同侪大鸭梨,特别是长三角的小伙伴们作业提交的特别快,根据经验,以后的作业,特别是有难度之后,反而一些代码大神会提交的更快的,压力更大。
    • 因为鸭梨乱了方寸实在是得不偿失。建议保持自己的学习节奏,不到必不得已,不要先参考其他人的作业(这一条因人而异,如果没有任何基础,反而参考作业会是一个好的习惯),参考他人作业对形成自己的独特思路和方法会有影响,先官方文档再Google大法,即使代码质量不高也尽量自己写,回顾的时候参考他人作业。

总结反思

发布这篇活动总结,自己还是有很大压力的。一群小白的沟通,很难保证质量有多高,担心耽误了同学的思路与进度,这也是需要公布总结的更大的动力,欢迎大家一起来“找茬”。 这篇总结是早上起床开始写,活动期间没有做任何笔记,感受阳老提到的学习方法,貌似初见成效,共勉之~

内容

  • 加入上周作业的Review(代码层面),本周作业的沟通(思路层面)。
  • 最好能邀请到助教,或者代码老司机来带带路。

活动组织

  • 时间控制,第一次有点超时,以后注意
  • 给点热水啊喂,以后注意
  • 开始做录音,不管有没有用,先记录着
  • 照相得专业...

Issue发布

  • 加入预计关闭时间,向 #163 学习

下一步行动

  • 督促参与小伙伴尽快完成输出
  • 完成 基于《怎样解题》探索步骤的编程学习体验 博客输出
  • 完成 线下活动组织指南 和 15次线下活动总结记录电子书的输出,整合链接到博客
  • 完成 Chap1的回顾和相应教程内容,尝试新方法实现课程内容
  • 在本Issue更新完成任务的进度和成果链接

@OMlalala

活动收获

这里主要记录了@Wangjunyu 的分享中,我认为对我最有帮助的几点。

  1. 对官方文档的认识
  • 对目录的理解,为何这样设置?(自己之前只在文档中搜索,从来没有看过文档首页。。)
  • 官方文档不是唯一,要结合stackoverflow,里面的问题都是业界的优秀实践,和文档互相补充学习。
  1. 到场的小伙伴也都是开智部落的成员,@Wangjunyu 在博客中的思路,融合了读《怎么解题》的心得。
  2. 在google搜索,除了关键字搜索,也可以尝试用英文搜索一整句话。
  3. @Wangjunyu 输出的习惯太好了,每天都有记录自己当天的学习实践内容;边写文档边写代码,思路体现在文档中,及时记录,便于回顾。
  4. 如何学习卡片背后的链接?除了简单地读,还要用代码输出。

@zhangshiying

丢失的那一块

1 只有有编程基础的同学才能完成独立ch1任务吗?

  • 比起拼图,魔方更能代表我对ch1作业的理解。在杂乱无章的转动中,企图将魔方还原到完美的位置。我离那个完美的位置似乎还较为遥远。
  • 参加朝阳门聚会是为了印证我的一个猜想:真的只有拥有编程基础的同学才能完成独立ch1任务吗?
  • 浚宇呈现给我的答案,似乎是,并不是

2 只凭借Doc、SO、youtube能够构建出ch1功能吗?

  • 浚宇的探索记录似乎说明,Doc、SO、youtube这3样已足够构建出ch1功能:从Doc上获取关键词,从SO上获取最佳实践,从youtube再次印证实践,三步即可成功。
  • 然后朝阳门meetup后,我又尝试使用俊宇探索方法,试图拼凑能够实现把txt改写为dict的码行,当然,又一次还是失败了。

3 JS函数基础是必须的吗?

  • 又受到浚宇提到的怎样解题中,区分已经条件与未知变量的启发,我将需要的资源列表列举如下:

| 资源 | 是否尝试 | | --- | --- | | Doc | ✔ | | SO | ✔ | | youtube | ✔ | | LPTHW | ✔ | | PythonPracticeBook | ✘ | | JS函数基础 | ✘ | | issue提问 | ✘ | | --- | --- |

  • 大妈导念里强调过,JS函数是基础。 可能下一步会尝试补充上这一块。但最后结果可能仍然不甚理想。

4 探索功能:把txt改写为dict的3次失败

  • 期待实现功能把txt改写为dict,并把dict打印出来
  • 尝试代码 (代码皆从Doc,SO,youtube上获取)

第1次

d = {}

with open("weather_info.txt") as f:
for line in f:
(key, val) = line.split()
d[int(key)] = value

结果:

need more than 1 value to unpack

第2次

d = {}

with open('weather_info.txt') as f:
for line in f:
key, value = line.strip().split(',')
d[key] = int(value)

结果:

'list' object has no atrribute 'split'

第3次

file = open('weather_info.txt','r')

dict = { }
for line in file:
x = line.split(",")
a = x[0]
b = x[1]
d[a] = b

结果

(terminal没有返回任何东西)

@孙文韬

记朝阳门线下活动20170112

这次线下活动感觉收获颇多,碰到俊宇这么出色的组织者和分享者,以及一帮乐于分享的小伙伴真是我的幸运. 小伙伴已经详细记录了这次聚会的点滴,珠玉在前, 我努力的记录一下我的真实体会,作为对自己的鞭策.

我的反思

  • 线下交流前的自我准备不足. 近期工作的繁重让自己到周四聚会时迟迟没有开始实际的编程(此时耳边仿佛响起大妈铿锵的语句"都是借口!",让我顿时羞愧低头..),直到和小伙伴见面时自己还是仅仅了解第一周的任务,进行了简单的拆解,对自己面临多大的坑还没有切实的体会. 因为我在讨论前没有大家这么多的努力和代码输出,所以在沟通中就没有切身的体会,不会有"别人的一句点拨让自己茅塞顿开"的心流体验,也还没有体会到克服困难获得成功的快乐感觉. 当时我的心里非常焦虑,对自己说为什么没有早点完成最小行动,拿出哪怕还非常不完善的代码输出?!
  • 活动过程中的感受. (1)俊宇首先让大家分享各自遇到的困难以及各自做了怎样的尝试,大家遇到的困难都是基本一致的, 即如何把文档 txt 转换成字典. 大家都做了各种各样的努力,不只限于官方文档和 Google, 甚至考虑用数据科学班学到的方法或绕过字典的坑直接考虑将 txt 转换为 CSV. 从这里其实我体会到,今后完成作业时不能遇到困难轻易放弃, 别人一定也会遇到同样的问题, 要保证最小行动和输出, 通过代码早尝试,多尝试;(2) 接下来, 各人提出一个自己认为重要的问题,然后听别人的分享. 我提的问题是: "怎样快速进入python学习的节奏,哪些姿势是最值得学习的?" 我提这个问题是因为我发现自己至少存在两个方面的不足: 一是没有安排好自己的时间, 没有进入正确的学习节奏, 二是没有输出, 开智的小伙伴都熟悉"输出大于输入","输出是更残酷的输入","用作品说话"这些理念,这些正确的学习姿势我感觉还没有形成习惯内化到自己身上.

我的收获

对于我的问题, 我觉得 @Wangjunyu 俊宇给我树立了一个 Best Practise, "分解问题- 分步尝试- 完成最小输出- 进一步尝试实践- 优化结果- 形成教程- 最后通过线下活动交流分享给别人", 这个过程不但加深了对知识点的掌握,更促进其知识体系的建立.

改进计划

  • If 每周一在卡包中领到当周任务, Then 周一晚上分解任务,把能够实现的部分先用代码写出来.
  • If 碰到任务中不懂的知识点, 并阅读了官方文档或Google 到答案, Then 立即记录到卡片上
  • If 完成了阶段的任务/参加了线上线下活动, Then 24小时内记录学习收获/教程. 心得体会就写这么多, 继续去折腾代码, 争取按时完成作业.

孙文韬 2017.01.14


背景

活动前的任务进度

转换为字典这一步,陷在各种可能性原地打转,后面的步骤没有开始。

几点担心

  1. 担心时间成本,犹豫是不是应该利用宝贵的时间多写些几行代码,多看看官方文档。
  2. 担心没有完成作业(尤其后面的步骤还没有深入思考)的情况下,直接听取别人的成果,失去独立探索的过程。
  3. 担心没有自己的代码作品,无法与大家深度沟通交流。

问题与期待

  1. 投入时间并不少,但依然没有高质量的产出,在时间安排和处理任务的效率上有问题。希望了解过来人(被数据科学班虐过的俊宇同学)的经验。
  2. 经过第一周(CH0)的总结,给自己定下的行动原则是先独立完成作业的最小闭环,先提交再优化。此前不看同学提交的作业。(一方面担心打破原有思路,增加复杂性。另外,怕压力太大反而行动瘫痪)。但面对自己由于缺乏相关知识而无法继续,是否可以参考网上的答案或者同学作业。这个尺度改如何把握?
  3. 遇到一个关卡时,路径如何选择? 比如 CH1 中 weather_info.txt 文件转换为字典这一步,相信难道不少同学。 通过官方文档、google、stackoverflow相信也找到了不只一个解决方案。 那么应该如何选择?
  • 不管用什么方案,先完成作业 —— 比如把 weather_info.txt 的后缀改成 CSV
  • 要能复用、批量化 —— 比如研究如何使用 JSON 转换
  • 要能用的上以前的知识,建立[已知]和[未知]的联系 —— 比如用 readline
  1. 意识到记录的重要性后,改变习惯,边写代码边记录。但发现效率较低,尤其时间零散的情况下,刚进入心流状态就被迫暂停。下班后再次开始,原来的思路已经不见了。

活动过程

具体过程@俊宇已经第一时间详细总结,再次为他的高效点赞!

下面是个人觉得此次线下活动成功的两个要点:

1. 活动主题与任务进展匹配度高

  • 本次参与的几个同学进展较慢,大多数调入了字典的坑,但未到任务期限,仍有可能独立完成。
  • 讨论任务步骤分解和出坑历程为主,具体代码实现过程留给大家自己探索

2. 明确自身目标,扩展思考边界

  • 开始前每人提出一个问题,在思考中发酵。
  • 张诗颖:为什么上手Python要有4小时JAVAscript基础。—— 极简 Python 上手导念
  • 王琛:怎样更有效的阅读Python官方帮助文档?
  • 孙文韬:怎样快速进入python学习的节奏,哪些姿势是最值得学习的?
  • 郭斌:实践中边写代码边记录探索过程扰乱心流,效率较低。高手和专家怎样做的?
  • 俊宇:什么情况下算是入门?怎样才算使命合格的程序员?
  • 自己第一反应提出的问题,恰能更好的反观自己。 其他学员的问题,扩展自己的思考层次与边界。

收获与感想

本次活动中大家坦诚而真实,自我感觉收获很多。组织者俊宇秉承一贯地踏实、细腻,不仅出门迎接每位同学,结束后还开车把大家送到各自方便换乘的地点(妹子先走了,送的是三个汉子~),成了我心目中全方位楷模。

担心的化解(序号与上文对应)

  1. 时间投入很值,理清了思路,绝对比自己摸索效率高的多。
  2. 由于前面提到的亮点1,这个顾虑也可以打消。当然,下次交流前,即使没完成作业最好也将所有相关的步骤和知识点思考过会收获更多。
  3. 相信我,没有作品的绝对不止自己一个人,这里都是战友。

[ 疑问与期待 ] 的新体会(序号与上文对应)

  1. 前期折腾必不可少,扛过去会海阔天空。时间安排每个人不同,其实自己心中已有答案,所谓的效率低是 [认知吝啬鬼] 给自己找的借口,做到 [沉浸+坚持+反馈],脑的本能就会帮助我们自行调整。
  2. 四个字[灵活应对]。回头来看,这是个极为愚蠢的问题。在自己熟悉场景中游刃有余的事情,在陌生场景下就变成了[睁眼瞎]。可能的原因是引入的[新原则]有悖于固有习惯,导致思维陷入局部太深而忽视整体。现在想到的方式是丢弃[小白心态],把自己想象成专家,或者把场景切换到自己擅长的领域,思考应该怎么办。
  3. 先以简单方法完成任务为第一位,回顾时再梳理其他方案。成本最省>空间最省>时间最省,这句话还是要反复思考才能领会啊。
  4. 通过俊宇的分享,发现并非写代码与做记录相互干扰心流,导致效率低。而是自己在代码记录的程中补充了过多个人感悟。减少并行进程,保持专注,自然效率会提高。感悟应当最后复盘总结时集中来写。

其他收获

大多数内容在@俊宇和@张诗颖的活动总结中都提到了,以下是两个我个人觉得可以推荐给大家的小技巧。

  • 用 google 搜索 python 问题的时候,虽然已经用了三个英文关键词,但有时候还是得不到理想的答案,可能的原因是初学阶段还不太能够掌握用哪些关键词更加有效。发现俊宇的方式是用整句的英文去搜索,可能在当前阶段效率更高,可以自行探索一下。
  • 分解任务后,也分解难点。把知识点和任务一起解决易混乱,先把拆分后的最小知识点击破,再处理此步任务。知识点击破三部曲:
  • 盲写,记录自己的错误
  • 看官方文档,自己写代码举例子
  • 在写给自己的教程中总结

第二天 早上的进展

学习上期的前辈提前2小时起床,尝试在卡片上盲写了一个缺胳膊瘸腿的代码片段,发现了很多之前完全没有注意到的问题,改掉基本错误后竟然成功运行了,这还是第一次。虽然只是很小的一段,而且还有各种问题,对自己已经是非常大的突破。最重要的是这种方式仅花费不到半小时,卡片大法好哇!! 附上盲写时,惨不忍睹的图(这是反面教材)

img_0610

交流碰撞火花,还请大伙多怕转,多讨论!


原帖子地址