问题描述
为什么在文本文件中或通过终端编写程序比使用Windows上的Visual Studio等更好的选项(如我所读)?那里存在IDE提供的功能(例如显示编译错误)还是手动过程?
最佳解决思路
这种假设可能在Programmers.SE上做得更好,因为它可能在这里很漂亮one-sided。也就是说,我几年来一直是.NET开发人员,并开始依赖Visual Studio。它为你做了很多,是的,我特别喜欢集成的调试器…但是,我认为人们选择Linux有几个原因:
-
Ubuntu是免费的。 Windows和VS可能非常昂贵。
-
Ubuntu是免费的。 Windows和VS几乎无法控制您如何使用它们。
-
Ubuntu是一个开箱即用的编程环境。 Bash,
grep
,sed
,awk
等工具。从历史上看,Windows在脚本编写方面是一个巨大的痛苦。批处理文件非常糟糕,即使使用PowerShell,与Bash和GNU工具相比,Windows中的命令行体验也显得微不足道。您可以将其中的一些移植到Windows,但这不是相同的体验。 -
有些东西不需要复杂的IDE。这些天我是一名Python开发人员,我对自己的内置工具和调试器非常满意。我使用文本编辑器,命令行和结构……而且我比在.NET下更能控制。我可以使用单个Fabric命令构建,测试,提交和部署我的webapps。这并不是说没有单一的IDE。 Eclipse和Netbeans。 MonoDevelop的。 KDevelop4和QT Creator。他们都有他们的用户发誓他们。
Ubuntu对你更好吗?谁知道。它是一个非常强大且可定制的系统。如果你给它一个机会并改变你的工作流程以允许它帮助你,你应该能够坚持下去。
次佳解决思路
我想补充一个更重要的原因; Ubuntu非常适合尝试新的库,语言,IDE和编译器。一切都是一个apt-get。
所以你听说过一种名为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
,甚至无需检查它们的放置位置!
从本质上讲,它不是关于设置day-to-day工作环境的速度有多快。这也是你可以设置一个实验环境的极快速度。我相信这是加速Linux下学习体验的原因。
第三种解决思路
以下是主要Microsoft平台开发人员的意见。如果您不是针对.NET生态系统,我认为您最好的选择是Ubuntu。如果您使用的是Ubuntu而不是Windows,则可以更轻松地获取,配置和使用几乎所有其他平台/语言的工具。
微软工具链的价值在于它是高度集成的。从IDE到源代码管理,项目管理,构建,部署,数据库,云基础架构,广告恶心。如果您使用他们的平台进行full-bore,Microsoft会非常容易。
正如一些人所提到的,偏离Microsoft Way可能会很痛苦。使用.NET代码和Oracle代表数据库… d’oh that’s会很痛苦。
想要创建.NET Web应用程序并将其部署到Amazon Web Services ……不是很直接。
但是,如果你留在微软生态系统中……那个宝宝会像嘲笑的鸟一样为你唱歌。在一个称职的软件开发人员手中,微软平台就像一个才华横溢的运动员的PED。它不会让业余程序员创建下一个Facebook。但它将为有才华的开发人员提供优势,他们了解这些部分如何融合在一起。
开始使用Ubuntu的免费(如啤酒)成本的论点已经出现了,微软提供的许多程序可让您免费使用他们的工具。包括Bizspark,它为您的初创公司提供3年的许可(包括其工具的生产使用许可)。和梦想的Spark免费赠送给学生。
话虽这么说,如果你想探索和学习新的语言和平台,你会找到更好的工具来开始使用Ubuntu,如果你正在寻找微软生态系统以外的工作,你将需要熟悉与Ubuntu。
第四种思路
我使用工具,IDE和text-editors与Command-Line接口(以下称为CLI)来编写程序。
从默认安装开始,Linux提供的是一个有用的CLI。如果你不需要它而且你只是使用IDE,那么就没有太大的区别了(恕我直言)。
IDEs
-
在集成许多功能并将其呈现在图形GUI中时,IDE非常出色。
-
缺点是,它可以压倒一些新手。现在您将学习两件事:IDE和编程语言。
文本编辑器和CLI工具
-
文本编辑器和CLI工具不需要很长时间才能学习。
-
如果某些东西不起作用,很容易看出哪个工具不能按预期工作。
-
因为一切都是text-based,所以更容易查找谷歌的问题。
-
使用文本编辑器和CLI工具进行编程更快,响应更快,特别是在旧硬件上进行比较。
-
即使在低分辨率屏幕上也可以使用它们。
-
它允许您使用远程服务器上的最少资源进行编程和调试。
我经常使用text-based工具进行原型设计。后来,当有更多要管理的文件时,我重视IDE为我提供的refactoring工具。
第五种思路
我会把我的答案扔进戒指(虽然我相信这些都是好的)。
你能得到的最基本的答案就是哲学。
在微软的世界里,它有点宗教 – 你有山上的众神。雷蒙德,如果你想要任何实施,必须上访。有时他们会倾听,有时你的牺牲和请求会被置若罔闻。也许他们在外面打猎。 Microsoft控制整个生态系统 – 他们拥有操作系统,他们拥有IDE,并且他们以可能不适合在SE网络上讨论的方式将它们连接在一起。即使在IDE中,它们也是紧密耦合的 – 它可能被称为集成,但我认为耦合更准确。如果你想稍微改变一下,盖茨禁止你想要以Windows或Visual Studio的设计者没有明确允许的方式改变某些东西。然后投入IE,IIS,Microsoft服务器,MS SQL Server和Office等技术……一切都是一个很幸福的大家庭。但是,如果你想留下一部分家庭?不寒而栗!
另一方面,你拥有Linux,它继承了Unix的理念,即每个部分都应该对自己的小责任范围负责。它应该做一件事,做得好。并且优选地,通信应该通过文本串发生。正如其他人所指出的那样,sed
,awk
,grep
等就是其中的完美例子。他们做了他们设计的一件事,他们做得很好。如果您需要做两件事,那么您将两个工具结合起来。这很容易做到。
因为sed
除了输入的内容之外什么都不会是文本,这意味着任何可以产生文本的东西都不需要重新发明轮子。他们可以简单地使用sed
。由于sed
生成文本,任何可以读取文本的内容都可以使用sed
的输出。文本是非常通用的(这有一些例外),并且很容易将这些类型的事物组合在一起。
不仅可以轻松地将它们组合在一起,而且将它们拆分也很容易 – 如果我决定不再需要编辑流,但我想过滤结果,而不是将我的文本传递给sed
,我可以将其传递给grep
。
现在,这是Linux环境中开发背后的基本理念 – 所以即使你从那里开始,许多工具也提供类似的接口。它们允许您将它们分解为多个部分,或通过命令行或端口或HTTP与它们进行交互。
即使不是这样,你也有开源软件。 Linux平台上的大多数(如果不是全部)软件都是开源的。因此,如果您不喜欢它的编写方式,那么您完全可以完全自己更改软件。这是令人难以置信的授权。不能以你想要的方式分解IDE吗?进行更改并将其提交回上游,或者分叉项目。不确定为什么某些事情会像它一样? Use the source, Luke!需要能够通过命令行自动化某些东西吗?破解项目并坚持改变。遇到错误或安全问题?嘿猜什么 – 你可以自己修复,你不必等待SP3.432vb89234.startdate1eQ出来。
您可以组合所需的工具。如果有什么东西在你的方式,你100%能够改变。即使你没有这种能力,你当然可以付钱给某人发展这种变化 – 或者甚至建议给拥有know-how的其他人。
这对于编程更好的原因是因为当您遇到friction时,您可以从工作流程中消除它。因为开发很难,所以你需要考虑很多事情才能成为一名成功的程序员,而且你必须考虑更多的harder it is to think about other things。
消除摩擦是关键。
因此,如果微软ecostystemreligion让你有宾至如归的感觉,并且你非常喜欢这些工具,那么它就不会给你带来太多/任何摩擦……好吧,它可能就好了。
但如果你不适合正在申请专利的Microsoft Mold(tm),那么你将遇到摩擦。发展将是一种痛苦。每次你希望你能做某事,但不能做,这将耗尽宝贵的认知资源。如果是这种情况,那么Linux开发环境可能适合您。
第六种思路
我想对这个问题提出更一般的想法:
“为什么Linux是一个更好的编程环境?”
我认为在Linux上开发的最重要原因是因为您对大多数软件内部都有充分的了解。如果您有兴趣,您可以了解事情的实际工作方式。这使您可以通过观察它们的实际情况来学习和调整好的或坏的实践。这为您的想法提供了更多样化。
第七种思路
为什么Linux更适合编程
IDEs
除了为特定目的服务的Visual Studio和Xcode之外,大多数流行的IDE都是多平台的。对于几十种语言来说,似乎有很多IDE,但最终大多数都是基于Eclipse,IntelliJ IDEA或NetBeans。它们的共同点是它们都是Java-based。 Java在Linux上的工作效率要高于在同一硬件上的任何其他操作系统。事实上,Java在Linux上比在相同硬件上的OS X上快20%。许多这些IDE都可以在Ubuntu软件中心一键安装。
Compiler
GCC已成为行业标准。毫无疑问,它的主要平台是Linux,它得到了最好的支持。它是免费的和royalty-free。
其他工具
Linux提供了独特的工具,在其他平台上不可用,例如Valgrind(用于内存调试,内存泄漏检测和分析的工具)。 Linux还附带了调试工具,如strace和ltrace,它们可用于调试生产代码(即不使用调试符号编译)。用于Windows的等效工具是non-existent或非常昂贵,并且不提供相同的功能。
易于安装OSS
Ubuntu有一个优秀的包管理器。在大多数情况下,安装软件只是apt-get install package-name
(您也可以使用GUI,Ubuntu软件中心或Synaptic)。安装后,系统会自动更新bugfix版本。软件包系统还会自动跟踪依赖关系,因此您不必担心所需的其他软件包;它们将自动安装。
另一方面,在Windows中,您必须手动下载和安装软件包,如果它们需要其他软件包,您也必须手动执行此操作。也没有系统范围的更新,每个软件包要么实现自己烦人的更新程序,要么根本不更新。
生产机器很可能是Linux
如果您为back-end,Web,云等进行任何编程,那么您的目标计算机很可能是Linux。当你在与目标机器相同的操作系统上进行开发时,会有很多令人讨厌的惊喜。
当然,您可能正在为Windows开发桌面应用程序,但现在这对程序员来说是一个利基市场。
第八种思路
Why is writing a program in text files or via the terminal a better option (as I read) than using IDE(s) like Visual Studio on Windows?
不是,我可以说它恰恰相反。一般来说,人们往往更喜欢他们擅长的工具。您使用的工具类型可能有助于编写程序。因此,例如,我可以使用vim编写Java程序,但与Eclipse或IntelliJ等完全成熟的IDE相比,它的效率非常高。 Jon Skeet对Why use an IDE这个问题给出了很好的答案。
回到最初的问题,Linux最擅长的是C编程。您可以在Linux上执行其他所有操作,也可以在Windows和vice-versa(编程方式)上执行。由于历史原因,C编程在Linux上更好,它提供了一组很好的工具(你可以在Windows BTW上获得它,但是为它设置Linux要容易得多)。同样,如果您正在编写C#并且喜欢.NET,那么出于明显的原因,Windows是更好的选择。其他一切都是完全主观的,你会听到双方的利弊。
第九种思路
您用于编程的工具(文本编辑器或IDE)是一个选择问题。一般来说,您可以说:初学者和非常小的项目倾向于使用更好的文本编辑器,如崇高文本或gedit的修改版本。仅仅因为您在使用纯文本编辑器时学到了更多。 IDE可以通过自动化事物来搞砸你的学习过程(比如Visual Studio会这样做)。
对于专业人士来说,搞乱大量的工具和语言,IDE会派上用场,因为如果你愿意的话,他们可以为你做更多的事情。有许多IDE可供选择,具体取决于您要编程的语言。有更好的IDE,也不太方便。
我个人的经验是,Ubuntu操作系统比Windows更快,更容易设置开发。我认为,这是因为我使用的大多数工具和程序都是在Linux上构建的,因为我不必在互联网上搜索我最喜欢的程序的下载链接。它只是一个’apt-get安装程序1 program2 program3’。相比之下:我需要3个工作日的时间来安装和配置一个全新的Windows安装,其中包含编程所需的一切(公司,而不是私有,这会更快),但在Ubuntu中只需一天即可完成相同的任务。
我的经验是,那些转向使用Linux进行编程的程序员(大部分时间)对技术环境以及基础知识的工作方式有了更深入的了解。 Mac和Windows用户往往不知道为什么某些东西会这样运作,或者为什么不运行。我不确定你是否真的可以从使用Linux中学到一些东西,或者只是那些想学习切换到Linux的东西。
希望我的”blafasel”有点帮助……