跳转至

如何让自己看上去、闻上去都像一个 CS

5359 个字 预计阅读时间 18 分钟

Abstract

补充提示

本文尽量保持了原样,并没有进一步的更新。

文中的很多内容在学爷组 xg 2023 年春夏学期朋辈辅学「实用技能拾遗」课程中都有详细讲解,感兴趣的可以看一看 slides 以及回放。

本文转载自学爷组 QJJ 同学的 CC98 帖子:谈谈如何让自己看上去、闻上去都像一个 CS

以下是原文内容:

CS,即 Computer Science。众所周知,国内的计算机本科教育问题百出,其中在工具方面的介绍可以说是基本上没有。翁恺老师在第一节课说的:要逐渐让自己看上去、闻上去都像一个 CS 人,比如买十件格子衬衫

于是在这里笔者抛砖引玉,简要介绍部分在笔者学习 CS 的过程中遇到的有用的工具,以提高诸位的灵活性和生产效率。

说在前面的话

标题虽然说的是 CS,但不局限于计算机科学与技术这一个专业。事实上任何与计算机有关的泛 CS 专业 ( 如人工智能,信息安全 ) 都需要了解文中的工具。而对于其他专业的同学也欢迎阅读,如能有所帮助,笔者将深受鼓舞。

网络上的资源是非常丰富的,下列所有内容都能在网络上找到,因此涉及具体操作的部分笔者都没有过多叙述。而且笔者认为自主探索是学习中非常重要的一步,网上固然有很多的经验,但最后还是要由自己在整合各处的方法后,完成整个的探索。因此希望诸位能保持不怕折腾的心态,探索未知。

同时,文中的内容并非要一下子全部学会,而是在实践中逐渐学习。而且也并非所有东西都有必要,如文中的博客,服务器的部分笔者认为就不一定要使用,这里笔者只是力图竭尽自己所知,陈列出许多人在使用的能提高效率 / 带来收益的东西。至于哪些是需要掌握的,取决于你自己的选择。

此外碍于个人经验,许多地方只能简要介绍,且可能有错误的地方,还请诸位多多包含,敬请指正。

习惯方面

翻墙

外面的世界很精彩 ~

但出于各种原因,这里不做过多介绍。这点很重要,否则本文中的许多网站都无法进入。具体方法可以自行在网络上搜索,GitHub 上也有很多免费的资源(不过不翻墙的话 GitHub 也可能上不去)

英语

英语之于 CS 的重要性,已经有无数人强调,这里不再赘述,笔者这里仅浅谈部分和英语有关的习惯。

  • 从今天开始用 Google 搜索
    记得学长给我们经验分享的时候举了个例子,他说当时他的一位学弟问他方向导数的问题,他在 Google 上用方向导数的英文搜了之后,把 Wikipedia 的页面截图发给他了,然后学弟就说他懂了。毫无疑问,Google 上的有效内容非常可观,而且获取的难度不高。只要你克服对英文阅读的恐惧,你拥抱的是一个全新的世界。

  • 看英文原版资源(特别是教材)
    受制于国内教育水平和教育制度,国内许多自编教材的质量都一言难尽。(经典反例如同济《线性代数》)而外国教材的翻译也让人难以恭维,笔者许多时候看着一连串奇怪的中文组合起来不得其解,去找来英文原版方才恍然大悟。
    不止是教材,在计算机领域,绝大多数的网站、论坛、文档等资源都是全英的。不过好在基本上没有英语考试里的“长难句”,只要认识专业名词,看懂问题不大,更多的是习惯的转变。

  • 在一定的场合避开中文

    • 文件路径不要使用中文(如系统的用户名 , 各种文件夹)
      存在相当数量的由外国人开发的软件,不能正常处理包含中文的文件名或路径。别人在开发时,很难考虑到自己的程序在中文路径/文件名下会出现什么问题。而许多人使用中文命名文件的原因是因为清晰易懂,但实际上如果你提前做好规范,在英语命名下这点能做到,而且还能避免可能的路径问题。
    • 代码注释尽量不用中文
      中文注释缺乏一定的可移植性,许多时候在你的电脑上清晰的注释到了另外一个人电脑上,有可能就是一串乱码,甚至还有可能导致程序出问题。因此如果你要开源你的代码或是你的代码会被广泛移植,建议不要使用中文。

