与Windows作为编程环境相比,Ubuntu有何优势?


59

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


16
有些人已经进行了很长时间的编程,并且在执行文本驱动的命令提示符下所做的事情时非常有效。他们可能还会发现喜欢的编辑vim。这是一个非常主观的领域!但是,许多人在Linux上使用IDE,因此您在这里将多件事混为一谈。
沃伦·P

3
我相信IDE 并不是问题的重点。有很多用于Linux操作系统的IDE。例如,所有JetBrains IDE(IntelliJ / PyCharm等)都可以在Linux上运行。Eclipse在Linux上运行。QtCreator在Linux上运行。
2013年

12
这个站点上的这个问题将遭受确认偏差
zzzzBov

5
为了使问题不涉及元讨论,我打开了一个单独的元主题来专门解决该问题
奥利

4
请改写这个问题以使其更有意义,尤其是标题。与Windows相比,Ubuntu不会强迫您避免使用IDE,而会坚持使用文本编辑器进行软件开发。
Reinier Post

Answers:


87

这种假设在Programmers.SE上可能会做得更好,因为在此情况下,它可能只是一个方面。就是说,我是.NET开发人员几年了,开始依赖Visual Studio。它对您有很多帮助,是的,我特别喜欢集成调试器...但是,我认为人们选择Linux的原因有很多:

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

  • Ubuntu是免费的。Windows和VS对您如何使用它们几乎没有控制权。

  • Ubuntu是开箱即用的编程环境。工具,比如猛砸,grepsedawk。从历史上看,Windows从底部开始是一个很大的难题。批处理文件非常糟糕,即使使用PowerShell,与Bash和GNU工具相比,Windows中的命令行体验也显得微不足道。您可以将其中一些移植到Windows上,但体验却不尽相同。

  • 复杂的设置易于通过PuppetChefJujuFabric和简单脚本apt-get等工具进行自动化和复制。

  • 有些事情不需要复杂的IDE。这些天我是一名Python开发人员,并且对其内置的工具和调试器感到非常满意。我使用文本编辑器,命令行和结构...而且,与在.NET中相比,我的控制方式更多。我可以使用一个Fabric命令来构建,测试,提交和部署我的Web应用程序。

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

Ubuntu 对您来说更好吗?谁知道。这是一个功能强大且可自定义的系统。如果您有机会并改变工作流程以帮助您,那么您应该能够坚持下去。


18
“免费”既涉及成本又涉及麻烦。我使用的是Mac,但是像Vagrant这样的工具可以轻松为任何项目设置干净的Linux VM,并在项目完成后将其丢弃。“我想要什么?” 是唯一的考虑因素,而不是“我是否为此操作系统拥有许可证密钥,如何识别它?”?
内森·朗

14
+1为了保持客观性,当很多人发现容易下意识的“ Windoze糟透了一切”的态度时。
2013年

2
需要注意的一件事是,Visual Studio 比以前更加免费,它已经支持MAKE文件一段时间了,并且插件使您可以完全在Visual Studio中编写和调试cygwin应用程序
斯科特·张伯伦

6
even PowerShell scripts lack the power of Bash-我认为您那时对PS不太了解;它功能强大,而且我在Bash中还没有遇到您在PS中无法完成的任何事情
Mark Henderson

4
@MarkHenderson是的,几乎可以肯定的是,它使用得还不够。它是在我将Windows和.NET抛在脑后的时候引入的。我想击(和“打击”我真的是GNU)带着我,因为你使用它到处一切。PS需要这么多的谷歌搜索每次都因为一切只是总是超级专业化。与Bash在一起这么久后,说实话很难说。
奥利(Oli)

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!

哦,您听说过Haskell的高级编辑器:

sudo apt-get install <fancy-editor-for-haskell>

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

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


36
apt-get,以及一切都必须以这种方式安装的心态,这也许是Linux最好的东西。OSX和Windows都无法在这里进行比较。
内森·朗

11
是的,但是您必须手动获取每个应用程序的安装程序:事实上,它们在内部使用相同的安装程序并不会给您带来很多好处(这节省了他们的精力)。这与内置的包管理器不同。
2013年

2
@NathanLong我只是使用Macports做了完全相同的事情:sudo port install ghc。从源头重新编译。 The MacPorts Project currently distributes 17699 ports。一个区别是它总是可以编译。
alecail 2013年

2
@karadeniz:这就是不提yumpacmanemergepetgetpkgadd...
Aesin

