Ubuntu作为编程环境相比Windows有哪些优势?

为什么以文本文件或通过终端编写程序是一个比在Windows上使用IDE(如Visual Studio)更好的选择(据我所读)? IDE提供的功能是否存在于这种方式中(例如显示编译错误),还是需要手动处理?

16有些人已经做了很长时间的编程,并通过文本驱动的命令提示符成为高效的从业者。他们可能也会喜欢像 vim 这样的编辑器。这是一个非常主观的领域!尽管如此,许多人在 Linux 上使用 IDE,因此您现在正在混淆多种事情。 - Warren P
3我认为IDE并不是问题的重点。对于Linux操作系统来说,有很多IDE可供选择。例如,所有JetBrains的IDE(IntelliJ/PyCharm等)都可以在Linux上运行。Eclipse也可以在Linux上运行。QtCreator也可以在Linux上运行。 - Bakuriu
12这个问题在这个网站上会受到确认偏误的影响。 - zzzzBov
如果你从事Android开发,我注意到在运行Ubuntu而不是其他GNU/Linux发行版(如Debian或Fedora)或微软操作系统时,有些主机在这个任务上表现更好。 - 203967
5为了保持问题的干净,避免元讨论,我已经开了一个单独的元主题来专门处理它 - Oli
我很惊讶在任何答案中都没有看到“GNU Make”。它是使编译代码变得非常容易的工具。还有man,你可以轻松查看文档内容。 - Alvin Wong
所以,等一下,你是在说图形化IDE和基于文本的工具(这两者都不受操作系统限制)之间的区别吗?"Ubuntu"与这个问题有什么关系?顺便说一句,MSVS内部也使用了很多文本工具。 - Oleg V. Volkov
老实说,我不认为Linux比Windows/OS X更适合编程,尤其是在使用集成开发环境(IDE)的情况下。但是,我确实相信Linux对于程序员来说是更好的操作系统,因为它是开源的、可完全配置和调整的。在Linux中,编写一个快速脚本来自动化某些任务要比在Windows中容易得多。此外,如果你想要调整一个现有的程序,在Linux中往往是开源且直接明了的(而在Windows中通常是专有的)。然而,在一个足够强大的集成开发环境(例如Eclipse)中,两者并没有太大的区别。 - dr jimbob
4请重新表达这个问题,使其更有意义,特别是标题。Ubuntu并不强制你避免使用集成开发环境(IDE),而只能使用文本编辑器进行软件开发,就像Windows一样。 - Reinier Post
@zzzzBov 现在我对你的评论有了确认偏见,因为你提到了确认偏见。 - Nadir Sampaoli
2请查看元数据,了解为什么这个问题应该被关闭。http://meta.askubuntu.com/a/7521/115155 - don.joey
13个回答

这种假设性的问题可能在Programmers.SE上更合适,因为这里可能会有很明显的倾向性。话虽如此,我曾经是一名.NET开发者,多年来一直依赖于Visual Studio。它为你做了很多事情,而且我特别喜欢集成的调试器...然而,我认为人们选择Linux有几个原因:
  • Ubuntu是免费的。Windows和VS可能非常昂贵。

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

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

  • 复杂的设置可以通过apt-get、类似PuppetChefJujuFabric和简单的脚本自动化和复制。

  • 有些事情不需要复杂的集成开发环境(IDE)。我现在是一名Python开发者,我对它自带的工具和调试器非常满意。我使用文本编辑器、命令行和fabric...我比在.NET下更具控制力。我可以通过一个Fabric命令构建、测试、提交和部署我的Web应用程序。

    这并不是说没有大而全的IDE。Eclipse和Netbeans。MonoDevelop。KDevelop4和QT Creator。它们都有自己的忠实用户。

Ubuntu对你来说更好吗?谁知道呢。它是一个非常出色且可定制的系统。如果你给它一个机会,并改变工作流程以便让它帮助你,你应该能够使它适应你的需求。