信息获取

  • 《提问的智慧》
    正如我校沟通技巧课课件所言:


    不止 CS,在各个领域里提问都是一项必备的技能。首先你要知道提问绝对不是解决问题的首选,因为从你提出问题到别人解答最后你自己解决是一个非常费时间的过程,这无疑会严重影响做事情的效率。你应该通过搜索等各种方式寻找自行解决的方法。如果依然无法解决,你才需要提问,并要正确、清晰地描述出问题。
    强烈推荐有空时阅读《提问的智慧》这本书,这是作为一个 CSer 的基本素养。遇到问题时刻切记先 STFW、RTFM、RTFSC.
  • 搜索引擎
    首先,把百度、搜狗这种搜索引擎扔了。无数次的事实证明,他们对我们的帮助是微乎其微的,甚至很多时候是副作用。这里点名批评百度百科,不说人话中的经典。
    笔者使用的是必应+Google,在 Edge 浏览器上就用必应,Chrome 浏览器上就用谷歌。顺带一提,别让360浏览器之流出现在你的电脑里。

邮箱

常用的邮箱一般是校园邮箱 /Gmail/Outlook/...

其中上大学后基本上都会注册校园邮箱,基本上可以应付日常需求 ( 如给老师发邮件补选课程 ) 而且许多软件如果填校园邮箱会有教育优惠,比如梯子。但是据同学说也存在用校园邮箱给外国老师发邮件结果被归入垃圾邮件的例子,而且存在毕业后邮箱被收回的风险。故笔者建议再注册一个 Gmail/Outlook 邮箱。这两个邮箱都比较好看,而且应用非常广泛,足够满足各种要求。

注:Gmail 需要翻墙才能使用。

另外,非常不建议使用 QQ 邮箱,因为这显得很不正式,而且给老师 / 教授发邮件很有可能被归入垃圾邮件。

记录方面

Markdown

Markdown 是一种轻量级标记语言,创始人为 John Gruber。它允许人们「使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者 HTML)文档」

———— 维基百科

在我的理解里,Markdown 是通过一些语法,自动为我们的文字进行排版,让我们更关注文章的内容和结构,而非样式

经常有人拿 Markdown Word 作比较,笔者认为 Word 的特点在于他的功能太多了,而我们的注意力可能会因此得到分散:我标题用多大的字号?什么字体?正文呢?文字颜色需要更改吗?等等问题都可能会让你的效率变慢,而 Markdown 不需要考虑这么多问题,只要你足够了解内容的结构,就能很容易地得到简洁明了的文章。如本篇文章,虽说不上多么好看,但笔者自认为也足够清晰。

此外 Markdown 的兼容性很强,越来越多的网站支持 Markdown 语法,如我校论坛 CC98,知乎等写作平台。

如何学习 Markdown 呢?

  • 首先要知道,Markdown 只是一种语法,因此任何能够打开纯文本的东西都能编辑 Markdown ( 如电脑上的记事本 )。但是我们仍然需要专门的编辑器来提供预览功能,不然我们只能看到一些符号。常用的 Markdown 编辑器有 Typora ( 现在要收费,据说下载旧版本 0.11.18 仍然可以使用 )VSCode+Markdown Preview Enhanced 插件 ..
    当然强如笔者同学,也是可以随便拿个东西写然后颅内预览的
  • Markdown 的具体语法其实是非常简单的,基本上知乎 /Bilibili 随便搜一篇教程即可。如此类实践性的技能,只需要在最开始记住基本操作,在实践中不断深化,如果遇到问题再上网搜索即可。
    这里贴出笔者同学的 Markdown 的 PPT,仅供参考 https://slides.tonycrane.cc/MarkdownLecture
    注:没挂梯子可能登不上去

LaTeX

LaTeX,是一种基于 TEX 的排版系统。利用这种格式系统的处理,即使用户没有排版和程序设计的知识也可以充分发挥由 TEX 所提供的强大功能,不必一一亲自去设计或校对。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学、物理文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。

———— 维基百科

