作为编程环境,Ubuntu 比 Windows 有什么优势?

Muh*_*raf 60 programming application-development

为什么在文本文件中或通过终端编写程序是比在 Windows 上使用 IDE(如 Visual Studio)更好的选择(如我所见)?IDE 提供的功能是否存在(例如,显示编译错误)还是手动过程?

Oli*_*Oli 87

这种假设可能在Programmers.SE 上做得更好,因为它在这里很可能是片面的。也就是说,我当了几年 .NET 开发人员并且开始依赖 Visual Studio。它对您有很大帮助,是的,我特别喜欢集成调试器……但是,我认为人们选择 Linux 有几个原因:

  • Ubuntu 是免费的。Windows 和 VS 可能非常昂贵。

  • Ubuntu 是免费的。Windows 和 VS 几乎无法让您控制如何使用它们。

  • Ubuntu 是一个开箱即用的编程环境。像 Bash、grepsed、等工具awk。从历史上看,Windows 是从底层编写脚本的一大难题。批处理文件很糟糕,即使使用 PowerShell,与 Bash 和 GNU 工具相比,Windows 中的命令行体验也显得微不足道。您可以将其中的一些移植到 Windows 上,但这不是相同的体验。

  • 复杂的设置很容易通过PuppetChefJujuFabric和简单脚本apt-get等工具实现自动化和复制。

  • 有些东西不需要复杂的 IDE。我现在是一名 Python 开发人员,我对它自己的内置工具和调试器非常满意。我使用文本编辑器、命令行和结构……而且我比在 .NET 下更有控制力。我可以使用单个 Fabric 命令构建、测试、提交和部署我的 web 应用程序。

    这并不是说没有单一的 IDE。Eclipse 和 Netbeans。MonoDevelop。KDevelop4 和 QT Creator。他们都有对他们发誓的用户。

