一年前我在知乎上提了个愚蠢的问题:如何入门 Linux ?
前言: 一年前(2019.07)看了几个 Linux 和 Vim 配置视频,被 UP 主行云流水的操作和高度定制化的配置打动了,也想玩玩 Linux 。从 Windows 应用商店下载了个 Ubuntu 便不知所措,于是上知乎提问:
在Windows系统上安装了Linux子系统Ubuntu,如何入门?
没有得到满意答案。大四一学年下来,因为各种机缘
(项目、比赛、微软推出WSL2
),算是“入门”了 Linux ,常用命令/工具比如docker
、ssh
、npm
等等。笔者想借此文回答一下一年前自己的提问。
本文纲要:
- “蠢”在:没有目标,谈何“入门”?
- 为什么学习 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
,配置 vim
和 zsh
,边用边学,完全来得及,很简单。
经验之谈:工具的学习必须结合实践
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 ?相关推荐
- 知乎上获赞率最高的神回复(转载)
知乎上获赞率最高的神回复 --看完整个人都神清气爽 很多时候,一句犀利尖锐或充满哲理的话,往往比长篇大论更能打动人.点醒人.当你遇到人生难题的时候,不妨来看看这66个知乎上获赞率最高的神回复吧. 01 ...
- 知乎上获赞率最高的66个神回复,看完整个人都神清气爽
很多时候,一句犀利尖锐或充满哲理的话,往往比长篇大论更能打动人.点醒人.当你遇到人生难题的时候,不妨来看看这66个知乎上获赞率最高的神回复吧. 01 Q:交朋友的标准是什么? A:出世的智者 ...
- 在知乎上泡了这么久,工作、工资、生活还是没有起色是什么原因?
陆游同学在八百多年前就回答了这个问题:纸上觉来终觉浅,绝知此事要躬行. 重新解读一遍题主的问题,题主其实想表达的是:泡知乎这么久了生活都没有起色,我TM这么辛苦虔诚地天天泡知乎有毛用? 而我们都知道人 ...
- 知乎上神回复,看完神清气爽
知乎上45个神回复,看完整个人都神清气爽 ✎国馆说 你是怎样,你的世界就怎样. 来源 | 武志红(ID:zzds) 1 交朋友的标准是什么? - Question ...
- 知乎上40个有趣回复,很精辟!
大过年的就不发学习类文章了,最近看到知乎上一些比较有趣的问题和回复,分享给大家. 01 - Question - 交朋友的标准是什么? - Answer - 出世的智者, 入世的强者, 或者正常而阳光 ...
- 珍爱生命,远离微软,一点感受源自知乎上的某人评论
以下纯转载,不代表博主观点^_^,吃瓜请自重.. 珍爱生命,远离微软,一点感受源自知乎上的某人评论 http://blog.sina.com.cn/s/blog_8ba3f5130102vty7.ht ...
- 知乎上的一道问题:出家人怎么解决性欲?
知乎上的一道问题:出家人怎么解决性欲? 2017-1-8 19:00| 发布者: 新闻| 查看: 7707| 评论: 0 摘要: 这是知乎上的一道问题.原题叫<和尚怎么解决性欲>. 本来由 ...
- 知乎上这个程序员火了。。。
点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 在知乎上看到一个很火的程序员,他火不是因为编程能力牛逼,而是因为给老板修了一次U盘. 下面让我们看看他的 ...
- 知乎上这个程序员火了,竟是因为给老板修了一 次U盘...
在知乎上看到一个很火的程序员,他火不是因为编程能力牛逼,而是因为给老板修了一次U盘. 下面让我们看看他的故事: "哎,我这电脑出问题了,过来帮我修一下." 做为一名全栈程序员,居然 ...
最新文章
- 硬核!如何模拟 5w+ 的并发用户?
- CATIA中使用约束时提示“创建的约束是临时的。若希望使他成为永久约束,则需要在单击确定按钮之前激活约束开关。”
- Max retries exceeded with URL报错小记
- python会计实证研究_描述性统计分析在实证研究中的作用及具体软件实现——以SPSS为例...
- Windows安装WSL进行机器学习(windows和Ubuntu同时使用)
- Docker资源限制
- OpenShift 4 - DevSecOps Workshop (15) - 利用OpenShift GitOps向多个目标部署应用
- VM 与 与 Linux 的安装
- caffe的finetuning是如何更新网络参数的?
- 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】
- oracle预收核销,Oracle EBS AP 应付核销到确定一行预付款
- ONIE——开放网络安装环境
- Unity模拟经营类游戏Demo部分代码及技术总结
- 归一化相关 matlab,matlab – 归一化互相关的基础知识
- java设置铃声_APP集成小米消息推送自定义铃声设置
- 开源晶体塑性有限元软件DAMASK安装过程(ubuntu16.04和ABAQUS2017)
- 创建炫酷 CSS 背景效果的 10 个代码片段
- 测试诊断软件工具大集合!!
- 【互亿无线】ktv预定包厢短信怎么发?附ktv预定包厢短信模板
- 如何鉴定电子合同的法律有效性?
热门文章
- 关于firefox火狐中localStorage无法正常使用的问题
- 分母为0一定会抛异常吗?
- tp5 ThinkPHP5 自定义异常处理类
- 实体类在set字段时报空指针异常
- Python Selenium之异常处理
- Visual Studio 2015出现Cannot find one or more components. Please reinstall the application.的问题解决
- No package nginx available.
- 原生JavaScript如何解决父元素查找指定类名的子元素的问题
- 如何使用putExtra()和getExtra()来表示字符串数据
- 是否有唯一的Android设备ID?