LaTeX(注意大小写)是为了作者可以更加专注地编写的内容,而不是在乎他的外观。作者需要做的是通过章、节、表等简单概念指定文档的逻辑结构,让 LaTeX 负责格式和布局(你可能会觉得这段话和刚才 Markdown 里的话很像,确实是这样

正如维基百科所言,如果涉及到很多数学公式,LaTeX 绝对是极佳的选择,笔者身边就有很多同学在用 LaTeX 整理数学笔记。而且得益于他的排版功能,在写实验报告、论文时使用 LaTeX 也是非常不错的。

如何学习 LaTeX 呢?

  • 首先,LaTeX 的环境搭建比较麻烦,因此笔者推荐使用 Overleaf 这个在线编辑的网站,这里有现成的环境,还有很多模板可以使用(如笔者的简历就是利用 Overleaf 上的模板)
    本地 LaTeX 环境,笔者是借鉴了这篇文章 Visual Studio Code (vscode)配置LaTeX - Ali-loner的文章 - 知乎使自己的 VSCode 能够运行 LaTeX,至于其他如 TeXworks, TeXStudio 等编辑器,笔者无法给出具体经验,同学们可以自行上网搜索。
  • LaTeX 的具体语法笔者是通过 Overleaf 上的教程来学习的。链接如下 part 1 , part 2part 3 . 相对 Markdown 而言 LaTeX 的语法更多,需要更多的时间来熟悉。而且 Markdown 内是可以通过内 LaTeX 内嵌公式的 https://www.learnlatex.org/en/
    这里再推荐一个网站 https://texnique.xyz/,可以利用这个网站熟悉数学符号的输入。
  • 如果你很懒,不想写 LaTeX(比如笔者)可以利用 GitHub https://github.com/Keldos-Li/typora-latex-theme 提供的主题,将你的 typora 伪装成 LaTeX

博客 / 笔记本

这一点见仁见智,有的人觉得写博客就是为了装 *,有的人觉得写博客要很久,而且也没人看。笔者认为博客本身是一个记录的功能,在完成一件事后笔者希望能通过文字来记录自己的“心路历程”,利于以后回顾。而且写博客会要求你把这个东西重新梳理清楚,这样你对他的掌握又能更上一层楼。此外,博客还能帮助那些遇到同样问题的人,笔者在折腾电脑时遇到过很多问题,最后都是在别人的博客里找到答案,而现在笔者自然也想将自己的经验传递下去。知识来自网络,也理应回到网络。

笔记本也是同理,个人认为不同点在于笔记本侧重知识本身,而且更加理论化体系化;而博客侧重学习知识的过程,而且记录的东西往往更加具有实践性。

如何搭建自己的博客 / 笔记本呢?

  • 利用现成的平台,如语雀。这里不推荐 CSDN 之流,个人认为看上去很乱而且广告太多了,影响观感。
  • 也可以利用博客框架来自己搭建,如 Hexo,具体的安装过程可以见相关文档,Hexo 有很多主题供选择,也可以自行修改配置来实现个性化网站。 注:Hexo 官方文档部分内容不够详细,遇到困难还是要多多搜索。 还有 Mkdocs,笔者认为 Mkdocs 比较适合做笔记本的框架 这里贴出笔者同学的博客 https://blog.tonycrane.cc/ 和笔记本 https://note.tonycrane.cc/,仅供参考。自己的 blog 太丑了,不贴了

其他工具

GitHub

GitHub 是一个在线软件源代码托管服务平台,使用 Git 作为版本控制软件。事实上已经成为了世界上最大的代码托管网站和开源社区。

———— 维基百科

某种意义上说,GitHub 可以作为代码的网盘。GitHub 上面会有各种开源软件和项目,还有很多知识分享、技术书籍。

如何使用 GitHub?

  • GitHub 的官方文档 不过笔者没有看过官方文档,直接注册账户上手使用。平时逛逛,发现一些有趣的项目就 Star,如程序员在家做饭方法指南
    当需要自己上传代码/提 PR 时,再去学习具体的操作方法

  • HelloGitHub 是一个收集开源项目的网站,在微信也有同名公众号,可以让你很早地接触到优质的开源资源。

Git

Git 是一个分布式版本控制软件,可以运作版本控制,使得源代码的发布和交流极其方便。

———— 维基百科

什么是版本控制?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。即保存你每次修改后的文件版本。而我们刚刚所说的 GitHub 就需要 Git 来进行代码的上传下载。

如何学习 Git 呢?

  • 快速入门 Git 只需要网上搜索相关的博客 / 文章即可了解基本指令
    这里有一个小游戏,也可以用来熟悉操作 https://learngitbranching.js.org/?locale=zh_CN

  • Git 的命令和功能是非常多的,如果你要系统地学习 Git,可以看 MIT Missing Semester 里对 Git 的介绍 https://missing.csail.mit.edu/2020/version-control/
    还有官方开源书籍 Pro Git
    不过实际上经常使用的指令无非 git clone git pull git commit git push,其他指令笔者几乎都是需要的时候再 Google.

Linux 环境与命令行操作

Linux 一种类 UNIX 操作系统。而我们使用的操作系统一般是 Windows,有人就会问了:我们已经有 Windows 了还要 Linux 环境干什么呢?根据笔者自身经历,搭建 Linux 的开发环境比搭建 Windows 的开发环境简单,而且更稳定。

此外命令行是一个非常神奇的东西,可以通过命令完成很多自动化工作,如进程自动重启,定时;可以方便地进行批量、重定向、管道操作;还可以很方便的安装软件,如在 Ubuntu 下只需要输入 sudo apt install python3 即可安装 python3. 一个良好的终端 ( 使用命令行的地方 ) 可以完全代替图形化界面 ( 如下文要介绍的 WSL,本身是没有图形化界面的,只有一个终端 )

Windows Powershell, cmd 上的命令行操作比较鸡肋,如果坚持在 Windows 下面使用命令行的话强烈建议安装 Windows Terminal.

如何搭建 Linux 环境呢?下面列举可行的途径,选择你喜欢的即可。

  • 买一台 MacBook
    记得翁恺老师在第一学期上课时问我们有多少人在使用 Mac,发现只有几位同学,他说:“没事,等到了大三大四你们至少一半人会换成 Mac 的。” MacBook 的操作系统是 macOS,是类 Unix 内核系统,因此也可以在他的 Shell 上体验到和 Linux 几乎一样的逻辑。
    这里是仅从获得 Linux 环境方面讲,Mac 是很不错的,但 Mac 到底是否适合自己,还请诸位自己了解。

  • Windows+Linux 双系统
    双系统的优点在于:对硬件要求低,CPU、内存、磁盘空间等只要满足运行一个系统的要求;两个系统都可以直接访问硬件。
    双系统的缺点在于:只能运行一个系统,无法同时开启两个系统;配置比较麻烦,需要一定磁盘分区和系统引导的基础知识。

  • 虚拟机
    虚拟机与双系统相对应,其优点在于可以同时运行两个甚至多个系统,而且配置简单,基本上是即插即用。但缺点就在于对配置比较高,而且无法访问部分硬件。
    常用的虚拟机软件有 VMware Workstation, VirtualBox...

  • WSL

    WSL,即适用于 Linux Windows 子系统 (Windows Subsystem for Linux),可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。

    ———— 微软 WSL 官方文档

    笔者现在使用的就是 WSL2,选择的 Linux 发行版是 Ubuntu20.04. 具体安装以及用途可以参照官方文档 https://docs.microsoft.com/zh-cn/windows/wsl/

  • 服务器
    这里仅列出,现阶段实际意义不大,有需要可以自行上网了解。

重要网站

  • stackoverflow
    Stack Overflow 是一个程序设计领域的问答网站,有点类似于知乎,但不会像知乎那样,你提出技术问题下面回答全是关注 xxx 领取 xxx 电子书。你在开发过程中遇到的绝大多数问题,都可以在这上面找到答案,如果没有也可以自行提问。而且国内几乎没有好的 Stack Overflow 的模仿者,所以更要尽快接触 Stack Overflow.
    需要注意的是,如果要自己提出问题,要对提出的问题先发表自己的见解,描述自己的思路,自己达到了什么地方,这是对各位回答者的尊重;你在阐述自己所能达到的地步,你表明了你已经做出了什么样的努力,这是你对问题的诚意。同时我们还需要用英文准确地描述问题,这对我们的英语表达也是一种锻炼。 还有,尽量避免开放性的问题,你甚至可以问 1+1=?,但不要问为什么要学 C 语言。这类开放性问题更适合被放在知乎或者 Quora ( Quora 人称外国小知乎 )

  • 各种电子书网站
    正如上文所说,阅读英文原版教材是很重要的,但是实体书一般都又贵又沉,而且有些书确实没有买的必要,这个时候我们就可以在这些网站上面下载电子书。如果你有平板,还可以直接在书上记笔记,从此过上无纸化生活。

  • CS 自学指南
    可以说是笔者梦开始的地方,一位北大信科的学长,用他自身的经历汇集了许多国内外高校的优质公开课程,并通过这样的方式传递给其他人。笔者读完前言已经是热血澎湃,读了后记又感慨万千,国内CS本科教育的问题已经被无数人提起,希望同学们能尽早走上正路。

  • 名校公开课程评价网
    与 CS 自学指南类似

  • MIT Missing Semester
    这门课程教授了许多计算机的实用工具,如 Shell, Vim, Git 等。其内容更多的是对工具及其基本语法进行介绍,笔者认为这门课更多的是给这些工具留下一个印象,在需要的时候再详细学习,在实践中熟悉功能。
    课程的中文主页:https://missing-semester-cn.github.io/,已被官方收纳

特别鸣谢

CS 自学指南的作者 PKUFlyingPig,文章许多部分参考了他的 CS 自学指南;
给我提供过帮助的学长学姐同学,感谢他们的建议

言尽于此
惟愿此文能让诸位有所裨益
追风赶月莫停留
平芜尽处是春山