跳转至

软件组学习思路

考核时间

基地软件组的招新考核时间会尽量不与大家考试时间冲突,所以我们基地软件组考核将会从大家考完高数期中(第十周)后开始,在大家期末考试前暂停完成一轮的考核,假如不出意外的话,大致从第十一周或者十二周开始,进行为期一个月的第一轮考核,然后在大家期末考试前两三周完成,第一轮考核将会分为四次,每次一周 ,每一周都会给大家布置一定的任务去完成,考虑到很多同学没有基础或者有课程压力,我们每一次考核任务都会给大家一定的时间去学习。

一门编程语言

各种编程语言都是可以的,只要借此了解编程思想以及掌握编码基本技能即可。

我们推荐 C/C++ Python

考核任务中 C++ Python 都会用到。

程度:简单的算法和多文件编程。

Markdown(推荐简单掌握)

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。大家在学习过程中可以用 Markdown 来做笔记与自己的一些总结。

Git(推荐简单掌握)

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

摘自如何使用 Git - 前置知识 - 北京大学编译实践课程在线文档 | 北大编译实践在线文档

一些你需要知道的基本内容 :

  • 初始化 Git 仓库 : 在仓库目录中git init .
  • 忽略部分文件的更改 : 在对应目录中放置 .gitignore 文件 , 并在该文件中添加需要忽略的文件的规则 .
  • 查看仓库状态 : git status.
  • 暂存更改 : git add 文件名, git add -A 暂存全部更改 .
  • 提交更改 : git commit, 此时会弹出默认编辑器并要求你输入提交信息 . 也可以直接执行git commit -m "提交信息" .
  • 添加远程仓库 : git remote add 名称 仓库URL.
  • 推送本地提交到远程 : git push.
  • 查看所有提交记录 : git log, 你可以从中看到某个提交的哈希值 .
  • 把仓库复位到某个提交的状态 : git reset 提交的哈希值.
  • 从当前提交新建分支并切换 : git checkout -b 分支名.
  • 切换到分支 : git checkout 分支名.
  • 删除分支 : git branch -D 分支名.

上面提到了 .gitignore 可以让 Git 忽略目录中某些文件 , 且不让它们出现在 Git 仓库中 . 这有什么用呢 ?

你在开发过程中难免会产生一些 “只对你自己有用”“不值得永久保留” 的东西 . 比如你在开发的过程中希望写几个简单的输入来测试你的程序 , 或者验证你程序里的某处是否写对了 , 于是你新建了个名字叫 test.txt 的文件 , 里面写了一些测试的内容 , 然后你在本地调试的时候会让你的程序读取这个文件 .

test.txt 显然只是个用来存放写一些只对你自己有用的临时内容的文件 , 你不希望让 Git 每次都记录这个文件的更改 ( 因为没意义 ), 所以你可以把它写进 .gitignore , 来让 Git 忽略它 .

其他类似的情况还包括 , 你使用 VS Code IDEA 开发你的编译器 , 这些代码编辑器 /IDE 可能会在项目中生成一些配置文件 ( .vscode.idea ), 这些文件通常也是不需要被 Git 记录的 , 因为其中包含了你的一些个人配置 .

摘自 git 入门教程 - 南京大学 计算机科学与技术系 计算机系统基础 课程实验 2021

人生如戏 , 戏如人生

人生就像不能重玩的 Flappy Bird, 但软件工程领域却并非如此 , 而那不可思议的光玉就是 " 版本控制系统 ". 版本控制系统给你的开发流程提供了比朋也收集的更强大的光玉 , 能够让你在过去和未来中随意穿梭 , 避免上文中的悲剧降临你的身上 .

没听说过版本控制系统就完成实验 , 艰辛地排除万难 , 就像游戏通关之后才知道原来游戏可以存档一样 , 其实玩游戏的时候进行存档并不是什么丢人的事情 .

在实验中 , 我们使用 git 进行版本控制 . 下面简单介绍如何使用git .

游戏设置

首先你得安装git :

apt-get install git

安装好之后 , 你需要先进行一些配置工作 . 在终端里输入以下命令

git config --global user.name "Zhang San"        # your name
git config --global user.email "zhangsan@foo.com"    # your email
git config --global core.editor vim            # your favourite editor
git config --global color.ui true

经过这些配置 , 你就可以开始使用 git .

在实验中 , 你会通过 git clone 命令下载我们提供的框架代码 , 里面已经包含一些 git 记录 , 因此不需要额外进行初始化 . 如果你想在别的实验 / 项目中使用git , 你首先需要切换到实验 / 项目的目录中 , 然后输入

