在 2021 年,人们喜欢 Linux 的理由比以往任何时候都多。在本系列中,我将分享使用 Linux 的 21 种不同方式。在这里,我将解释为什么这么多程序员选择 Linux。
当我第一次开始使用 Linux 时,是因为它出色的多媒体支持,因为我在电影制作行业工作。我们发现,典型的专有视频编辑应用程序无法处理我们从几乎任何可以录制图像的设备中提取的大部分素材。当时,我并不知道 Linux 作为服务器和程序员操作系统的声誉。我在 Linux 上做的越多,就越想控制它的各个方面。最后,我发现当用户能够“说”它的语言时,计算机才是最强大的。在切换到 Linux 几年后,我就可以编写无人值守的视频编辑脚本、将音频文件串联在一起、批量编辑照片以及我可以想象到的任何其他内容,然后发明解决方案。我很快就明白了为什么程序员喜欢 Linux,但正是 Linux 教会了我热爱编程。
事实证明,Linux 对于新手和经验丰富的程序员来说都是一个优秀的平台。并不是说你需要 Linux 才能编程。在各种不同的平台上都有成功的开发人员。但是,Linux 可以为开发人员提供很多东西。以下是我发现的一些有用的东西。
逻辑基础
Linux 是围绕着自动化构建的。Linux 上的主要应用程序至少可以从带有附加选项的终端启动,而且通常甚至可以完全从终端使用,这并非偶然。这种想法有时会被误认为是原始的计算模型,因为人们错误地认为编写从终端操作的软件只是为了获得一个可用的应用程序而做的最少的事情。这是对代码工作原理的一种不幸的误解,但我们中的许多人时不时都会犯这种错误。我们认为更多总是更好,因此包含 1000 行代码的应用程序必须比包含 10 行代码的应用程序好 100 倍,对吗?事实是,在所有条件相同的情况下,无论如何转换为代码行数,具有更大灵活性的应用程序都是更可取的。
在 Linux 上,手动完成可能需要一个小时的过程,通过正确的终端命令可以真正缩短到一分钟,并且在使用 GNU Parallel 进行解析时可能会更短。这种现象需要你改变对计算机作用的看法。例如,如果你的任务是将封面图像添加到 30 个 PDF 文件,你可能会认为这是一个明智的工作流程
- 在 PDF 编辑器中打开 PDF
- 打开封面
- 将 PDF 附加到封面文件的末尾
- 将文件另存为新的 PDF
- 为每个旧的 PDF 重复此过程(但不要为每个新的 PDF 复制此过程)
这主要是常识性的东西,虽然它令人痛苦地重复,但它确实完成了工作。但是,在 Linux 上,你可以更聪明地工作。思考过程是相似的:首先,你设计出成功结果所需的步骤。经过一些研究,你会发现 pdftk-java
命令,并且你会发现一个简单的解决方案
$ pdftk A=cover.pdf B=document_1.pdf \
cat A B \
output doc+cover_1.pdf
一旦你向自己证明该命令可以在一个文档上工作,你就会花时间学习循环选项,并且你会选择并行操作
$ find ~/docs/ -name "*.pdf" | \
parallel pdftk A=cover.pdf B={} \
cat A B \
output {.}.cover.pdf
这是一种略有不同的思考方式,因为你编写的“代码”以不同于你习惯的强制线性方式处理数据。但是,摆脱旧的线性思维方式对于以后编写实际代码非常重要,并且具有使你能够更智能地进行计算的附带好处。
代码连接
无论你为哪个平台编程,当你编写代码时,你都在编织许多不同文件之间错综复杂的隐形连接网络。在所有但最罕见的情况下,代码都从标头中提取并依赖外部库来成为一个完整的程序。这发生在任何平台上,但 Linux 倾向于鼓励你亲自理解这一点,而不是盲目地相信平台的开发工具包会为你处理它。
现在,信任开发工具包来解析库和包含路径没有任何问题。相反,这种抽象是你应该享受的一种奢侈。但是,如果你从不了解发生了什么,那么当你需要执行开发工具包不知道的事情或在出现问题时进行故障排除时,就很难覆盖该过程。
这也适用于跨平台。你可以在 Linux 上开发你打算在 Linux 以及其他操作系统上运行的代码,并且你对代码编译方式的理解可以帮助你实现目标。
诚然,你不能仅仅通过使用 Linux 来学习这些课程。完全有可能在一个好的 IDE 中愉快地编写代码,而从不考虑你安装了哪个版本的库或开发标头位于何处。但是,Linux 不会对你隐藏任何东西。很容易深入到系统中,找到重要的部分,并阅读它们包含的代码。
现有代码
了解标头和库的位置很有用,但拥有它们以供参考是在 Linux 上编程的另一个额外好处。在 Linux 上,你可以看到你想要的任何东西的源代码(不包括在 Linux 上运行但不是开源的应用程序)。这里的好处怎么强调都不为过。当你在学习更多关于一般编程或关于对你来说是新的东西的编程时,你可以通过参考你的 Linux 系统上的现有代码来学习很多东西。许多程序员通过阅读其他人的开源代码来学习如何编码。
在专有系统中,你可能会找到包含代码示例的开发人员文档。这很棒,因为文档很重要,但与找到你要实现的精确功能然后找到演示如何在每天使用的应用程序中完成它的源代码相比,它就显得苍白无力了。
直接访问外围设备
在使用 Linux 为媒体公司开发代码后,我经常理所当然的事情是可以访问外围设备。例如,当将摄像机连接到 Linux 时,你可以从 /dev/video0 或类似设备中提取传入数据。一切都在 /dev 中,并且始终是到达那里的两点之间的最短路径。
在其他平台上并非如此。连接到操作系统之外的系统通常是 SDK、受限库,有时甚至是 NDA 的迷宫。当然,这取决于你为哪些内容进行编程,但很难击败 Linux 简单且可预测的接口。
抽象层
相反,Linux 还提供了一组健康的抽象层,用于在直接访问或手动编码最终创建比你想要做更多的工作时使用。在 Qt 和 Java 中可以找到便利性,并且存在像 Pulse Audio、Pipewire 和 gstreamer 这样的整个堆栈。Linux 希望你能够编码,这一点显而易见。
添加到此列表
还有更多理由使在 Linux 上编码成为一种乐趣。有些是广泛的概念,有些是过于具体的细节,它们为我节省了数小时的挫败感。无论你的目标平台是什么,Linux 都是一个很棒的地方。无论你只是在学习编程,还是正在寻找新的数字家园的程序员,都没有比 Linux 更好的编程工作空间。
评论已关闭。