18“免费”既涉及到成本,也涉及到麻烦。我使用的是Mac,但像Vagrant这样的工具可以轻松地为任何项目设置一个干净的Linux虚拟机,并在项目完成后将其丢弃。“我想要什么?”是唯一需要考虑的问题,而不是“我是否有这个操作系统的许可证密钥,以及如何使其被识别出来……?” - Nathan Long
好的总结。如果我被迫只能选择一个词来形容Linux,那就是“可定制”。在Windows世界中,通常只有一种方式(由微软定义)可以实现事情,而在Linux上,你的想象力和技能是最大的限制 - 不满足工具?自己动手写吧! - KBart
14+1 对于在很多人都容易产生“Windows 在所有方面都糟糕”的膝反应态度时能保持客观的态度表示赞同。 - Phil
2有一件事需要注意,Visual Studio比以前更加“自由”,它已经支持MAKE文件有一段时间了,并且插件可以让你在Visual Studio内完全编写和调试Cygwin应用程序。 - Scott Chamberlain
6即使是PowerShell脚本也无法与Bash相媲美 - 我认为你对PS不够了解;它的功能非常强大,我从未遇到过在Bash中可以做而在PS中无法做到的事情 - Mark Henderson
1@KBart 你知道吗,你完全可以自己为Windows编写工具的。 - Michael Brown
4@MarkHenderson 是的,几乎可以肯定是因为没有充分使用它。当我离开Windows和.NET时,它刚刚被引入。我认为Bash(当我说“Bash”时,实际上是指GNU)与我同在,因为你可以在任何地方任何事情中使用它。每次都需要大量搜索PS,因为一切总是非常专门化。老实说,经过这么长时间使用Bash后很难说。 - Oli
PowerShell非常强大,但在我看来,它的语法冗长而且不直观。 - Alan B
@AlanB FYI,PowerShell 可以很啰嗦...或者可以简洁。例如,你可能认为Get-ChildItem -Recursive很啰嗦,但是使用别名,你可以输入ls -r(是的,这是PowerShell而不是bash)。较新版本的ISE还可以帮助使其更直观(尽管有些地方可能会让不谨慎的人出错)。 - JohnL
1@AlanB 你是说像 tar xjf 这样的命令很直观吗?(每次我使用它时都要去谷歌一下,因为我不经常用它。) - svick
1我发现在1989年学习tar很困难,但是在使用一段时间后,我发现它相当容易记住,除了Solaris、AIX、Linux和BSD都有各自的特点。如今我在任何地方都使用Gnu Tar。man tar比google tar更容易和更快一些。 - Warren P
@svick 或许不是那么直观,但是一旦你做过几次,就和在Windows上记住或不记住“rar x bla.rar”一样容易。 - Alan B
1双向归档工具在任何平台上都很复杂。tar比一些工具更加晦涩,但也非常灵活。 - Oli

我想再加一个重要的原因; Ubuntu非常适合尝试新的库、语言、集成开发环境和编译器。一切都可以通过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即可。
本质上,这并不仅仅是关于你能多快地设置日常工作环境,也关乎你能多快地搭建一个实验环境。我相信这正是在Linux下加速学习经验的原因所在。