Ubuntu 更适合你吗?谁知道。这是一个功能非常强大且非常可定制的系统。如果你给它一个机会并改变你的工作流程以让它帮助你,你应该能够让它坚持下去。

  • “免费”既是关于成本的,也是关于麻烦的。我使用的是 Mac,但是像 Vagrant 这样的工具可以轻松地为任何项目设置干净的 Linux VM,并在项目完成后将其丢弃。“我想要什么?” 是唯一的考虑因素,而不是“我是否有此操作系统的许可证密钥以及如何识别它......?” (18认同)
  • +1 保持客观,因为很多人发现很容易出现下意识的“Windoze 无所事事”的态度。 (14认同)
  • `即使是 PowerShell 脚本也缺乏 Bash 的功能` - 我认为你那时不太了解 PS;它非常强大,我还没有遇到任何你在 Bash 中可以做而在 PS 中不能做的事情 (6认同)
  • @MarkHenderson 是的,几乎可以肯定是因为使用得不够。它是在我离开 Windows 和 .NET 时引入的。我认为 Bash(我所说的“Bash”实际上是指 GNU)是因为你*随处*和*一切*使用它。PS 每次都需要*这么多* 大量的谷歌搜索,因为一切都是超级专业的。在 Bash 使用了这么久之后,老实说很难说。 (4认同)
  • 应该注意的一件事是,visual studio 比以前更*免费*,它有 [支持的 MAKE 文件](http://msdn.microsoft.com/en-us/library/txcwa2xx.aspx)而现在和插件让您完全在 Visual Studio 中[编写和调试 cygwin 应用程序](http://visualgdb.com/tutorials/cygwin/)。 (2认同)

eno*_*ram 37

不过,我想补充一个更重要的原因;Ubuntu 非常适合尝试新的库、语言、IDE 和编译器。一切都是一蹴而就的。

所以你听说过一种叫做Haskell的奇特语言:

sudo apt-get install ghc
nano hello.hs
<copy-paste hello world example>
ghc -o hello hello.hs
./hello
Hello World!
Run Code Online (Sandbox Code Playgroud)

哦,你听说过 Haskell 的一个花哨的编辑器:

sudo apt-get install <fancy-editor-for-haskell>
Run Code Online (Sandbox Code Playgroud)

C / C++库一样,您只需将apt-get install它们和二进制文件和头文件放在正确的文件夹中,您就可以将#include它们放在源文件中,甚至无需检查它们的放置位置!

从本质上讲,这与您设置日常工作环境的速度无关。它还与您设置实验环境的速度有关。我相信这就是加速 Linux 下学习体验的原因。

  • `apt-get`,以及一切都必须以这种方式安装的心态,可能是 Linux 的最佳之处。OSX 和 Windows 都无法在此处进行比较。 (36认同)
  • 是的,但是您必须手动获取每个应用程序的安装程序:事实上,它们在内部使用相同的安装程序并没有给您带来太多好处(它为_them_ 节省了一些精力)。这与内置的包管理器不同。 (11认同)
  • @NathanLong 我只是使用 Macports 做了完全相同的事情:sudo port install ghc。从源头新鲜编译。`MacPorts 项目目前分发 17699 个端口`。一个区别是它总是编译。 (2认同)
  • @karadeniz:更不用说`yum`、`pacman`、`emerge`、`petget`、`pkgadd`... (2认同)
  • 我喜欢 MacPorts(并在那里和 Homebrew 上维护了几个软件包),但它无法真正与 Debian 相提并论。这些较小的项目只是没有人力来维护一个大型存储库达到相同的标准。Windows 端的 cygwin 和 coapp 也是如此。关键的区别在于文化,我认为,linux 包管理器是系统的一部分,每个人都使用它,它们不是一个被稍微忽视的附加组件。 (2认同)
  • apt-get 与 Macports 或等价物的巨大差异在于 apt-get 拥有*一切* 在其控制之下,而 Macports 只是一个附加组件,它不控制甚至不知道系统本身或其他人安装的软件来源。 (2认同)

小智 20

这是主要来自 Microsoft 平台开发人员的意见。如果您不针对 .NET 生态系统,我认为您最好的选择是 Ubuntu。如果您使用的是 Ubuntu 而不是 Windows,您将可以更轻松地获取、配置和使用几乎所有其他平台/语言的工具。

微软工具链的价值在于它高度集成。从 IDE 到源代码控制、项目管理、构建、部署、数据库、云基础设施、令人厌烦的。如果您要全面使用他们的平台,Microsoft 会使其变得非常容易。

正如一些人所提到的,偏离 Microsoft Way 可能会很痛苦。将 .NET 用于您的代码,将 Oracle 用于您的数据库......天啊,这会很痛苦。

想要创建一个 .NET Web 应用程序并将其部署到 Amazon Web Services...不是很简单。

但是,如果您留在 Microsoft 生态系统中……那个婴儿会像一只知更鸟一样为您唱歌。在称职的软件开发人员手中,Microsoft 平台就像是天才运动员的 PED。它不会让业余程序员创建下一个 Facebook。但它会给了解各个部分如何组合在一起的有才华的开发人员带来优势。

关于开始使用 Ubuntu 的免费(如啤酒)成本的争论是不可能的,Microsoft 提供了许多程序,可让您免费开始使用他们的工具。包括 Bizspark,它为您的初创公司提供 3 年的许可证(包括其工具的生产使用许可证)。以及免费提供给学生的Dream spark。

话虽如此,如果你想探索和学习新的语言和平台,你会找到更好的工具来开始使用 Ubuntu,如果你正在寻找 Microsoft 生态系统之外的工作,你需要熟悉与 Ubuntu。

  • 是的,我同意。在 Linux 环境中编写了一段时间的低级 C/Unix 代码后,我决定休息一下,做一些 C# 图形开发,启动新的 VS,好吧,至少可以说这是一种解放。它不是那么灵活,但如果你不介意将你的灵魂卖给 Micr,它肯定会让事情变得更容易......呃,我的意思是,扩大你的视野! (7认同)
  • 是的 +1 是对半知情的反 MS 狙击的受欢迎的解毒剂。 (3认同)

Mad*_*ike 15

我使用这两种工具,IDE和文本编辑器与ç ommand-大号INE覆盖整个院落(波纹管被称为CLI),写程序。

Linux 提供的是一个从默认安装开始的有用的CLI。如果您不需要它并且您只是在使用 IDE,那么就没有太大区别(恕我直言)。

集成开发环境

  • 在集成许多功能并将它们呈现在图形 GUI 中时,IDE 非常出色。
  • 不利的一面是,它可能会让新手不知所措。现在您需要学习件事:IDE 和编程语言。

文本编辑器和 CLI 工具

  • 文本编辑器和 CLI 工具不需要很长时间就能学会。
  • 如果某些东西不起作用,很容易看出哪个工具没有按预期工作。
  • 使用 Google 查找问题也更容易,因为一切都是基于文本的。
  • 使用文本编辑器和 CLI 工具编程更快、响应更快,尤其是在旧硬件上进行比较。
  • 您甚至可以在低分辨率屏幕上使用它们。
  • 它允许您在远程服务器上以最少的资源进行编程和调试。

我经常使用基于文本的工具进行原型设计。后来,当有更多文件需要管理时,我会重视IDE 为我提供的重构工具。

  • 为了将来参考,CLI 是命令行界面的缩写。CLI 通常指的是类似 [aptitude](http://www.adventuresinsilicon.com/sites/default/files/home/adventures/www/pictures/aptitude_libcv21.png) 之类的界面,它类似于 GUI,但采用文本形式。Vim 将是一个 CLI 编辑器,但 `grep` 不是 CLI,它没有界面(它只是一个命令行工具) (8认同)
  • @ minerz029 `grep` 的接口是参数、标准输入和标准输出——这个词并不意味着任何图形或伪图形。其他类型的接口包括 Web API、串行协议等。 (4认同)

Way*_*ner 12

我会把我的答案扔进戒指中(尽管我相信这些都是好的)。

你能得到的最基本的答案是,这一切都与哲学有关。


在微软的世界里,这有点宗教信仰——你在雷德蒙德山上有神,如果你想实现任何东西,必须向他们请愿。有时他们会倾听,有时你的牺牲和请求会被置若罔闻。也许他们出去打猎了。微软控制着整个生态系统——他们拥有操作系统,他们拥有 IDE,他们以在 SE 网络上谈论可能不合适的方式将它们结合在一起。即使在 IDE 中,各个部分也是紧密耦合的 - 它可以称为集成但我认为耦合更准确。如果你想稍微改变一下,盖茨禁止你以 Windows 或 Visual Studio 的设计者没有明确允许的方式改变某些东西。然后加入诸如 IE、IIS、Microsoft 服务器、MS SQL Server 和 Office 之类的技术……一切都是一个美好的大家庭。但是,如果您想留下部分家庭成员呢?颤抖吧!


另一方面,您有 Linux,它继承了 Unix 哲学,即每个部分都应该负责自己的小范围责任。它应该做件事,并且把它做好。最好是通过文本字符串进行通信。正如其他人所指出的那样,sedawkgrep,等都是这个完美的例子。他们只做他们被设计要做的件事,而且他们做得非常好。如果你需要做件事,那么你可以结合这两个工具。这很容易做到。

因为sed除了输入的输入之外没有任何东西是文本,这意味着任何可以生成文本的东西都不必重新发明轮子。他们可以简单地使用sed. 并且因为sed生成文本,任何可以读取文本的东西都可以使用sed. 文本非常普遍(有一些例外),并且很容易将这些类型的东西组合在一起。

不仅很容易组合它们,而且很容易将它们分开 - 如果我决定不再需要编辑流,但我想过滤结果,而不是将我的文本传递给sed,我可以通过它grep改为。

现在,这是在 Linux 环境中开发背后的基本哲学——所以即使你从那里开始,许多工具也提供了类似的接口。它们允许您将它们分解为多个部分,或者通过命令行、端口或 HTTP 与它们交互。

即使情况并非如此,您也拥有开源软件。Linux 平台上的大多数(如果不是全部)软件都是开源的。因此,如果您不喜欢它的编写方式,那么您完全、完全、绝对可以自己更改软件。这是令人难以置信的授权。无法按照您想要的方式拆分 IDE?要么进行更改并将其提交回上游,要么分叉项目。不确定为什么某些事情会这样?使用来源,卢克!需要能够通过命令行自动执行某些操作吗?破解项目并坚持更改。遇到错误或安全问题?嘿,你猜怎么着 - 你可以自己解决这个问题,你不必等待 SP3.432vb89234.startdate1eQ 出来。

您可以组合您想要和需要的工具。如果有什么阻碍了你,你 100% 能够改变它。即使您不具备这种能力,您当然也可以花钱请人来开发这种更改——或者甚至将其推荐给拥有专有技术的其他人。

这更适合编程的原因是,当您遇到摩擦时,您可以将其从工作流程中消除。因为开发很难,要想成为一名成功的程序员,你必须考虑很多事情,而且考虑的越多,其他事情越难考虑

消除摩擦是关键。

因此,如果 Microsoft生态系统信仰让您有宾至如归的感觉,并且您非常喜欢这些工具,以至于它不会给您带来太多/任何摩擦……好吧,那可能就好了。

但是,如果您不适合正在申请专利的 Microsoft Mold(tm),那么您就会遇到摩擦。发展会很痛苦。每次您希望自己能做某事但不能做时,这都会消耗宝贵的认知资源。如果是这种情况,那么 Linux 开发环境可能适合您。

  • 赞美巴尔默,愿他所有的奇偶校验位都设置正确。确认。确认。确认。 (3认同)

sch*_*jos 9

我想提供我对这个问题的更一般的想法:

“为什么 Linux 是更好的编程环境?”

我认为在 Linux 上开发的最重要原因是因为您对大多数软件内部结构有充分的了解。如果您有兴趣,您可以了解事物的实际运作方式。这使您可以通过观察实践来学习和适应好的或坏的做法。这为您的想法提供了更多的多样性。

  • 好点子。开源对于所有有任何好奇心的开发人员来说都是一种天然的好处。在窗户上,一路下来都是乌龟! (2认同)

var*_*tec 8

为什么 Linux 更适合编程

集成开发环境

除了用于特定目的的Visual Studio和 Xcode,大多数流行的 IDE 都是多平台的。似乎有数十种语言的无数 IDE,但最终它们中的大多数都基于EclipseIntelliJ IDEANetBeans。它们的共同点是它们都是基于 Java 的。与在相同硬件上的任何其他操作系统相比,Java 在 Linux 上的工作效率更高。事实上,Java 在 Linux 上的速度比在相同硬件上的 OS X 上快 20%。其中许多 IDE 已准备好在 Ubuntu 软件中心一键安装。

编译器

GCC 已成为行业标准。毫无疑问,它的主要平台是 Linux,在那里它得到了最好的支持。而且它是免费且免版税的。

附加工具

Linux 提供了其他平台上没有的独特工具,例如Valgrind(用于内存调试、内存泄漏检测和分析的工具)。Linux 还带有调试工具,例如straceltrace,它们甚至可以用于调试生产代码(即不使用调试符号编译)。Windows 的等效工具要么不存在,要么非常昂贵,并且不提供相同的功能。

易于安装OSS

Ubuntu 有一个优秀的包管理器。在大多数情况下,安装软件只是apt-get install package-name(您也可以使用 GUI 来完成,无论是 Ubuntu 软件中心还是 Synaptic)。安装后,它们会被系统自动更新为错误修复版本。包系统还会自动跟踪依赖关系,因此您不必担心需要其他包;它们将被自动安装。

另一方面,在 Windows 中,您必须手动下载和安装软件包,如果它们需要其他一些软件包,您也必须手动进行。也没有系统范围的更新,每个软件包要么实现自己烦人的更新程序,要么根本不更新。

生产机器很可能是 Linux

如果您为后端、Web、云等进行任何类型的编程,那么您的目标机器很可能是 Linux。当您在与目标机器相同类型的操作系统上进行开发时,令人讨厌的惊喜要少得多。

当然,您可能正在为 Windows 开发桌面应用程序,但如今这对程序员来说是一个利基就业市场。

  • @AlanB:再说一次,我不是在谈论最终用户市场。我说的是*程序员的就业市场*。例如,您正在谈论的应用程序之一是 MS Office。然而 MS 的整个 Office 团队只有大约 2,500 名程序员,其中许多人甚至不在桌面版本上工作。 (4认同)
  • @AlanB:不,桌面 Windows 应用程序的程序员是利基。估计 90-95% 的程序员都在进行内部开发,而这些大多不是桌面应用程序。另外,想想看,您最后一次购买(以实际支付的金钱购买)不是游戏(也不是 Adob​​e 产品)的 Windows 应用程序是什么时候? (2认同)

小智 7

为什么在文本文件中或通过终端编写程序是比在 Windows 上使用 IDE(如 Visual Studio)更好的选择(如我所见)?

不是的,我可以说它恰恰相反。不过,一般来说,人们往往更喜欢他们更擅长的工具。您使用的工具类型可能有助于轻松编写程序。例如,我可以用 vim 很好地编写 Java 程序,但与 Eclipse 或 IntelliJ 等成熟的 IDE 相比,它确实适得其反。Jon Skeet 很好地回答了为什么使用 IDE的问题。

回到您最初的问题,Linux 唯一擅长的是 C 编程。你在 Linux 上可以做的所有其他事情你也可以在 Windows 上做,反之亦然(编程明智)。由于历史原因,C 编程在 Linux 上更好,它提供了一组很棒的工具(您可以在 Windows 上获得这些工具,但为它设置 Linux 要容易得多)。同样,如果您正在编写 C# 并且喜欢 .NET,那么出于显而易见的原因,Windows 是更好的选择。其他一切都是完全主观的,你会听到双方的利弊。

  • Linux 更擅长运行任何类 Unix 的东西。GCC 工具链(包括 C 和 C++ 编译器和其他东西)有着悠久的 Unix/Posix 传统。但是,如果您认为所有类 Unix 编程都是 C 编程,那么遗憾的是您对 Unix/Posix/Linux 遗产和工具的丰富多样性认识不足。 (6认同)
  • 请尝试在Windows 中设置一个&lt;将MS 之外的另一种编程语言放在此处&gt;环境,让我们看看它能走多远。 (5认同)
  • **Java** 有点**特例**,因为您可以快速生成深度嵌套的文件夹和许多文件。一旦重命名类或包,就需要分别同步文件名或文件夹。有趣有趣的乐趣:) (2认同)

mon*_*nge 6

您用于编程的工具(文本编辑器或 IDE)是一个选择问题。一般来说,您可以说:初学者和非常小的项目倾向于使用更好的文本编辑器,例如 sublime text 或 gedit 的修改版本。只是因为您在使用纯文本编辑器时会学到更多。IDE 可以通过自动化操作来破坏您的学习过程(就像 Visual Studio 所做的那样;))。

对于专业人士来说,使用大量工具和语言,IDE 会派上用场,因为如果您愿意,它们可以为您做更多的事情。有许多 IDE 可供选择,具体取决于您要使用的编程语言。有更好的也有不太方便的。

我的个人经验是,Ubuntu 操作系统比 Windows 更快、更容易设置开发。我想,这是因为我使用的大多数工具和程序都是在 Linux 上构建的,而且因为我不必在互联网上搜索我最喜欢的程序的下载链接。它只是一个“apt-get install program1 program2 program3”。相比之下:我需要 3 个工作日来安装和配置一个全新的 Windows 安装,其中包含我编程所需的一切(公司,而不是私人,那会更快),但在 Ubuntu 中执行相同的任务只需一天。

我的经验是,切换到 Linux 进行编程的程序员(大部分时间)对技术背景和基础知识的工作方式有更深入的了解。Mac 和 Windows 用户往往不知道为什么某些东西会以这种方式工作或为什么不会。我不确定你是否真的可以从使用 Linux 中学到一些东西,或者只是那些愿意学习的人切换到 Linux。

希望我的“blafasel”有所帮助...