MIT 6.NULL:计算机小白的第二门课程

613 阅读3分钟

终于花了一周多时间把这门默默无闻的MIT课程刷完了,作为一门以教学生如何使用工具为主的课程,它无疑是十分惊艳的,从广度上来说,从shell编程、Linux命令行操作、编辑器(Vim)、数据处理、Debug/Profiling工具、版本控制(git)等等,几乎把程序员需要使用的工具都讲了一遍。从深度上来说,关于git中的数据模型,极其简短干练的介绍git的底层数据结构,从下至上,醍醐灌顶。而其他的相对不那么难理解的部分,就用通俗易懂的小例子展示出来,基本照着做一遍,收获就非常多了。

关于shell

由于我不在互联网公司,接触到的团队水平可能会差一些,但是大多数人在使用Linux命令行/shell时,基本上是需要什么查什么。在6.NULL这门课程中,它会从最原始的基础教到函数的使用和常用的一些shell编程思想,同时还提到了一些好用的工具,QA中的一些基础问题也很有意思,比如source script.sh 和 ./script.sh 有什么区别;各种软件包和工具存储在哪里?引用过程是怎样的? /bin 或 /lib 是什么等等。

关于在Linux系统下开发

这门课程的宗旨是希望开发者多在Linux系统下使用命令行开发(除了开发Windows应用等),因此提到了非常多的在命令行下开发好用的工具,比如tmux、zsh。同时仔细的讲解了如何更好的使用Vim编辑器,作为一个在上这门课程之前,只会使用 "i", ": wq"的用户,在学习完Vim这节课,使用课程推荐的Vim配置(禁止使用键盘和方向键)后再习惯几天后,对Vim简直大爱(当然刚开始会很不习惯)。有必要特意提一句元编程(metaprogramming),元编程的意思就是对程序进行编程,也就是构建系统。对于没有工程经验的人来说,如何构建大型系统是很难去学习的,即使是在Linux下跑一个简单的C++工程或者在Windows下写一个Android程序,那些复杂的构建工具/配置都令人一头雾水,我本科毕业设计做的是视觉SLAM,当时照着教程一步一步构建的SLAM系统,写了非常多的cmake,但是却不知道到底为啥要写这个玩意儿,也不知道这个玩意的底层到底是什么,有什么优势。6.NULL的元编程这一节就非常好的解答的我的困惑,这一节同时解答了依赖库/软件包的版本命名的小问题。总而言之,都是一些十分有用,但是学校里不会教,做项目时又默认你会的知识,完美符合了NULL这个课程标题。

计算机小白的第二门课程

为什么标题说这是计算机小白的第二门课程。任何一个入门计算机的人,往往是通过一门语言入门的(国内的《计算机基础》实在算不上入门),无论是什么语言,Python/C++/Java,学完语法,能写个排序算法就算是入门了。这时候大多数人往往会开始学习操作系统/编译原理等系统级课程或者是学习Web开发/后端/前端开发等,看似合理,但实际上中间却有不小的鸿沟,特别是对于非CS科班的人来说,在这一步被劝退的不要太多。所以强烈建议,如果有像我一样的跨行小白,又被复杂的计算机知识吓到,那强烈建议学一下MIT 6.NULL这门课程,这绝对是一门可以拨开计算机学科迷雾外衣,带你了解现代计算机系统工具魔法咒语的课程。