截屏2023-05-31 15.27.04.png

Vim

为什么学习 Vim

Vim的好处:

  • 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。
  • 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。
  • Vim 的宏操作可以批量化处理重复操作(例如多行 tab,批量加双引号等等)
  • Vim 是很多服务器自带的命令行编辑器,当你通过 ssh 连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 PyCharm 提供了 ssh 插件可以解决这个问题)。
  • 异常丰富的插件生态,让你拥有世界上最花里胡哨的命令行编辑器。

Vim学习资料

技术文档:

Vim 从入门到精通

Learn Vimscript the Hard Way

视频教程:

Editors (Vim)

Emacs

为什么学习 Emacs

Emacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如:

  • 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。
  • 既可以在终端无图形界面的场景下使用,也可使用有图形界面的版本获得更现代、更美观的体验。

此外,Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制,使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累,Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是,“Emacs 表面上是个编辑器,其实是一个操作系统”。只要稍作学习,你也可以编写属于自己的 Emacs 扩展。

Emacs学习资料

技术文档:

专业 Emacs 入门教程

Git

为什么使用 Git

Git 是一款分布式的代码版本控制工具,Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了 Git 用来维护 Linux 的版本(给大佬跪了)。

Git 的设计非常优雅,但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对 Git 不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况(好吧是我)。

但相信我,和 Vim 一样,Git 是一款你最终掌握之后会感叹“它值得!”的神器。

Git学习资料

技术文档:

Version Control (Git)

Pro Git

How to Write a Git Commit Message

Write yourself a Git!

build-your-own-x

project-based-learning

视频教程:

尚硅谷Git入门到精通全套教程

GitHub

GitHub 是什么

从功能上来说,GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上,供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此,它已经演变为一个非常活跃且资源极为丰富的开源交流社区。全世界的软件开发者在 GitHub 上分享各式各样种类繁多的开源软件。大到工业级的深度学习框架 PyTorch, TensorFlow,小到几十行的实用脚本,既有硬核的知识分享,也有保姆级的教程指导,甚至很多技术书籍也在 GitHub上开源(例如诸位正在看的这本——如果我厚着脸皮勉强称之为书的话)。闲来无事逛逛 GitHub 已经成为了我日常生活的一部分。

在 GitHub 里,星星是对一个项目至高无上的肯定,如果你觉得这本书对你有用的话,欢迎通过右上角的链接进入仓库主页献出你宝贵的星星。

GitHub 学习资料

技术文档:

GitHub 入门文档

GNU Make

为什么学 GNU Make

大家第一次写 hello world 程序的时候一定都记得,在编辑完 helloworld.c 之后,需要用 gcc 编译生成可执行文件,然后再执行(如果你不理解前面这段话,请先自行谷歌 gcc 编译 并理解相关内容)。但如果你的项目由成百上千个 C 源文件组成,并且星罗棋布在各个子目录下,你该如何将它们编译链接到一起呢?假如你的项目编译一次需要半个小时(大型项目相当常见),而你只修改了一个分号,是不是还需要再等半个小时呢?

这时候 GNU Make 就闪亮登场了,它能让你在一个脚本里(即所谓的 Makefile)定义整个编译流程以及各个目标文件与源文件之间的依赖关系,并且只重新编译你的修改会影响到的部分,从而降低编译的时间。

GNU Make学习资料

技术文档:

跟我一起写Makefile

CMake

为什么学习 CMake

CMake 是类似于 GNU make 的跨平台自动软件构建工具,使用 CMakeLists.txt 定义构建规则,相比于 make 它提供了更多的功能,在各种软件构建上广泛使用。强烈建议学习使用 GNU Make 和熟悉 Makefile 后再学习 CMake

CMake学习资料

技术文档:

CMake Tutorial

视频教程:

IPADS新人培训第二讲: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)

一份简短的关于 LaTeX 安装的介绍

TEX Live 指南

现代 LaTeX 入门讲座

一份其实很短的 LaTeX 入门文档

Docker

为什么使用 Docker

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。

Docker 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。

Docker学习资料

技术文档:

Docker 官方文档

Docker From Scratch Workshop

KodeKloud Docker for the Absolute Beginner

Scoop

为什么使用 Scoop

在 Windows 下,搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准,导致各种开发环境的安装方式差异巨大,需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并管理常见的开发软件,省去了手动下载安装,配置环境变量等繁琐步骤。

例如安装 python 和 nodejs 只需要执行:

scoop install python
scoop install nodejs

Scoop学习资料

技术文档:

Scoop

Quick Start

实用工具箱

下载工具

设计工具

  • 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 字符集网站。

学习网站

百科网站/词典性质的网站

交流平台

  • GitHub: 许多开源项目的托管平台,也是许多开源项目的主要交流平台,通过查看 issue 可以解决许多问题。
  • StackExchange: Stack Exchange 是由 181 个问答社区组成(其中包括 Stack Overflow)的编程社区。
  • StackOverflow: Stack Overflow 是一个与程序相关的 IT 技术问答网站。
  • Gitee: 一个类似于 GitHub 的代码托管平台,可以在对应项目的 issue 里查找一些常见问题的解答。
  • 知乎: 一个类似于 Quora 的问答社区,可以在其中提问,一些问答包含有计算机的知识。
  • 博客园: 一个面向开发者的知识分享社区,拥有一些常见问题的博客,正确率不能保证,请谨慎使用。
  • CSDN: 拥有一些常见问题的博客,正确率不能保证,请谨慎使用。

杂项

标签: cs, cs自学, cs自学指南, 自学cs, cs自学路线, cs自学计划, cs自学教程, cs自学资源, cs自学技能, cs自学教程入门, cs自学教程进阶, cs课程, cs基础课程, cs核心课程, cs进阶课程, cs高级课程, cs课程推荐, cs交流, cs技术, cs专业介绍, cs学习资源