Skip to content

本科学习经验分享

作者:MakerHu

提示

本文是根据作者个人的经历总结的一些经验,具有比较强的特殊性和主观性,可能并不适用于所有人,但一定真诚,希望能对大家有所帮助

从一份简历 Todo List 开始

这一步的作用,更多的是为自己定下一个学习的方向,而不是迷茫,不知道自己该学什么,怎么学。

简历内容

  • 个人基础信息

    • 求职意向:前端、后端、算法、全栈?什么开发语言?
    • 爱好:个人博客、参与开源项目、机器人、各种运动……
    • 是否入党?
  • 教育背景

    • 是否班委?
    • 成绩排名?
    • 四六级?
    • 是否保研?
  • 实习经历STAR法则

    • 实习经历1:
      • 什么场景?
      • 要干啥?
      • 怎么做的?
      • 结果咋样?
    • 实习经历2:同上
  • 项目经历(同实习经历)

    • 科研项目
    • 工程项目
    • ……
  • 科研经历

    • 导师?方向?paper?
  • 专业技能

    • Java?
    • Go?
    • C/C++?
    • Vue?
    • Springboot?
    • ……
  • 获得荣誉

    • 国家奖学金
    • 一等学业奖学金
    • ACM 竞赛
    • 创新创业比赛
    • ……

其中最为重要的是三个经历,实习、项目、科研经历加起来最好要有四到五个拿得出手的项目。当你有了这些项目后,这份简历基本上就完成了。

项目来源

项目来源介绍推荐指数
导师项目导师的项目一般分为两种:横向项目、科研项目。横向项目偏工程,科研项目偏学术,一般是在大三下到大四上这个阶段找导师。导师非常重要,关系到你能不能有一个比较好的项目,有些导师项目少,可能就需要你自行去公司里找项目。🌟🌟🌟🌟🌟
学科竞赛学院、学校每年都会组织各种比赛,注意查收邮件和各个公众号的推送。学科竞赛最好参加一些含金量高一些的。🌟🌟🌟🌟🌟
实习项目公司的项目一般在场景上会比较复杂,但你负责的部分可能很简单繁琐,需要你在实习期间自行了解一下项目的整体架构、以及用到了什么技术,以丰富你的项目内容。这里要注意一点,就是大部分实习项目其实是比较难拿来做毕业设计的,因为毕业设计对创新性要求比较高,而实习的项目基本都是比较成熟的工程应用,创新性较少。但为找工作积累项目经验是有很大帮助的。🌟🌟🌟🌟🌟
参与开源项目GitHub 上有各种开源的项目,如果你能够在一个比较出名的项目中做出一些贡献,这个经历就非常具有竞争力,也能看出你对技术的热爱,这对个人的综合能力要求比较高,也是比较难的。🌟🌟🌟🌟🌟
课设项目与小学期项目这个应该是咱们所有同学都会有的,如果能把课设项目做好做深入了,其实也是个不错的项目经历,但总体来说这类项目通常是在比较短的时间内完成的,很难深入,因此别人在看简历的时候经常一眼就能看出这是你自己做的一个小项目,特别是像电商平台、图书平台这些在 B 站很容易就能找到教程的,其实不是特别适合放到简历里,用作学习还是可以的,因此这个项目来源比较不推荐。🌟🌟

学业

  • 大一大二非常重要,基本上你的本科成绩在大一大二就定型了,大三大四的成绩的权重相对较小,很难有所突破。
  • 四六级考试能早考就早考,因为高三应该是大部分人英语能力的巅峰了,特别是考试能力的巅峰。
  • 认真地、亲自地完成老师布置的课设项目,亲自动手做一个项目的过程能学到很多东西,并提升你的自学能力。
  • 小组作业中,能当组长尽量当组长,这非常提升你的综合能力,包括项目管理、人际交往以及专业技能(同时分可能还高一些)。在这个过程中你要慢慢构建起自己的项目管理体系。
  • 组长的建议:公平给分,不要当老好人,要让认真努力的人得到应有的分,给所有人一样的分并不会让大家都对你有感激之情。
  • 用好 ChatGPT,好的工具,程序员不能不会用(不是用来应付作业)