2
我喜欢MacPorts(并在那里和在Homebrew上维护着几个软件包),但是它与Debian不能真正相比。这些较小的项目只是没有人的能力来将大型存储库维护为相同的标准。Windows端的cygwin和coapp也是如此。我认为,关键的区别是文化上的差异,我认为linux软件包管理器是系统的一部分,每个人都可以使用它,它们并不是一个被忽略的插件。
jcupitt

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。


7
是的,我同意。在Linux环境下写了一段时间的低级C / Unix代码后,我决定休息一下,做一些C#图形开发,启动了新的VS,至少可以说,它正在解放。它不那么灵活,但是如果您不介意将自己的灵魂卖给Micr,它肯定会使事情变得更容易。呃,我的意思是扩大您的视野!
托马斯

3
是+1,可作为半知之识的抗MS狙击的解毒剂。
艾伦B

15

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

Linux提供的是从默认安装开始的有用的 CLI。如果您不需要它,并且无论如何都在使用IDE,那么就没有太大的区别了(IMHO)。

集成开发环境

  • 在集成许多功能并将其显示在图形GUI中时,IDE非常好。
  • 不利的一面是,它会使不熟悉此事的人不知所措。现在您将学习件事:IDE和编程语言。

文本编辑器和CLI工具

  • 文本编辑器和CLI工具很快就可以学习。
  • 如果某事不起作用,很容易看到哪个工具无法按预期工作。
  • 由于所有内容都是基于文本的,因此也更容易查找Google的问题。
  • 使用文本编辑器和CLI工具进行编程更快,响应速度更快,尤其是在较旧的硬件上进行比较。
  • 您甚至可以在低分辨率的屏幕上使用它们。
  • 它使您可以使用最少的资源在远程服务器上进行编程和调试。

我经常使用基于文本的工具进行原型制作。以后,当有更多文件要管理时,我很重视IDE为我提供的重构工具。


8
为了将来参考,CLI是命令行界面的缩写。CLI通常指的是类似aptitude的界面,类似于GUI,但以文本形式。Vim将是一个CLI编辑器,但grep不会是CLI,它没有界面(它只是一个命令行工具)
kiri 2013年

消歧是好的。来自Windows编程背景的CLI可以代表Common Language Infrastructure
jltrem 2013年

我使用GUI开发GUI,使用文本编辑器开发CLI或基于文本的程序/内容。我永远不会尝试在Vim中编写大量的GUI业务应用程序,Visual C#使得对此类事情进行原型设计变得轻而易举。同样,我绝不会在Windows上的IDE中进行Web开发(PHP / HTML / CSS / JS等),因为在Web服务器上的Vim中进行开发是无限地高效和便捷的。
2013年

@ minerz029 CLI是grep样式的程序(一次仅一个命令行)。您正在考虑“控制台应用程序”,这是aptitude / vim风格。
Izkata

4
@ minerz029的接口grep是参数,stdin和stdout- 该词并不表示任何图形或伪图形。其他类型的接口包括Web API,串行协议等。
2013年

12

我会把答案扔进去(尽管我相信这些都是不错的选择)。

您可以得到的最基本的答案就是哲学。


在Microsoft世界中,这有点虔诚-您在Mt. 雷德蒙德,如果您想实施任何措施,必须上访。有时他们会听,其他时候您的牺牲和恳求会落在耳边。也许他们正在狩猎。微软控制着整个生态系统-他们拥有操作系统,拥有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的ecostystem宗教,并且非常喜欢这些工具,以至于不会给您带来太多/任何摩擦……那么,那可能就很好了。

但是,如果您不适合正在申请专利的Microsoft Mold(tm),那么您将遇到麻烦。发展将是痛苦的。每次您希望做某事但不能做某事时,都会耗尽宝贵的认知资源。如果真是这样,那么您可能会喜欢Linux开发环境。


1
我非常喜欢您链接的文章,谢谢。
加雷斯·戴维森

3
赞美巴尔默,并可能正确设置他的所有奇偶校验位。确认 确认 确认
沃伦·P

9

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

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

我认为,在Linux上进行开发的最重要原因是因为您对大多数软件内部都有全面的了解。如果您有兴趣,您可以了解事物的实际运作方式。这样一来,您就可以通过观察实际情况来学习和改正好坏做法。这使您的想法更具多样性。


2
好点子。开源是所有有好奇心的开发人员的天然利益。在窗户上,它一直都是乌龟!
沃伦·P

那是个很好的观点。您可以在这里了解软件的内部结构
Anwar

