软件组学习思路⤴
编程语言⤴
各种编程语言都是可以的,只要借此了解编程思想以及掌握编码基本技能即可。
我们推荐 C/C++ 和 Python。
考核任务中 C++ 和 Python 都会用到。
程度:简单的算法和多文件编程。
Markdown⤴
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。大家在学习过程中可以用 Markdown 来做笔记与自己的一些总结。并且 md 文件也是搞软件相关开发中最常用的文本文件之一哦,学会了 md 文件的编写,以后可以尝试自己编写一个个人博客哟
(简洁好用且用途广泛,学长大力推荐)
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进行存档 , 你需要使用把修改结果保存到一个新的分支中 , 如果分支已存在 , 其内容将会被覆盖
不同的分支之间不会相互干扰 , 这也给项目的分布式开发带来了便利 . 有了分支功能 , 你就可以像第三视点那样在一个世界的不同时间 ( 一个分支的多个存档 ), 或者是多个平行世界 ( 多个分支 ) 之间来回穿梭了 .
面向对象的思想⤴
在项目中采用面向对象的思想会让你和队友的体验更好。
面向对象(OOP)的核心思想是将现实事物抽象为对象,通过封装隐藏内部细节、继承实现代码复用、多态允许不同类对同一方法有不同的实现。对象是数据和行为的结合体,强调模块化和可扩展性,让代码更贴近现实逻辑。例如," 汽车 " 作为对象,属性是颜色 / 型号,行为是行驶 / 刹车。
( 在 C++ 和 Python 考核中可能会体现哟 )
良好的代码规范⤴
优秀的命名规则和详细适当的注释会让你和队友的体验更好,写给自己看的代码写不写注释取决于你和你的代码风格,但尤其在 写团队中的代码时要尽量提供良好的可读性,这样可以减少队友的阅读成本,利于快速的合作。
(群里有 C++ 代码风格规范的相关文件,至于其他的,欢迎大家到处自行了解)
进阶学习⤴
基地很多关于机器人的任务都是基于 Ubuntu 开展的,包括大家以后做很多关于嵌入式的开发都要接触, 学有余力的同学可以先接触一下。
(群里面有学长写的 Ubuntu 优化安装指南哟)
推荐网站⤴
这些也仅仅是学长学姐们的一些个人想法,我们也鼓励大家按照自己的思路去学习,在学习过程中 也希望大家可以 !!!边学习边写学习笔记!!! ,写上自己学习过程中的一些想法与遇见的困难,可以发给我们一 起交流,欢迎大家遇见问题在招新群里交流。(〜 ̄ ▽  ̄)〜