SYSTEM UPGRADE

Hello, World!

大学四年,我的成长系统升级计划

[student@university ~]$ ./my_growth_plan --start

✓ 已安装:好奇心、学习机会、正在积累的程序设计能力

→ 待持续升级:学习方法、合作交流、独立判断与创造表达

一起聊聊大学四年可以怎样逐步升级

进入大学后,你的学习方式有什么变化?

⚙️ 正在建立的能力

  • 学程序设计:把一个想法分解成可执行的步骤;
  • 学数学与专业基础:从公式、模型中理解规律;
  • 做练习与小项目:发现“听懂了”和“能独立做出来”还有距离。

🔎 值得留意的学习习惯

  • 遇到问题:是否知道怎样寻求帮助、与同学讨论?
  • 使用 AI:是否会先想一想、再核验得到的答案?
  • 课余探索:有没有给自己留一点时间了解课堂以外的技术与生活?

大学四年值得升级的“五种能力”

1. 沟通与协作 (Network)

遇到问题能说清楚,与老师、同学交换思路,在合作中学会倾听。

2. 独立思考 (CPU)

不急于接受现成答案,能够解释原因,并通过证据检查结论。

3. 拓展视野 (WAN)

认识课堂以外的开源项目、研究方向与真实社会问题。

4. 保持好奇 (Sensor)

在分数之外,保留提问题、做实验、探索不同可能的兴趣。

5. 记录与表达 (I/O)

用笔记、博客、项目仓库或作品展示,留下自己的学习过程。

🎯 四年后的期待

有扎实的专业基础,也能与人合作、独立判断,并找到感兴趣的发展方向。

从基础能力到自主成长

01 导入 02 学习与沟通 03 四年发展拓扑 04 AI与独立思考 05 算力与个人基站 06 编译人生

模块 1 学习与沟通

通过 C 语言打好程序设计基础;练习把问题说清楚、把合作做扎实。

⚡ 互动 1:怎样提出一个有效的问题?

模块 2 四年成长与知识地图

了解课程知识如何连接项目实践、跨学科探索与毕业去向。

⚡ 互动 2:一个循环判断题

模块 3 AI 与判断力

学会提问、验证、记录使用过程,保留自己的思考与责任。

⚡ 互动 3:给一段 AI 代码做测试

模块 4 注意力与个人作品

理解推荐算法与自己的选择;试着把学习成果变成可分享的作品。

⚡ 互动 4:为推荐程序增加用户友好的规则

PART 01

从 C 语言开始,建立程序设计的基本能力

🎯 学完 C 语言,希望具备什么能力?

  • 表达问题:用数据、条件、循环表达解决思路;
  • 组织程序:逐步掌握函数、数组、指针、结构体及文件操作;
  • 检验结果:能够独立编写、调试和测试一个有实际用途的小程序。

🧠 为什么从 C 语言入手?

  • 观察程序如何运行:理解变量、数据表示和内存的基本关系;
  • 建立逻辑习惯:练习分解问题、处理边界、跟踪程序状态;
  • 为后续学习打底:学习新语言时,可以迁移算法、调试和问题分析方法。

编程能力是怎样慢慢练出来的?

只看例题,容易出现的情况

看讲解时感觉理解了,换一组输入或稍改题目,就不知道下一步怎么写。

关键差别:理解一个例子,不等于能够独立解决新问题。

写一写、测一测、改一改

通过变量状态追踪、循环边界判断、错误定位反复练习,逐步建立对程序行为的直觉。

建议:把练习分散到每周,短时间但持续动手,并复盘错误。

💡 一个类比:学编程有点像学乐器:看懂示范很有帮助,但手上真正练过、遇到错误后调整,才会逐渐熟练。

学习不必一直处于“单机模式”

🤔 可能遇到的情形

  • 不确定何时提问:觉得问题太简单,担心打扰老师或同学;
  • 难以描述问题:知道程序不对,却说不清预期、实际结果与尝试;
  • 合作经验较少:小组任务中还在学习分工与交流。

🌱 可以逐步养成的习惯

  • 问得具体:说明目标、现象、错误信息和已尝试的方法;
  • 合作互助:可以结对分析程序,也尊重各自独立完成的部分;
  • 保持联系:通过课后答疑、课程群和项目交流慢慢建立学习网络。
课堂小建议:不必一开始就擅长社交;一次具体的提问、一次认真倾听,都是有效沟通的起点。

独立思考与合作可以并存

