各位晚上好,我是Changle_cat,是个大一学生。
本文写于开学后的一个周日,记录一些这周发生的事或者小特正在做的事,日期范围为公历2025年2月17日至2025年2月23日。
新课程初体验
到了大一下学期,小特需要学的关键课程增加了几门,目前上过的有:线性代数、离散数学、大学物理。
先说说第一印象吧!
线性代数
小特在初中的时候就想要学习怎么搞一个AI出来玩,结果网上一搜,各种文章里全是小特看不懂的符号。查阅之后才知道,这些基本上都是线性代数的符号,AI也和线性代数密切相关。
虽然小特的本科专业是计科,但还是有着一颗向着AI的心,特别是在看到英国程序员Vedal创造的AINeurosama
后,这颗心更是愈发膨胀,虽然不知道具体还能膨胀多久,但至少现在,学好线代确实是——于我而言——唯一能向AI迈进的事了。
离散数学
同样也是初中的时候,小特在某天晚上观看了老九学堂的直播,直播是经典的PPT播放和老九的解说,里面提到了一些学习编程与找工作相关的一些事,其中就有关于离散数学的部分,小特记得是老九特别强调的重要玩意儿。小特看完那场直播后,也是非常的感动啊(虽然已经不记得为什么了),还为此发了个说说。
作为一个2024级浙江新高考考生,小特在高中的选课选的是物化技。其中的技术又分为信息技术和通用技术,信息技术教的是Python的使用,学完就可以自行搭建(?)一个简易而完整的物联网信息系统,比如一个大棚的温度检测与控制系统,涉及到Micro:bit
板的开发以及Flask
、SQLite
、Pandas
等模块的学习,以及算法和数据结构的入门。通用技术教的是木工、金工、画图纸、模电以及数电,而学到数电,自然也会涉及与门、或非门之类的逻辑单元,以及简单的逻辑运算。
小特在学习离散数学第一课的时候,就出现了强烈的既视感。P∨Q
和P∧Q
,不就是通用技术的逻辑运算嘛!只不过在高中的通用技术教辅里写的是P+Q
和PQ
。同样的,吸收率A∨(A∧B)⇔A
在通用技术里表示的是A(A+B)=A
。但我这么说似乎就有喧宾夺主之嫌,毕竟通用技术是一门杂糅的学科,其目的是用来考试的,并不具有离散数学那样的专业性,真逻辑运算还得看离散数学。
大学物理
说实话,我暂时还不能理解大学物理对于计算机科学学习的帮助,只是希望这门课能在未来给我一记回旋镖,让我在遇到某些困难的时候,有种「哇!还好学了大学物理!」的感觉。
你好,CMake!
小特本来打算去学Java
和Javascript
之类的语言,并没有深学C/C++
的意思。截至到昨天,所有我写的C/C++
代码都是单文件,只要能完成「课程的任务」就足够了。
「课程的任务」······这不就来了嘛!这学期的C语言程序设计课程似乎不上课了,但学生要完成两个项目:
- 学生成绩管理系统(经典的增删改查以及数据处理)
- 能实现变量赋值存储的计算器
这样的两个项目,若还是单文件完成,小特就认为有点太不「尊重」了,而且小特本身也很不喜欢堆成一坨的代码,于是决定自主学习CMake
。当然,学习的标准还是只要能完成「课程的任务」就行。
小特在学习CMake
时,为了练习,让AI生成了一个链表类的C++库。之后,小特结合自己对C++模板的理解,对代码进行了修改,使其链表的值类型从原本只能容纳int
类型,变为可以根据需要选择类型的通用链表。最后,在main.cpp
文件中include
并调用了这个库,但在让CMake
编译时却遇到了undefined reference to
的问题。
起初,小特还以为是CMakeLists
写的有问题,自己用gcc
进行手动编译后,却发现同样的问题仍然存在。在学长的帮助下,小特才知道,C++里模板类的成员函数不能定义在外面,只能全部写在*.h
文件里。
// linkedList.h
template<typename T>
class LinkedList{
public:
... // 代码省略
T at(int index);
private:
... // 代码省略
}
// linkedList.cpp
#include "linkedList.h"
...
template<typename T>
T LinkedList::at(int index){
... // 代码省略
}
// 不能像上面这么写!!!
遇到的问题
小特在完成C语言程序设计的学生管理系统项目时,由于是在Arch Linux
环境编写的代码,所以,为了交作业,小特还得编译一份面向Windows系统的可执行文件。
首先,小特把所有文件都改成gbk
编码,再通过编辑CMakeLists
文件,把编译器切换成mingw-w64-gcc
,最后就是编译!确实编译出一个.exe文件,那么问题来了,我现在身边没有Windows系统的电脑,我该如何检查文件是否能运行呢?
Gemini
给我的答案是wine
。
很好!我立马在控制台里执行yay -S wine
,然后用wine
去执行编译出来的.exe
文件。成功了吗?并没有,控制台显示无法找到共享库libstdc++-6.dll
。
于是我按照AI的建议,把整个mingw
里的dll文件都复制到了项目里的build
文件夹下(也就是和编译出来的.exe
文件同目录),再用wine
执行!成功了吗?还是没有,但起码第一个问题解决了,紧接着的第二个问题是编码问题!
似乎,无论代码编码是utf-8
还是gbk
,wine
去执行编译出来的.exe
文件的结果就是乱码。然而,根据其他人的测试结果,这个.exe
文件在Windows平台是可以正常运行且没有乱码的。对于这个问题,小特目前暂无解决思路。
结语
说实话,小特确实不太会写博客文章,从开始写到这里,小特就已经花了两个半小时多的时间,其中还不乏有AI的帮助(一句话写不通顺就问问AI怎么表达),这也让小特看到了赤裸裸的现实——自己的表达能力是如此的欠缺,自己的脑袋是如此的空空如也!
随着学期进度的跟进,小特不再能保证「漫游者日记」的一周一更,就像标题说的那样:「沢山」。这是个日语里的形容词,读作takusan
,是「數量很多、大量」的意思。
大学生活真的比我想象的忙碌的多,小特也不是什么时间管理大师,面对那么多事,难免会有所迟疑和不知所措,这些也都是小特要努力去克服的事情。
总之,会好起来的!