Welcome to NJUCS

首先,欢迎各位小朋友加入南京大学计算机科学与技术系。

献辞

这篇文章献给20级的小朋友们。

寒暄和闲聊

欢迎各位小朋友,也欢迎其他各位读者。如果你对如何开心快乐地度过在NJUCS的本科生活感兴趣的话,这篇文章或许可以成为你的一个参考。

FAQ

让我们从几个问题开始吧。 事实上这些是我这几年心里曾经发生过的问题,我希望我现在对他们的回答能对你们有一点点微小的帮助。

开门见山 · 选择和追求

我为什么要好好学习?

我听说大学生活很愉快,是这样吗?

这个问题很好,这牵扯到你的本科四年要怎么过,进一步说,牵扯到你的人生选择和追求: 如果你的人生追求中不包括好好学习,那你就不需要好好学习。就是这样(摊手。

大家都是成年人了,自己做选择,自己负责任。

不过你总是可以向别人寻求帮助。如果你对自己本科这四年应该追求什么感到困惑的话,你可以找,比如, 你的家人,你的朋友,你的辅导员、朋辈导师、学业导师,你的老师和助教,你的学长学姐,聊聊天,或许之后你会稍稍安定一些。 互联网上也有非常多的相关的讨论,或许也可以成为你的参考。

我的个人意见是,尽快找到自己的追求,然后朝着它努力。这样你不至于浑浑噩噩地浪费掉宝贵的时间。

如果我要好好上课 · 文件、文件和老师们的想法

为什么NJU有CS、SE和AI三个院/系,还有拔尖计划、英才计划、强基计划,这些专业的差别在哪里?

计算机科学与技术专业是什么?如果我想认真听课的话,我能学到什么?我被期望学到什么?

我没有足够的能力解释清楚这些专业之间的区别,但或许你可以从下面几个地方找到帮助。

培养方案

每个专业有自己的培养方案,里面原则上会交代:

  • 院系简介(用来…凑字数的?)
  • 培养目标及特色(基本上是废话)
  • 毕业要求(依然是废话)
  • 课程体系(非常重要)
  • 课程体系-学习成果矩阵(废话)
  • 培养规格与路径(废话)
  • 导学指南(没啥用,前导-后续课程关系只存在于理论里)

你可以在正规的搜索引擎里用培养方案 site:nju.edu.cn(或者你可以在教务网里慢慢翻)来找到这些文件。 然后你会发现你找不到需要的文件。呃,好吧,事实上,适用于你们的培养计划似乎没有正式发布出来(我听说它到现在依然在不断地被改动),所以从公开渠道能得到的是比较老的版本,你们可以找19级的学长学姐问到还没有被写进开课计划变更统计里的变动。

具体而言,你需要的是17版的计算机类的培养方案,然后忽略其中信管和拔尖班的部分; 和开课计划变更统计,然后把它里面提到的计科的开课计划的变动合并到前者之中。

教学大纲

然后你会发现你还是不知道这个专业都要学什么,因为课程体系里只有每门课的名字。 这个时候你可以去教务系统学期选课->全校课程里查到每门课的教学大纲(你可以点击课程编号列里的超链接),其中一般会交代:

  • 课程的中英文名字(有时候你可以注意到它们之间的细微差别)
  • 先修课程(没有老师会认真执行这个:不同课程的老师之间往往不会积极交流,因此老师不知道你之前学过什么,也不知道你之后被期望已经学会了什么。切记。)
  • 建议教材和参考资料
  • 教学内容
  • 教学目标

但是一般老师不会积极更新这个页面,所以里面提到的材料、教学内容之类可能已经过时。

所以我该怎么办

前两周是自由试听时间,请抓紧机会去听课。 第一堂课老师一定会交代清楚此时此刻这门课的基本情况,对你们的期望之类。 如果你仍然感到困惑,可以在课间和老师交流,或者课后发邮件联系老师。

如果我要学点东西 · 老师们的想法

我对计算机学科一无所知,我上大学之前没有接触过计算机…从现在开始起步还来得及吗?会有影响吗?

如果我想学点东西的话,我这四年应该学些什么?应该怎么学?

我认为起步晚、没基础,不是什么非常要紧的事情(但依然要紧,我不得不承认)。如果起步要晚一些的话,你需要更多的努力和时间,和最重要的,一个正确的、适合你的方法,来追上其他更早起步的人。

在这里用追上其实是很不合适的,因为你,或者别人,的追求可能并不包括学点东西,换言之可能你们在完全不同的赛道上,甚至在完全不同的比赛项目中。 在此为了讨论的方便,假定你想要学点东西。那么,什么是正确的学习的方法?什么是应该学习的内容?很遗憾,我也不知道。 但是我可以给出一些老师的想法,可以作为参考。

计算机程序的构造和解释

是SICP的主页。

计算机科学是什么?
  • What is Computer Science?
    • What problems can be solved using computation?
    • How to solve those problems?
    • What techniques lead to effective solutions?
    • Computer Science is no more about computers than astronomy is about telescopes.
  • What is Computer Science?
    • Systems
    • Artificial Intelligence
    • Graphics
    • Security
    • Networking
    • Programming Languages
    • Theory
    • Scientific Computing
如何学习SICP?
  • What is this course about?
    • Introduction to Programming
    • Managing Complexity
      • Mastering Abstraction
      • Programming Paradigms
    • A challenging course that will demand a lot from you
      • fly, bitch

这门课是用来提升品味的。

关于教材

看英文的原版教材,不要看翻译的中文版。翻译的版本往往更加费解:有时候你看懂了每一个字,但是依然不知道这整句话是什么意思。

关于学习编程

多敲代码,多练。程序设计语言和其他语言没什么区别,需要听说读写等各方面的大量练习才能掌握。

不要不经思考,不仔细看讲义就随便问问题,如果一直以这个习惯学习计算机,会是被动式的:你这次会了,下次就忘记了,要想把东西变成自己的,要经过自己的思考和理解。 如果资料也看了,想了半天还是没有想明白,这时候提问,知道答案后会记忆更深刻,变成自己的一部分。

同时,大学学习就是不断试错的过程,所以也不要畏惧提问题。

在大学期间,个人不建议预习。 老师一般不会照着课本去走,你也不一定会清楚老师下节课的授课计划,因此可能造成预习时很多疑问并不能在当下的课程里得到解决(可能未来课程学习时会解决或干脆不是需要你在课程中掌握的内容),这样长时间积累你可能因预习中碰到的疑问的不得解而抑郁。 建议把预习的时间拿出来好好复习,多练习。

关于上课坐哪儿

因为上课可能会有代码的演示(也可能教室的扩音设备效果不好),建议大家尽量往前坐,另外带电脑的同学可以考虑提前下载课件,看不清可以在自己电脑上看。

计算机系统基础习题课

是拔尖班的计算机系统基础习题课的网站。 jyy老师的上课录像可以在这里找到。

The Missing Semester of Your CS Education
  • 墙裂推荐!!!
  • 我们 miss 的比这门课更多
老师/助教的使用
  • 联系/求助:使用邮件
    • 能使你更好地整理问题。也许在整理的过程中你就发现答案了
  • Office Hour:
    • 什么是 Office Hour???
  • Ask
    • 对上课内容没有理解的地方、对课程/学习的疑惑、……
  • Don’t Ask
    • 安装 XXX 错了怎么办?Segmentation Fault 了怎么办?
学术诚信
  • 关于传说中地狱难度 PA 的一些真相
    • 它很难,的确很难 ← 让大家引起重视
      • 确切地说,对最好的同学来说依然有一定的挑战性
        • 如果你感到异常困难,你更需要的其实是 C/C++ 编程的训练
      • (并且我们知道这一点!)
    • 往年一些同学都因为不诚信的举动获得了成绩
      • 他们得到了相应的报应 (例如在《操作系统》中惨挂)
      • (并且我们知道这一点!)
    • 你总是可以耍一些小聪明,从别人那里得到帮助
      • 但越是独立完成,受到的训练就越好
      • (并且我们知道这一点!)
  • 学生手册:不能抄作业。
    • What is academic integrity?
      • 简单概括:独立完成
    • 针对作业的独立完成
      • 自己完成作业
        • 对使用的已有资料作出明确的标示
        • ACM Policy on Plagiarism, Misrepresentation, and Falsification
    • 针对代码的独立完成
      • 自己完成代码的编写
      • 自己完成测试用例
      • 仅在允许的范围内使用他人的成果
  • Academic Integrity
    • 感到三观尽毁?
      • 原来拿个测试用例也违反 academic integrity?
      • 拿个大腿的作业来改改不香吗?我还读懂了呢!
      • 老师压根就没精力管,对他来说吃力不讨好
        • 有些事情是 “天然” 被禁止
          • 但我们的教育里缺失了 “这是不对的”
    • 那些痛苦是对你的训练 (training)
      • “看懂” 和 “自己设计测试用例、自己做出来” 天差地别
        • PA 难度无形剧增 ← 过去没有 academic integrity 欠的债
      • 不要看不起美国人
        • (大部分) 学生真的明白并自发地执行这个标准
PA的生存指南
  • 拥抱变化
    • 很烦躁:一下就碰壁?
      • 胡乱尝试一通?对了就对了,不对就抓瞎?
      • 有时候不知道该到底怎么 STFW, RTFM?
    • 静下心来,从头开始
      • The Missing Semester of Your CS Education
      • RTFM (slides), STFW, RTFSC
      • 不要觉得 Makefile、提交脚本都是和你无关的
    • 试图理解一切事情是如何发生的
      • 从读得懂开始,逐渐过渡到会写
  • 拥抱开源社区
    • 用好Github的Awesome系列
    • 用好 Stack Overflow / Stack Exchange
      • 你遇到的 99% 的问题,别人已经遇到过了
    • 禁用百度和中文关键字 (强烈不推荐大家使用中文系统)
      • Linux/macOS
        • /etc/hosts
      • Windows
        • C:\Windows\System32\drivers\etc\hosts
      • 增加一行 127.0.0.1 www.baidu.com
总结
  • 你不会感到学习这门课很舒适
    • 不要用我们学得比较理论……来骗自己
      • 就是**不扎实
    • Academic integrity 可能让你感到三观尽毁
      • 你会理解到南大还不是 “世界一流大学”
  • 但请不要放弃/躺倒
    • 你们未来是要承担大事业的
  • 机器永远是对的 (and RTFM)

计算机系统基础PA

是拔尖班20级的PA的主页。

小百合系版”有像我一样不会写代码的cser么?”回复节选
  • 我们都是活生生的人,从小就被不由自主地教导用最小的付出获得最大的得到,经常会忘记我们究竟要的是什么。我承认我完美主义,但我想每个人心中都有那一份求知的渴望和对真理的向往,大学的灵魂也就在于超越世俗,超越时代的纯真和理想 – 我们不是要讨好企业的毕业生,而是要寻找改变世界的力量。– jyy
  • 教育除了知识的记忆之外,更本质的是能力的训练,即所谓的training。而但凡training就必须克服一定的难度,否则你就是在做重复劳动,能力也不会有改变。如果遇到难度就选择退缩,或者让别人来替你克服本该由你自己克服的难度,等于是自动放弃了获得training的机会,而这其实是大学专业教育最宝贵的部分。– etone
  • 这种只要不影响我现在survive,就不要紧的想法其实非常的利己和短视: 你在专业上的技不如人,迟早有一天会找上来,会影响到你个人职业生涯的长远的发展; 更严重的是,这些以得过且过的态度来对待自己专业的学生,他们的survive其实是以透支南大教育的信誉为代价的 – 如果我们一定比例的毕业生都是这种情况,那么过不了多久,不但那些混到毕业的学生也没那么容易survive了,而且那些真正自己刻苦努力的学生,他们的前途也会受到影响。– etone
如何获得帮助

在学习和实验的过程中,你会遇到大量的问题。除了参考课本内容之外,你需要掌握如何获取其它参考资料.

但在此之前,你需要适应查阅英文资料。和以往程序设计课上遇到的问题不同,你会发现你不太容易搜索到相关的中文资料。回顾计算机科学层次抽象图,计算机系统基础处于程序设计的下层。这意味着,懂系统基础的人不如懂程序设计的人多,相应地,系统基础的中文资料也会比程序设计的中文资料少。

如何适应查阅英文资料?方法是尝试并坚持查阅英文资料。

搜索引擎,百科和问答网站

为了查找英文资料,你应该使用下表中推荐的网站:

  搜索引擎 百科 问答网站
推荐使用 https://www.google.com https://en.wikipedia.org https://stackoverflow.com
不推荐使用 https://www.baidu.com https://baike.baidu.com https://zhidao.baidu.com https://bbs.csdn.net

一些说明:

一般来说,百度对英文关键词的处理能力比不上Google。 通常来说,英文维基百科比中文维基百科和百度百科包含更丰富的内容。为了说明为什么要使用英文维基百科,请你对比词条前束范式分别在百度百科中文维基百科英文维基百科中的内容。 StackOverflow是一个程序设计领域的问答网站,里面除了技术性的问题(What is “:-!!” in C code?)之外,也有一些学术性(Is there a regular expression to detect a valid regular expression?) 和一些有趣的问题(What is the “–>” operator in C++?)。

官方手册

官方手册包含了查找对象的所有信息,关于查找对象的一切问题都可以在官方手册中找到答案。 通常官方手册的内容十分详细,在短时间内通读一遍基本上不太可能,因此你需要懂得如何使用目录来定位你所关心的问题。 如果你希望寻找一些用于快速入门的例子,你应该使用搜索引擎。

所以你为什么把好好上课学点东西作为并列的两个东西来讲?

因为好好上课不一定能学到对你有用的东西,还记得吗,对你有用的东西随着你的追求的变化而变化。

有一些我已经找不到出处的观点认为:系里的课程大部分太理论,不契合雇主的需求。假定这个观点正确,再假定毕业之后你想找份业界内的工作,那或许你要在好好上课之外,另找一些东西学习。

尾声

其他人也给出了一些可能有用的内容:

  • 有志于锻炼工业界需要的能力的人或许可以参考这个博客这个
  • 这是系里一些优秀的朋辈导师搭的博客

作为挂在互联网上的文章,很多问题只能笼统地讨论几句。欢迎通过各种方式和我直接联系,我们可以就具体的问题具体地谈。 也欢迎各位联系我,提供更多有价值的材料。

最后,小小地提醒一句,2020年的法定假日已经全部放完了(这周甚至是单休的)。 所以各位小朋友和读者务必保重身体,也祝各位心情愉快~