独立尝试

阅读题目
→
动手实验

形成自己的理解,记录具体卡点。

交流与反馈

描述问题
↔
讨论验证

来自老师、同学或可信资料的反馈,让思路更完整。

修正方案
→
独立复现并说明理由
INTERACTIVE 01

互动 1:怎样提出一个有效的问题?

编写 C 语言时遇到程序运行异常,准备向老师或同学请教:

#include <stdio.h>
int main() {
    int score;
    printf("请输入成绩: ");
    scanf("%d", score);
    printf("成绩为: %d\n", score);
    return 0;
}

A. 简短求助:“老师,我的代码运行有问题,可以帮我看看吗?”

B. 只说明现象:“输入成绩后程序异常退出,我不确定原因。”

C. 补充必要信息:“老师您好,我用 scanf 输入成绩时程序异常。我附上代码与运行现象,尝试检查了格式说明符,想请您帮忙看看。”

选择一种说法,看看还能补充什么

想继续探索?这三个资源可以慢慢看

🧭 1. CS 自学指南

汇总课程与实验资源。可以按自己基础选择,不需要一口气学完。

🔗 访问 csdiy.wiki

🛠️ 2. MIT《缺失的一课》

认识命令行、Git 和编辑器等开发工具,适合作为进阶补充。

🔗 访问 missing-semester

📖 3. 《提问的智慧》

了解技术社区里如何提供上下文、描述尝试并礼貌沟通。

🔗 阅读《提问的智慧》
PART 02

大学四年的成长地图:不同阶段可以做什么?

这是供参考的路线,不是所有人都必须完成的统一时间表。

大一:筑牢底座

• 掌握程序设计基础

• 学好数学和英语

• 开始学习调试、Git 等工具

• 用笔记或小作品记录成长

关键词:学习习惯与基本功

大二:专业核心与早期实战

• 学习数据结构、算法、计算机组成等

• 尝试课程项目、竞赛或学生团队

• 了解实验室与研究方向

• 探索 AI 与不同领域的结合应用

关键词:从知识走向实践

大三:综合深耕与大工程

• 学习操作系统、网络、数据库等

• 做结构更完整的综合项目

• 选择医工交叉或其他兴趣方向

• 整理能说明自己思考过程的作品

关键词:综合与选择

大四:系统交付与未来上线

• 完成毕业设计与系统性总结

• 根据需要参加实习或求职

• 准备研究生阶段学习或其他选择

• 学会评价自己的能力与兴趣

关键词:总结、规划与下一步

课程之外的实践:找到适合自己的入口

🏆 1. 竞赛与挑战题

喜欢算法的同学,可以尝试程序设计竞赛或校内训练。它们能帮助练习问题分析、测试与时间管理。

🔬 2. 科研与项目实践

对研究感兴趣,可以先参加讲座、阅读入门材料,了解老师的方向;具备基础后,再询问是否有合适的参与机会。

🤖 3. 跨学科与创新项目

从校园服务、健康数据展示或学习辅助工具等小场景出发,理解真实需求与数据伦理,再逐步扩展系统。

想一想:不是每个人都需要比赛获奖或提前进实验室。哪一种实践更能让你愿意持续投入?

保持好奇:为自己打开更多窗口

🔍 为什么需要不同的信息来源?

  • 课程学习很重要,但课堂例题不代表真实问题的全部;
  • 只看熟悉的平台,可能反复接触同一类观点;
  • 了解不同技术和职业路径,有助于作出自己的选择。

🌍 可以尝试的四扇窗

  • 开源项目:浏览 GitHub 上一个感兴趣的项目及其 README;
  • 学术讲座:选一个听得懂一部分的主题,记录一个问题;
  • 跨学科交流:看看计算机如何服务健康、医学或其他领域;
  • 学生社团与工作坊:和不同背景的人一起完成小任务。

知识地图:基础课程如何连接真实应用?

智能应用 / 跨学科系统
面向真实问题
↑
算法与数据结构
操作系统 / 网络 / 数据库
计算机组成与体系结构
↑ 相互支撑 ↑
程序设计 + 数学基础 + 解决问题的方法

可以用 Computer Science Roadmap 浏览更多主题;它是一张参考地图,不是必修清单。

INTERACTIVE 02

互动 2:用纸和笔跟踪一个循环

不用复杂算法。先独立写下答案,再和旁边同学对照。

题目 1:循环边界

