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

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

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

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

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

  • Ubuntu是一个开箱即用的编程环境。 像Bash, grepsedawk这样的工具。 从历史上看,Windows在脚本编写方面是一个巨大的痛苦。 批处理文件非常糟糕,即使使用PowerShell,与Bash和GNU工具相比,Windows中的命令行体验也显得微不足道。 您可以将其中的一些移植到Windows,但这不是相同的体验。

  • 复杂的设置很容易通过apt-get自动化和复制, Puppet , Chef , Juju , Fabric和简单的脚本等工具。

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

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

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

我想补充一个更重要的原因; Ubuntu非常适合尝试新的库,语言,IDE和编译器。 一切都很容易逃脱。

所以你听说过一种名为Haskell的奇特语言:

 sudo apt-get install ghc nano hello.hs  ghc -o hello hello.hs ./hello Hello World! 

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

 sudo apt-get install  

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

从本质上讲,它不是关于您设置日常工作环境的速度有多快。 这也是你可以设置一个实验环境的极快速度。 我相信这是加速Linux下学习体验的原因。

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

微软工具链的价值在于它是高度集成的。 从IDE到源代码管理,项目管理,构建,部署,数据库,云基础架构, 广告恶心 。 如果你的平台全力以赴,微软会非常容易。

正如一些人所提到的,偏离Microsoft Way可能会很痛苦。 将.NET用于代码,使用Oracle代替数据库……我认为这将是一种痛苦。

想要创建.NET Web应用程序并将其部署到Amazon Web Services ……不是很直接。

但是,如果你留在微软生态系统中……那个宝宝会像嘲笑的鸟一样为你唱歌。 在一个称职的软件开发人员手中,微软平台就像一个才华横溢的运动员的PED。 它不会让业余程序员创建下一个Facebook。 但它将为有才华的开发人员提供优势,他们了解这些部分如何融合在一起。

开始使用Ubuntu的免费(如啤酒)成本的论点已经出现了,微软提供的许多程序可让您免费使用他们的工具。 包括Bizspark,它为您的初创公司提供3年的许可(包括其工具的生产使用许可)。 和梦想的火花免费赠送给学生。

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

我使用工具,IDE和文本编辑器与C ommand – L ine接口 (以下称为CLI )来编写程序。

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

集成开发环境

  • 在集成许多function并将其呈现在图形GUI中时,IDE非常出色。
  • 缺点是,它可以压倒一些新手。 现在您将学习件事:IDE和编程语言。

文本编辑器和CLI工具

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

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

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

你能得到的最基本的答案就是哲学。


在微软的世界里,它有点宗教 – 你有山上的众神。 雷蒙德,如果你想要任何实施,必须上访。 有时他们会倾听,有时你的牺牲和请求会被置若罔闻。 也许他们在外面打猎。 Microsoft控制整个生态系统 – 他们拥有操作系统,他们拥有IDE,并且他们以可能不适合在SE网络上讨论的方式将它们连接在一起。 即使在IDE中,它们也是紧密耦合的 – 它可能被称为集成,但我认为耦合更准确。 如果你想稍微改变一下,盖茨禁止你想要以Windows或Visual Studio的设计者没有明确允许的方式改变某些东西。 然后投入IE,IIS,Microsoft服务器,MS SQL Server和Office等技术……一切都是一个很幸福的大家庭。 但是,如果你想留下一部分家庭? 不寒而栗


另一方面,你拥有Linux,它inheritance了Unix的理念,即每个部分都应该对自己的小责任范围负责。 它应该做件事,做得好。 并且优选地,通信应该通过文本串发生。 正如其他人所指出的那样, sedawkgrep等就是其中的完美例子。 他们做了他们设计的件事,他们做得很好。 如果您需要做件事,那么您将两个工具结合起来。 这很容易做到。

因为sed预计除了输入的内容之外什么都不是文本,这意味着任何可以产生文本的东西都不需要重新发明轮子。 他们可以简单地使用sed 。 因为sed生成文本,任何可以读取文本的东西都可以使用sed的输出。 文本是非常通用的(这有一些例外),并且很容易将这些类型的事物组合在一起。

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

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

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

您可以组合所需的工具。 如果有什么东西在你的方式,你100%能够改变。 即使你没有这种能力,你当然可以付钱给某人来发展这种变化 – 甚至可以向拥有这种知识的其他人建议。

这对于编程更好的原因是因为当你遇到摩擦时 ,你可以从你的工作流程中消除它。 因为发展很难 ,你需要考虑很多事情才能成为一名成功的程序员,你必须考虑的事情越多,就越难以思考其他事情 。

