一些学习建议
相较其他组,算法组的任务和知识体系更偏向计算机方向,甚至在部署代码前都不需要接触竞赛机器人,所以在学习方面也有一些不同
来实验室
虽然在寝室和在实验室写出来的代码可能差不多,但绝大多数情况下寝室更吵,很可能还有室友在前线冲锋陷阵或者探索提瓦特大陆
实验室有更好的工作氛围,提高学习和写代码的效率,还不用交水电网费
更重要的是,如果在学习中遇到问题,可以马上就请教实验室里的其他人,当面沟通交流的效率也会高很多
多阅读官方文档
第三方的教程通常不会有非常频繁的修改,因此很可能随着时间变化而出现过时内容,因此要学会查阅官方文档,培养更好的解决问题的能力
注意
除了C++ Primer等一些非常经典的书籍,不推荐看纸质书,尤其是xx从入门到精通
摆脱高中思维、优绩主义的影响
这部分内容较多,请阅读上交生存指南中的这一章
虽然文字比较长,但我真的推荐每个人去读一读
更好的学习方式
写优雅的代码
从刚开始接触编程起,就去了解什么样的代码是优雅的,什么样的代码 "have bad taste" 是非常有益的
举个例子,模块化和封装的思想极其重要。如果你只想着代码能跑就行,写的时候图省事,用大段的复制粘贴和臃肿庞大的主函数,长此以往,你的代码质量将一直如此。一旦项目规模稍微大一点,无尽的 debug 和维护成本就会立即变得非常夸张
因此,写代码时不断思考,是否有大量重复的代码?当前函数是否过于复杂(每个函数只需要做好一件事)?这段代码能抽象成一个函数吗?一开始你可能觉得很不习惯,甚至觉得过于大费周章。但记住好的习惯是无价的,随着项目复杂度的增长,“能跑就行”的代码的维护成本将会呈指数级上升
因为任务的难度要求,面向对象语言和设计逻辑是不可避免的。学校教你的课程同样很容易变成极其无聊的语法课,纠结于各种封装继承多态的语法,甚至出一些无聊的脑筋急转弯一样的题目,即使这些东西在地球人的开发中基本不会用到。面向对象的精髓是将实际的问题抽象成若干类和它们之间的关系,而设计模式则是前人总结出来的一些精髓的抽象方法
这里有一些常见设计模式,但同样的,不要生搬硬套强行使用,找更合适的而不是“符合更多理论的”
遇到问题?
确保按顺序读完此文档的每句话!!!仔细阅读,不要见了就抄!!!
我不想再回答这样的问题↓
建议阅读:提问的智慧
浏览器
不要用微信自带浏览器或者任何套壳浏览器!!!
大多数linux发行版[1]自带的Firefox、Windows自带的Edge,全球用户最多的Chrome浏览器,这些都是很优秀的浏览器
遇到文档的问题时,确保用的是上述三个浏览器之一[2]
引号
编程中会遇到的引号有三种[3],双引号"
单引号'
和反引号`
,注意它们的区别
下划线
有些资料截图里划线可能刚好挡住了下划线,需要注意
python中如__str__()
和__main__
等“魔法函数”、“魔法值”前后都是两个下划线,不要打成一个
还有问题?
这份文档现在的版本是刚编写完的,虽然已经有你们的学长学姐看过实践过了,但仍有很多小问题
如果你认为文档有任何问题,包括错别字等,请尽快联系我修正