36apt-get以及一切都必须通过这种方式安装的心态,或许是Linux最好的地方。无论是OSX还是Windows,在这方面都无法与之相比。 - Nathan Long
1在Windows上的所有东西都使用大约3或4个主要的安装程序之一 - 大多数使用MSI。 - Alan B
11是的,但你必须手动获取每个应用程序的安装程序:它们在内部使用相同的安装程序并不会给你带来太多便利(这只是为了节省他们的一些工作)。这与内置的软件包管理器不同。 - Useless
2@NathanLong我刚刚用Macports做了完全相同的事情:sudo port install ghc。从源代码新编译的。 "MacPorts项目目前分发17699个端口"。一个区别是它总是编译。 - alecail
1不仅安装容易,卸载也很简单。 - BЈовић
一切都只是一个apt-get的距离,但问题在于,一场关于损坏依赖及其他类似问题的噩梦也同样只是一个apt-get的距离。 - Alan B
1OS X 有 finkmacportshomebrew,Windows 有 Cygwin。两个系统都有二进制和源代码软件包管理器,因此我不确定 apt-get 在这里有何独特之处。 - kara deniz
2@karadeniz: 这还不包括 yum, pacman, emerge, petget, pkgadd... - Aesin
@Aesin 和 kara deniz,我不明白你们关于软件包管理器数量的观点;alias fancynewpackagemanager=apt-get 然后,你就有了一个“新”的软件包管理器。重要的是仓库要全面且可靠。你必须信任维护者自己,更重要的是你必须相信他们会非常小心地确保恶意代码不会溜进来。刚想到,我搜索了 sfml(我使用的一个库),在 MacPorts 仓库中没有找到,对其可靠性很难说。 - enobayram
2我喜欢MacPorts(并在那里和Homebrew上维护了一些软件包),但它真的无法与Debian相比。这些较小的项目没有足够的人力来维护一个大型仓库以同样的标准。Windows方面的cygwin和coapp也是如此。关键的区别在于文化,我认为Linux的软件包管理器是系统的一部分,每个人都用它们来处理一切事务,而不仅仅是被稍微忽视的附加组件。 - jcupitt
@enobayram:抱歉,是的,我同意你所说的最大好处主要来自于仓库的可靠性和全面性,而不是软件包管理器本身,尽管它很方便,但并不独特。 - Aesin
2apt-get和Macports或类似工具之间的巨大区别在于,apt-get可以完全控制所有内容,而Macports只是一个附加组件,无法控制或了解系统本身或其他来源安装的软件。 - vartec
@vartec:这并不完全正确。当然,apt-get有系统软件的控制权,因为它进行了安装。但是,如果您开始手动下载其他东西并将其随意放置在系统中,APT可能无法识别并对其产生不良反应。 - Aesin
@Aesin 你在技术上说得没错,但在实际操作中,你只需要手动安装那些不太常用且依赖较少的奇特软件。而如果我想要使用例如更新的通用软件(比如gcc)的版本,除非必要,我就不会去安装它。 - enobayram

这是一个来自主要使用Microsoft平台的开发者的观点。如果你不针对.NET生态系统,我会认为你最好选择Ubuntu。如果你使用Ubuntu而不是Windows,你将更容易获得、配置和使用几乎所有其他平台/语言的工具。
微软工具链的价值在于其高度集成化。从IDE到源代码控制、项目管理、构建、部署、数据库、云基础设施等等,微软使得如果你全力以赴地使用他们的平台,一切都变得非常容易。
正如一些人提到的,偏离微软的方式可能会很痛苦。使用.NET编写代码,使用Oracle作为数据库...这将是一种痛苦。
想要创建一个.NET Web应用程序并将其部署到Amazon Web Services...并不是那么直接。
但是,如果你留在微软生态系统内...那个宝贝将像一只嘲鸟一样为你歌唱。在一个有能力的软件开发者手中,微软平台就像对于一个有才华的运动员的兴奋剂。它不会让一个业余程序员创造出下一个Facebook。但它会给一个理解各个组件如何配合的有才华的开发者带来优势。

关于使用Ubuntu开始免费(免费啤酒)的论点已经不成立了,微软提供了许多免费使用其工具的程序。包括Bizspark,可以为你的创业公司提供3年的许可证(包括生产使用许可证)。还有Dreamspark,可以免费提供给学生。

话虽如此,如果你想探索和学习新的语言和平台,你会发现在Ubuntu上有更好的工具进行开始,如果你希望在微软生态系统之外找工作,你需要熟悉Ubuntu。


7是的,我同意。在 Linux 环境下编写低级 C/Unix 代码一段时间后,我决定休息一下并进行一些 C# 图形开发,启动了新版 VS,嗯,可以说这让人感到解脱。虽然不太灵活,但如果你不介意向微软出卖你的灵魂... 哦,我是说,拓宽你的视野! - Thomas
3是的,我赞同这个欢迎的解药,对于那些半知半解地反对微软的人来说,真是一针见血。 - Alan B

我同时使用IDE和文本编辑器与命令行界面(以下简称CLI)来编写程序。

Linux提供的CLI非常有用,从默认安装开始就可以使用。如果你不需要它,而且只是使用IDE,那么它们之间就没有太大的区别了(个人意见)。

IDEs

  • IDE在集成多种功能并以图形化界面呈现方面非常出色。
  • 缺点是对于新手来说可能会感到压力。现在你需要学习两样东西:IDE和编程语言。

文本编辑器和CLI工具

