计算机相关知识

计算机相关知识 #

在此主要列一下计算机专业为主的哈,相关的内容可能也涉及到自动化、电子等专业,其实很多都是互通的。虽然很多课程我们学的时候觉得无聊,但是作为计算机专业人士,这些知识是真的需要了解的。

基础篇 #

这一部分我认为是大家都必须要掌握的内容。

  1. 编程语言:C语言(理解计算机的媒介),Python(快速开发脚本,机器学习基础语言),Javascript(互联网语言,Nodejs基础),Java(面向对象基础)

  2. 数据结构:线性表、栈、队列、树、图、排序。基础算法得会。

  3. 操作系统、计算机网络:文件系统、进程调度、网络管理、外设管理(串口开发)、以及Linux的各项指令。灵活使用Linux(或者服务器版本Windows),是计算机从业人员的基操。不管是做互联网开发、终端开发,都必须要会的。

  4. 网站开发:前端三件套(HTML+CSS+Jquery),后端开发语言(随便会一门就可以了),JSON API开发。现在网站开发已经抽象得非常好了,基本上可以使用Netlify+Supabase来快速解决很多问题。但是基础还是不能少的。 前端三件套最重要的概念可以参考我的一个 培训材料,要真正上手还得是 w3school,亲自动手试一试。

  5. 脚本开发:使用Python+Shell在Linux下自动化执行操作。这是在计算机的世界中的四肢,没有这项能力,寸步难行。

高级篇 #

这一部分我认为是需要一定爱好的,但也应该有用的内容。

  1. 并行计算、分布式服务。这是用多机解决问题的两类问题。能接触到牛B的集群环境。

  2. 并发。这是单机解决多问题的牛B思想,同时也是分布式服务的结点方案。

  3. 开发板或芯片(包括FPGA)。这是高效提供服务的方案,是软件“硬化”的途径。

  4. 软件架构、设计模式。集团军作战的阵型保障。

  5. 游戏开发。其实都是套框架。当年听说一个清华牛人,用了一周时间学习了一套最简单的游戏框架,做了一个属于两个人的小游戏送妹子。

科研篇 #

现在的研究都开始工程化了。虽然看上去学的东西多,但其实是降低了科研的门槛。能够看懂代码的,都能进来掺一脚。不过入门的时候,要学的东西还是有不少。

  1. 所有神经网络相关的知识。一定要了解相关的概念,不一定用得很熟,但一定要能够能跟人沟通相关内容。包括但不限于:正向传播和反向传播,梯度更新,MLP,CNN,RNN,LSTM,注意力机制,Transformer,Bert,GPT,Stable Diffusion。

  2. 阅读论文、查阅资料的方法。带着5个问题读论文,以及准确找到自己需要的资料,是科研的主要方法,也是牛人们解决问题的主要方法。学会后解决任何问题都受益匪浅。

  3. PPT制作。一方面是内容的整理,也是5个问题的套路;另一方面是使用图表、配色,美化PPT,不需要很复杂,但让人感觉用了心,高大上。

  4. 新手入门的套路:Tutorial -> Survey -> 近三年牛文(发表刊物好并且引用数高)-> 复现实验 -> 想改进思路

  5. 有不少人不知道什么叫复现实验,其实我觉得他们是不喜欢这些任务。带有好奇去跑代码的话,自然而然会想办法多了解一些的,多动一动代码,多做一些尝试,代码就懂了。假设我们在跑一个目标识别的代码,那么一定会有如下几个问题:

  • 这个任务的数据是怎么样的,算法是如何把数据读进去的?
  • 这个任务的输出是怎么样的,怎么才能拿到这个算法输出?
  • 算法过程是怎么样的,如果我想要把我的照片放进去,应该怎么操作?
  • 算法哪些部分是可以修改的?我能不能动一动它,获得更好的效果?
  1. 其实,科研的基础,也还是依赖于代码能力的,练好数据结构,走遍天下都不怕。