专业技能

学会检索

检索能力是自学能力的基础,可以说只要我们想学,就能在互联网上找到所有学习资料。而搜索引擎的使用也是有很多小技巧的。(搜索引擎推荐使用 Google,GitHub 也是一个很好的资源库,还有别忘了 ChatGPT!)

比如我要在知乎看看谷歌的搜索技巧,我们就可以直接在搜索框输入:

sh
intitle:"搜索技巧" intitle:"google" OR intitle:"谷歌" site:zhihu.com
intitle:"搜索技巧" intitle:"google" OR intitle:"谷歌" site:zhihu.com

推荐一个视频,这个视频讲了怎么搜索,并且有实操,很值得学习。

我个人觉得一个比较好用的搜索流程是

  1. 先在 ChatGPT 上整体了解,并获取到一些关键词
  2. 根据关键词到搜索引擎中去进一步搜索了解

常用工具

构建自己的知识库(代码库)

把自己曾经写过的代码、下载过的资料等,都做好归档,并且在需要的时候能够快速找到。这么做的好处主要有两个:

  1. 很多问题我们在学习的过程中会反复遇到,如果把写过的代码都保存好了,那么之后遇到类似的问题时可以快速回看解决方案。
  2. 如果我们能够整理好每次的项目,并在开发时注意项目的扩展性、可维护性等,可能在下次需要开发类似的东西时,能够直接复用。

建议:

  • 归档代码推荐直接使用 GitHub,这样就算换电脑了也没事儿。
  • 在项目过程中,尽量完善各种文档以及脚本,防止时间久了就不知道项目怎么运行了。
  • 可以尝试整理一些共性的知识,并写成博客,在当作自己的笔记的同时也可以分享知识。

形成自己的工作流

这里的工作流主要是指开发的工作流。下面以做一个 ChatGPT 代理的网站为例,说一下我的工作流。