git init

进行初始化 .

查看存档信息

使用

git log

查看目前为止所有的存档 .

使用

git status

可以得知 , 与当前存档相比 , 哪些文件发生了变化 .

存档

你可以像以前一样编写代码 . 等到你的开发取得了一些阶段性成果 , 你应该马上进行 " 存档 ".

首先你需要使用 git status 查看是否有新的文件或已修改的文件未被跟踪 , 若有 , 则使用 git add 将文件加入跟踪列表 , 例如

git add file.c

会将 file.c 加入跟踪列表 . 如果需要一次添加所有未被跟踪的文件 , 你可以使用

git add -A

但这样可能会跟踪了一些不必要的文件 , 例如编译产生的 .o 文件 , 和最后产生的可执行文件 . 事实上 , 我们只需要跟踪代码源文件即可 . 为了让 git 在添加跟踪文件之前作筛选 , 你可以编辑 .gitignore 文件 ( 你可以使用 ls -a 命令看到它 ), 在里面给出需要被 git 忽略的文件和文件类型 .

把新文件加入跟踪列表后 , 使用 git status 再次确认 . 确认无误后就可以存档了 , 使用

git commit

提交工程当前的状态 . 执行这条命令后 , 将会弹出文本编辑器 , 你需要在第一行中添加本次存档的注释 , 例如 "fix bug for xxx". 你应该尽可能添加详细的注释 , 将来你需要根据这些注释来区别不同的存档 . 编写好注释之后 , 保存并退出文本编辑器 , 存档成功 . 你可以使用 git log 查看存档记录 , 你应该能看到刚才编辑的注释 .

读档

如果你遇到了上文提到的让你悲痛欲绝的情况 , 现在你可以使用光玉来救你一命了 . 首先使用 git log 来查看已有的存档 , 并决定你需要回到哪个过去 . 每一份存档都有一个 hash code, 例如b87c512d10348fd8f1e32ddea8ec95f87215aaa5 , 你需要通过 hash code 来告诉 git 你希望读哪一个档 . 使用以下命令进行读档 :

git reset --hard b87c

其中 b87c 是上文 hash code 的前缀 : 你不需要输入整个 hash code. 这时你再看看你的代码 , 你已经成功地回到了过去 !

但事实上 , 在使用 git reset hard 模式之前 , 你需要再三确认选择的存档是不是你的真正目标 . 如果你读入了一个较早的存档 , 那么比这个存档新的所有记录都将被删除 ! 这意为着你不能随便回到 " 将来 " .

第三视点

当然还是有办法来避免上文提到的副作用的 , 这就是 git 的分支功能 . 使用命令

git branch

查看所有分支 . 其中 master 是主分支 , 使用 git init 初始化之后会自动建立主分支 .

读档的时候使用以下命令

git checkout b87c

而不是git reset . 这时你将处于一个虚构的分支中 , 你可以

  • 查看 b87c 存档的内容

  • 使用以下命令切换到其它分支

    git checkout 分支名
    
  • 对代码的内容进行修改 , 但你不能使用 git commit 进行存档 , 你需要使用

    git checkout -B 分支名
    

    把修改结果保存到一个新的分支中 , 如果分支已存在 , 其内容将会被覆盖

不同的分支之间不会相互干扰 , 这也给项目的分布式开发带来了便利 . 有了分支功能 , 你就可以像第三视点那样在一个世界的不同时间 ( 一个分支的多个存档 ), 或者是多个平行世界 ( 多个分支 ) 之间来回穿梭了 .

面向对象的思想(推荐掌握)

在项目中采用面向对象的思想会让你和队友的体验更好。

良好的代码规范(推荐简单掌握)

优秀的命名规则和详细的注释会让你和队友的体验更好,写给自己看的代码写不写注释取决于你,但在 写团队中的代码时要尽量提供良好的可读性。

进阶学习

基地很多关于机器人的任务都是基于 Ubuntu 开展的,包括大家以后做很多关于嵌入式的开发都要接触, 学有余力的同学可以先接触一下。

推荐网站

Runoob

B

CSDN

这些也仅仅是学长学姐们的一些个人想法,我们也鼓励大家按照自己的思路去学习,在学习过程中 也希望大家可以边学习边写学习笔记,写上自己学习过程中的一些想法与遇见的困难,可以发给我们一 起交流,欢迎大家遇见问题在招新群里交流。(〜 ̄ ▽  ̄)〜