给17级计科新生的一丁点儿建议

Computer Science: a Sophomore’s perspective :)

 去年15级迎接16级如同昨日,而现在17级的新生又到了,日子也是过得挺快。我不是你们兼班兼助,以后也应该不会是。如果说这篇东西写给哪些人看,我想应该也就是给17计算机学院新生。老人们,不管是咸鱼还是大佬,都有了自己的想法了罢。咸鱼想翻身不容易,但大佬变咸鱼也可能只是一念之间(233)。大学是学习的开始,希望大家尽早做好准备。bintou老师曾有写一篇给计算机学院新生的一封信,你们可以读完老师的建议然后再选择是否继续读下去。当然,我会把一些更细的东西夹杂进来。不能覆盖大学生活的方方面面,权当敲门砖,但求抛砖引玉。

  计科,也就是熟知的计算机科学与技术,含糊得讲,就是围绕计算机展开的,根据计算原理、计算理论,以计算为中心的科学技术。这其中包括了科学上的探索与工程上的创造。科学的体现,在此又与数学紧密联系,在即将接触到的比如算法与数据结构,线性代数,概率论等学科或知识中会体现出来。工程的体现,包括程序的设计,程序、计算机以及网络的体系结构,注重人的动手能力以及对于程序的整体规划能力。但其主体,还是科学。一切在工程上不以科学为基础的高调都是耍流氓,一切没有科学根据的动手都是空谈。也许你们进来以后,会有老师,可能看上去很“高逼格”的老师对你们说,“科学对于我们绝大多数的同学来说,都是不可能的,我们的同学绝大多数都往工程方向走,所以我们要提高我们的工程能力。” 那绝对是胡扯。尽管工程方向确实为大多数,但没有扎实的科学根基,谈何工程?更进一步,“作为一门学科,无论冷热,我们需要做的是:发现其本质、遵循其发展规律。” 立志科研,成为科研人物,站在计算机科学的前端,也是这门学科培养人才的最终目的。
 如老师所说,初入计算机科学,笼统的任务,就是学英语,学数学,学编程。学英语,是要提高自己的英语阅读能力,习惯于阅读英语的书籍专著。刚开始可能读起来比较吃力,但也应慢慢训练,习惯了就会发现英语的理解起来更加透彻。As far as I’m concerned, 不管曾经有无经验,第一本英文书籍都推荐How to think like a computer scientist: C version。学数学,第一学期最重要的包括高等数学,线性代数。日后,线性代数在学科中的地位会愈发显著。至于更进一步,就在下文了。学编程,就主要体现为学习程序设计语言, c 或者 c++,理解程序设计的思想,面向过程、面向对象,学会科学地构建更具规模的程序,提高代码的复用性。
 关于该学什么,老师已经有了一个文档,CS核心教程。这个文档可能和学院给你的不太一样,但它一定是高水平的,超出学院的要求,对于成为计算机领先人士有指南针般的作用。每一本书都是一个里程碑,学习吸收,对于你一定会有好处。下下文会说到。

 补充的东西:可能有用的书籍(密码是ping1008)

 可能在进入计算机学院之前,绝大多数同学就会听闻,“学计算机呀,敲代码的,呵呵……”。没错,代码,是人机交互的根本方式,是连接碳基生命与硅基生命的桥梁。通过程序的命令或语句,实现程序设计者所需要的功能。学院主要教导的,就是c++的学习。可能大家会对c还是c++感到迷惑,因为老师、学院的说法也是含糊。但你从任意一门入手,都是可以的。做好选择,深入理解,不必要迷茫。可以说,学院一开始教导的东西,在c、c++中的体现是无异的。课上的老师几乎只教语言,没有设计更多的设计思想。但这是我们要好好理解的。
  对于此,推荐一些书。希望对大家会有益。

  1. How to think like a computer scientist: C version
  2. C++ primer plus

 第一本大家应该听老师所提及了,非常适合入门。第二本却不常为推荐,褒贬不一,甚至为人诟病。(中文版,还是妥协了)。因为这一本,很厚,很细,像字典。可能很多人拿出来翻两下就已经失落了。但其中有非常详细的解释与实现,快节奏地跟着书本走一边学一边敲,学会了就好,然后慢慢实现一两个功能,实现一两个冒泡排序之类的算法。学习C++,一定不能脱离算法与数据结构。你可以把他和算法一起看。因为语言只是工具,算法才是核心。通过对算法的实现,了解语言特性,并掌握对其的应用。这样学起来才会有进步,有着落。可能并不需要在一个暑假内看完,约莫在11月看完前7章,12月看完前八章就够了。甚至,可以去看OI常推荐的算法竞赛入门经典。这些都是可选项。如果你读了觉得失落,并不是你的问题,只是教材并不适合你。但是,HTCS是要看的,并要认真研读。这也是进入图灵班的最低门槛(下文会讲)。参见:

 BTW, 谭浩强的《c++程序设计》,太坑了……期末了检查自己学得如何,就看能从其中挑出多少错误了。。。(一家之言,一家之言,没有老师说过)。
  另外的,就是着手线性代数的学习。大家可以去看Gilbert Strang的Introduction to Linear Algebra 这里是书本链接, 可以暑假就开始看。非常有益,细致入微地介绍线性代数,是最为经典的线性代数教材。这也是图灵班第一学期的着重书目。同时,也不要忘记看学校发的课本,要认真学习。作为一门重要的基础数学科目,它具有着举足轻重的地位。
