CodeLab实习记

YO!我是虹穆,国内高校(华农)计算机专业大四学生一名,刚刚结束为期两个月的 CodeLab 实习。趁热打铁,写写在 CodeLab 为期两个月的实习。

这段实习经历更像是一场热恋,是因为呆在 CodeLab,会不停地接触和产生新想法,每次与新想法遇见的过程,就像置身初恋之中的每一次相见,都会让心疯狂地乱跳,是那么的惊喜,令人狂热又神往,而每临分别之际,又总是热烈迫切地期待下一次的相遇。

在这篇实习记中,主要记录的是在 CodeLab 中实习的感受,也会列出在此过程中收获的一些问题以及看待事物的不同视角,即便有了不同以往的视角看待原有的问题(如什么是计算机和编程?),也没有一个确切的答案,反而带来更多的问号“????”。

相遇


关注@种瓜的博客某行人好一段时间,最初觉得博客里谈论到的事情很有趣,有的关于哲学,谈论柏拉图,波谱尔等哲学家,有的关于编程技术,然后顺藤摸瓜了解到 CodeLab。在阅读 关于 CodeLab (旧版)加入我们(CodeLab) 后不明觉厉,同时又很兴奋,因为里面提及了许多我以往不曾了解过的内容,比如

  • STEM
  • 建构主义
  • CodeLab Adapter
  • 万物可编程
  • ......

然后再看到一些演示视频,比如画一只会跑的独角兽手势窗帘玄乎其玄。直接的感受是,“这家组织在做的事情很酷耶”,加上关于 CodeLab (旧版)加入我们(CodeLab)里所提及

开放、中立、分享、协作,这些是我们的核心诉求,我们希望更多的志愿者、学习者、创造者能加入其中。

我被这些抽象的词汇和迷幻的项目效果给迷住了,心中泛起了一阵波澜:

这个组织好厉害!如果在里面实习,是做机器学习或深度学习训练各种模型然后实现手势窗帘的效果吗?还是为各种奇怪的硬件编写互联的程序?我想去这里实习。

计算机专业体验


经历了三年的本科计算机专业教育,深藏已久的困惑不断浮现:

  • 为什么计算机专业的氛围是谁能拿到大厂的 offer,谁就被奉为大神?(比如腾讯,阿里之类计算机大厂)
  • 为什么在计算机专业里,编写的代码更多,掌握更多高效率算法的学生就是值得推崇的学习榜样?
  • 为什么 NLP(自然语言处理)里面除了高分的模型还是高分的模型?绞尽脑汁地提高模型预测或分类的准确率?还有其他吗?
  • 为什么学习计算机的意义在于找到一份比其他专业高薪的工作?
  • ......

我极力想弄明白上述的问题,可是好像我接触到的计算机领域都没有讨论这些问题呀。他们在讨论的好像除了技术还是技术:

  • 教程公众号如是说:别再盲目学 Python 了,报我的课吧 baokepython 引用图片来源:别再盲目学 Python 了
  • NLP 实验室老师如是说:如果你以后要从事“人工智能”方向,李航的《统计学习方法》里面的模型公式都是必须会用手推导的,这些是 NLP 的基础。
  • 实验室同学如是说:这几篇论文很经典,你看完再和我一起打比赛吧...

他们并没有告诉我计算机除了技术还有什么,除了赚钱还有什么。

在这样的计算机专业学习环境中,我的一个感受愈发强烈,学生仿佛只是向计算机输入算法的机器,学生需要做的是掌握更多高效的程序设计算法,去迎合计算机的特性,更高效地解决某些问题。在这样的视角下,人与计算机的关系好像有些奇怪,但我还不明白具体奇怪在哪里?

带着种种疑问,我决定进入 CodeLab 探索一番。第一天提交了实习申请,第二天就去面试了,和大家聊了一会,大家觉得合适,我直接就留下工作了。哇卡卡~

你好!CodeLab


在这里实习,没有上级给我分配任务,我根据自己的兴趣去做一些自己想完成的东西。而我对此的理解是,用我愿意的方式对这个组织做贡献,并不是说我想做什么就做什么,而是我具有一定的主动权,在宽松的环境下去探索哪些工作对于组织更有价值。

讨论的氛围

这里没有员工等级的区分,加上我一共只有五个人。这更像是一个讨论小组,CodeLab 的工作氛围很开放,当有小伙伴有东西想分享的时候,就直接可以和大家讨论。基本上是一边工作,一边讨论的状态。

