前言

楼主大二机械,深感前途渺茫,若是继续沉溺在机院抽象落后主修课的摇篮里,以后就算是烷基巴丹了。先前在竞赛、科研中遇到了很多ROS、嵌入式、编译原理、C++相关知识,但是由于自己毛都不会,连CSDN上关于error的解释都看不明白,所以只能浅尝辄止、磕磕绊绊。恰好这学期做题做的还行,GPA方面可以暂时按下不表,打算从寒假开始allinCSDIY,开学之后抽课余时间学习,尽量做到两手抓。

目标

期望以后走算法/工业软件/嵌入式开发,可能会拿业余时间去做游戏开发。

现在学的不多,所以也不确定自己的想法对不对,只能走一步算一步,但我觉得肯定比停滞不前要好,虽然刚刚还看到帖子说自学cs和转码是49年入国军,但是我不学这个我干什么呢()。现在我导的科研方向就是工业软件开发,这边如果要憧憬一个美好的未来的话,我希望是蹭到paper共一,之后保研走算法路线或者直接转码,毕业之后入职大厂,业余游戏开发产出了minecraft水平的旷世巨作,从此流芳千古家财万贯。

规划

先跟着https://csdiy.wiki/ 前期路线进行学习,于此同时为了保持兴趣,我会偶尔心血来潮地跟着教程复刻一些小游戏项目。下面是关于我听过的课程或者做过的项目的一些感想,是写给自己看的。

课程主要包括CS61ABC,之后打算学一下GAMES101,了解图形学相关知识。之后的事情之后再说!

CS61A(已完成)

于1月23日左右完成学习,耗时十天左右。本系列课程主要是用python语言讲述编程的一些基础知识,重难点包括面向对象编程、高阶函数的运用、迭代等知识点,整体比较简单(由于比较急,我没有去做CS61A的homework和project),知识点和高中技术重合度比较高,但是总的来说更加深入浅出,解释了很多我以前一开始很在意后来慢慢遗忘的问题。

提瓦特幸存者(已完成)

bilibili上voidmatrix发布的基于EasyX图形库的游戏开发教程。昨天花了一天跟着做完的,撸码800+行。虽然说只是亦步亦趋地复现作者操作,但是在这个过程中,一方面巩固了对C++的语法知识(比如重载、面向对象编程、析构函数等)的认知,一方面对游戏开发也有了初步认识,不同于以往用godot游戏引擎进行开发,这回几乎是手搓出游戏,对如何加载和播放动画、如何减轻CPU负担、如何增强代码可读性有了基本的认识。而更重要的是,这是第一个由我独自亲手从头做到尾的项目。

CS61B(正在学习中)

截至1月27日,完成期中前的内容,学习了Java的语法基础和特性,于Lecture 12开始学习数据结构,也不得不开始做homework和project了。未来十几天除了学驾照、拔牙和可能会出去玩一天,应该也没有什么很重要的事情,但愿我能学完吧。

记录

这个东西最后不见得能坚持下来,趁寒假清闲,姑且写一些……

1.27

CS61B

Lecture 9-16

类和接口的继承、多态;并查集的各种实现方法;算法复杂度和大O记法

Homework0A

过一遍Java的语法

1.28

Home0B

把映射、列表相关语法粗略复习了一遍

Lab0

之前61A的时候一直没写project和homework,因而也用不上那个检查作业的系统,更要命的是自己由于疏忽,忘了git clone作业的框架部分,导致想写也写不了(不过根本原因是不想写),今天因为打算试一下project,于是想办法配置好了测试环境

project0

2048小游戏,主要框架已经给出,以10个task的形式,填写若干个核心函数内容来实现小游戏的功能。这是我实现的第一个project!!!除了文档翻译部分用到了ai,绝大部分内容都是我用自己的大脑开发出来的,用时3.5h左右,虽然很漫长,但是好高兴!!!!!!!!

这个过程中遇到了很多意料之外的问题,包括最后程序也是以无法理解的方式跑通了……别管啦,过年了玩会智能手机吧,祝大家新年快乐!!!

1.29

Lab02 Bomb

内容涉及Debug,主要是用断点测试,虽然之前C程课有涉及但我完全不听完全不会,所以昨天血战2048的时候挣扎了很久,现在属于是信手拈来了。

值得注意的是,炸弹第三个参数涉及到一些我还不理解的东西,就根据我现在浅薄的分析,大概是哈希表中一个index对应一个value,但是给了一个random的参数,使得每次生成的哈希表都不一样。更确切地说,是不同次运行同一种子数对应不同参数,单次运行同一种子数生成的参数都是相同的。

很奇妙,好像是有这么一些道理但我不知道为什么!

Lab03 AdventureGame

教授的无聊小游戏……跑完test我都没兴趣玩一遍(),主要涉及堆栈追踪、断点测试,很直观的体现出了封装的思想和抽象的艺术。

用时一个多小时,其中最煎熬的大概就是Task3了,里面涉及很多个Bug,我Debugging很久才反应过来,程序服务于实际,于是我开始关注这段代码的功能,最后才得到答案。

写到这里突然发现怎么还有个PuzzleTest没写……虽然说是附加题但是还是写一下吧。

半小时左右跑通了,除了读题花了一些时间,最要命的一件事其实很搞笑。

具体地说,本题涉及异常断点(虽然不知道有啥用),由于answer.txt是空的,读取时程序发生错误,无法调试找到需要的guessthis的值,这折磨了我很久很久。

我当然知道要填写answer啊,填answer就要知道guessthis,要知道guessthis就要程序能正常调试,正常调试就要能填answer……

后来我发现,其实只要随便填一个数字保证answer.txt非空,就可以调试并得到答案了:)

1.30

Project 1A

