三. 准入课的介绍 && 评价
下图是cs本科阶段的课程结构图,对于转专业的你可以看一看做个了解
了解完整的课程结构对你的转专业之旅和转专业之后的规划都具有帮助
Soaked 学长总结的《南京大学计算机科学与技术专业学科专业课程汇总》可以让你对计算机专业需要修读的课程有更加全面的了解
你可以在转 cs 交流群里获取这份文件:1055656826 (这是广告吗),也可以在下面的电子书库中得到这份文件
以及笔者自己整理了一份面向 CSer 的电子书库,可以自行获取电子书

准入课程主要分为 “数学课” 与 “专业课”:
· 数学课
此处只考虑一层次微积分+线性代数
考虑到使用数学系的数学课/匡院数学课等进行转专业的情况比较少见,故此处不讨论
(《大学通修数学替代关系表》的内容也适用于转专业,仅供可行性参考)
一层次数学包括微积分ⅠⅡ与线性代数。主观学习难度 线性代数 ≈ 微积分Ⅰ<微积分Ⅱ
微积分ⅠⅡ分别在大一秋季学期与次年春季学期学习,而线性代数从大一上学期到大二上学期都有课程开设
课程号为 1 开头的数学课(匡亚明学院开设的)不应该主动用于转专业,你应该也无法选中这门课
除非你已经在学习匡院微积分/线性代数了,否则不要选课程号为 1 开头的数学课
课程名相同不代表课程号相同,你在选课的时候应该永远以课程号相同为选课正确的标准
虽然说有匡院数学课转cs的先例,但是你不应该尝试,至少你得亲自问一问可行性
有关“匿名专家”?
一层次微积分、线性代数的难度从 25Spring 开始出现明显的难度上升(体现在考试),并且不再和往年卷有较强的拟合关系
简单来说数学课 80+ 的难度增大了
主观的个人建议
考虑到大一下学期某些课程的学习难度,个人推荐在大一上学期学习线性代数 (●'◡'●)
如果你的专业不在大一上学期开设线性代数课程,你可以在退补选阶段抢课
以下是一些能帮助你在应试考试中取得较高分数的物品:
-
往年卷多多益善(大多数老师会在考试前发放近三年的电子版往年卷,而很多民间群里能找到更早的往年卷,像高中那样多写写题有好处的,这是为数不多靠刷题得高分的大学课程了)
-
《大学数学典型题解析》(很老的书,几乎只能买到翻印版,可以去淘宝的“小蓝鲸书店”看看有没有二手库存;有电子版;会“偶遇”考试原题)
前者能让你适应考试节奏与手感并巩固知识点,后者(尤其是高等数学分册,封面是黄色的,对应微积分ⅠⅡ的学习)能帮助冲高分
· 专业课
总共有五门可选择的专业课:《程序设计基础》《计算机程序的构造和解释》《离散数学Ⅰ》《数字逻辑与计算机组成》《高级程序设计》
《程序设计基础》(开设学期:1-1 1-2)
1-1 1-2 即“大一第一学期”和“大一第二学期”
C语言入门课,无OI基础萌新友好,有OI基础大佬咔咔乱杀会感到非常熟练
主要的教学参考用书是《程序设计教程:用C++语言编程》(前五章不涉及 C++ 特性的内容)和《C语言程序设计:现代方法》(比上一本用的书好)
期中、期末考试为笔试,期间穿插三次机试,学期末有一次大作业,平时每周会有几道上机题当作业(上机课的大多数时间都是用来写作业的)
笔试机试难度都适中偏友好,有基础的比较容易 95+,无基础的 90+ 也不难(吧)
机试难度中等,笔试因为会考比较细的 C 语言知识点(尤其是解答题)需要额外准备,可能写简答题之类的会比较难受
主观的个人建议
这门课和《计算机程序的构造和解释》是二选一关系(也可以都选,但是会比较累)
期中/期末考试都是笔试,而且有简答题这种题型。零基础的学生可能需要注意一些知识点细节(比如可能会问“冯诺依曼计算机体系结构的构成”),而不仅仅是会敲代码
这门课一定不要依赖 AI!!所有的代码必须亲手实现!!
记得是《程序设计基础》的某一次上机测试,据说场上得分率低的吓人,但是在我们(指转cs群学长)看到实际的考题后,发现这大概率不是因为题目难度过大,而是因为小登不够熟练,sad
《计算机程序的构造和解释》(开设学期:1-1)
基于计算机科学入门课 Berkeley CS61A 设计的一门课(A Clone of Berkeley CS61A)
这门课的官网是 sicp.pascal-lab.net,参考用书《Composing Programs》,是《计算机程序的构造和解释》(SICP)这本书的课程适配简化版
这门课主要关注“抽象方法”“编程范式”等较为抽象而非常关键的学习内容,有一定的思考难度
这门课的编程语言以 Python 为主,后期也会学到一些 SQL、Scheme 相关的知识
课程安排、作业设置情况等可通过课程官网了解,这门课所有的课件资源都在官网公开,OJ系统也可以在没选这门课的情况下申请账号使用,此处不赘述。
这门课没有平时分,作业占比50%,期中期末各25%,给分情况还不错(虽然期中考试平均分通常在 60 左右,但是总评会进行调控),但是高分看能力
总体来说这是很优质的一门课,就是对纯cs新手真的不太友好,真的有难度
给个参考文献:计算机程序的构造与解释 - ICS Wiki
主观的个人建议
这门课的难度对于一个大一新生来说(尤其对无编程经历的人来说)不会很简单,但是你确实可以学到很多东西
考虑到这门课的优质性和难度性,我不会在这里大夸特夸这门课,选不选择这门课由你自己决定
自学 CS61A 也是可以的,或者大二申请校内 OJ 账号结合 CS61A 网课跟着自学(?
《离散数学Ⅰ》(开设学期:1-2 2-1)
注意
在选课前请务必确认你选择的是课程号为 22000210A,由计算机学院开设的 3 学分《离散数学Ⅰ》(而不是其他学院开设的各种《离散数学》)
这门课曾经是 5 学分的课,在课程改革中拆分为了必修的《离散数学Ⅰ》和选修的《离散数学Ⅱ》(后者只在 2-1 开设),所以可能会和你之前了解的不太一样
思考量需求 > 做题量需求的一门数学课,教学内容“涵盖数理逻辑引论、集合论、计数与离散概率、代数系统和图论等多个数学分支的基本内容”(摘自课程简介),应该是所有不同学院开设的离散数学课程里学习难度最大的一门(在课程拆分后说不定了)
(多数情况)每周两个 Problem Set(也就是作业),每个 Problem Set 平均十道题(有波动),会有专门的习题课讲解题目(每周一次);期中 期末考试占比分别是 20% 60%,难度不至于太难,给分相对友好,但如果不认真学以至于期末考试直接空题也不会得到一个满意的分数
主观的个人建议
离散数学的学习需要脱离刷题式的思考,离散数学被归类为专业课而不是数学课是有原因的
这门课的知识点较为琐碎复杂,个人感觉在很多情况下理解一串知识点所花的时间会比写作业所花的时间更长,在学习策略上与微积分有很大不同
转专业考试的笔试试题一直以离散数学为主(通常占比 3/4),并且机试试题往往也会出现一道图论相关的题目,所以这门课对于一个转CSer来说基本是必选(除非你真的系统学过相关内容,否则一定要学习离散数学)
《数字逻辑与计算机组成》(开设学期:1-2 2-1)
一门较为硬核的专业课,前半部分从逻辑门、CMOS电路讲到组合逻辑、时序逻辑电路,后半部分会介绍 RISC 架构 CPU 的运算部件、指令集等,最终你将实现一个能够执行 RV32I 指令集的单周期 RISC-V CPU,并且对多周期CPU、流水线CPU等有一定的了解(哇听上去好高大上)。课程部分参考了 Berkeley CS61C
主要的教学参考用书是《数字逻辑与计算机组成》(及其配套的“习题解答与实验教程”),主要用到的软件是仿真电路软件 Losigim
作业包括教材后的课后习题(挑部分题目),六次 Logisim 仿真实验(前三次只需线上OJ完成并完成实验报告,后三次在此基础上会有三次线下验收课,你需要向助教展示你的电路与思考题实现)
分数组成:课后作业、问答等平时成绩 15%;六次实验成绩 35% (包括实验验收+报告);期末考试成绩 50%。给分较为友好,期末成绩影响较大(虽然有捞分但是还是得努努力)
主观的个人建议
考虑到大二上学期的专业课《计算机系统基础》比这门课的学习量/任务量更大,较为建议在大一下学期学习这门课(两门课一起学任务量会很大),不过需要做好这门课的任务量同样不小,赶ddl、突击复习可能会火葬场的准备
(但是期末考试的试卷和往年卷相比几乎没啥变化,所以往年卷还是要好好看看的)
yry老师的每节课都有录屏可供回看,可用作课后回顾资料
个人额外推荐《计算机组成与设计:硬件/软件接口(RISC-V Edition)》这本书,可能会对这门课的学习提供很大的帮助(RISC-V 版本的这本书有点难买到,可以找电子版)
《高级程序设计》(开设学期:1-2 2-1)
和往年不一样的是
高级程序设计从“与大二的《概率论与数理统计》二选一”修改为了必修,所以你现在终究会选这门课的
即使转专业准入要求还是 n 选一专业课,但是准出毕业需要这门课
程序设计基础 PLUS,注重 C++ 的面向对象编程,形式和程序设计基础差不多
主要的教学参考用书是《程序设计教程:用C++语言编程》(从第六章开始的内容),课程目标是 “加深对面向对象、泛型、事件驱动、异常处理等程序设计基本概念和技术的理解和掌握,加强解决实际问题的能力”
课程结构参考《程序设计基础》
我没学这门课,所以我希望这里有更多元的评价
主观的个人建议
我没选这门课,我不评价了
有想要评价的过来人可以提个 discussion / issue