前言: 一年前(2019.07)看了几个 Linux 和 Vim 配置视频,被 UP 主行云流水的操作和高度定制化的配置打动了,也想玩玩 Linux 。从 Windows 应用商店下载了个 Ubuntu 便不知所措,于是上知乎提问:在Windows系统上安装了Linux子系统Ubuntu,如何入门? 没有得到满意答案。大四一学年下来,因为各种机缘(项目、比赛、微软推出WSL2),算是“入门”了 Linux ,常用命令/工具比如 dockersshnpm 等等。笔者想借此文回答一下一年前自己的提问。

本文纲要:

  • “蠢”在:没有目标,谈何“入门”?

    • 为什么学习 Linux ?深入 OS ?服务器管理?
    • 经验之谈:工具的学习必须结合实践
  • 新手:卸载IDE(VS, PyCharm)拥抱命令行
  • 大四这一年我是缘何使用并学习 Linux 的
    • KDD CUP2020 :租了一台远程 CPU
    • HUAWEI DAI2020 :使用 docker
    • WSL2 :这是小白学习 Linux 最好的时代
    • 其他正在进行的项目与高手指点…

“蠢”在:没有目标,谈何“入门”?

很喜欢知乎的这个高赞问答:编程新手如何提高编程能力? - 牛岱的回答 - 知乎,链接:

  • https://www.zhihu.com/question/27574436/answer/745280697

“计算机的学习最好应该是自顶向下,而非自底向上(如理论物理)。” 作者的论证极其精彩,我不再赘述。其核心思想,我完全认同,并深有体会(大一大二没意识到这个道理,走了不少弯路,浪费了不少时间)。

对于 Linux 也是同理。

为什么学习 Linux ?深入 OS ?服务器管理?

如果要学习 Linux ,就要问自己:学习目标是什么?如何才算“学会了”?连标准都没有,哪里有“学会了”可说?

幸运的是,自己没有把时间浪费在 Linux 培训课程上。大四伊始,在 B 站上收藏了两门课,并用三个月时间学完了,笔记记录于 CSDN:

  • 操作系统:清华大学,向勇、陈渝
  • 数据结构:浙江大学,陈越、何钦铭

这两门课对我在 CS 路上的启发都极大,算是我从 野路子自学 改正到 系统理解 CS 的正道上的标志了。《操作系统(概论)》中,除了介绍操作系统历史外,几乎没有专门讲解 Linux 的地方,但是却改变了我对 Linux 的看法。

操作系统说白了也是一套软件,只不过这个软件直接与硬件对接,并且负责管理其他软件作为其他软件的容器为其分配计算资源。Linux 的优势在于:开源、精简、天生适合网络编程。

因此,我大概总结出两条学习 Linux 的理由:

  • 深入理解操作系统,如进程调度的软件算法、文件系统实现
  • 网络编程,服务端管理

前者在我看来有一定门槛,目前我也没有去阅读 Linux 源码,不便多发言;后者,不建议单独学习理论,而建议在需要时(或者现在就租个 Linux 服务器,很便宜),玩玩 ssh ,配置 vimzsh ,边用边学,完全来得及,很简单。

经验之谈:工具的学习必须结合实践

Linux 是操作系统,是软件,是管理计算机硬件与软件的工具;编程语言也是工具,是实现开发者的需求的工具。前文提到“边用边学完全来得及”,是源自笔者的亲身体会:笔者专程学习过太多遍相同内容,却都无疾而终了。

以前端(html/css)为例。

笔者第一次准备系统学习前端,是大一刚入学。在二手书店买了两本二手非知名中文书,以为有毅力就能啃完,并且把技能都留在脑子里。

事实证明,没有压力,没有需求,人是引发不出毅力的。且这两本书写的很差,整本书都像是知识点的罗列,前后内容不连贯,没有一个项目来复现。最后的结果就是,书没读玩,技能一点都没学会。

大二假期,我又想学习前端。在 B 站上找了个网课(某培训班资料)。恕我直言,这位老师可能很博学,但是教学手段实在是不高明。同样,没有完整的项目给人复现,没有循序渐进的知识树,搭建在学生脑海里。知识不成体系,实在是令人感到无奈。

最后,在看到老师对着 Chrome 调试台里的几层方块讲什么是 margin 、什么是 padding 、什么是 border 时,我实在是厌倦了填鸭式教学,关闭了课程,从此再也没点开过。

如果现在让我为一个网页设计爱好者安排前端入门课,我可能会如下设置学习路径:

  • 你眼中的网页是什么结构?而你的浏览器,一个容错率为 0 的机器人,该如何理解描述这种结构的代码由这个问题,引出 DOM 树这种 html 数据结构。此外,便不再赘述 html 中各类标签,让学习者在实践过程中自行根据需求检索、记忆、学习。
  • css?可以自己在 codepen 上复现几个小项目。每一句话都要理解其意义。由浅入深地复现项目,css 将无师自通。
  • JavaScript?理解面向对象吗?理解指针吗?传入的参数,是值还是对象,能搞懂吗?建议从其他语言比如 C++ 入手,先将编程基础思想搞懂;接下来才可专注于 JS 的特性,进行学习。最后,再跟着某些以动手实践为主网课,用一个框架(如 Vue)开发一款产品试试。
  • 对框架的持续学习必然引发对原理的思考。此时,学习者完全可以自主地关注框架的生态、社区与新品动向。学习并理解 JavaScript 编译原理也就是顺水推舟之事了。