int sum = 0;
for (int i = 1; i <= 5; i += 2) {
    sum += i;
}
printf("%d\n", sum);

A: 9 B: 15 C: 6

题目 2:先判断再执行

int n = 7, count = 0;
while (n > 0) {
    n -= 3;
    count++;
}
printf("%d\n", count);

A: 2 B: 3 C: 4

点击查看变量变化

同样的结果,为什么有的程序少做很多步?

代码 A:找到答案后仍继续检查

// 判断正整数 n 是否是素数
int is_prime = 1;
for (int i = 2; i < n; i++) {
    if (n % i == 0) {
        is_prime = 0;
    }
}

若输入 n = 100,检查到 i = 2 时已知道它不是素数,但循环仍继续。

代码 B:发现因子后结束检查

int is_prime = 1;
for (int i = 2; i <= n / i; i++) {
    if (n % i == 0) {
        is_prime = 0;
        break;
    }
}

✔ 输入 n = 100 时,B 只需尝试 i = 2,A 则会继续遍历其余候选值。

💡 思考:这里同时做了两种优化:找到因子就 break;只检查到平方根附近。请比较它们各自减少了什么工作量。(此示例假设 n ≥ 2)

PART 03

AI 可以帮忙,但判断和学习仍属于自己

🔎 使用 AI 时容易忽略什么?

  • 跳过理解:直接复制答案,遇到题目变化便无法调整;
  • 忽略错误:生成的解释或代码可能看起来合理,却含有逻辑问题;
  • 缺少记录:忘记自己怎样提问、验证,最后也说不清为什么采用某个方案。

✔ 有效的人机协作是什么样?

  • 请 AI 提供思路:解释概念、列举边界情况、辅助定位问题;
  • 自己做实验:编译运行、对比预期结果,检查关键判断;
  • 能说明取舍:知道采用了什么建议、为什么采用、还有哪些局限。

一套可执行的 AI 协作方法

① 明确任务与规则

先读懂题目,确认课程允许 AI 协助到什么程度;需要独立完成的部分,要按照要求完成。

② 保留自己的初始想法

先写简要思路或程序草稿,再向 AI 询问解释、可替代方案或可能的错误。

③ 验证、修改并留下证据

对 AI 的建议进行编译、运行和边界测试,记录“采纳了什么、为什么、结果如何”。

判断标准:提交的程序应符合课程规定,关键逻辑能解释、结果经过核验,AI 的参与过程可追溯。

AI 协作中的关键一环:检验

一条可以反复使用的学习流程

理解问题
自己的思路
→
寻求 AI 协助
解释 / 建议
→
运行与测试
证据核验
→
修改并记录
理由 / 局限
如果测试没有通过,就回到问题分析与方案修改;不是让 AI 重写到“看起来能用”为止。
INTERACTIVE 03 · 10 MINS

互动 3:给一段 AI 代码设计测试

题目:“用 switch-case 返回某年某月的天数。” 假设 AI 给出以下程序,是否可以直接使用?

int get_days(int year, int month) {
    int days = 0, is_leap = 0;
    if (year % 4 == 0) { // 判断闰年?
        is_leap = 1;
    }
    switch (month) {
        case 1: case 3: case 5:
        case 7: case 8: case 10: case 12:
            days = 31;
        case 4: case 6: case 9: case 11:
            days = 30;
            break;
        case 2:
            if (is_leap = 1) days = 29;
            else days = 28;
            break;
        default: days = -1;
    }
    return days;
}

🕵️ 先提测试数据:用 2024 年 1 月、2023 年 2 月、1900 年 2 月分别检验,能发现什么?

测试数据模拟器

原因 1:31 天的 case 缺少 break,会覆盖成 30。

原因 2:if (is_leap = 1) 是赋值而非比较,平年的 2 月也得到 29。

原因 3:只按“能被 4 整除”判断闰年不完整,世纪年还要检查是否能被 400 整除。

注意:一个测试用例可能同时受到多个 Bug 影响;修复一个问题后要重新测试。

把 AI 当学习伙伴:三个可复用的提问方式

1. 扮演苏格拉底助教

我正在用 C 语言练习 while 循环。
这是我的代码与报错信息。
请先不要给出完整源码,
用问题引导我检查循环变量为什么没有递增。

2. 边界测试助手

我已经写好了这个素数判断循环。
请作为极端刁钻的测试员,
请检查当输入 0、1 或负数时,
我的程序分支是否会发生异常?

3. 逻辑流程推演

