在《现代讲软件工程》教学过程中,我经常用千帆竞发图来跟踪同学们的进度,激发同学们百舸争流 的竞争精神:
这是 2025 年秋季在北京中关村学院的《现代软件工程》课上的千帆竞发图: https://bbs.zgcai.icu/smart_backend/se2509/

(这是正在进行中的千帆竞发图的界面,开源代码在这里)
我们看各个国家在漫长历史长河中的发展,也是千帆竞发,百舸争流,各种故事成为大家茶余饭后的谈资。稍微系统一点,我们可以从三个角度 船舱,甲板,山巅 观察社会的发展和个人在其中能起的作用。今年的软件工程课马上就要结束了,学生们的项目历经各种风险也有了满意的发布。我们在课堂上用了很多教学方法,我也用这三个角度来总结这些方法的作用和学生的具体收获。
1)船舱中的水手
首先,我们聚焦于‘船舱中的水手’——这是学生扎根项目细节、锤炼工程基本功的阶段。为何重要:学生在具体项目细节中奋斗,体验代码、调试、沟通、交付的真实压力与温度。这是软件工程实践的基础,学生在这里学习将理论知识转化为实际可运行的代码,管理技术细节,并在时间压力下完成交付任务。
教学方法与分析:
-
结对编程的 API 驱动编程方法:学生两人一组,在编写任何实现代码之前,必须首先明确约定模块间的接口规范,包括数据格式、调用方式、错误处理等。这种“契约先行”的方式强制开发者将隐性的业务逻辑转化为显性的技术约定。在实现阶段,无论是人工编写还是借助AI生成代码,都必须严格遵循预先定义的接口。价值:在AI生成代码普及的当下,清晰定义接口契约是防止“人-机-人”协作混乱、确保系统可集成与可维护的关键工程纪律。AI擅长在给定约束下生成实现,而明确的接口正是最高效、最必要的约束。这一方法培养了学生在AI辅助下进行精准需求表达和系统设计的能力。感想:
“结对最值钱的阶段不是两个人一起敲键盘,而是一起把 API、边界条件、测试口径说清楚。”
—— 田钦中
“API驱动与结对编程:这是最能暴露人性的环节。两个人对着同一个文档,理解能差出十万八千里。由于API定义不清晰导致的联调失败,简直是灾难。”
—— 何绍斌
“结对编程迫使我明确接口和职责,更接近真实工程协作环境,对工程沟通能力提升明显。”
--- 彭怀玉
“结对编程中,我和搭档都使用AI辅助。Code Review时,我们发现彼此生成的代码风格高度相似(都用了AI推荐的工厂模式)。这让我们失去了思维碰撞的价值。”
——陈鉴祥(博客链接) -
pq-问答 + 当堂测试方法:在课堂教学过程中,利用 PQ 即时问答app 随机或按计划向学生提问,问题覆盖近期讲授的核心概念、技术要点或项目中的典型难题。学生需在规定时间内独立思考并提交答案,系统实时反馈结果。这种方式将学习效果的检验从课后移至课中,从成本高昂的个人闭卷变为随时可以进行的公开竞技。价值:AI能快速提供答案,但无法替代对概念的深度理解。当堂测试迫使学生在无外部工具辅助下独立验证理解,是抵抗“AI依赖症”、保持工程判断力的必要训练。它确保了基础知识的内化,避免学生成为只会操作AI工具的“空心”工程师。感想:
“当堂测试提供即时反馈,比‘回去自己觉得懂了’更可靠。”
—— 李荣基
“PQ-问答当堂测试 + 软件 UX 的现场测试等:是很棒的策略,和用户的直接交流可以帮助开发者走出‘当局者迷’的困境。”
—— 姜绍彬
“PQ-问答的当堂测试、对软件 UX 的现场测试……把‘好不好用’从主观争论变成现场证据。”
--- 赵晨
“PQ的当堂测试确实能够极大促进课堂的互动。通过pq-问答可以即时了解自身是否理解了课程所授的内容。”
——么琳(博客链接) -
Alpha 阶段后强制团队人员变动方法:在项目完成Alpha版本(MVP)后,课程强制要求部分团队成员在团队间进行交换。原有的项目需要接纳新成员,而新人也要融入新的项目组,接手陌生的代码库。这一过程模拟了真实企业和动荡的创业团队中因人员流动、项目重组带来的交接挑战。价值:AI 无法重建已丢失的项目上下文与设计决策。强制换人让学生在疼痛中深刻体会 “代码只是载体,可能是负资产,可交接的知识(如文档、清晰架构、注释、可以正确运行的测试用例)才是工程资产”这一在AI时代更显珍贵的真理。它强调了工程中“人的协作”与“知识传承”的不可替代性。迫使团队思考,在大家忙碌工作中形成的隐性知识,怎么传承到全体成员?感想:
“当我被迫去接手别人的代码,或者看着别人把我的代码改得面目全非时,我才痛彻心扉地理解了什么是‘可维护性’。”
—— 何绍斌
“Alpha 后强制团队人员变动:这一招太狠了。它逼迫团队显性化知识:文档、交接、可维护性,这非常工程。”
—— 李文宇
“Alpha 后强制团队人员变动:非常真实:工程里人员流动是常态;强迫团队把‘知识’写下来,而不是只存在某个人脑子里。”
--- 赵晨
“Alpha 阶段后强制换人——是这学期最让我痛苦但也最‘真实’的体验。它完美模拟了真实大厂中人员离职、新人接手的场景。”
——姜厚丞(博客链接) -
Pre-mortem(预先尸检)方法:在项目或一个重要迭代开始之前,组织全体团队成员进行一场“逆向思维” --- “假设这个项目在未来失败了,请列出最可能导致失败的3-5个原因。” 团队成员提出第一感,然后集体讨论这些风险的真实性与严重性,并制定具体的缓解措施,在项目启动之初就将风险防控意识嵌入计划。价值:AI加速开发的同时也放大了“试错”的速度与潜在破坏力。Pre-mortem机制迫使团队在编码前,系统性、批判性地思考各种失败场景,是对抗“快速试错”可能带来的鲁莽与资源浪费的理性前置。它引导学生在利用AI效率的同时,不丧失对项目整体风险的控制力。感想:
“我们在Beta阶段采用了Pre-mortem机制,提前识别出数据库迁移可能带来的联调风险。”
—— 陈家驹
“为了赶 Beta 版本的 Deadline,我们不得不写了一些‘临时代码’。我知道这是技术债务,书上也说要还。……用 Pre-mortem + Postmortem 闭环,提前预测失败风险,后期复盘教训。”
—— 李哲鄅
2)甲板的互相观察和比较(三人行)
在课程的大部分时间,学生都要走出自己具体的编码小环境,来到‘甲板’上进行横向观察与比较,在‘三人行’中汲取智慧。为何重要: 三人行,必有我师焉。择其善者而从之,其不善者而改之。 学生跳出自己项目的狭小船舱,走到甲板上,观察并对比其他船只(团队)的航行状态、技术选型、团队协作模式以及遇到的风浪。通过这种横向比较,学生获得相对坐标,吸取他人经验教训,调整自身航向,并在良性的同侪压力与激励中共同前进。一个班级有各种各样的学生,打酱油的也不少,大家及时看到 不善者 在各种软件开发环节中犯下的错误,这就是非常有价值的学习。
教学方法与分析:
-
以公开博客来交作业方法:课程要求所有阶段性作业、项目反思、技术总结等均以个人博客的形式公开发布在互联网上(如博客园、优快云、GitHub Pages,自己的网站等)。这些博客不仅教师会阅读,全班同学乃至校外人员都可以访问、评论。博客内容需要呈现思考过程、决策理由、遇到的问题及解决方案,而不仅仅是最终结果。价值:当AI能轻易生成“看似深刻”的文本时,公开博客迫使学生在同侪的真实经验、挫折与叙事中寻找洞见。它培养了在信息泛滥时代,鉴别、比较、整合与批判性吸收真实工程经验的核心能力。同时,公开写作也是对个人逻辑表达和责任心的锻炼,这些是AI难以替代的。感想:
“公开博客把‘作业’变成‘可被审视的产物’,会自然提高表达的可复用性。”
—— 田钦中
“博客作业与公开处刑:最开始我很抵触,觉得写博客是形式主义。但后来发现,这其实是一种‘思维的强制显性化’,必须把逻辑理顺了才能发出来。”
—— 何绍斌
“千帆竞发图的阶段轴也把‘课程到底在逼你练什么’讲得很直白。它逼着我把过程写出来,起到‘持续复盘’的硬约束。”
——申鹏(博客链接)
“这是我第一次体验这种‘开源社区’式的作业提交。它的最大价值在于打破了信息孤岛。以往作业只有老师看,写得好坏无所谓;现在全网公开,不仅有同伴压力,更有一种‘作品感’。”
——么琳(博客链接)
“博客、Issue、阶段展示这些看似‘额外工作’的东西,在一开始我其实是有些抗拒的。但慢慢地我发现,它们的真正作用不是给老师看,而是逼迫团队成员把隐性的理解显性化。当问题被写出来、被公开之后,就不能再靠‘差不多’来混过去了。”
——闫秉政(博客链接) -
千帆竞发图的进度跟踪方法:教师利用可视化工具(如图表、看板)实时展示全班所有团队的项目进度,通常包括关键里程碑的完成情况、博客提交状态、代码提交活跃度等可量化指标。这张“航海图”每周更新,在课堂上公开呈现,形成清晰、直观的横向对比。价值:在AI工具可能抹平部分个体生产力差异的表象下,千帆图揭示了进度、质量、协作效率、文档完整性等多元维度的真实差异。它激励学生超越“用AI完成功能”的单一目标,关注工程过程的系统性优化与团队协作的有效性,理解在AI时代,“做得快”不如“做得稳”、“做得可持续”。感想:
“千帆竞发图把进度可视化,外界反馈会提前到达,而不是期末才发现落后。”
—— 田钦中
“千帆竞发图于我而言倒是谈不上什么很大的价值,但这作为一种反馈机制确实是很棒的设计。”
—— 姜绍彬
“公开博客作业与千帆竞发图……公开博客使作业不再只是‘交给老师’,而是一次对公共空间的表达。”
--- 冉梦菲 -
学生自行组队并选择项目方法:课程不指定项目题目,也不强制分配团队。学生需根据个人兴趣、技术背景和发展方向,自行寻找队友,并通过集体讨论、市场调研、需求分析,共同确定一个想要在学期中实现的软件项目。这个过程完全自主,模拟了初创团队或公司内部创新项目立项的真实场景。价值:AI降低了实现想法的技术门槛,使得“选择做什么”比“能否做出来”更为关键。自主组队选题训练学生在不确定性中定义真实问题、评估可行性、组建互补团队、管理内部期望与冲突。这正是AI时代产品经理、创业者和工程领导者所需的核心能力——在技术可能性爆炸的背景下,做出明智的价值选择。感想:
“自主选择会显著提高责任感(因为项目失败无法甩锅给题目)。”
—— 田钦中
“学生自行组队并选择项目:方式很好,但若课程侧重软件,某些项目初期就不该被选。……建议可提供一套标准硬件,开放API以实现指定功能。”
—— 王永伟
“项目的一步一步推进,让我们更加理解整个软件工程这门课的核心知识,这些比单纯的记忆理解更强。”
——王亚男(博客链接) -
学生自己评价其它同学的项目方法:在项目展示(如Alpha评审、Beta评审)环节,评价者不仅是老师和助教,全体学生都参与打分和评价。每位学生需要根据统一的评价标准(如创新性、实用性、完成度、技术难度等),对其他团队的项目进行评分和撰写评语。有时还会组织模拟的“投资会议”,让学生扮演投资人角色进行质询。价值:AI能生成酷炫的demo,但难以评估其真实用户价值、市场可行性及团队执行力。互评训练学生像投资者、用户或同行专家一样思考,学会用客观证据(如用户数据、逻辑推演)而非主观感觉(如“看起来酷”)来评判项目。这是对抗AI“虚假繁荣”、培养批判性思维和商业敏锐度的有效训练。感想:
“天使投资评审:这个环节把不管不顾的技术自嗨直接打回原形。它强迫我们从‘Maker(制造者)’视角切换到‘Stakeholder(利益相关者)’视角。技术再强,讲不出商业价值和用户痛点,就是一堆废代码。”
—— 何绍斌
“用‘天使投资’的方法来评选成功的团队项目:我其实是不太认可投票的方式的,因为这种方式的前提是大家真的能够客观做出评价……”
—— 姜绍彬
3)山巅的远眺和对行业、自我职业发展的思考
最后,学生们时不时要登上‘山巅’,以更宏观的视角审视行业趋势、伦理责任与个人职业发展。为何重要:引导学生登上思想的“山巅”,超越当下课程项目的具体细节,以更宏观、更长远的视角审视软件工程学科的本质、AI技术浪潮带来的范式变革、软件工程师的伦理责任,以及个人在技术行业中的职业定位与发展路径 - 在这个国家级的AI学院,我应该打磨什么样的技能?这是从“工匠”到 “架构师” 和 “领军人物”的升华。
教学方法与分析:
-
天使投资评选方法:课程引入模拟的“天使投资”环节,要求每个项目团队不仅展示技术实现,更要像创业公司一样进行“路演”(Pitch)。评审标准严格参照真实投资逻辑,重点考察:需求(Need)是否真实迫切、做法(Approach)是否巧妙可行、好处(Benefit)是否足够显著、竞争(Competitors)是否分析透彻、交付(Delivery)是否证据确凿(即NABCD模型)。评委由有丰富经验的工程师、产品经理老师和学生共同担任,从“是否值得投资”的资本市场视角进行评判。价值:当技术实现成本因AI而趋近于零时,资本与市场关注的焦点彻底转向了可验证的价值创造、清晰的商业模式和可持续的竞争优势。天使投资模拟训练学生在AI生产力过剩的背景下,为他们手中强大的技术方案注入坚实的商业逻辑、用户洞察与市场证据,避免陷入“为了技术而技术”的陷阱。感想:
“天使投资环节把评价从‘技术难不难’拉回到‘产品值不值、风险控不控、证据够不够’。”
—— 田钦中
“它把评价从‘技术难不难’拉回到‘产品值不值、风险控不控、证据够不够’;逼迫团队讲清价值主张、用户与增长假设,而不是只堆功能。”
—— 费俊杰
“天使投资式评选成功团队项目……把‘价值叙事’拉进来:不仅要能做,还要能讲清楚为什么值得做。”
--- 赵晨
“天使投资评选是一个神来之笔。它把评分标准从‘代码写得难不难’变成了‘产品是否有市场价值’。这迫使我们从技术思维转向产品思维。”
——么琳(博客链接) -
用户采访视频 + NPS 打分方法:课程强制要求每个项目团队必须找到至少3-5名真实的目标用户(不能是团队成员或亲友),对他们进行产品使用的采访,并录制视频。在采访中,用户需要现场使用产品完成核心任务,并当场给出NPS(净推荐值)分数,同时说出喜欢和不喜欢的点。这些视频需要公开展示,作为项目价值的核心证据。价值:AI可以模拟用户行为、生成用户反馈,但无法替代真实人类在使用产品时的情感变化、挫折体验和不可预测的行为。公开的、未加修饰的用户反馈与 NPS 分数提供了无法辩驳的、来自系统外部的“现实锚点”。它迫使学生和团队在AI可以构建的无数种“可能性世界”之外,必须牢牢抓住“用户真实世界”的约束与朴素需求,这是产品成功的终极试金石。感想:
“用户采访视频 + NPS 是最震撼的现实检验。”
—— 李哲鄅
“对软件 UX 的现场测试:UX 现场测试把‘用户体验’从口号变成可观察的具体现象(流程、认知阻力、反馈等)。”
—— 田钦中
“UX 测试对 MyMind 的启发非常大:很多‘在我电脑上没问题’的地方,会暴露出真实的可用性缺陷。”
--- 彭怀玉
“课程方法中最震撼的现实检验是用户采访视频 + NPS打分。用户在公开视频中的真实反馈直接戳破团队的想象中的酷炫。”
——李哲鄅(博客链接) -
提出5个问题 → 期末自答 + 新问题方法:在学期初阅读教材《构建之法》后,每位学生必须提出5个自己最困惑或最感兴趣的、关于软件工程本质或实践的问题。在整个学期中,这些问题如同一张“认知地图”,引导学生带着疑问去实践、观察和听课。在期末总结中,学生需要系统地回答这5个问题,并基于一学期的新认知,再提出3-5个新的、更深层次的问题,形成“提问-探索-解答-再提问”的螺旋式上升学习闭环。价值:AI能高效解答已知问题,但无法替代人类发现和定义新问题的能力。这一方法训练学生从被动的知识消费者,转变为主动的问题探索者和知识建构者。它培养了在技术快速更迭的AI时代,保持思维敏锐、敢于质疑、并能够持续重构和升级自身认知框架的“元学习”能力,这是应对高度不确定未来的核心素养。感想:
“学期初那六个问题,现在有的可以回答成‘规则’,有的只能回答成‘下一轮需要什么证据’。”
—— 田钦中
“回头看,第一篇博客里的五个问题,并没有被‘彻底解答’,但它们确实把我带进了一个需要持续提问、持续修正、持续承担责任的工程世界。”
—— 宋尚文
“学期初我提出的问题,现在大多能给出‘可落地的答案’,而不是停留在概念层面。”
--- 张平路
"它没有教我如何把程序写出来,而是让我开始理解如何让软件真正活下来。这可能正是软件工程课程最重要、也最不容易被量化的价值。"
—— 马坚 -
个性化自我总结、量化总结方法:课程提供一份结构化的软件工程师能力自我评价表,包含多个维度(如“AI原生架构与沟通设计”、“智能开发与人机协同”、“工程领导与系统权衡”等),每个维度下分设若干考察点,并定义了从1到5的等级描述。学生在学期初和学期末,分别对照此表进行自我评分。期末总结时,需要详细说明在自认为提升最大的几个维度上,评分的具体变化,并用本学期项目中的具体行为和成果作为证据来支撑这一评价。价值:在AI工具可能模糊个人能力边界、甚至造成“能力幻觉”的时代,系统性的、基于证据的自我评估帮助学生建立清晰、客观的个人能力坐标系。它引导学生识别哪些是AI可以增强的能力(如代码生成),哪些是AI难以替代、需要重点发展的核心能力(如系统权衡、架构设计、工程领导力、伦理判断)。从而,学生能在“人机协同”的未来职业图谱中,更精准地定位和规划自己的独特价值与成长路径。感想:
“我选三项变化最明显的:第二维(AI原生架构)从2到3,第五维(智能开发)从2到3,第六维(工程领导)从12到23。”
—— 田钦中
“对照能力维度表,我觉得自己在课前/课后变化最剧烈的三个方面是:第五维:智能开发与人机协同……第三维:云原生与约束工程化……第二维:AI原生架构与沟通设计……”
—— 何绍斌
“基于‘软件工程师能力自我评价表’的快速自评:我提升最大的部分……需求澄清与范围控制(提升最大)。”
--- 赵晨
“根据《软件工程师能力自我评价表》,我快速评估提升最大的两个维度:AI原生架构与沟通设计从2分到4分,工程领导与系统权衡从1分到3分。”
——陈鉴祥(博客链接)
AI 的总结
《现代软件工程》课程通过船舱训练夯实工程基本功,通过甲板比较激发集体智慧与竞争意识,通过山巅远眺引导学生思考行业本质与个人成长。这三种视角贯穿始终,共同构建了一个从“写代码”到“交付价值”、从“个人奋斗”到“系统思考”的完整成长路径,尤其在AI时代,为学生提供了超越工具使用的深层工程素养与职业发展视野。
既然你看到了这里
这是几年前的千帆竞发图的一个例子,有些同学因为不按时交作业,获得负分,他们的学习小帆船沉到了水平面下。

被折叠的 条评论
为什么被折叠?



