尘埃落下,我抓住透明的阳光,温暖留在掌心
带着2020年线上教学的“不过瘾”甚至些许的“落寞”,怀着对线下教学的期待,迎来了2021年的面向对象学期,现在回想起来,当时心中竟然带着一些恰似初次走上讲台时的激动。我知道,我的“舞台”回来了。
说起来,课程从2013年启动改革开始,历经7年。虽然遇到了不少问题,但还是做到了“初心不改”和坚持不懈。回首看来,尘埃基本落下,温暖的阳光把空气洗刷透明,眼睛似乎可以看的更远,而内心收获更多的是温暖。按照惯例,课程结束时同学们需要完成一篇总结博客(一学期下来总共四篇博客),为了避免“无事可谈”或“乱弹”,我们为每次博客都设置了明确的大纲。今年读罢同学们的总结博客,有颇多欣慰。很高兴看到大部分同学通过一个学期的紧张学习确实“悟”到了架构设计的思维,也领会了面向对象的精髓。
课程之所以能够取得现在的效果,离不开助教们的智慧和辛勤付出。OO课的助教可能和其他课程的助教是有很大的不同,简单总结起来,有如下三点:
(1) OO课助教需要站在教育者的层次来思考一门课程的实践环节该如何设计和优化。我们总是强调,一门课程在设计上的真正挑战是搞清楚“对象”是谁,不是那些top-10%的同学,而是那些排在中游,甚至是靠后的同学。
(2) OO课助教需要一套方法学来设计项目内容、测试数据和协同工作模式。决心和辛勤工作固然重要,但如果缺乏方法,助教团队就很容易变成“四肢发达、头脑简单”的机器。方法学说起来抽象,但对于OO助教却很具体,涉及到如何设计项目内容和写指导书、如何设计测试数据、如何分析项目完成效果、如何把项目作业、实验、研讨等各部分工作有效协调和衔接起来等。
(3) OO课助教的传承机制内在诠释了什么叫“面向对象”。每一年课程一结束就选拔出下一届助教,并且立刻开始工作(是的,我们是一年工作制)。上一届助教会有几位工作出色、方法得当、感悟深厚的同学被“留级”担任高阶助教,把之前的工作方法和经验传给下一届助教,同时下一届助教需要找到自己的坐标和方向,并在课程的发展历程中致力于涂绘出独有的色彩。所以,既有继承,也有发展。
2021年做了一件本应该早就做的事情,把课程从2014年开始的历任助教“找回来”,并借此机会重新梳理了课程发展历程和助教们的贡献,温暖满满,感悟良多。我必须要说,我们的助教同学是这么的优秀,在大学二年级阶段,就能够有这样的智慧和行动力,把如此复杂的课程设计一步步变为现实,而且不断优化。
教学改革是个永恒主题。OO课的教学改革具有两个突出的特点,可以用八个字来概括:坚持笃信,灵活实施。我们笃信好的软件一定出自于高于一般水准的认知和控制能力,即要能够认识到架构的作用,并能控制好架构;我们笃信好的软件一定出自于万千锤炼之手,即所有的设计思想,如果不能落地实施出来,大多会沦为空谈资本,不值一提;我们笃信好的软件一定出自于一以贯之的工作习惯,即如果没有习惯性的质量控制意识和测试能力,没人能够确保有好的质量。所以归结起来,OO课程笃信三条:架构设计思维是面向对象的核心,必须通过一次次的迭代构造来锤炼架构设计能力,测试自始至终必须严格要求。在课程具体实施方面,我们注意到同学们的认知水平和实践动手能力差异,所以安排有引导性的在线实验,寒假pre练习,平时的小训练,研讨课分享经验;我们注意到同学们需要一个过程才能逐渐写出好程序,因此采用台阶式的测试来引导,弱测和中测采取反馈的方式,及时告知同学们自己程序还存在的“显而可见”的bug。强测提高难度来对照需求进行验收,既有基础性的测试用例,也有复杂场景考虑。互测用来激励同学们去发现别人程序的问题(“挥霍过剩的荷尔蒙”)。修复回归测试则严格按照工业界标准来检查同学们是否成功的修复了测试所发现的bug。课程之所以能够做到灵活实施,关键是我们的助教团队总是能够非常敏锐的捕捉到同学们遇到的困难和识别其中的真正问题(也能及时“回怼”那些看起来似乎正义但实则鼓噪的意见),这确保整个课程团队可以保持好自己的航向,并集中精力解决问题。
反思是一把无形的利剑。课程在秋季学期的工作以反思和设计为主,而在春季学期(授课学期)的工作以实施和追踪为主。我们要求老师和助教一起反思,力争抛掉一切“自以为是”、“自欺欺人”和“自怨自艾”的情绪,反思是我们的武器。我的理解,这是三种常见的教学情绪。“自以为是”的教学情绪往往伴随着对教学设计的蜜汁自信,实质上往往缺乏科学的追踪研究和对比调查,不了解学生这个核心“受众对象”的真正感受,自high主导着教学设计。不得不说,OO课程团队或多或少也存在这样的情绪,我们必须要非常小心。“自欺欺人”则是另一种情绪,更具有欺骗性,以为自己了解真实情况,但实际仅仅看到了一些片面反馈,常常选择性的过滤教学效果和过程数据来佐证课程的成功,殊不知“欺”自己也许可以,但“欺”他人就没那么容易了,这是当我听到我们的同学评论某门课程时用到“那还能算作一门课吗”这样的表达时所真切感受的道理。“自怨自艾”是一种疗伤情绪,“早知道,当时…”是经典的口头禅,这样的情绪不仅不能疗伤,实际上会深度“创伤”,甚至“撕裂”尚未愈合的伤口。团结和鼓励是OO课程团队的一个重要文化特征,不论是老师,还是助教,虽然我们在讨论问题时严格要求,但建设性却是主旨,尤为欣慰。每一届助教工作的起点是反思,结合自身体验的反思是一种医者思维,找教学中的问题不难,难的是我们能改变什么。
多年的OO课教学让我形成了一个习惯性思考模式,即关注于同学们到底收获了什么,而不是我们教了什么。正如研讨课上有同学很深刻的指出,OO课的理论课越来越像“哲学课”,而OO课的作业训练越来越像“实验课”。我真的不认为这个差别有什么问题,甚至于我认为同学们get到了我们的设计考虑。哲学课关注的是思想、思考方式和表达方式,而实验课关注的是在具体对象上的思考和表达实践。我们可以看到同学们提交作业的具体代码以及测试通过情况,但这些只是反映同学们做了什么,并不能反映同学们收获了什么。我以为收获一定是一个“压缩”和“精炼”的过程,把所做事情中的重复要素压缩掉,从中精炼出核心内容,形成内心所感受到的激励和自信。那么OO课在乎同学们收获什么?就是我们的三个笃信!我们关注同学们是否和何时“看到”了软件架构及其设计思维,我们关注同学们是否和何时“听到”自己内心在写代码时的歌唱,我们关注同学们是否和何时“尝到”课程所讲授知识点发挥作用的甜头。
我们被戏剧性的安排在了过去和未来之间,都是一枚不足道的小小游标,片刻不得停留滑向远方。若干个不服输的游标聚在一起,真的就可能拉起了五线谱的水平线,于是为美丽音符留下了自由的舞蹈空间,这就是OO课的全部。老师和助教为同学们拉起了水平线和休止符,同学们各自演奏着自己的乐章,或抒情,或澎湃,或艰涩难懂,或直抒胸臆,都是他们自己的乐章,是岁月赋予他们的才华。OO所期望的是,他们能够在演奏中听到自己的内心,找到自己的方向,如果再能够去感召别人,实乃大幸也。