文本编辑器和命令行工具学起来不需要很长时间。 如果某个工具无法正常工作,很容易看出是哪个工具没有按预期运行。 使用谷歌查找问题也更方便,因为所有内容都是基于文本的。 使用文本编辑器和命令行工具进行编程更快速、响应更及时,尤其是在旧硬件上进行比较。 即使在低分辨率屏幕上也可以使用它们进行工作。 它允许您在远程服务器上以最少的资源进行编程和调试。
我经常使用基于文本的工具进行原型设计。当有更多文件需要管理时,我会重视IDE提供的重构工具。

8未来参考,CLI是命令行界面的缩写。CLI通常指的是类似于aptitude这样的界面,它与GUI相似,但是以文本形式呈现。Vim是一个CLI编辑器,但grep不是CLI,它没有界面(只是一个命令行工具)。 - kiri
消除歧义很好。从Windows编程背景来看,CLI可能代表公共语言基础设施 - jltrem
我使用图形用户界面(GUI)来开发GUI,并使用文本编辑器来开发CLI或基于文本的程序/内容。我绝不会尝试在Vim中编写以GUI为主的商业应用程序,Visual C#使得原型设计变得轻松自如。同样地,我也不会在Windows上使用集成开发环境(IDE)进行Web开发(PHP/HTML/CSS/JS等),因为在我的Web服务器上使用Vim进行开发更加高效和方便。 - Dan
@minerz029 CLI是一种类似于grep的程序(一次只能执行一个命令[行])。你可能在想"控制台应用程序",这类似于aptitude/vim风格。 - Izkata
@Izkata 我不这么认为,grep 没有什么接口,对吧?我查了一下,CLI 似乎是指 shell 提示符。我一直认为 CLI 是文本界面的 GUI,但维基百科将 rm 等程序列为 CLI,所以我也不太确定。 - kiri
4@minerz029 grep 的界面是参数、标准输入和标准输出,这个词并不意味着任何图形或伪图形。其他类型的接口包括 Web API、串行协议等。 - Izkata
@Izkata 今天似乎我学到了一些东西,感谢。 - kiri

我也来发表一下我的观点(虽然我认为这些都是好答案)。
最基本的答案就是,这完全取决于哲学观念。
在微软世界里,这有点像宗教 - 你必须向雷德蒙德山上的众神祈求,如果你想要实现任何东西。有时他们会倾听,有时你的祭品和请求将是徒劳的。也许他们正在外面狩猎。微软控制着整个生态系统 - 他们拥有操作系统,拥有集成开发环境(IDE),并以一种可能不适合在SE网络上谈论的方式将它们耦合在一起。即使在IDE内部的组件也是紧密耦合的 - 它可能被称为“集成”,但我认为“耦合”更准确。如果您想改变一些东西,盖茨不允许您以任何Windows或Visual Studio设计师未明示允许的方式进行修改。再加上IE、IIS、微软服务器、MS SQL Server和Office等技术...一切都是一个大家庭,和谐而美满。但是,如果你想抛弃家庭中的一部分呢?啊,简直令人胆寒!
另一方面,你有Linux,它继承了Unix的理念,即每个组件应该负责自己的小范围职责。它应该只做一件事,并且做得很好。最好通过字符串文本进行通信。正如其他人指出的那样,sed、awk、grep等都是这一理念的完美例子。它们只专注于设计初衷的那一件事,并且做得非常出色。如果你需要完成两个任务,那么可以将这两个工具结合起来,这非常容易做到。
因为sed除了期望接收文本输入之外不需要任何其他东西,这意味着任何能够产生文本的内容都不必重新发明轮子,而是可以直接使用sed。并且由于sed会生成文本,任何能够读取文本的内容都可以使用sed的输出。文本是非常通用的(当然也有一些例外情况),而且将这些类型的工具组合在一起非常容易。
不仅很容易将它们组合在一起,而且很容易将它们分开 - 如果我决定不再需要编辑一个流,但是我想要过滤结果,而不是将我的文本传递给sed,我可以传递给grep
现在,这就是在Linux环境中开发的基本理念 - 所以即使你从那里开始,许多工具提供类似的接口。它们允许您将其分解为部分,或通过命令行、端口或HTTP与其进行交互。

而且即使那不是事实,你还有开源软件。Linux平台上的大多数(如果不是全部)软件都是开源的。因此,如果你不喜欢它的编写方式,你完全、彻底、绝对可以自己更改软件。这具有极大的赋权意义。无法按照自己的意愿拆解IDE吗?要么进行更改并向上游提交,要么分叉项目。不确定某个功能的行为原因?看源代码,卢克!需要通过命令行自动化某个操作吗?参与项目开发并添加你的修改。遇到错误或安全问题?嘿,你可以自己修复,不必等待SP3.432vb89234.startdate1eQ发布。