许多Windows开发人员将在Windows平台上使用他们的整个工作寿命,使用API​​进行编程,他们将永远不会看到它的另一面。有点像监狱,你不觉得吗?
沃伦·P

@WarrenP如果正确记录了API,那么您不会通过查看源代码来了解更多有关它的信息。(尽管我承认很多API都没有完整记录,但这两个方面都没有。)
2013年

8

为什么Linux更适合编程

集成开发环境

除了满足特定目的的Visual Studio和Xcode 外,大多数流行的IDE都是多平台的。似乎有数十种语言的庞大的IDE,但最终它们大多数基于EclipseIntelliJ IDEANetBeans。它们的共同点是它们都是基于Java的。与在相同硬件上的任何其他OS相比,Java在Linux上的工作效率更高。实际上,在相同硬件上,Java在Linux上的速度比在OS X上快20%。一键式安装所有这些IDE,即可在Ubuntu Software Center中进行安装。

编译器

GCC已非常成为行业标准。毫无疑问,它的主要平台是Linux,该平台得到最佳支持。而且它是免费且免版税的。

其他工具

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

易于安装OSS

Ubuntu具有出色的软件包管理器。在大多数情况下,仅安装软件即可apt-get install package-name(您也可以使用GUI进行安装,无论是Ubuntu Software Center还是Synaptic)。安装后,它们会由系统使用错误修正版本自动更新。软件包系统还自动跟踪依赖关系,因此您不必担心需要其他软件包。它们将被自动安装。

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

生产机器很可能是Linux

如果您为后端,Web,云等进行任何类型的编程,则目标计算机很可能是Linux。当您在与目标计算机相同的操作系统上进行开发时,没有太多令人讨厌的惊喜。

当然,您可能正在开发Windows桌面应用程序,但是如今,这对于程序员来说是一个小众市场。


Windows桌面应用程序是一个利基市场吗?ha?
艾伦B

2
@AlanB:不,台式机Windows应用程序的程序员是利基市场。估计有90-95%的程序员在进行内部开发,而这些大多数不是桌面应用程序。另外,考虑一下,您上次购买Windows应用程序(以支付的实际费用)是什么时候,不是游戏(也不是Adobe产品)?
vartec

据我所知,尽管以云计算为中心的公司不断提出异议,但业务领域中的几乎所有内容仍然坚决基于台式机并付费。
艾伦B

4
@AlanB:再次,我不是在谈论最终用户市场。我说的是程序员的职业市场。例如,您正在谈论的应用程序之一是MS Office。然而,MS的整个Office团队只有大约2500名程序员,其中许多甚至都没有使用台式机版本。
vartec

7

为什么在文本文件中或通过终端编写程序比在Windows上使用像Visual Studio这样的IDE更好(我读过)?

不是,我可以说是完全相反。通常,人们倾向于喜欢他们擅长的工具。您使用的工具类型可能有利于编写程序。因此,举例来说,我可以用vim编写Java程序,但是与成熟的IDE(如Eclipse或IntelliJ)相比,它确实适得其反。乔恩·斯基特(Jon Skeet)对于为什么使用IDE的问题给出了很好的答案。

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


5
请尝试在Windows中设置<除了MS的here>以外的其他编程语言环境,让我们看看它能走多远。
Braiam 2013年

1
@Braiam我做了,Java:P。
丹尼尔(Daniel)

6
Linux擅长运行任何类似Unix的东西。GCC工具链(包括C和C ++编译器以及其他工具)具有悠久的Unix / Posix传统。但是,如果您认为所有类似Unix的编程都是C编程,那么令人遗憾的是,您没有充分暴露Unix / Posix / Linux传统和工具的丰富多样性。
沃伦·P

2
Java有点特殊,因为您可以快速生成深层嵌套的文件夹和许多文件。并且,一旦重命名类或包,就需要分别同步文件名或文件夹。有趣有趣:)
MadMike

1
我不知道Linux和CLI是否一定对C 编程更好(VS在C ++方面很出色,但缺乏C99支持,Posix可能比Win32干净一些)。但是apt-get对于C开发而言,这是很棒的。您可以快速获取例如sudo apt-get install libcurl4-openssl-dev,的工具,库和调试符号sudo apt-get install valgrindsudo apt-get install libz-dbg并轻松进行尝试。
Alex Jasmin

6