基于双向链表实现的数据结构,让我温习了一遍生疏的语法,别的没啥好说的。

Project 1B

基于循环数组实现的数据结构,题目读不懂耽搁了很久,不过其实不算很难,比较抽象的一点是没有给test要我自己写……我不想写哈:(

今天学习时间很少,可能就2h,主要是白天要看mygo二创,晚上要看avemujica第五集。

Lab04 Git

坦白地说,最莫名其妙的一集,最需要ai帮助的一集。出现了一些不明觉厉的问题,比如我到现在也不知道restore和checkout有啥区别。

至此,完成了CS61B的期中部分!Congratulations!

1.31

Lecture 15-18

今天内容随便写写,刚刚码字一会儿不知道按到什么删了……以后我只在vscode码字。

涉及分裂树、红黑树、哈希表。

Lab05 Disjoint Sets

并查集的算法实现。

Homework 2

基于并查集模拟渗流现象。效率优化部分比较难想到,还得练啊。

2.1

Lecture 19-20

哈希函数的底层逻辑,挺好理解的,但是这个声音很尖的教授我不喜欢,他每次讲课我就犯困。

lab06 BST

BST的算法实现,有点吃力,但和红黑树比起来算个鸡毛。

lab07 红黑树

红黑树的算法实现,一个晚上还没通过一个test;通过灵活运用Java Visualizer极大的提高debug效率,然而还是举步维艰,这一块好复杂。不过不得不说虽然我认清了自己代码写的依托的事实,但我的debug熟练度up了不少。明天尽量完成,我一定不要借助ai的力量。

2.2

lab07 红黑树

我有罪,我用deepseek做出来的。本次实验难点在于:

  • 理解insert方法的递归调用
  • 合并多种平衡化的特殊情况,找到共同点

因为我做的太急,导致代码臃肿而难以修改,最后变成屎山,不仅运行不来,还比ai提供的多了将近100行。

此外,此处代码有一个我觉得很巧妙的点,即递归调用insert的过程中多次堆栈,回溯时利用balance方法递归检查红黑树的平衡性,通俗地说,当insert成功后,不会只是不断地回溯直到进行下一步,而是每回溯一层,return一次balance(node),对node子树的平衡性检查,彻底避免了不平衡的现象。这个思路我真没见过,实现不了一点。

lab08 哈希映射

工程量比红黑树大但是复杂度比红黑树低。通过了57个tests,成就感给的很足。

Lecture 21-22

学习了最优队列、二叉最小堆、图等概念。

Plants’War

开了个新坑,跟随voidmatrix做一款本地联机双人对战游戏,同样是基于EasyX,用C++写的。不过开学临近,加上CS61B还有好多没做,而开学之后比赛科研两边都有难以承受的工作量,所以有一说一这个项目十有八九会烂尾。

2.4

Lecture 22

图和树的遍历,深度优先搜索的算法思想。

昨天和高中同学出去玩了,今天练科目二,明天学车完要打危机合约……

2.5

Lecture 23

BFS和DFS的介绍和对比,以及最短路径问题。

截至目前还有大约2个Homework,2个Project,2个Lab,开学前包不能完成,开学后事情很多,我只能希望自己能在一个月内完成吧。

2.6

Project 2a Ngrams

词频的可视化工具,只完成了时间序列的数据结构实现和词频表的部分实现,整体难度还行,明天再做。

今天等拔牙+看avemujica,明天要练一整天车,晚上应该可以完成Project 2a。

2.7

Project 2a Ngrams

成功完成,耗时比较长,主要是工程量较大,debug的时间比较长。完成了NGramMap类的实现和方法编写、本地网站的词频输出及可视化。

难点如下:

  • 大文件读取要求算法复杂度控制在O(N^2)以下;
  • 图片编码等一些陌生知识的理解需要花费时间;

别的其实都还好,花时间长主要也是因为专注力不够+眼睛不适。不过我写的很爽,明天没事情,打算再写一个lab,听一两节课,也有可能先去做Plants’War,再说吧。9号练车10号科目二11号出去玩12号歇一天13号返校,byd其实已经没有时间学习了。不过小半个寒假(15天左右)完成61B的这么多内容我也很满意了。

2.8

Lecture 24&27

24关于最短路径问题和Dijkstra算法思路;27主要是软件工程实际问题中可能会遇到的问题。因为脑子燃尽了所以中间MST的两节课打算之后再看。

我突然发现Homework3不在skeleton-sp24里,不知道为啥,那先假装没有吧,那么截至目前应该没有没做的Project,可以再听一下课……不过显然短时间内是没空了。

2.9-2.11

Lecture 25&26

MST及其相关算法、软件工程导论。

网站复活

复活了之前搭建的博客网站,删删改改了一些东西,把最近的学习记录加上去了。https://ottohere-mourn.github.io/

此外,Project2b的数据集找不到,也不太做的了。我不是完美主义者,不做就不做^_^

2.12

Lecture 28-31

学习前缀树、四种排序算法思想、软件工程导论。还有四门排序课两门软工课,一个Project一个Lab,接近尾声。明日返校,今晚也是在家的最后一晚了。

2.14

科研

一款基于C++的毛坯生成与加工和刀具路径模拟的工业软件,完成了环境配置,可以运行代码,今天主要对部分代码进行了阅读理解。

2.15

竞赛

装车、优化结构。

2.16

科研

读代码、写阅读文档。

竞赛

优化夹爪结构、设计摄像头支架、采购摄像头。

2.19

Lab09 康威生命游戏

喜报,开学之后我终于又有时间做lab了,这个lab挺有意思,中间有个地方对作者思路的理解有一些偏差,耽搁了很久。

竞赛

配置了摄像头,写了视听联动代码。

科研

和导师聊了两句,明确了后续工作目标。