新手:卸载IDE(VS, PyCharm)拥抱命令行

有位朋友的观点我很认同:“高度封装的工具剥夺了新手思考的机会, VS Code 作为文本编辑器适于老师教学,而非集成开发环境 IDE 。”

比如说做菜。想象一下,如果一个朋友,每道菜都是购买的现成的料包;每次只需要把洗好的菜配合现成的料包翻炒,出锅,你能说他会做菜吗?他明白这道菜的分别来自哪些调料吗?明白如何配比吗?

IDE 越来越笨重,也是同样的问题。我刚弃用 PyCharm (集成开发环境,IDE)转用 VS Code (文本编辑器)那阵,连项目根目录都分不清。想要引用自己写的一个 module ,却总是报错。这就是被 IDE 惯坏了的后果。当然,现在我们知道,我们在项目根目录下调用解释器命令 python3 main.py ,与 main.py 处于同一目录级别的模块便可以被引用。

而且讽刺的是,IDE 高度集成的大部分功能都不是给新手用的,是用于给专业人士协作、调试的。如果使用 IDE ,新人既承担了性能损失的代价,又没有得到其带来的好处。

因此,新人有必要:

  • 使用一个带有自动补全的文本编辑器如 VS Code 书写代码;
  • 使用命令行编译代码,运行脚本文件。

这有助于我们习惯在命令行(终端)中操作 Linux ,而非依靠图形界面。

大四这一年我是缘何使用并学习 Linux 的

前面提到了实践的重要性,我在提问并没有得到满意答案后,其实是准备搁置 Linux 的学习。但是对于 CS 的学习并未停下脚步,而各种比赛项目也未停歇。在高性能计算时代,你很难不与 Linux 打交道。我大四包括毕业后的暑假实践主要有如下几个。

KDD CUP2020 :租了一台远程 CPU

KDD CUP 2020 开赛时,我正好入门强化学习,主要学习对象是 Sutton 的 《Introduction》。在导师的建议下,我参加了 KDD CUP2020 的强化学习赛道。

我觉得这道题可能并不像图像数据,矩阵维度很大,需要依赖高性能 GPU 来运算。但是还是心疼自己的笔记本,于是便在 矩池云 上按小时租了个低性能的 CPU ,每晚跑跑我的算法。

当时我并没有配置终端,也不会用 screen ,每次只是在 VS Code 里 ssh Remote ,然后在 VS Code 的终端里小心翼翼地 python xxx.py 一下。

这算是我初次使用 Linux 。

HUAWEI DAI2020 :使用 docker

一个正在进行中的自动驾驶比赛(基于强化学习)。主办方提供了模拟器,这便是强化学习比赛的独特之处:并非对数据进行学习,而是对一个复杂的动态环境进行学习。而模拟器的安装,就需要一些功夫。主办方推荐使用 docker 安装。我便在 windows 10 上基于 wsl2 安装了 docker ,并且在 wsl2 中 build docker 。虽然出现几次失误,且文件系统发生了冲突,但是最终还是解决,模拟器与渲染都可以跑得顺畅。

这算是我第一次使用 docker ,我将经验与遇到的 bug 记录了下来:

  • WSL2 下的 Docker 配置,使用网易云镜像 + 更改 docker 文件系统

关于比赛的具体内容不便透露。

WSL2 :这是小白学习 Linux 最好的时代

就在今年,微软推出了 wsl2,相比原来版本的 wsl (Windows Subsystem for Linux),这个 Linux 子系统不再是“伪操作系统”,而是一个基于虚拟机的真实系统。

在以前,想要学习 Linux ,要么通过远程服务器,要么安装非官方虚拟机,要么给电脑再装一个系统(用一个 U 盘在开机时引起中断,我只见过视频讲解,并未真正实践过),要么在 Mac 中体验 Linux 原生命令;而现在,我们只需要在 Windows 系统中进行几步简单配置,再很方便地从应用商店中安装 wsl2 ,就可以体验 Linux 了!对于新手简直不要太友好!

可以说,有了 wsl2 ,这是小白学习 Linux 最好的时代。

其他正在进行的项目与高手指点…

最近在与一些颇有经验的朋友们合作,大家经验都很丰富,也乐于指导,这让我对于 Linux 的使用能力也得以潜移默化进步。具体内容不便透露。

因此,2019 的 PiperLiu ,你想好要怎么入门 Linux 了吗?祝顺利!

PiperLiu,
2020.9.1

