计算机教育中缺失的一课 · the missing semester of your cs education

小编作为一个程序猿圈子的过来猿,一直觉得现在很多大学里的计算机课程往往只专注于传授学生关于从操作系统到机器学习这些学院派的课程或主题,而在一些工具的运用及精通方面,往往会留给学生自行摸索。

其实学编程的一大优势就是可以将繁重的操作性事务自动化,但是往往学生都会浪费时间在一些大量重复的任务里,效率低下、浪费时间,有时候还会造成更严重的后后果。

就像小编自己,当年就走了很多弯路岔路,在不断的犯错尝试的前提下才一步一步的提高自己。

而下面这个课程系列,则是小编机缘巧合之下发现的,主要是介绍各种能够立即广泛应用并解决问题的实用工具,具有非常强的实用性。

整个课程具有十一个章节的课题,分别是:

  • shell
  • Shell 工具和脚本
  • 编辑器 (Vim)
  • 数据整理
  • 命令行环境
  • 版本控制(Git)
  • 调试及性能分析
  • 元编程
  • 安全和密码学
  • 大杂烩
  • 提问&回答

shell

计算机最根本的输入方式,文字接口shell,一般的计算机设备通常都已经内置了终端,或者也可以安装一个,非常简单。

本章节课程中将使用 Bourne Again SHell为例, 简称 “bash” 。这是被最广泛使用的一种 shell,它的语法和其他的 shell 都是类似的。这一章节的课程将详细告诉大家shell 是什么?如何实用shell以及shell作为一个工具可以实现什么内容

Shell 工具和脚本

在上一个章节课程的基础上,这个章节的课程将学习执行一系列的操作并使用条件或循环这样的控制流

shell脚本针对shell所从事的相关工作进行来优化。因此,创建命令流程(pipelines)、将结果保存到文件、从标准输入中读取输入,这些都是shell脚本中的原生操作,这让它比通用的脚本语言更易用。

编辑器 (Vim)

写作和写代码其实是两项非常不同的活动。

虽然都是敲击键盘,但是当我们编程的时候,经常需要在文件间进行切换、阅读、浏览和修改代码,所以学会使用代码编辑器,对于一个程序猿来说,绝对是个好帮手。工欲善其事,必先利其器

这一章节课程将教会我们如何掌握某个适合自己的编辑器。

一般来说,学习一个复杂的代码编辑器的过程一般是这样的:

头两个小时,需要学习到编辑器的基本操作,例如打开和编辑文件、保存与退出、浏览缓冲区。当学习时间累计达到20个小时之后,使用新编辑器的效率应该已经和使用老编辑器一样快。在此之后,新编辑器的好处逐渐开始显现:有了足够的知识和肌肉记忆后,使用新编辑器将大大节省时间。而现代文本编辑器都是些复杂且强大的工具,永远有新东西可学:学的越多,效率越高!

数据整理

这一章节课程将会阐述一些数据整理的基本技术。通过整理数据的方法及如何运用数据的场景结合,不断地对数据进行处理,直到得到我们想要的最终结果。

命令行环境

通过之前的课程,应该已经学会如何使用shell进行工作,那么学习一些能够改善 shell 及其他工具的工作流的方法,就是这个章节课程的主要目的。

一般而言,通过定义别名或基于配置文件对其进行配置来实现是最常见的办法。这些方法可以帮助我们节省大量的时间。

例如,仅需要执行一些简单的命令,我们就可以在所有的主机上使用相同的配置。我们还会学习如何使用 SSH 操作远端机器。

版本控制(Git)

无论是团队工作还是个人工作,项目规模始终会越来越大,而这个时候,学会版本管理,将对项目裨益匪浅。

为什么说版本控制系统非常有用?因为即便只是一个人独立开发,它也可以帮忙创建项目的快照、记录每个改动的目的、基于多分支并行开发等等。如果是和别人协作开发,它更是一个无价之宝,通过版本控制可以看到别人对代码进行的修改的原因及区别,同时解决由于并行开发引起的各类冲突所在。

调试及性能分析

写完代码并不是终点,因为代码不会完全按照我们的想法运行,它只会完全按照我们的写法运行,所以一段成熟的代码势必要经历过不断的调试优化。

本章课程就会就将教会我们如何更好的进行代码调试及性能调优。

元编程

本章节我们会学习构建系统、代码测试以及依赖管理。当我们有机会接触到大型的代码库,这章节讲授的这些东西也会变得随处可见。

安全和密码学

作为一个程序猿,最基本的安全隐私意识一定要具备。尤其是越来越高速发展的现在,如何增强隐私保护和安全,一直是大家关注的重要内瓤。这章节将讲述比如散列函数、密钥生成函数、对称/非对称密码体系这些安全和密码学的概念是如何应用于前几节课所学到的工具(Git和SSH)中的。

大杂烩

这一章节,将就GitHub、修改键位映射、守护进程、备份、VPN、Markdown、Docker, Vagrant, VMs, Cloud, OpenStack等等各种程序猿日后会遇到的内容进行一番讲解。

提问&回答

最后,将总结各种曾经遇到的问题及解决方法,让我们快速的站在巨人的肩膀上看问题。