“CS+X”

事情是这样的:

image-20240127025801634

收到很多朋友的支持!于是我觉得可以开始先写一写引子、一些思考、整个系列的内容架构,供大家提建议与意见。

(下面会称呼其他专业学生为非计算机专业学生,是因为我不知道怎么称呼比较简洁,没有贬低计算机之外专业同学的意思!)

0. 名字

我给这个系列暂定名为“CS+X”,意味Computer Science plus Anything。其实不准确,我这里主要想关注的,是使用数据获取与分析、机器学习、深度学习相关技术,完成其他专业领域课题的任务。但是感觉“ML+X”、“DL+X"等等都不全面,“AI+X”又很俗气。“CS+X”可以理解为,计算机知识帮助X领域任务吧。

1. 动机

因为自己也大四了,周围的朋友们也基本上和我同级。聊天的时候发现,很多毕设课题都多少会跟机器学习、深度学习沾边,但这些对于本科课程只学习了大计基、面向选择题的C++课程的朋友们来说,实在是过于陌生,不知道怎么学起。而熟悉我的朋友知道,我自己也是从学不懂计算机开始的。

我认为,其他专业与计算机本专业同学学习计算机相关知识,有着以下几个巨大的不同点:

  • 对计算机语言的认识与学习方法
  • 理论与实践的先后顺序
  • 分析问题的角度

下面论述:

对于计算机专业的学生,第一门语言课是C语言,考试形式为上机OJ。与其他专业的C++课程不同,我们C的考试不考察什么“++i++”的结果,只注重给你一个问题,用语言解答的能力。我印象当中许多学院的C++考试有很多选择题,写出代码运行结果等等,这些导致了两种思维模式的形成。对于一上来接受的是OJ学习的同学们来说,会认为语言,是我将解题思路转化为机器指令的一种工具;对于一上来判断“++i++”的同学来说,会认为语言就是语言,需要从头学习语法、句式构词。(当然,可能我们院有的语言课也这样,但这里针对的是第一门语言课而言,至少我上的C语言课是实践为主。)

这就导致了,很多同学在接触毕设课题后发现要用机器学习或者numpy等库,需要先学习Python,那么第一反应就是“那我找个网课,从头学一下Python吧!”实际上,对于计算机专业的同学,如果对一门语言比较了解(这里用的“了解”,我相信计算机专业学生明白是什么程度,也希望其他专业学生在简历上描述计算机语言技能时,尽量避免使用“精通”!小心呐!),那么上手另外一门语言,其实并不需要从0开始。因为很多抽象逻辑是相似的,不会因为换了门语言,对象就不是对象、变量就不是变量。最需要注意的是语言特性

所以,我认为对于其他专业同学们,如果因为毕设需要接触一门语言,不需要太花时间在掌握这门语言的所有特点上,关注与你课题相关的部分,实践中遇到困惑再去搜索,去看文档。我举个例子:

比如今天,我要做对窗外电线杆上的麻雀有几只的预测,那么我知道,在我拥有历史数据之后,我需要用机器学习方法去学习这些数据,并且预测将来的情况。然后我一查:(建议有条件的还是google~,这里百度显得例子更加贴切hhh)

image-20240127032257103

哦,要学编程基础!第一个是Python,那我先看看Python怎么做机器学习。

image-20240127032445086

这代码怎么和我之前学的C++差那么远呢?我得学学基础语法。

(最基础的语法学完,最基础的数据结构了解完,重新看代码)

现在好多了!那下一步感觉,应该学一下怎么安装这些库

(搜索出来,pip是什么、conda是什么,都看一看)

感觉这段代码看明白了。

上面举了个例子,大概就是,如果想针对某个需求A,学习某个语言工具B,那么个人认为最好的办法就是找一个用B解决A的示例,加上现在也有gpt等工具辅助你一步步学习代码,这样能快速的先和这个语言熟络起来。就好比,我们出生不久就知道,球扔起来就会落下,但初中才会学习万有引力公式一样。实践与理论,螺旋上升。

而关于分析问题的角度,我想这个在后面的部分会有更仔细的讨论,先埋个伏笔。

2. 内容

我其实对于想继续分享的内容与形式,也没有想的很彻底,先把目前的想法和逻辑摆出来:

  • 代码管理 – IDE/Git
  • 环境管理 – Anaconda/Pip
  • 不造轮子
  • DL/ML的基本逻辑
  • 如何与自身问题结合
  • 回归与分类
  • 表格、图像、音频数据
  • 爬虫(不确定)
  • 数据清洗+回归/分类

我的逻辑是这样:

因为我主要是想围绕使用数据获取与分析、机器学习、深度学习相关技术,完成其他专业领域课题的任务,这个主题。所以主要内容也集中在这一块,包括也会主要以Python为例子。

所以对于一个项目,首先就是要做好代码隔离、环境隔离,保存好各版本代码。接着,就是如何去找契合自己需求的轮子,怎么学习别人的代码,比较基本的机器学习和深度学习项目大概都是啥代码架构。然后,如何看待深度学习、机器学习,它们能干什么,比较适合干什么。之后,就是结合自己的问题,选择合适的模型与方法,并且考虑自身数据类型等等。

这些逻辑都只针对于,只是需要计算机的方法作为工具,解决自己领域问题,并不适用于自己创造新方法。我的能力也只能对刚起步、面向运用的朋友们有用,专业的朋友们轻喷。

3. 其他想法

如果这个系列能坚持下去的话(我的计划是每周抽出两个小时来完成),应该会对一些同学有帮助吧。如果有同学觉得这个确实有用,不妨给这个系列的代码仓库 https://github.com/ERICMIAO0817/CS-X 点个star~