CS自学指南-必学工具

Vim
为什么学习 Vim
Vim的好处:
- 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。
- 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。
- Vim 的宏操作可以批量化处理重复操作(例如多行 tab,批量加双引号等等)
- Vim 是很多服务器自带的命令行编辑器,当你通过
ssh
连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 PyCharm 提供了ssh
插件可以解决这个问题)。 - 异常丰富的插件生态,让你拥有世界上最花里胡哨的命令行编辑器。
Vim学习资料
技术文档:
视频教程:
Emacs
为什么学习 Emacs
Emacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如:
- 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。
- 既可以在终端无图形界面的场景下使用,也可使用有图形界面的版本获得更现代、更美观的体验。
此外,Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制,使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累,Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是,“Emacs 表面上是个编辑器,其实是一个操作系统”。只要稍作学习,你也可以编写属于自己的 Emacs 扩展。
Emacs学习资料
技术文档:
Git
为什么使用 Git
Git 是一款分布式的代码版本控制工具,Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了 Git 用来维护 Linux 的版本(给大佬跪了)。
Git 的设计非常优雅,但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对 Git 不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况(好吧是我)。
但相信我,和 Vim 一样,Git 是一款你最终掌握之后会感叹“它值得!”的神器。
Git学习资料
技术文档:
How to Write a Git Commit Message
视频教程:
GitHub
GitHub 是什么
从功能上来说,GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上,供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此,它已经演变为一个非常活跃且资源极为丰富的开源交流社区。全世界的软件开发者在 GitHub 上分享各式各样种类繁多的开源软件。大到工业级的深度学习框架 PyTorch, TensorFlow,小到几十行的实用脚本,既有硬核的知识分享,也有保姆级的教程指导,甚至很多技术书籍也在 GitHub上开源(例如诸位正在看的这本——如果我厚着脸皮勉强称之为书的话)。闲来无事逛逛 GitHub 已经成为了我日常生活的一部分。
在 GitHub 里,星星是对一个项目至高无上的肯定,如果你觉得这本书对你有用的话,欢迎通过右上角的链接进入仓库主页献出你宝贵的星星。
GitHub 学习资料
技术文档:
GNU Make
为什么学 GNU Make
大家第一次写 hello world 程序的时候一定都记得,在编辑完 helloworld.c
之后,需要用 gcc
编译生成可执行文件,然后再执行(如果你不理解前面这段话,请先自行谷歌 gcc 编译 并理解相关内容)。但如果你的项目由成百上千个 C 源文件组成,并且星罗棋布在各个子目录下,你该如何将它们编译链接到一起呢?假如你的项目编译一次需要半个小时(大型项目相当常见),而你只修改了一个分号,是不是还需要再等半个小时呢?
这时候 GNU Make 就闪亮登场了,它能让你在一个脚本里(即所谓的 Makefile
)定义整个编译流程以及各个目标文件与源文件之间的依赖关系,并且只重新编译你的修改会影响到的部分,从而降低编译的时间。
GNU Make学习资料
技术文档:
CMake
为什么学习 CMake
CMake 是类似于 GNU make 的跨平台自动软件构建工具,使用 CMakeLists.txt 定义构建规则,相比于 make 它提供了更多的功能,在各种软件构建上广泛使用。强烈建议学习使用 GNU Make 和熟悉 Makefile
后再学习 CMake。
CMake学习资料
技术文档:
视频教程:
LaTeX
为什么学 LaTeX
如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。
LaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由,LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。
Berkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话:
Every time I read a LaTeX document, I think, wow, this must be correct!
LaTeX学习资料
技术文档:
Free online introduction to LaTeX (part 1)
Free online introduction to LaTeX (part 2)
Free online introduction to LaTeX (part 3)
Docker
为什么使用 Docker
使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。
Docker 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。
Docker学习资料
技术文档:
KodeKloud Docker for the Absolute Beginner
Scoop
为什么使用 Scoop
在 Windows 下,搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准,导致各种开发环境的安装方式差异巨大,需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并管理常见的开发软件,省去了手动下载安装,配置环境变量等繁琐步骤。
例如安装 python 和 nodejs 只需要执行:
scoop install python
scoop install nodejs
Scoop学习资料
技术文档:
实用工具箱
下载工具
- Sci-Hub: Elbakyan 女神向你挥手,旨在打破知识壁垒的革命性网站。
- Library Genesis: 电子书下载网站。
- Z-library: 电子书下载网站(在 Tor 下运行较佳,链接)。
- Z-ePub: ePub 电子书下载网站。
- PDF Drive: PDF 电子书搜索引擎。
- MagazineLib: PDF 电子杂志下载网站。
- BitDownloader: 油管视频下载器。
- qBittorrent: BitTorrent 客户端。
- uTorrent: BitTorrent 客户端。
- 全国标准信息公共服务平台:各类标准查询和下载官方平台。
- 标准知识服务系统:检索与阅读所需标准。
- MSDN,我告诉你: Windows 操作系统镜像下载站,也有许多其他软件的下载。
设计工具
- excalidraw: 一款手绘风格的绘图工具,非常适合绘制课程报告或者PPT内的示意图。
- tldraw: 一个绘图工具,适合画流程图,架构图等。
- draw.io: 强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等等,支持 Onedrive, Google Drive, Github 导出,同时提供离线客户端。
- origamiway: 手把手教你怎么折纸。
- thingiverse: 囊括各类 2D/3D 设计资源,其 STL 文件下载可直接 3D 打印。
- iconfont: 国内最大的图标和插画资源库,可用于开发或绘制系统架构图。
- turbosquid: 可以购买各式各样的模型。
- flaticon: 可下载免费且高质量的图标。
- 标准地图服务系统: 可以下载官方标准地图。
- PlantUML: 可以使用代码快速编写 UML 图。
编程相关
- sqlfiddle: 一个简易的在线 SQL Playground。
- sqlzoo:在线练习 sql 语句。
- godbolt: 非常方便的编译器探索工具。你可以写一段 C/C++ 代码,选择一款编译器,然后便可以观察生成的具体汇编代码。
- explainshell: 你是否曾为一段 shell 代码的具体含义感到困扰?manpage 看半天还是不明所以?试试这个网站!
- regex101: 正则表达式调试网站,支持各种编程语言的匹配标准。
- typingtom: 针对程序员的打字练习/测速网站。
- wrk: 网站压测工具。
- gbmb: 数据单位转换。
- tools: 在线工具合集。
- github1s: 用网页版 VS Code 在线阅读 GitHub 代码。
- visualgo: 算法可视化网站。
- DataStructureVisual: 数据结构可视化网站。
- Data Structure Visualizations: 数据结构与算法的可视化网站。
- learngitbranching: 可视化学习 git。
- UnicodeCharacter: Unicode 字符集网站。
学习网站
- HFS: 各类软件教程。
- Shadertoy: 编写各式各样的 shader。
- comments-for-awesome-courses: 名校公开课评价网。
- codetop: 企业题库。
- cs-video-courses: 带有视频讲座的计算机科学课程列表。
- bootlin: 在线阅读 Linux 源码。
- ecust-CourseShare: 华东师范大学研究生课程攻略共享计划。
- REKCARC-TSC-UHT: 清华大学计算机系课程攻略。
- seu-master: 东南大学研究生课程资料整理。
- 笨鸟教程: 计算机相关知识的简要的教程。
- FreeBSD 从入门到跑路: 一本 FreeBSD 的中文教程。
- MDN Web Docs: MDN 网络开发入门手册。
- Hello 算法: 动画图解、能运行、可提问的数据结构与算法快速入门教程。
百科网站/词典性质的网站
- os-wiki: 操作系统技术资源百科全书。
- FreeBSD Documentation: FreeBSD 官方文档。
- Python3 Documentation: Python3 官方中文文档。
- C++ Reference: C++ 参考手册。
- OI Wiki: 编程竞赛知识整合站点。
- Microsoft Learn: 微软官方的学习平台,包含了绝大多数微软产品的文档。
- Arch Wiki: 专为 Arch Linux 而写的 Wiki,包含了大量 Linux 相关的知识。
- Qt Wiki: Qt 官方 Wiki。
- OpenCV 中文文档: OpenCV 的社区版中文文档。
- npm Docs: npm 官方文档。
交流平台
- GitHub: 许多开源项目的托管平台,也是许多开源项目的主要交流平台,通过查看 issue 可以解决许多问题。
- StackExchange: Stack Exchange 是由 181 个问答社区组成(其中包括 Stack Overflow)的编程社区。
- StackOverflow: Stack Overflow 是一个与程序相关的 IT 技术问答网站。
- Gitee: 一个类似于 GitHub 的代码托管平台,可以在对应项目的 issue 里查找一些常见问题的解答。
- 知乎: 一个类似于 Quora 的问答社区,可以在其中提问,一些问答包含有计算机的知识。
- 博客园: 一个面向开发者的知识分享社区,拥有一些常见问题的博客,正确率不能保证,请谨慎使用。
- CSDN: 拥有一些常见问题的博客,正确率不能保证,请谨慎使用。
杂项
- tophub: 新闻热榜合集(综合了知乎、微博、百度、微信等)。
- feedly: 著名的 RSS 订阅源阅读器。
- speedtest: 在线网络测速网站。
- public-apis: 公共 API 合集列表。
- numberempire: 函数求导工具。
- sustech-application: 南方科技大学经验分享网。
- vim-adventures: 一款基于 vim 键盘快捷键的在线游戏。
- vimsnake: 利用 vim 玩贪吃蛇。
- keybr: 学习盲打的网站。
- Awesome C++: 很棒的 C/C++ 框架、库、资源精选列表。
- HelloGitHub: 分享 GitHub 上有趣、入门级的开源项目。