我们的需求是实现一个网站,该网站能够转发我们的问题到 ChatGPT 并返回结果到我们的网页上。假设我们现在是一个完全没有相关开发经验的人。

  1. 创建项目文件夹

    这是一个我个人常用的项目目录结构,基本上所有项目都能用这个目录结构来完成。

    sh
    .
    ├── 00_resource      # 存放从外部输入的资源
    │   ├── 01_image     # 图片资源
    │   ├── 02_doc       # 文档资源
    │   ├── 03_download  # 下载的一些其他资源,如项目的一些外部依赖、环境安装包等
    │   └── ...
    ├── 01_pocket        # 口袋,用来放一些比较散乱的东西
    │   ├── pocket.md    # 记录各种零散的东西,比如用到的一些教程链接、对项目灵光乍现的想法等,总之不知道放哪就放这
    │   ├── issue.md     # 记录项目遇到的一些问题以及解决方案
    │   ├── todo.md      # 记录项目的待办事项以及成员分工
    │   └── ...
    ├── 02_output        # 存放项目的产出
    │   ├── 01_doc       # 文档输出,如详细设计说明书、使用手册、答辩PPT等
    │   ├── 02_script    # 项目输出的一些脚本,比如部署脚本、测试脚本、Dockerfile等
    │   └── ...
    ├── 03_workspace     # 项目的所有源代码,前端、后端以及项目用到的其他项目的源码等
    └── 04_meeting       # 会议记录,如会议纪要、会议录屏等
    .
    ├── 00_resource      # 存放从外部输入的资源
    │   ├── 01_image     # 图片资源
    │   ├── 02_doc       # 文档资源
    │   ├── 03_download  # 下载的一些其他资源,如项目的一些外部依赖、环境安装包等
    │   └── ...
    ├── 01_pocket        # 口袋,用来放一些比较散乱的东西
    │   ├── pocket.md    # 记录各种零散的东西,比如用到的一些教程链接、对项目灵光乍现的想法等,总之不知道放哪就放这
    │   ├── issue.md     # 记录项目遇到的一些问题以及解决方案
    │   ├── todo.md      # 记录项目的待办事项以及成员分工
    │   └── ...
    ├── 02_output        # 存放项目的产出
    │   ├── 01_doc       # 文档输出,如详细设计说明书、使用手册、答辩PPT等
    │   ├── 02_script    # 项目输出的一些脚本,比如部署脚本、测试脚本、Dockerfile等
    │   └── ...
    ├── 03_workspace     # 项目的所有源代码,前端、后端以及项目用到的其他项目的源码等
    └── 04_meeting       # 会议记录,如会议纪要、会议录屏等
  2. 技术选型

    经过搜索,我们了解到开发一个网站通常需要实现前端和后端,现在比较常见的方案是用 Vue 实现前端,用 SpringBoot 实现后端,要通过我们的网站访问 ChatGPT 需要使用 ChatGPT 提供的 API。如果我们需要用户登录后才能使用我们的服务,那可能还需要一个数据库来存储用户信息。数据库经过搜索,发现大多使用 MySQL。

    于是我们就大致确定了我们的技术方案:

    • 前端:Vue
    • 后端:SpringBoot,并在后端调用 ChatGPT 的 API
    • 数据库:MySQL

  3. 初始化项目、验证关键技术的可行性

    确定了整体的技术后,我们需要首先验证一下可行性,而不是直接开始很完善地开发。在这个项目里,最重要的就是验证下面几个数据流能不能跑通:

    • 前端与后端的数据交互
    • 后端与 ChatGPT 的数据交互
    • 后端与数据库的数据交互

    为了验证这几点,我们根据网上的教程:

    1. 搭建好 Vue 前端项目,搭建好 SpringBoot 后端项目,想办法用最简单的方式实现前后端的数据交互,比如前端给后端发送一个字符串,后端返回给前端另一个字符串。
    2. 更进一步,前端给后端发送一个字符串,后端把这个字符串存到数据库里。
    3. 前端给后端发送一个请求,后端从数据库里取出前面存的字符串返回给前端。
    4. 申请 ChatGPT 的 API token,使用测试工具如 Postman 测试 API 能否使用
    5. 前端给后端发送一个字符串,后端把这个字符串转发给 ChatGPT

    这样本项目的最关键的技术就验证完成了,这样我们就能保证项目是一定可行的。但因为这个项目需求比较小,关键技术验证完基本上整个项目也快开发完了,在一些比较大的项目中,我们很难在项目的初期就验证完所有技术的可行性,因此在这个阶段,主要是验证一些最关键的,对项目影响最大的技术的可行性。

  4. 创建本项目的 GitHub 仓库

    对关键的技术验证完毕后,就可以把项目工程文件上传到 GitHub 上了。对于这个项目,需要上传的就是 前端 Vue 项目,后端 SpringBoot 项目。

  5. 拆分功能点、分工开发

    这里的内容可以放在 /01_pocket/todo.md

    • 登录注册页面实现 张三 12月5日前
    • 登录注册后端实现(包括数据库)李四 12月5日前
    • 聊天窗口页面实现 李四 12月8日前
    • 消息气泡组件(支持 markdown 语法的渲染)张三 12月10日前
    • 后端调用 ChatGPT 接口的封装 王五 12月6日前
    • 聊天历史记录功能 王五 12月15日前

    这里补充一下,技术验证那也是可以进行分工的。

  6. 完善文档、完成开发

    项目开发完成后,把开发过程中整理的文档以及各类项目输出材料进行完善,放到 /02_output 里。并把各个源代码中的 README.md 补充完整,写清楚项目运行所需的环境、怎么配置运行,各种注意事项等。

    对于这个项目,我们可以输出的就有:

    • 详细设计说明书
    • 用户手册
    • ChatGPT API 如何使用
    • 数据库的 SQL 脚本
    • ...
  7. 归档

    把一些没用的东西删除了,整理好文件目录即可。如果项目长期不用了,想节省存储空间,可以把 /03_workspace 里的源代码全删了,把整个项目文件夹压缩打包,移到其他硬盘里或者上传网盘。下次要使用时只要解压缩,并把 GitHub 中的项目代码克隆到 /03_workspace 里即可,然后就可以根据之前整理的文档运行项目。

学习 23 种设计模式

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。

