CSDIY记录
前言
楼主大二机械,深感前途渺茫,若是继续沉溺在机院抽象落后主修课的摇篮里,以后就算是烷基巴丹了。先前在竞赛、科研中遇到了很多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挺有意思,中间有个地方对作者思路的理解有一些偏差,耽搁了很久。
竞赛
配置了摄像头,写了视听联动代码。
科研
和导师聊了两句,明确了后续工作目标。