消除摩擦是关键。

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

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

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

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

我认为在Linux上开发的最重要原因是因为您对大多数软件内部都有充分的了解。 如果您有兴趣,您可以了解事情的实际工作方式。 这使您可以通过观察它们的实际情况来学习和调整好的或坏的实践。 这为您的想法提供了更多样化。

为什么Linux更适合编程

集成开发环境

除了为特定目的服务的Visual Studio和Xcode之外,大多数流行的IDE都是多平台的。 对于几十种语言来说似乎有无数的IDE,但最终大多数都基于Eclipse , IntelliJ IDEA或NetBeans 。 它们的共同点是它们都是基于Java的。 Java在Linux上的工作效率要高于在同一硬件上的任何其他操作系统。 事实上,Java在Linux上比在相同硬件上的OS X上快20%。 许多这些IDE都可以在Ubuntu软件中心一键安装。

编译器

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

其他工具

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

易于安装OSS

Ubuntu有一个优秀的包管理器。 在大多数情况下,安装软件只是apt-get install package-name (您也可以使用GUI,Ubuntu Software Center或Synaptic)。 安装后,系统会自动更新bugfix版本。 软件包系统还会自动跟踪依赖关系,因此您不必担心所需的其他软件包; 它们将自动安装。

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

生产机器很可能是Linux

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

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

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

不是,我可以说它恰恰相反。 一般来说,人们往往更喜欢他们擅长的工具。 您使用的工具类型可能有助于编写程序。 因此,例如,我可以使用vim编写Java程序,但与Eclipse或IntelliJ等完全成熟的IDE相比,它的效率非常高。 Jon Skeet对使用IDE的问题给出了很好的答案。

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

您用于编程的工具(文本编辑器或IDE)是一个选择问题。 一般来说,您可以说:初学者和非常小的项目倾向于使用更好的文本编辑器,如崇高文本或gedit的修改版本。 仅仅因为您在使用纯文本编辑器时学到了更多。 IDE可以通过自动化事物来搞砸你的学习过程(比如Visual Studio会这样做)。

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

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

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

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

我认为Linux发行版一个IDE。

首先,Unix从一开始就被设计为一个开发环境。 它是程序员为程序员编写的。 大多数Unix和Linux仍然使用默认配置的开发工具。 缺少的部分只是一个apt-get (或等效的)。 另一方面,Windows是一个糟糕的开发环境,直到你安装一个不便宜的IDE或一个简单的过程。

IDE更加集成,因为IDE比使用GCC,Git和Vi(例如)更紧密耦合 。 紧耦合允许“intellisense”之类的东西更好地工作。 但另一方面,松耦合具有许多优点(例如灵活性,可互换性,缺乏锁定)。

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

关于哲学问题:Ubuntu / Linux允许计算机程序员直接访问内部和硬件,而Windows则是一种网守。 在编程方面,这是一个重要的哲学问题。 因此,从哲学上讲,这个特征是一个优势将取决于用户是否具有足够的知识或技术意识到它的重要性。

关于编程问题: Ubuntu / Linux的整个系统架构建立在Unix传统的小型简单程序做一件事上,然后将它们组合在一起做更复杂的事情。 对于程序员来说,这种体系结构非常强大,而且在我看来,这就是为什么Unix将在每个平台上与其他所有软件体系结构相媲美的原因。 Unix当前不占主导地位的少数几个地方之一是桌面,但随着时间的推移会发生变化。 像Ubuntu这样的发行版有助于看到这种演变。

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

速度是排序的答案。

我发现使用像Visual Studio或QtCreator这样的图形IDE时,我应该使用快捷方式时使用鼠标太多了。 每次切换上下文时,您都必须暂停大脑,专注于目标并等待操作。 而按F5的速度要快得多。

现在,如果你正在使用vim,Emacs或其他没有漂亮外观按钮的东西,你将专注于按键,你有一种方法,因为它的常规变得更快。

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

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

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

视觉forms发展很糟糕。 您可能在GUI IDE上放置的一个优点是可以更快地绘制屏幕。 但是根据我的经验,它可以很好地用于原型,但通常在代码中手动执行会得到更好的结果。 今天早上的VS2012代码分析器刚刚警告我有大约200多个代码是由Visual Studio自动生成的问题?!​​?!?

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

MonoDevelop的。

这是可行的,但如果你已经习惯了VS和所有function,你会讨厌它。

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