我需要做的事情
阅读纯英文的课程材料: 材料范围包括但不限于课堂幻灯片和实验讲义,通常认真完整地阅读完并理解这两份材料就已经能解决绝大部分作业问题了
独立自主地调试自己的代码: 通过“运行自己的代码并查看行为是否同预期相符”的方式,独立自主地发现并解决自己代码中存在的问题
得体的提问与求助: 提问前已经尽了自己的最大努力,提问时提供关于自己问题的完整上下文,提问后吸取经验下一次遇到类似问题可以独立解决
约 3636 字大约 12 分钟
庚子孟秋入南雍,五阅寒暑,五易星霜,回首风起处,青萍之末,一门劳碌课,一个问津人。——Jacy
“做中国最好的本科教育”,我在 NJUCS 修过很多收获颇丰的课程,但如果说有一门课,能够让我在回忆之时产生心有悸动的美好感受,那就属这门 SICP 了 —— 第一门编程课,永远的白月光。
讲课优秀的老师,简约大气的幻灯片,认真负责的助教,积极活跃的课程群,丰富得宜的实验作业,很酷很有趣的课程项目 ... 这门课满足了当时的我 —— 一只正常完成初等教育的 CS 小白 —— 对于一门优质的 CS 课程的所有想象,带来了非常美好的课程体验:
知识获得感: 作为一门新生入学的编程基础课, SICP 围绕如何 管理复杂性(Manage Complexity) 这一核心问题,聚焦计算机学科管理复杂性的核心思维 —— 抽象(Abstraction) ,讲解了非常丰富多样的 编程范式(Programming Paradigm) 。 它对于知识密度、知识深度以及配套作业的恰到好处地安排能够让我在修习过程中一直保持着一种接触新知识并及时理解巩固的状态 —— 既不会让我觉得一直粘滞在同一个知识点上从而感到无聊,也不会让我觉得这一个知识点还没理解就不得不急急忙忙开启下一个知识点从而感到无力 —— 这种像海绵一样吮吸知识的感觉其实还挺爽的。 当然,这只是我个人当年的体感,对于当时还是个 CS 小白的我,能够产生这样的体感是以充分的时间和精力投入为前提的,引用一下冯新宇老师幻灯片上的描述:
This is a challenging course that will demand a lot from you.
克难成就感: WA ... WA ... WA ... AC ! 这是我当年被 SICP 作业痛击的常态,但被作业痛击之后成功通过评测的时候还是很有成就感的,且相比结果带来的成就感,更让我满足的是过程中看到自己进步所带来的成就感。 具体地,在反攻作业的克难路上:
我需要做的事情
阅读纯英文的课程材料: 材料范围包括但不限于课堂幻灯片和实验讲义,通常认真完整地阅读完并理解这两份材料就已经能解决绝大部分作业问题了
独立自主地调试自己的代码: 通过“运行自己的代码并查看行为是否同预期相符”的方式,独立自主地发现并解决自己代码中存在的问题
得体的提问与求助: 提问前已经尽了自己的最大努力,提问时提供关于自己问题的完整上下文,提问后吸取经验下一次遇到类似问题可以独立解决
我收获的能力
CS 专业文本阅读能力: 积累 CS 英文词汇和表达方式,应对 CS 专业绝大多数原生文本和新生文本都是英文书写的现实,为自学能力的养成打下基础
基本的代码调试能力: 积累基本的代码调试手段,熟悉 CS 专业中常态化的反复代码调试的过程,为未来更进一步应对复杂软件工程做准备
与 CS 人有效沟通的能力: 让别人舒服的提问能够得到更加及时有效的回复,降低沟通成本,帮助解决问题,同时给别人留下好的印象
我不断地做左边的事情,可以肉眼可见地感受到自己右边的能力提升 —— 阅读英文专业材料的痛感越来越低;代码调试的越来越有信心,越来越得心应手;和助教或者其他同学的专业沟通越来越顺畅 —— 这是完成作业的过程带给我的最大的收获。
互助归属感: SICP 给我留下的另一个深刻印象是课程群的互助氛围很好,助教、偷溜进来的往届学长姐、有基础的懂哥、没有基础但学懂了的大白、没有基础也没有学懂的小白都会积极地水群参与讨论,虽然助教哥哥常常提醒提问的智慧,虽然懂哥常常说些让大白小白不明觉厉的东西,虽然大白觉得自己懂了但常常说出来的话不一定对,虽然小白大多会害羞而选择潜水。 这里我想要给和当时的我一样的小白们分享一些我当时的心态:
虽然“一学就会”和“无师自通”的大佬确实挺让人有压力的,但我觉得我只要能做到“学而时习之而后懂”就已经很好了,且从我本科后续的学习经历来看,这样的状态完全足以让我成为十分优秀的计科学生。
积极寻求帮助,不要害怕提问,但要学会换位思考 —— 在寻求帮助的时候要为提供帮助的人着想(在寻求帮助之前我应当已经尽己所能,别人没有帮助我的义务,每一只援手都是出于善意,尽己所能的我才更加值得这份善意),在提出问题的时候需要为解答问题的人着想(提问时提供完整的上下文,这样可以方便解答问题的人来理解我的疑问,给解答者也提供更好的答疑的体验)。
大二大三熟悉了编程之后再回头看 SICP 的内容,其实就会觉得很基础了,毕竟这只是一门编程基础课。 对于当时的我来说它当然给我带来了新鲜可口的知识,但可能在现在的我看来,它更深远影响在于点燃了我对于 CS 的“心火”。 所谓“心火”其实说白了就是想要好好学这个专业的热情和感觉自己可以学好这个专业的信念。
我是怎样点燃心火的? 对我来说,对某个专业点燃心火的要素有两个:兴趣和正反馈。
兴趣: 很多时候我们不是因为爱所以选择,而是先选择了,然后逐渐了解了,最后再爱上了。 说实话,当时作为小白,选择 CS 之前我其实并不了解这个专业,纯粹只是本着不亏高考分数的心态选的专业而已。 那么我对于这个专业的想象以及兴趣很大程度上取决我我的第一门专业课给我带来的体验,所以我很庆幸我的第一门专业课是 SICP ,它给我的体验在前面已经备述了。 有了兴趣打底色,在做很多事情的时候才会有热情,有利益之外的源动力。
正反馈: 专业/事业和爱好是不太一样的。 比如说,对于某种爱好,我完全可以“又菜又爱玩”,这是我的自由。 但是,对于专业或者事业,“又菜又爱玩”可能就不是一个健康的能够让我走得比较远的心态。 这个时候有一定的正反馈是很重要的,它可以帮我排除那种最坏的可能性——“我其实真的不太适合这个专业”。 这里的正反馈和前面聊过的成就感类似,是一种对于自我的增量比较,而非和他人的横向比较。 “正反馈”的感受其实和课程的攀登曲线有关的:如果曲线过于平缓(其实就是太“水”了),那么即使完成了课程任务我也不会有那种自己能力进步了的感觉;如果曲线过于陡峭,那么很可能课程任务本身完成的就会比较糟糕,从而让我的信心备受打击。 一个好的“正反馈”体验,也恰如我在学习 SICP 过程中感受到的,应该是觉得有困难之处,但同时这些困难又能够通过自己的努力解决,在一次次的“解决”过程中,“问题总能解决的”这种信念才会被建立起来。
心火是怎样点燃我的? 这个其实很好理解,产生了兴趣,也得到过正反馈,自然就会有热情去探索未知的技术,有信念去解决遇到的问题。 听起来好像蛮虚的,但这本质上就是一种奇妙的感觉而已,我相信只要你点燃了心火,就一定会在某时某刻,比如在遇到某个困难需要你用青春的汗水去对抗的时候,体验到这种奇妙的被点燃的感觉,并不需要我过多空洞的言语描绘。
缘分就是这么奇妙,当时的课程老师成了现在的导师,当时的课程助教成了现在的师兄,当时的课程群友成了现在的同侪,现在的我也成了课程助教,现在的同学当中或许也有我未来的师弟师妹。
广告
这里插播一条广告,欢迎各位“已经有学科基础 ”的同学报名来我们 PASCAL 组科研。
“SICP 这门课去年第一次开,以前没有。听说有难度,如果你以前没有任何编程基础,不建议选,隔壁的程序设计基础会更容易一些。” 这是我们这一届选课前普遍从学长姐那里得到的中肯的反馈。
不过当时的我怀着“来都来了,不挑战一下难的岂不是亏了”的心态选择了直接冲;现在从过来人的角度来看,这就是一门“给大一新生的编程基础课”,没有那么可怕。 SICP 的课程节奏确实会比隔壁程设基础更快,知识点密度也确实会更高,但还不至于脱离它“给大一新生的编程基础课”这样的基本定位。 如果你目前还是满怀着憧憬与追求的,是一个乐于挑战自我的年轻人,请大胆冲!实在不行也有金蝉脱壳的姿势可以选择,哈哈...
我一直觉得“人永远比事重要”,如果为了做好一件事情,最后搞得整个人都不好了,那么就是时候停下脚步思考一下:这件事情是否真的值自己得做、是否真的适合自己来做了。 如果我思考的答案是这件事情真的不值得我做,也真的不适合我做,那么这个时候我会告诉自己,战略转移也是一个明智的选择。
但如果我思考的结果是:即使现状焦灼,我心里依旧觉得这件事情值得我做,我还是能想办法让自己变得更适合做这件事情的,毕竟并不是每个人都天生就适合做所有自己想做的事情。 那么我觉得这个时候的坚持会是一件很帅的事情,无论结果如何,我已经坚持不懈且竭尽所能了,这就是一种胜利,至少比半途而退强多了。
说实话,与很多未来会经历的更加无奈的坎坷相比, SICP 这一门课实在算不上什么需要打退堂鼓的困难,如果你依旧在认真对待这门课,那么真心的我鼓励你坚持到最后,所有的问题总是能有解决方案的;但如果你已经开始敷衍这门课了,比如说以一些偷奸耍滑的手段完成课程任务,那么我觉得其实退课会更好,并不会让你亏什么。
这本生存手册一方面是我自己想要给大家多分享一些能够帮助大家更好的完成 SICP 课程的无论是实践层面做事情的还是知识层面理解概念的经验,另一方面是想要提供一个开源的平台让其他和我有类似想法的 SICP 人一起做这件事情,建立某种美好的传承。
剩下一点篇幅对这本生存手册做一些导读吧,我目前的设计了三个板块:如何用正确的工具做正确的事情、如何用得体的方式提出明智的问题、如何帮助更多的人。
TODO
TODO
TODO