您选择使用哪种工具(文本编辑器或IDE)进行编程。一般来说,您可以说:初学者和非常小的项目倾向于使用更好的文本编辑器,例如sublime文本或gedit的修改版。仅仅是因为您在使用纯文本编辑器时了解更多。IDE可以通过使事情自动化来加深您的学习过程(就像Visual Studio一样;))。

当涉及到专业人员时,如果使用很多工具和语言,IDE会派上用场,因为如果您愿意的话,它们可以为您做更多的事情。根据要编程的语言,有很多IDE可供选择。有更好的IDE,也有不太方便的IDE。

我的个人经验是,与Windows相比,Ubuntu OS的开发速度和安装速度要快得多。我想这是因为我使用的大多数工具和程序都是在Linux上构建的,并且因为我不必在Internet上搜索到我喜欢的程序的下载链接。只是一个“ apt-get install program1 program2 program3”而已。相比之下:我需要3个工作日来安装和配置全新的Windows安装程序,其中包含我编程所需的一切(公司而不是私有的,这样会更快),但是在Ubuntu中完成同一任务仅一天。

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

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


1

我认为Linux发行版 IDE。

首先,Unix从一开始就被设计为开发环境。它是由程序员为程序员编写的。大多数Unix和Linux仍以默认配置附带开发工具。丢失的零件只有apt-get(或等效的)距离。另一方面,在您安装不便宜的IDE或琐碎的过程之前,Windows是一个糟糕的开发环境。

IDE的集成度更高,也就是说,使用GCC,Git和Vi相比,IDE的连接更为紧密。紧密耦合可以使“智能”之类的东西更好地工作。但是另一方面,松耦合具有许多优点(例如灵活性,可互换性,没有锁定)。

编译器设计的进步(具有易于分离的前端的编译器,例如LLVM)最终可能意味着即使在松耦合的环境中,也可以更好地支持诸如语法错误突出显示等功能。


因此,基本上,您是说Linux是一个集成开发环境,实际上集成程度不是很高吗?:-)
svick

1

在哲学上:Ubuntu / Linux允许计算机程序员直接访问内部和硬件,而Windows是一种网守。在编程方面,这是一个重要的哲学问题。因此,从哲学上讲,此功能的优势将取决于用户是否足够了解或从技术上了解其重要性。

关于编程问题:Ubuntu / Linux的整个系统架构建立在Unix传统上,即小型,简单的程序先做一件事,然后将它们组合在一起以完成更复杂的事情。 对于程序员来说,这种架构非常强大,在我看来,这就是Unix从长远来看将在每个平台上与其他所有软件架构相抗衡的原因。Unix当前不是少数占主导地位的地方之一是台式机,但是随着时间的推移,这种情况会发生变化。像Ubuntu这样的发行版正在帮助我们看到这种演变。

但是,我并不怀疑Windows上有一些非常好的编程环境。对于公司环境中的编程而言,这些通常占主导地位。


0

速度是最重要的答案。

我发现使用Visual Studio或QtCreator之类的图形IDE时,我应该使用快捷键时使用鼠标过多。每次切换上下文时,您都必须暂停大脑,专注于目标,然后等待操作。而按F5无限快。

现在,如果您使用的是vim,Emacs或其他没有漂亮按钮的东西,那么您将专注于按键,您将拥有一种方法,并且因为它的常规性而变得更快。

我更喜欢使用命令行界面以更详细的方式显示错误,并且在编译期间还会提供反馈。我讨厌Visual Studio的一件事是默认设置是一个小图标,指示其正在进行编译,然后显示错误列表。

在狭窄的视图中,您将保持80列的宽度,这有助于提高可读性,我已经看到了跨越200列宽度的代码。使用适合80列的代码,您可以一次打开4/5窗口。

使用CLI编辑器,您可以进行远程编码,而不需要与Visual Studio进行缓慢的RDP会话(与文本相比)。您可以通过GSM链接进行编码。

视觉形式的发展很烂。您可能会在GUI IDE上放置的一个优点是可以更快地绘制屏幕。但是,以我的经验,它对于原型很好,但是通常您可以通过在代码中手动进行操作来获得更好的结果。VS2012代码分析器今天早上刚刚警告我有关Visual Studio自动生成的代码的200多个问题?!?!?


0

我认为您的真正问题可能是:“是否有任何可以在Ubuntu上运行的Visual Studio替代产品,因为它不会运行?”

MonoDevelop。

它是可行的,但是如果您习惯于VS和所有功能,就会讨厌它。

使用文本编辑器没有任何优势。还记得叫做Intellisense的好东西吗?没有发生(但是MonoDevelop有类似的东西)。希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.