关于数学,同样可以参阅:

  以下就是一些相对离散的东西了,不知道如何归纳,但所以也就堆在一起。。😂

 首先是图灵班。关于图灵班的介绍,在上文中的链接中有了。这是一个非常考验意志力与执行力,但没有任何强制约束力的集体。以学术交流为核心,为的就是打造华师计机体制之外的铁军。其长期的主要学习任务,就是上文指出的核心教材。
进入的要求:

  1. 完成HTCS(How to think like a computer scientist: C version)的阅读,并撰写读书报告,在国庆放假前提交给老师。(具体时间,提交方式另外安排)
  2. 学习GS的LA,并看MIT线性代数公开课的视频。网易公开课上对应的视频
  3. 国庆前后,完成面试。

 Then,眺望窗外,拥抱世界。接触、学习使用Linux操作系统,熟悉命令行。对于计算机系的学生而言,Linux是更好的开发平台。它的开放性更加对开发者友好,而且有更丰富的资源与文档。以前总有人会问,好端端的在windows下 ,干嘛要切换到别的系统上去。其实,以开源操操作系统GNU/Linux为中心的开源文化才是进步与发展的源泉。就如鲤鱼跳龙门一样。只有从MS的窗口看出去,才能看到更美好的风景。一开始会不习惯,因为会接触大量的命令行。但慢慢就会熟悉,会发现命令行效率对于大多数熟悉者而言比鼠标高。建议新手从ubuntu这个发行版入手,可以在虚拟机上先试着安装,安装好系统后,在上面用atom、vim或者其他的编辑器写自己的一个“Hello, world”,并用gcc或clang编译。但是,虚拟机终究不是你的选择,你应该把它以双系统的形式安装在自己的电脑上,并用它来高效地开发(百度可以告诉你怎么做)。这只是针对新人,对于熟悉的人,早就已经有自己各种各样的玩法。
; 其次,对于学院教学安排的一点点意见。如果你仅仅跟着老师学,按部就班,那是远远不够的。计算机科学是一门自主性非常强的学科。要锻炼自己的自学能力。很多东西,老师甚至不讲,就会叫你做。你需要查大量的资料,询问不同的人。所以,学会查资料,学会问问题,学会自主学习,比什么都重要。大道至简,知易行难。需要慢慢摸索与积累。(关于如何使用Go0g1e,之类的,如果不懂,可以询问群里的dalao。你需要lift)同样的,在图灵班的学习也是如此。大部分都是靠自己。坐得住冷板凳,才会有收获
 然后,不要沉溺与社团、社交活动,不要被社团宣传的过度渲染而迷住。比如,不要每日忙于学*会的工作,也不要在那圈子里每日麻将打牌大保健。另外,不要为社团熬夜。如果你能从社团里头获得乐趣,学得知识,那当然是最好的。我从ISCNU学到了不少的知识,并且应用到了自己的“搞事”中。还有很多人玩CTF,体验当黑客的乐趣(当然,我顾不来没有参加)。大家一起交流,挺好。
 Furthermore,权衡好兼职与学习。兼职是不错的锻炼,应该处理好时间安排问题。不要因为兼职而影响了学业。得不偿失。同时,权衡比赛与学习,不要参加没有意义的比赛。不要当赛棍。学院每年都会宣传一大堆的比赛,你应该好好考量。
 多学习,多交流。多多提升自我,这样你才可以跟更厉害的人在一起。想要和大佬交流,首先要有成为大佬的想法。如果你只会喊“哇大佬好厉害”,那也是为人鄙薄的。不要过了半年一年的,一些人水群就是游戏打牌大保健,另一些人却是各种技术游戏。同样是娱乐,差别却那么大。人自然而然地就被划分了。

 Last but not least, 少熬夜,做没有黑眼圈的大熊猫。。。:)

 总说是大0准大学生,其实,录进了大学,就是堂堂正正的大学生了。本文以非常文科的形式阐述了计机在大学中的一些方面,可今后你们的学习,甚至你们的生活,都要以非常理科的方式进行。希望大家,学会学习,学会反思,学会交流。大学既不是象牙塔,也不是职业学校,但它与社会紧密融合在了一起,需要各位慢慢体会,常常回想,细细反思。看清自我,看清社会。遭遇多少,领悟多少。最后,祝大家收获无憾的大学生活。
                        ping: 1008
                        2017.7.18

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×