一年前我在知乎上提了个愚蠢的问题:如何入门 Linux ?相关推荐

  1. 知乎上获赞率最高的神回复(转载)

    知乎上获赞率最高的神回复 --看完整个人都神清气爽 很多时候,一句犀利尖锐或充满哲理的话,往往比长篇大论更能打动人.点醒人.当你遇到人生难题的时候,不妨来看看这66个知乎上获赞率最高的神回复吧. 01 ...

  2. 知乎上获赞率最高的66个神回复,看完整个人都神清气爽

    很多时候,一句犀利尖锐或充满哲理的话,往往比长篇大论更能打动人.点醒人.当你遇到人生难题的时候,不妨来看看这66个知乎上获赞率最高的神回复吧. 01 Q:交朋友的标准是什么?      A:出世的智者 ...

  3. 在知乎上泡了这么久,工作、工资、生活还是没有起色是什么原因?

    陆游同学在八百多年前就回答了这个问题:纸上觉来终觉浅,绝知此事要躬行. 重新解读一遍题主的问题,题主其实想表达的是:泡知乎这么久了生活都没有起色,我TM这么辛苦虔诚地天天泡知乎有毛用? 而我们都知道人 ...

  4. 知乎上神回复,看完神清气爽

    知乎上45个神回复,看完整个人都神清气爽 ✎国馆说 你是怎样,你的世界就怎样. 来源 | 武志红(ID:zzds) 1                    交朋友的标准是什么? - Question ...

  5. 知乎上40个有趣回复,很精辟!

    大过年的就不发学习类文章了,最近看到知乎上一些比较有趣的问题和回复,分享给大家. 01 - Question - 交朋友的标准是什么? - Answer - 出世的智者, 入世的强者, 或者正常而阳光 ...

  6. 珍爱生命,远离微软,一点感受源自知乎上的某人评论

    以下纯转载,不代表博主观点^_^,吃瓜请自重.. 珍爱生命,远离微软,一点感受源自知乎上的某人评论 http://blog.sina.com.cn/s/blog_8ba3f5130102vty7.ht ...

  7. 知乎上的一道问题:出家人怎么解决性欲?

    知乎上的一道问题:出家人怎么解决性欲? 2017-1-8 19:00| 发布者: 新闻| 查看: 7707| 评论: 0 摘要: 这是知乎上的一道问题.原题叫<和尚怎么解决性欲>. 本来由 ...

  8. 知乎上这个程序员火了。。。

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 在知乎上看到一个很火的程序员,他火不是因为编程能力牛逼,而是因为给老板修了一次U盘. 下面让我们看看他的 ...

  9. 知乎上这个程序员火了,竟是因为给老板修了一 次U盘...

    在知乎上看到一个很火的程序员,他火不是因为编程能力牛逼,而是因为给老板修了一次U盘. 下面让我们看看他的故事: "哎,我这电脑出问题了,过来帮我修一下." 做为一名全栈程序员,居然 ...

最新文章

  1. 硬核!如何模拟 5w+ 的并发用户?
  2. CATIA中使用约束时提示“创建的约束是临时的。若希望使他成为永久约束,则需要在单击确定按钮之前激活约束开关。”
  3. Max retries exceeded with URL报错小记
  4. python会计实证研究_描述性统计分析在实证研究中的作用及具体软件实现——以SPSS为例...
  5. Windows安装WSL进行机器学习(windows和Ubuntu同时使用)
  6. Docker资源限制
  7. OpenShift 4 - DevSecOps Workshop (15) - 利用OpenShift GitOps向多个目标部署应用
  8. VM 与 与 Linux 的安装
  9. caffe的finetuning是如何更新网络参数的?
  10. 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】
  11. oracle预收核销,Oracle EBS AP 应付核销到确定一行预付款
  12. ONIE——开放网络安装环境
  13. Unity模拟经营类游戏Demo部分代码及技术总结
  14. 归一化相关 matlab,matlab – 归一化互相关的基础知识
  15. java设置铃声_APP集成小米消息推送自定义铃声设置
  16. 开源晶体塑性有限元软件DAMASK安装过程(ubuntu16.04和ABAQUS2017)
  17. 创建炫酷 CSS 背景效果的 10 个代码片段
  18. 测试诊断软件工具大集合!!
  19. 【互亿无线】ktv预定包厢短信怎么发?附ktv预定包厢短信模板
  20. 如何鉴定电子合同的法律有效性?

热门文章

  1. 关于firefox火狐中localStorage无法正常使用的问题
  2. 分母为0一定会抛异常吗?
  3. tp5 ThinkPHP5 自定义异常处理类
  4. 实体类在set字段时报空指针异常
  5. Python Selenium之异常处理
  6. Visual Studio 2015出现Cannot find one or more components. Please reinstall the application.的问题解决
  7. No package nginx available.
  8. 原生JavaScript如何解决父元素查找指定类名的子元素的问题
  9. 如何使用putExtra()和getExtra()来表示字符串数据
  10. 是否有唯一的Android设备ID?