约 2386 字
预计阅读 5 分钟
漫游者日记(3):沢山
2025-02-23

各位晚上好,我是Changle_cat,是个大一学生。

本文写于开学后的一个周日,记录一些这周发生的事或者小特正在做的事,日期范围为公历2025年2月17日至2025年2月23日。

到了大一下学期,小特需要学的关键课程增加了几门,目前上过的有:线性代数、离散数学、大学物理。

先说说第一印象吧!

小特在初中的时候就想要学习怎么搞一个AI出来玩,结果网上一搜,各种文章里全是小特看不懂的符号。查阅之后才知道,这些基本上都是线性代数的符号,AI也和线性代数密切相关。

虽然小特的本科专业是计科,但还是有着一颗向着AI的心,特别是在看到英国程序员Vedal创造的AINeurosama后,这颗心更是愈发膨胀,虽然不知道具体还能膨胀多久,但至少现在,学好线代确实是——于我而言——唯一能向AI迈进的事了。

同样也是初中的时候,小特在某天晚上观看了老九学堂的直播,直播是经典的PPT播放和老九的解说,里面提到了一些学习编程与找工作相关的一些事,其中就有关于离散数学的部分,小特记得是老九特别强调的重要玩意儿。小特看完那场直播后,也是非常的感动啊(虽然已经不记得为什么了),还为此发了个说说。

作为一个2024级浙江新高考考生,小特在高中的选课选的是物化技。其中的技术又分为信息技术和通用技术,信息技术教的是Python的使用,学完就可以自行搭建(?)一个简易而完整的物联网信息系统,比如一个大棚的温度检测与控制系统,涉及到Micro:bit板的开发以及FlaskSQLitePandas等模块的学习,以及算法和数据结构的入门。通用技术教的是木工、金工、画图纸、模电以及数电,而学到数电,自然也会涉及与门、或非门之类的逻辑单元,以及简单的逻辑运算。

小特在学习离散数学第一课的时候,就出现了强烈的既视感。P∨QP∧Q,不就是通用技术的逻辑运算嘛!只不过在高中的通用技术教辅里写的是P+QPQ。同样的,吸收率A∨(A∧B)⇔A在通用技术里表示的是A(A+B)=A。但我这么说似乎就有喧宾夺主之嫌,毕竟通用技术是一门杂糅的学科,其目的是用来考试的,并不具有离散数学那样的专业性,真逻辑运算还得看离散数学。

说实话,我暂时还不能理解大学物理对于计算机科学学习的帮助,只是希望这门课能在未来给我一记回旋镖,让我在遇到某些困难的时候,有种「哇!还好学了大学物理!」的感觉。

小特本来打算去学JavaJavascript之类的语言,并没有深学C/C++的意思。截至到昨天,所有我写的C/C++代码都是单文件,只要能完成「课程的任务」就足够了。

「课程的任务」······这不就来了嘛!这学期的C语言程序设计课程似乎不上课了,但学生要完成两个项目:

  1. 学生成绩管理系统(经典的增删改查以及数据处理
  2. 能实现变量赋值存储的计算器

这样的两个项目,若还是单文件完成,小特就认为有点太不「尊重」了,而且小特本身也很不喜欢堆成一坨的代码,于是决定自主学习CMake。当然,学习的标准还是只要能完成「课程的任务」就行。

小特在学习CMake时,为了练习,让AI生成了一个链表类的C++库。之后,小特结合自己对C++模板的理解,对代码进行了修改,使其链表的值类型从原本只能容纳int类型,变为可以根据需要选择类型的通用链表。最后,在main.cpp文件中include并调用了这个库,但在让CMake编译时却遇到了undefined reference to的问题。

起初,小特还以为是CMakeLists写的有问题,自己用gcc进行手动编译后,却发现同样的问题仍然存在。在学长的帮助下,小特才知道,C++里模板类的成员函数不能定义在外面,只能全部写在*.h文件里。

Warning
下面是错误示范!

// 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还是gbkwine去执行编译出来的.exe文件的结果就是乱码。然而,根据其他人的测试结果,这个.exe文件在Windows平台是可以正常运行且没有乱码的。对于这个问题,小特目前暂无解决思路。

说实话,小特确实不太会写博客文章,从开始写到这里,小特就已经花了两个半小时多的时间,其中还不乏有AI的帮助(一句话写不通顺就问问AI怎么表达),这也让小特看到了赤裸裸的现实——自己的表达能力是如此的欠缺,自己的脑袋是如此的空空如也!

随着学期进度的跟进,小特不再能保证「漫游者日记」的一周一更,就像标题说的那样:「沢山」。这是个日语里的形容词,读作takusan,是「數量很多、大量」的意思。

大学生活真的比我想象的忙碌的多,小特也不是什么时间管理大师,面对那么多事,难免会有所迟疑和不知所措,这些也都是小特要努力去克服的事情。

总之,会好起来的!

漫游者日记(3):沢山
https://changlecat.me/posts/diary_3/
作者
Changle_cat
发布于
2025-02-23