我不理解这段嵌套 switch 的跳转逻辑。
请用单步跟踪的方式,
按步骤列出变量的变化并解释跳转顺序。
PART 04

注意力也是资源:怎样更主动地使用数字工具?

📱 为什么有时会刷着刷着忘了时间?

连续推荐、自动播放和个性化排序,让获取下一条内容的成本很低。平台设计会影响我们的使用习惯;我们也可以主动设置边界与目标。

🧭 先观察自己的使用情况

什么时候是有明确目的的信息搜索?什么时候只是随手打开?试着观察一周的使用时段,给学习、运动、休息留下更稳定的空间。

💻 给自己留一段创造时间

把一个编程疑问写成笔记,把小程序整理到仓库,或者制作一张思路图。输出不必公开,也不必追求流量;让学习留下看得见的成果即可。

学习过程可以留下怎样的作品?

📁 1. 项目与代码仓库

把一个可运行的小程序、说明文档和测试样例整理好,能展示你怎样从问题走向实现。

✍️ 2. 学习笔记或博客

试着用自己的话解释一个概念、记录一个 Bug 的排查过程;写出来时,也更容易发现自己尚未理解的地方。

🎨 3. 演示、图解与创意实验

可以让 AI 帮助构思页面、润色说明或生成插图,再亲自核对内容与版权使用要求,完成自己的表达。

可选实践:选一个自己满意的 C 语言小程序,为它添加 README(用途、输入、输出、运行方式、测试记录)。愿意分享的同学,再尝试发布到代码仓库或静态网页。

同样的半小时,可以怎样安排?

没有明确目标时

打开应用
→
持续推荐

容易忘记最初想做什么。不是“有害大脑”的判定,只是在提醒关注时间与选择。

有明确目标时

选定小任务
→
专注尝试

完成后记录结果,再决定继续、休息或娱乐。

设置提醒 / 关闭自动播放 / 安排休息
INTERACTIVE 04

互动 4:为推荐程序增加一个友好的分支

下面是为了讨论而简化的 C 风格伪代码,并非真实平台的推荐算法:

while (user_wants_to_watch) {
    play_video();
    watch_minutes += 5; // 假设每段 5 分钟
    // 在这里补充提醒或选择逻辑
}

🎤 小组讨论:什么时候提醒?提醒后交给谁决定?如果用户暂时不想被打扰怎么办?

三种产品设计,哪一种更合适?

课外探索:游戏、技术伦理与真实问题

🕹️ 1. 从游戏认识计算机

《Turing Complete》:用逐步搭建逻辑电路的方式理解数字系统,适合感兴趣的同学。

🔗 访问图灵完备游戏

🛡️ 2. 想一想技术如何影响人

Center for Humane Technology 讨论数字产品设计、注意力与社会影响;可作为延伸阅读。

🔗 Center for Humane Tech

🏥 3. 从身边问题找项目题材

例如健康数据可视化、校园服务或科学信息检索。先认识需求、数据保护与验证方法,再思考实现。

想一想:技术好用之外,还应当对谁负责?

SUMMARY

从今天开始,可以尝试的几个小行动

让学习更扎实

  • □ 为 C 语言练习留出稳定的上机时间;
  • □ 遇到一个 Bug,记录原因、修复和测试过程;
  • □ 找一位老师或同学,认真交流一个具体问题;
  • □ 用自己的话解释一个本周学到的概念。

让视野更开阔

  • □ 使用 AI 时,至少独立核验一项关键结论;
  • □ 选择一次技术讲座、社团活动或开源项目浏览;
  • □ 整理并保存一个自己的小作品;
  • □ 给休息、运动和非屏幕活动留些时间。

把大学四年看作一个不断更新的程序

📦 想继续了解的资源

💻 一段真的可以运行的 C 语言代码

#include <stdio.h>
int main(void) {
    for (int year = 1; year <= 4; year++) {
        printf("第 %d 年:", year);
        if (year == 1) {
            puts("打基础,学会提问");
        } else if (year == 4) {
            puts("做总结,选择方向");
        } else {
            puts("多尝试,积累作品");
        }
    }
    return 0;
}

这段程序只是比喻。真实的大学生活有很多分支,每个人都能调整自己的路径。

return 0;

大学四年,不必一次写对;愿你在尝试与修正中持续成长。

💬 自由交流与提问(Q&A)

今天带走一件事:选一个适合自己的小目标,认真做、记下来、过段时间再回头看。