Skip to content

一些学习建议

相较其他组,算法组的任务和知识体系更偏向计算机和软件工程方向,以至于在编写调试过程中都不用摸车,所以在学习方面也有一些不同

来实验室

虽然在寝室和在实验室写出来的代码可能差不多,但绝大多数情况下寝室更吵,很可能还有室友在前线冲锋陷阵或者探索提瓦特大陆

实验室可以给你提供更好的氛围,提高工作效率,还不用交水电网费

更重要的是,在实验室遇到问题,马上就能找到身边的人问,当面解决效率也高很多

如果你愿意的话,在实验室吃饭睡觉都可以,据说有学长住过一学期

多阅读官方文档

第三方的教程通常不会有非常频繁的修改,因此很可能随着时间变化而出现过时内容,因此要学会查阅官方文档,培养更好的解决问题的能力

注意

除了C++ Primer等一些非常经典的书籍,不推荐看纸质书,尤其是xx从入门到精通

摆脱的学习高中思维

这部分内容较多,请阅读上交生存指南中的这一章

虽然文字比较长,但我真的推荐每个人去读一读

更好的学习方式

从CS61A看编程语言学习

写优雅的代码

从刚开始接触编程起,就去了解什么样的代码是优雅的,什么样的代码 "have bad taste" 是非常有益的

举个例子,模块化封装的思想极其重要。如果你只想着代码能跑就行,写的时候图省事,用大段的复制粘贴和臃肿的 main 函数,长此以往,你的代码质量将一直如此。一旦项目规模稍微大一点,无尽的 debug 和沟通维护成本就会立即变得不可接受

因此,写代码时不断思考,是否有大量重复的代码?当前函数是否过于复杂(每个函数只需要做好一件事)?这段代码能抽象成一个函数吗?一开始你可能觉得很不习惯,甚至觉得过于大费周章。但记住好的习惯是无价的,随着项目复杂度的增长,“能跑就行”的代码的维护成本将会呈指数级上升

因为任务的难度要求,面向对象语言和设计逻辑是不可避免的。学校教你的课程同样很容易变成极其无聊的语法课,纠结于各种封装继承多态的语法,甚至出一些无聊的脑筋急转弯一样的题目,即使这些东西在地球人的开发中基本不会用到。面向对象的精髓是将实际的问题抽象成若干类和它们之间的关系,而设计模式则是前人总结出来的一些精髓的抽象方法

这里有一些常见设计模式,但同样的,不要生搬硬套强行使用,找更合适的而不是“符合更多理论的”

遇到问题?

确保按顺序读完此文档的每句话!!!仔细阅读,不要见了就抄!!!

我不想再回答这样的问题↓

建议阅读:提问的智慧

浏览器

不要用微信自带浏览器或者任何套壳浏览器!!!

大多数linux发行版[1]会自带的firefox,是全球用户最多的chrome,这些都是很优秀的浏览器

遇到文档的问题时,确保用的是firefox/chrome/edge这三个浏览器之一[2]

引号

编程中会遇到的引号有三种[3],双引号"单引号'和反引号`,注意它们的区别

下划线

有些资料截图里划线可能刚好挡住了下划线,需要注意

python中的“魔法函数”和“魔法值”前后都是两个下划线,不要打成一个

还有问题?

这份文档现在的版本是刚编写完的,虽然已经有你们的学长学姐看过实践过了,但仍有很多小问题

如果你认为文档有任何问题,包括错别字等,请尽快联系我修正


  1. 发行版这个概念,将在后面的Linux基础概念章节介绍 ↩︎

  2. 这其中Edge又是最容易出问题的,布局经常会出现异常 ↩︎

  3. Python有三引号'''或者"""的概念,但它并非一种符号,而是单双引号拼起来的 ↩︎