非常推荐大家在做项目前先学习一下这些设计模式以及设计模式的六大原则。这对大家开发的整体思路帮助非常大,可以让你写的代码更容易复用、更好维护。

开始写博客

博客最大的作用就是记录和分享,我认为是程序员最好的笔记本。在你写博客的过程中,无形中就形成了自己的知识体系而且也能提升分析问题、解决问题的能力。好记忆不如烂笔头,把你的知识记录下来在需要的时候可以快速回顾,也能帮助到其他人。

一些写博客的平台推荐:

  1. CSDN
  2. 知乎
  3. 稀土掘金
  4. 博客园
  5. 简书
  6. segmentfault
  7. 本网站(认真
  8. 自己搭建个人博客
  9. ...

现在的内容创作平台太多了,大家自行选择就行。基本上所有博客平台都支持 Markdown 语法,所以基本上如果用 Markdown 写,在哪都可以投稿。

这里讲一下怎么自行搭建一个个人博客网站。其实也非常简单,使用 GitHub 免费提供的 GitHub Pages 服务。这是一个静态网页的托管服务,本质上咱们的博客都是静态网页,不需要后端,所以直接用这个就行了。现在网上能找到各种各样的博客模板或者一些静态文档的模板,大家只要找到一个自己喜欢的模板后,根据教程部署上去就行。

这里推荐一些搜索的关键字:GitHub Pages 个人博客 Hexo VitePress

学生工作&班院校活动

  • 学生干部通常会有更多信息的来源渠道,相较于普通同学会有更小的信息差,因此学生干部最好能够打破大家的信息壁垒,共同进步。
  • 活动一定要做好记录,特别是对于班委,很多活动参与的人比较多,如果没做好记录,后期评优评先多时候就不太好统计。同学个人也保留好参与记录(活动拍照,拍照记录在一些评奖时的答辩ppt上会很有用)
  • 当学生干部,可能会累些,真的会提高个人的综合素质

怎么平衡学业和学生工作?

我认为按照优先级来说学业一定是更重要一些的,但很多时候我们是没有办法直接抛掉学生工作的,特别是在一些学生工作和考试撞在一起的时候就很头疼了。遇到这种情况,我觉得解决方案主要有两种:

  1. 预防

    很多工作通常会有比较长的准备时间,我们尽量在一个比较空闲的时间就把这个任务完成了,而不是托到最后,一些工作如果拖到最后,只要临时又有个其他任务的话,肯定就很难完成了。

  2. 疏解

    有时候确实任务很紧急,自己又有其他学业任务要完成,这时候就需要发挥各个学生干部的作用了,简单来说就是要做好分工,我们经常会发现很多干部形同虚设,主要干活的可能就那么一两个干部,这时候就要调动起大家的工作积极性,特别是在一些关键时刻能够一起解决问题。

毕业设计

很多公司的项目是很难拿来做毕设的,所以尽早跟导师确认一下自己的研究方向,如果导师能提供方向最好,如果不能,就尽快找个好的实习单位,能提供研究方向的那种

个人经验

  • 莽一点,别万事俱备了才开始干某件事,等万事俱备了八成就晚了,先报名再说(适用于任何需要主动报名的事情,组长、比赛、奖学金答辩、面试),没有截止日期是很难做到自律的
  • 在能承受的压力范围内可以尝试逼自己一把,这就用到上一条的方法了,先别管自己行不行,上了再说,上了可能就行了,甚至能做得很好
  • 可以尝试写写博客,当作整理笔记的同时,也能得到很多正反馈,简历上也能体现
    • 知识体系的整理
    • 正反馈,让你喜欢上技术与分享
    • 可以丰富简历
    • 面试时有时可以引导面试官问你会的内容
  • 与周围同学的关系是合作共赢,而不是竞争,要营造一个大家愿意分享的氛围,打破信息壁垒(这个真的很重要)
  • 别把卷和正常的努力混为一谈,经常会有同学在看到某个同学在学习或者写作业的时候就上去对他说“你真卷呀,别卷了”,这个行为平时偶尔开开玩笑可以,但我觉得大家别当真,如果写作业或者正常的学习都算卷的话,咱们现在的学习氛围和状态一定是有问题的。

以上。

Released under the MIT License.