正如前面提到 CodeLab 的核心诉求:开放,中立,分享,协作。开放的办公空间,小伙伴们围坐在一起办公,是讨论想法的天然环境。第一天上班,就开启了关于 CodeLab 宣传面向群体的白板讨论。没有小伙伴告诉我应该怎么参与,于是我处于观望状态,并且中途问了些问题,没想到的是,这里讨论的氛围真的很开放,不管你是谁,只要你有想说的,大家都会听你讲,并提出自己的看法。

在这里,没有很强烈的观点的拥护,即类似 vim 或 emacs 两派的圣战时的争执,或强迫一方去接收另一方的观点。讨论都是以一种颇为平和的方式进行,当然有时会出现互相争着表达观点的情况,我们热衷于分享和表达我们的观点。类似如下:

  • 提出自己的观点
  • 给出理由
  • 如果其他小伙伴有其他意见,则提出自己的观点,或问题
  • 给出理由
  • ......

观点和问题在每个人的大脑中来回穿梭,讨论氛围接近于一种理性的思辩,讨论的大多数是开放性问题,没有一个标准或统一的答案。

每次讨论结束,除了具体问题有明确的结论外,比如讨论工作目标或方向会得出一些明确的阶段性目标,讨论的结果得到更多引人深思的问题,比如:

  • 什么是编程?
  • 什么是计算机科学?
  • 什么是兴趣?
  • 在计算机和人交互的过程中,谁应该是主体?
  • 在面向对象编程范式中,对象们抽象的粒度大小应该是多少?
    • 在 Smalltalk 中,除了对象,更重要的是消息,为什么?
  • 好的教育应该具备些什么?
  • ......

在这样的环境中工作,噢!不应该说是工作了,更多的是学习,学习的不是既有的结论或编程练习题的答案,更像是对不确定性未知的探索。而探索前提是我们得诚恳地承认我们不知道的事物。

参与这些讨论,需要对自己的真诚,以及敢于怀疑权威的勇气,在我看来最大的权威是我们自己本身,源于那些不经检验就被认为是正确的知识,我们常常默认自己知道的概念或者问题,但如果以审慎的态度去问问自己,发现自己原来根本没有思考过这些概念和问题的答案到底是什么。(这里涉及一些心理学研究,比如人们形成信念方式,考虑篇幅就不扩展啦)

比如在之前,我会将 编程在代码编辑器中敲代码 之间划上等号。或者说根本没有思考过“编程是什么”这个问题。CodeLab 乐于探索以及真诚面对未知的氛围为 从不同的视角看待原有事物和问题 提供了可能。

多视角看待事物很重要

在我看来,知识可以分为三部分:

  • 知道自己知道
  • 知道自己不知道
  • 不知道自己不知道

在这里我收获得更多的是自己不知道自己不知道的知识,我很成功的把他们变成我知道自己不知道的知识了。

在苏格拉底洞穴的隐喻中,一群终生居住在洞穴戴着撩拷只能面对墙的囚犯,只能看见洞穴外面投射在墙上的影子,对于他们来说,墙上的影子就是他们的世界了,他们能从洞穴中感知洞穴外的世界吗?墙上的影子就是他们所看见的全部了。

这个隐喻有很多延伸的讨论,在这里我想以此说明,看待事物(这里指的是 matter)的视角很可能决定了我们对事物的感知丰富程度,也就是说尽可能全面地认识事物。就比如在本科计算机的教育中,我所接触到看待计算机和编程的视角是较为局限。

  • 计算机=解决问题的工具
  • 编程=敲代码

需要澄清的是,我并不认为以上看待计算机和编程的视角不重要,每个不同的视角都有其独特的价值,我想表达的是,在单一视角下看待一个事物,往往会忽略该事物更多的可能性,而以多种视角看待事物是尽可能发掘事物潜力的前提,以及看到事物本身更多的可能性。

所以换一个视角看待上述的三个事物:

  • 计算机 可以是 创造和表达想法的工具
  • 编程 可以是 输入想法的心智过程

如果只在前者的视角下看待计算机,程序员往往很容易忙于学习各种高效的算法和技术框架去完成委派的任务,这容易陷入到以技术为主的被动境地,这时候,在人与计算机交互的过程中,计算机更像是主体,而人更像是输入算法完成任务的工具。

我在学习 C 语言课程的时候,我就不认为完成打印 Helloworld 的实验是多么有趣的一件事情。因为这是被指派的特定任务,这个实验也没有告诉我完成它可以获得些什么。我很难在其中找到乐趣,或有继续探索的欲望。