你可以组合你想要和你需要的工具。如果有阻碍,你百分之百能够进行更改。即使你没有能力,你也可以付给别人来开发这种变化,甚至向其他有专业知识的人提出建议。

这种方式对编程更好的原因是,当你遇到摩擦时,你可以将其从工作流中消除。因为开发是困难的,所以有很多事情需要考虑才能成为一名成功的程序员,而你需要考虑的事情越多,就越难想到其他事情

消除摩擦是关键。

所以,如果微软的生态系统宗教是你感到舒适的地方,并且你非常喜欢这些工具,以至于它们没有给你带来太多/任何摩擦...那么,这可能就很好了。

但是,如果你不符合微软的模具(商标待注册),那么你会遇到摩擦。开发将会很痛苦。每次你希望做某事,但却不能做到,都会消耗宝贵的认知资源。如果是这种情况,那么Linux开发环境可能适合你。


1非常喜欢你分享的那些文章,谢谢你。 - Gareth Davidson
3赞美巴尔默,愿他的奇偶校验位都被正确设置。ACK. ACK. ACK. - Warren P

我想对这个问题提供我更一般的想法:
"为什么Linux是一个更好的编程环境?"
我认为在Linux上开发最重要的原因是你可以全面了解大多数软件的内部工作原理。如果你有兴趣,你可以学习事物实际的运行方式。这使你能够通过观察它们的实际应用来学习和适应好的或坏的实践方法。这样可以让你的想法更加多样化。

2好观点。开源对于所有具有任何好奇心的开发者来说,都是一种自然的好处。在 Windows 上,这是一个无止境的过程! - Warren P
这是一个很好的观点。你对软件内部有深入的了解。 - Anwar
很多Windows开发人员将在整个职业生涯中都在Windows平台上工作,编写针对一个他们永远看不到另一面的API的程序。这有点像是思维的囚禁,你觉得呢? - Warren P
@WarrenP 如果一个API被正确地记录了文档,那么通过查看源代码你不会学到更多有关它的知识。(虽然我承认在两个世界中,很多API并没有完全记录文档。) - svick

为什么Linux对于编程更好

集成开发环境(IDE)

除了Visual Studio和Xcode,它们各自有特定用途外,大多数流行的IDE都是跨平台的。看起来有数不清的IDE适用于多种语言,但实际上它们大多基于EclipseIntelliJ IDEANetBeans。它们的共同之处在于它们都是基于Java的。Java在Linux上的工作效率比在其他操作系统上高。事实上,在相同硬件上,Java在Linux上的速度比在OS X上快20%。许多这些IDE可以通过在Ubuntu软件中心点击一次即可安装。

编译器

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

其他工具

Linux提供了独特的工具,这些工具在其他平台上不可用,例如Valgrind(一种用于内存调试、内存泄漏检测和性能分析的工具)。Linux还配备了调试工具,如straceltrace,可以用于调试生产代码(即未使用调试符号编译的代码)。而Windows的等效工具要么不存在,要么非常昂贵,并且功能不同。

安装开源软件的便利性

Ubuntu拥有出色的软件包管理器。在大多数情况下,安装软件只需执行apt-get install package-name(也可以使用图形界面,无论是Ubuntu软件中心还是Synaptic)。一旦安装完成,系统会自动通过补丁版本进行更新。软件包系统还会自动跟踪依赖关系,因此您不必担心其他所需的软件包;它们将被自动安装。

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

生产机器很可能是Linux

如果您从事后端、网络、云等任何类型的编程工作,那么您的目标机器很可能是Linux。当您使用与目标机器相同的操作系统进行开发时,往往会遇到更少的令人讨厌的意外情况。

当然,您可能正在为Windows开发桌面应用程序,但如今这算是程序员的一种小众求职市场。


