软件组学习思路⤴
考核时间
基地软件组的招新考核时间会尽量不与大家考试时间冲突,所以我们基地软件组考核将会从大家考完高数期中(第十周)后开始,在大家期末考试前暂停完成一轮的考核,假如不出意外的话,大致从第十一周或者十二周开始,进行为期一个月的第一轮考核,然后在大家期末考试前两三周完成,第一轮考核将会分为四次,每次一周 ,每一周都会给大家布置一定的任务去完成,考虑到很多同学没有基础或者有课程压力,我们每一次考核任务都会给大家一定的时间去学习。
一门编程语言⤴
各种编程语言都是可以的,只要借此了解编程思想以及掌握编码基本技能即可。
我们推荐 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
:
安装好之后 , 你需要先进行一些配置工作 . 在终端里输入以下命令
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 status
查看是否有新的文件或已修改的文件未被跟踪 , 若有 , 则使用 git add
将文件加入跟踪列表 , 例如
会将 file.c
加入跟踪列表 . 如果需要一次添加所有未被跟踪的文件 , 你可以使用
但这样可能会跟踪了一些不必要的文件 , 例如编译产生的 .o
文件 , 和最后产生的可执行文件 . 事实上 , 我们只需要跟踪代码源文件即可 . 为了让 git
在添加跟踪文件之前作筛选 , 你可以编辑 .gitignore
文件 ( 你可以使用 ls -a
命令看到它 ), 在里面给出需要被 git
忽略的文件和文件类型 .
把新文件加入跟踪列表后 , 使用 git status
再次确认 . 确认无误后就可以存档了 , 使用
提交工程当前的状态 . 执行这条命令后 , 将会弹出文本编辑器 , 你需要在第一行中添加本次存档的注释 , 例如 "fix bug for xxx". 你应该尽可能添加详细的注释 , 将来你需要根据这些注释来区别不同的存档 . 编写好注释之后 , 保存并退出文本编辑器 , 存档成功 . 你可以使用 git log
查看存档记录 , 你应该能看到刚才编辑的注释 .
读档
如果你遇到了上文提到的让你悲痛欲绝的情况 , 现在你可以使用光玉来救你一命了 . 首先使用 git log
来查看已有的存档 , 并决定你需要回到哪个过去 . 每一份存档都有一个 hash code, 例如b87c512d10348fd8f1e32ddea8ec95f87215aaa5
, 你需要通过 hash code 来告诉 git
你希望读哪一个档 . 使用以下命令进行读档 :
其中 b87c
是上文 hash code 的前缀 : 你不需要输入整个 hash code. 这时你再看看你的代码 , 你已经成功地回到了过去 !
但事实上 , 在使用 git reset
的 hard 模式之前 , 你需要再三确认选择的存档是不是你的真正目标 . 如果你读入了一个较早的存档 , 那么比这个存档新的所有记录都将被删除 ! 这意为着你不能随便回到 " 将来 " 了 .
第三视点
当然还是有办法来避免上文提到的副作用的 , 这就是 git
的分支功能 . 使用命令
查看所有分支 . 其中 master
是主分支 , 使用 git init
初始化之后会自动建立主分支 .
读档的时候使用以下命令
而不是git reset
. 这时你将处于一个虚构的分支中 , 你可以
-
查看
b87c
存档的内容 -
使用以下命令切换到其它分支
-
对代码的内容进行修改 , 但你不能使用
git commit
进行存档 , 你需要使用把修改结果保存到一个新的分支中 , 如果分支已存在 , 其内容将会被覆盖
不同的分支之间不会相互干扰 , 这也给项目的分布式开发带来了便利 . 有了分支功能 , 你就可以像第三视点那样在一个世界的不同时间 ( 一个分支的多个存档 ), 或者是多个平行世界 ( 多个分支 ) 之间来回穿梭了 .
面向对象的思想(推荐掌握)⤴
在项目中采用面向对象的思想会让你和队友的体验更好。
良好的代码规范(推荐简单掌握)⤴
优秀的命名规则和详细的注释会让你和队友的体验更好,写给自己看的代码写不写注释取决于你,但在 写团队中的代码时要尽量提供良好的可读性。
进阶学习⤴
基地很多关于机器人的任务都是基于 Ubuntu 开展的,包括大家以后做很多关于嵌入式的开发都要接触, 学有余力的同学可以先接触一下。
推荐网站⤴
这些也仅仅是学长学姐们的一些个人想法,我们也鼓励大家按照自己的思路去学习,在学习过程中 也希望大家可以边学习边写学习笔记,写上自己学习过程中的一些想法与遇见的困难,可以发给我们一 起交流,欢迎大家遇见问题在招新群里交流。(〜 ̄ ▽  ̄)〜