而在后者的视角中,我会认为我具有充分的主动权去让计算机表达我所想要表达的东西,比如我只想打印个 Hello 不可以吗?(哈哈哈),在这种情况下计算机是一种帮助我表达想法的工具。相比前者,在该视角下看待计算机我拥有了更多自主表达的空间,我会更具有对计算机领域探索的好奇和热情,我看到了更多的可能性。

计算机历史的视角

在 CodeLab 日常的讨论中,会经常出现计算机科学家的名字:

比如:

通过 CodeLab 对他们的讨论,我获得了一个 计算机科学历史和科学哲学的视角 去看待现在的编程和计算机。这方面的讨论我就不继续展开了,因为@David(前实习生)所写的CodeLab 冒险记(一) (强烈推荐~)清晰地讨论了:

  • 看待自然科学的视角
    • 事实?还是用有可能错误的模型去逼近事实?
  • 什么是科学精神?
  • 计算机科学史
  • ......

在计算机历史的视角下有一个问题很值得思考:

随着时间的增长,所有事物都是向前发展的吗?

Dynamicland的创始人Bret Victor 在演讲The Future of Programming - bert victor中就讲述了编程发展的历史。

在 Bret 看来,编程模型并没有随着时间增长而向前发展的。我们当今主流的编程方式还是处于 70 年代字符输入的方式,在这个角度看计算机编程的方式的确停滞不前的。为什么?

@David 在 CodeLab 冒险记中提到可能是商业推动的原因。但对于我来说这仍然是一个有待探索的问题。

当我去了解看看过去的计算机科学家做过的努力后,我以不同的视角去看待计算机和编程,重新去审慎计算机的意义。这也让我认识到,从历史的角度去看待事物的发展是不可或缺的,我们需要站在的是真正巨人的肩膀上越走越远。

我们需要的,是更多想法的可能性,而不仅仅是一些确定性的技术工具(指各种编程框架等技术性工具)。

另外,从历史出发对于培养创造力有很大的启发,创造一样事物,从原有少数的视角出发是远远不够的,就像 Mindstorms 书中所提到你永远无法通过研究马车去制造出汽车,因为这是两个完全不同的东西。

创造恰恰需要我们看到更多可能性,知道哪些是相比于原有现状更多的可能性。而从事物发展的历史出发,我们会了解到许多有意思的视角,历史的视角就像一个不同的万花筒,从中我们可以看到更多的可能性,进而促进我们做出一些变革性的创造。

结语


回看文章开头的问题,有很多问题我还是没有明确的答案,很意外的是,在计算机编程技术上,并没有向我一开始想象的那样,掌握更多的算法,或是项目的经验,而是收获了更多的问题,对于我来说这些问题就是可能性,扩宽我在计算机世界中认知的边界,不仅仅是计算机领域,还有对生活,对人生的可能性。

如果要为这次实习经历打个分的话,满分 100 分。我给 10000 分。哈哈哈哈,纯属个人感受,别给我成功渲染起你想去 CodeLab 实习的情绪。冷静啊,年轻人!话说现在 CodeLab 挺挤的,去了不一定有位置坐。偷偷告诉你们,CodeLab 准备搬去未来社了,那个又大又漂亮的新家。

调皮了一下,回到正题。

非常庆幸能够与 CodeLab 的宝藏们相遇,展开了不可思议的一段短暂心智旅程。非常感谢 CodeLab 的小伙伴们 @种瓜,@liuqing,@yubing,@pansheng,@David。你们就是我一直以来期待已久的同伴,缓解那心中积压许久,对想法表达的渴望,(时不时容易进入认真分享想法的状态,难免激动喷点口水啥的,请多多包涵,哈哈哈哈~),在你们的帮助下,我看到了更多的可能性!

由于时间有限,其实我还藏了许多想表达,但没能表达的想法(不是我小气啊),比如讲讲

  • Neverland 自由创作表达的环境呀
  • CodeLab Adapter 呀
  • 实习工作的部分:用心流的状态写 Adapter 文档的经历呀
  • ......

只能有缘再会啦。这篇文章大多数内容纯属个人的经历感受和价值判断,仅供参考。如果这篇文章对你有丝毫的启发或者有不同的观点想要分享,非常欢迎找我讨论啊。不用担心我女朋友吃醋,单身可撩。哈哈哈哈~


没有给出链接的引用在此给出参考:

  • “马车不是汽车”出处:Mindstorms 因计算机而强大 --作者:西摩.佩伯特--译者:梁栋--出版社:新星出版社[p62]