关于开发工具:计算机教育中缺失的一课-MIT-L11-QA

37次阅读

共计 2702 个字符,预计需要花费 7 分钟才能阅读完成。

https://missing.csail.mit.edu/
https://missing-semester-cn.g…
https://www.bilibili.com/vide…

笔记

OS 学习材料

  • MIT’s 6.828 – 研究生阶段的操作系统课程,带你实现一个 OS
  • 古代操作系统 – Andrew S. Tanenbaum,对各种概念做了零碎的解说
  • FreeBSD 的设计与实现(The Design and Implementation of the FreeBSD Operating System)– 对于 FreeBSD OS 不错的资源(留神,FreeBSD OS 不是 Linux)
  • 用 Rust 写操作系统

source script.sh./script.sh

不同点在于哪个会话执行这个命令。对于 source 命令来说,命令是在以后的 bash 会话中执行的,因而当 source 执行结束,对以后环境的任何更改(例如更改目录或是定义函数)都会留存在以后会话中。独自运行 ./script.sh 时,以后的 bash 会话将启动新的 bash 会话(实例),并在新实例中运行命令 script.sh

性能剖析工具

  • 最简略然而无效的:在代码中增加打印运行工夫的语句,通过二分法逐渐定位到破费工夫最长的代码段。
  • Valgrind 的 Callgrind 能够让你运行程序并计算所有的工夫破费以及所有调用堆栈。而后,它会生成带正文的代码版本,其中蕴含每行破费的工夫。留神它不反对线程。
  • 特定的编程语言可能会有自带的或者特定的第三方的剖析工具
  • 用于用户程序内核跟踪的 eBPF、低级的性能剖析工具 bpftrace:剖析零碎调用中的等待时间,因为有时代码中最慢的局部是零碎期待磁盘读取或网络数据包之类的事件

浏览器插件

  • uBlock Origin:用处宽泛(wide-spectrum)的拦截器

    • 繁难模式(easy mode)
    • 中等模式(medium mode)
    • 强力模式(hard mode)
  • Stylus:自定义 CSS 款式加载到网站

    • 不要应用 Stylish,它会窃取浏览记录
    • 能够应用其余用户编写并公布在 userstyles.org 中的款式
  • 全页屏幕捕捉:残缺的页面截屏

    • 内置于 Firefox 和 Chrome 扩大程序中
  • 多账户容器:将 Cookie 分为“容器”从而容许你以不同的身份浏览 web 网页并且 / 或确保网站无奈在它们之间共享信息
  • 明码集成管理器:能够应用火狐和谷歌自带的明码管理器,也能够应用第三方专门的明码管理器,通常领有更弱小的性能。应用明码管理器也能够避免钓鱼网站,因为管理器不会在混充的域名站点弹出主动填充。

数据整顿工具

  • 在数据整顿一讲中提到的别离针对 JSON 和 HTML 的 jq 和 pup
  • Perl 语言 十分 善于解决文本,值得进行学习,但它是一种“Write Only”的语言,因为写进去的代码可读性十分差
  • Vim 也能够用来整顿数据,例如利用 Vim 的宏
  • Python 的 pandas 库是整顿表格数据(或相似格局)的好工具
  • Pandoc:a universal document converter,能够在各种文档之间进行转换,HTML、Markdown、LaTex、docx、XML 等等
  • R 语言(一种有争议的不好的语言)作为一种次要用于统计分析的编程语言,在管道的最初一步(比方画图展现)十分有用,其绘图库 ggplot2 十分 弱小。

Docker 与虚拟机的区别

  • 虚构机会执行整个的 OS 栈,包含内核(即便这个内核和主机内核雷同)
  • 容器与主机分享内核(在 Linux 环境中,有 LXC 机制来实现),当然容器外部感知不到,仍像是在应用本人的硬件启动程序
  • 容器的隔离性较弱而且只有在主机运行雷同的内核时能力失常工作

    • 例如,如果你在 macOS 上运行 Docker,Docker 须要启动 Linux 虚拟机去获取初始的 Linux 内核,这样的开销依然很大
  • Docker 是容器的特定实现,它是为软件部署而定制的,有一些奇怪之处,例如

    • 在默认状况下,Docker 容器没有任何模式的长久化存储,敞开之后数据隐没,而与之对应虚拟机通常有一个虚构硬盘文件保留在主机上

如何抉择操作系统

  • 能够应用任何 Linux 发行版(Distro)去学习 Linux 与 UNIX 的个性和其外部工作原理
  • 发行版之间的基本区别是发行版如何解决软件包更新

    • Arch Linux 采纳滚动更新策略,用了最前沿的软件包(bleeding-edge),但软件可能并不稳固
    • Debian,CentOS 或 Ubuntu LTS 的更新策略要激进得多,因而更加稳固
  • Mac OS 是介于 Windows 和 Linux 之间的一个操作系统

    • Mac OS 是基于 BSD 而不是 Linux
  • 另一种值得体验的是 FreeBSD

    • 与 Linux 相比,BSD 生态系统的碎片化水平要低得多,并且阐明文档更加敌对
  • 作为程序员,你为什么还在用 Windows?除非你开发 Windows 应用程序或须要应用某些 Windows 零碎更好反对的性能(例如对游戏的驱动程序反对)(有被触犯到。。。)
  • 对于双系统,咱们认为最无效的是 macOS 的 bootcamp,因为长期来看,任何其余组合都可能会呈现问题,尤其是当你联合了其余性能比方磁盘加密

Vim 还是 Emacs

Emacs 不应用 vim 的模式编辑,然而这些性能能够通过 Emacs 插件比方 Evil 或 Doom Emacs 来实现。Emacs 的长处是能够用 Lisp 语言进行扩大(Lisp 比 vim 默认的脚本语言 vimscript 要更好用)。

机器学习利用的技巧

  • 机器学习利用须要进行许多试验,摸索数据,能够应用 Shell 轻松疾速地搜寻这些试验后果,并且以正当的形式汇总。
  • 应用课程中介绍过的数据整顿的工具,通过应用 JSON 文件记录试验的所有相干参数,让你的试验后果变得东倒西歪且可复现。
  • 如果不应用集群提交 GPU 作业,那你应该钻研如何使这些过程自动化。

两步验证(2FA)

最简略的情景是能够通过接管手机的 SMS 来实现(只管 SMS 2FA 存在 已知问题)。咱们举荐应用 YubiKey 之类的 U2F 计划。

如何抉择浏览器

  • Chrome 的渲染引擎是 Blink,JS 引擎是 V8。
  • Firefox 的渲染引擎是 Gecko,JS 引擎是 SpiderMonkey。
  • 其余浏览器大多都是 Chrome 的变种,用着 Chromium 内核,运行着同样的引擎,例如新版的 Microsoft Edge。至于 Safari 则基于 WebKit(与 Blink 相似的引擎)。这些浏览器仅仅是更蹩脚的 Chrome 版本。
  • Firefox 与 Chrome 的在各方面并驾齐驱,但在隐衷方面更加杰出。
  • Firefox 正在应用 Rust 重写他们的渲染引擎,名为 Servo。
  • 一款目前还没有实现的叫 Flow 的浏览器,它实现了全新的渲染引擎,无望比现有引擎速度更快。
正文完
 0