Windows桌面应用程序是一个小众市场?什么? - Alan B
2@AlanB:不,桌面 Windows 应用程序的程序员是一个小众群体。估计有90-95%的程序员从事内部开发,而这些应用程序大多不是桌面应用。另外,请思考一下,你最后一次购买(以实际货币支付)一个不是游戏(或Adobe产品)的Windows应用程序是什么时候? - vartec
就我所见,无论云中心的公司如何声称,商业领域几乎所有的事情仍然坚决以桌面为基础并付费。 - Alan B
4@AlanB:再说一遍,我不是在谈论终端用户的市场。我在谈论的是程序员的就业市场。例如,你提到的应用之一是微软办公套件。然而,微软整个办公套件团队只有大约2,500名程序员,其中许多人甚至没有参与桌面版本的开发工作。 - vartec

为什么通过文本文件或终端编写程序(据我所读)比在Windows上使用IDE(如Visual Studio)更好?
实际上并不是这样,我可以说相反的观点。一般来说,人们倾向于使用他们擅长的工具。你使用的工具类型可能会有助于编写程序的便利性。例如,我可以用vim很好地编写Java程序,但与Eclipse或IntelliJ等完整的IDE相比,这真的是逆生产的。Jon Skeet对问题“为什么使用IDE”给出了一个很好的回答。
回到你最初的问题,Linux唯一擅长的就是C编程。在编程方面,你在Linux上能做的其他事情,在Windows上也同样可以做到,反之亦然。由于历史原因,Linux在C编程方面更好,它提供了一套很棒的工具(你也可以在Windows上获得,但在Linux上设置起来更容易)。同样,如果你正在编写C#并喜欢.NET,那么Windows是一个更好的选择,原因显而易见。其他方面完全是主观的,你会听到双方的优缺点。

5请尝试在Windows中设置一个(除微软之外的其他编程语言)环境,让我们看看能走多远。 - Braiam
1@Braiam 我学过,Java :P. - Daniel
6Linux在运行任何类Unix系统方面表现更佳。GCC工具链(包括C和C++编译器等其他工具)具有悠久的Unix/Posix传统。但是,如果您认为所有类Unix编程都是C编程,那么您对Unix/Posix/Linux遗产和工具的丰富多样性了解不足。 - Warren P
2Java是一个有点特殊的情况,因为你会快速生成深层嵌套的文件夹和许多文件。而且一旦你重命名类或包,你需要同步文件名或相应的文件夹。好玩好玩好玩 :) - MadMike
有一些程序员社区支持在Windows上进行开发,而不需要访问或使用MS产品和工具(当然,除了Windows本身)。例如,整个GCC编译器套件的MinGW。如果您想在Windows中使用bash作为命令提示符,也是可能的,甚至可以在没有Cygwin的情况下实现。我从事嵌入式系统开发,大部分时间都没有问题,使用Windows桌面扩展传统Unix命令行实用程序的本地端口以及Make和GCC来支持该开发。 - RBerteig
1我不知道Linux和CLI是否一定对C编程更好(VS在C++方面很棒,但缺乏C99支持,Posix可能比Win32更干净)。但是,当涉及到C开发时,apt-get非常出色。你可以快速获取工具、库和调试符号,例如sudo apt-get install libcurl4-openssl-devsudo apt-get install valgrindsudo apt-get install libz-dbg,并且可以轻松地尝试各种东西。 - Alex Jasmin
@MadMike...这可能是你使用IDE的一个原因。 - Daniel

使用哪些工具(文本编辑器或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。

希望我的"胡言乱语"能有所帮助...


我认为Linux发行版就是一个集成开发环境(IDE)。

从一开始,Unix就被设计成为一个开发环境。它是由程序员为程序员编写的。大多数Unix和Linux仍然默认配置带有开发工具。而缺失的部分只需要执行apt-get(或等效命令)即可获取。然而,Windows在安装IDE之前是一个糟糕的开发环境,而安装一个IDE并不便宜,也不是一个简单的过程。

一个IDE更加集成化,这意味着IDE比使用GCC、Git和Vi(例如)更加紧密耦合。紧密耦合可以使诸如"智能感知"等功能更好地工作。但另一方面,松散耦合也有许多优势(例如灵活性、互换性、没有锁定)。

而且,编译器设计的进展(例如具有易于分离的前端的编译器,如LLVM)最终可能会在松散耦合的环境中提供更好的支持,例如语法错误高亮显示。


所以,基本上你的意思是Linux是一个并不实际上很“集成”的集成开发环境? :-) - svick