为什么在文本文件中或通过终端编写程序比在Windows上使用像Visual Studio这样的IDE更好(我读过)?IDE提供的功能是否存在(例如,显示编译错误),或者是手动过程?
为什么在文本文件中或通过终端编写程序比在Windows上使用像Visual Studio这样的IDE更好(我读过)?IDE提供的功能是否存在(例如,显示编译错误),或者是手动过程?
Answers:
这种假设在Programmers.SE上可能会做得更好,因为在此情况下,它可能只是一个方面。就是说,我是.NET开发人员几年了,开始依赖Visual Studio。它对您有很多帮助,是的,我特别喜欢集成调试器...但是,我认为人们选择Linux的原因有很多:
Ubuntu是免费的。Windows和VS可能非常昂贵。
Ubuntu是免费的。Windows和VS对您如何使用它们几乎没有控制权。
Ubuntu是开箱即用的编程环境。工具,比如猛砸,grep
,sed
,awk
。从历史上看,Windows从底部开始是一个很大的难题。批处理文件非常糟糕,即使使用PowerShell,与Bash和GNU工具相比,Windows中的命令行体验也显得微不足道。您可以将其中一些移植到Windows上,但体验却不尽相同。
有些事情不需要复杂的IDE。这些天我是一名Python开发人员,并且对其内置的工具和调试器感到非常满意。我使用文本编辑器,命令行和结构...而且,与在.NET中相比,我的控制方式更多。我可以使用一个Fabric命令来构建,测试,提交和部署我的Web应用程序。
这并不是说没有单片IDE。Eclipse和Netbeans。MonoDevelop。KDevelop4和QT Creator。他们都有他们的用户发誓。
Ubuntu 对您来说更好吗?谁知道。这是一个功能强大且可自定义的系统。如果您有机会并改变工作流程以帮助您,那么您应该能够坚持下去。
even PowerShell scripts lack the power of Bash
-我认为您那时对PS不太了解;它功能强大,而且我在Bash中还没有遇到您在PS中无法完成的任何事情
我想补充一个更重要的理由;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下学习体验的原因。
apt-get
,以及一切都必须以这种方式安装的心态,这也许是Linux最好的东西。OSX和Windows都无法在这里进行比较。
The MacPorts Project currently distributes 17699 ports
。一个区别是它总是可以编译。
yum
,pacman
,emerge
,petget
,pkgadd
...
这是主要由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。
我使用这两种工具,IDE和文本编辑器与ç ommand- 大号 INE 我覆盖整个院落(娄称CLI),写程序。
Linux提供的是从默认安装开始的有用的 CLI。如果您不需要它,并且无论如何都在使用IDE,那么就没有太大的区别了(IMHO)。
我经常使用基于文本的工具进行原型制作。以后,当有更多文件要管理时,我很重视IDE为我提供的重构工具。
grep
不会是CLI,它没有界面(它只是一个命令行工具)
grep
是参数,stdin和stdout- 该词并不表示任何图形或伪图形。其他类型的接口包括Web API,串行协议等。
我会把答案扔进去(尽管我相信这些都是不错的选择)。
您可以得到的最基本的答案就是哲学。
在Microsoft世界中,这有点虔诚-您在Mt. 雷德蒙德,如果您想实施任何措施,必须上访。有时他们会听,其他时候您的牺牲和恳求会落在耳边。也许他们正在狩猎。微软控制着整个生态系统-他们拥有操作系统,拥有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?进行更改并将其提交回上游,或者分叉项目。不确定为什么某样东西会表现出来吗?使用消息来源,卢克!是否需要能够通过命令行自动执行某些操作?修改项目并坚持进行更改。遇到错误还是安全问题?嘿,猜猜是什么-您可以自己解决问题,不必等待SP3.432vb89234.startdate1eQ的到来。
您可以组合所需的工具。而且,如果您遇到了麻烦,您将100%能够进行更改。即使您没有能力,也可以肯定地付钱给某人来开发该更改-甚至可以将其建议给其他具有专门知识的人。
之所以适合编程,是因为遇到摩擦时,可以从工作流程中消除摩擦。因为开发困难,所以要想成为一名成功的程序员,您需要考虑很多事情,而要考虑其他事情就越需要考虑更多的事情。
消除摩擦是关键。
因此,如果您喜欢Microsoft的ecostystem宗教,并且非常喜欢这些工具,以至于不会给您带来太多/任何摩擦……那么,那可能就很好了。
但是,如果您不适合正在申请专利的Microsoft Mold(tm),那么您将遇到麻烦。发展将是痛苦的。每次您希望做某事但不能做某事时,都会耗尽宝贵的认知资源。如果真是这样,那么您可能会喜欢Linux开发环境。
我想对这个问题提供更一般的想法:
“为什么Linux是更好的编程环境?”
我认为,在Linux上进行开发的最重要原因是因为您对大多数软件内部都有全面的了解。如果您有兴趣,您可以了解事物的实际运作方式。这样一来,您就可以通过观察实际情况来学习和改正好坏做法。这使您的想法更具多样性。
除了满足特定目的的Visual Studio和Xcode 外,大多数流行的IDE都是多平台的。似乎有数十种语言的庞大的IDE,但最终它们大多数基于Eclipse,IntelliJ IDEA或NetBeans。它们的共同点是它们都是基于Java的。与在相同硬件上的任何其他OS相比,Java在Linux上的工作效率更高。实际上,在相同硬件上,Java在Linux上的速度比在OS X上快20%。一键式安装所有这些IDE,即可在Ubuntu Software Center中进行安装。
GCC已非常成为行业标准。毫无疑问,它的主要平台是Linux,该平台得到最佳支持。而且它是免费且免版税的。
Linux提供了其他平台上没有的独特工具,例如Valgrind(用于内存调试,内存泄漏检测和性能分析的工具)。Linux还附带了调试工具,例如strace和ltrace,它们甚至可以用于调试生产代码(即,未使用调试符号进行编译)。Windows的等效工具不存在或非常昂贵,并且不能提供相同的功能。
Ubuntu具有出色的软件包管理器。在大多数情况下,仅安装软件即可apt-get install package-name
(您也可以使用GUI进行安装,无论是Ubuntu Software Center还是Synaptic)。安装后,它们会由系统使用错误修正版本自动更新。软件包系统还自动跟踪依赖关系,因此您不必担心需要其他软件包。它们将被自动安装。
另一方面,在Windows中,您必须手动下载并安装软件包,如果它们需要其他软件包,则也必须手动进行。也不存在系统范围内的更新,每个软件包要么实现自己的烦人的更新程序,要么根本不更新。
如果您为后端,Web,云等进行任何类型的编程,则目标计算机很可能是Linux。当您在与目标计算机相同的操作系统上进行开发时,没有太多令人讨厌的惊喜。
当然,您可能正在开发Windows桌面应用程序,但是如今,这对于程序员来说是一个小众市场。
为什么在文本文件中或通过终端编写程序比在Windows上使用像Visual Studio这样的IDE更好(我读过)?
不是,我可以说是完全相反。通常,人们倾向于喜欢他们擅长的工具。您使用的工具类型可能有利于编写程序。因此,举例来说,我可以用vim编写Java程序,但是与成熟的IDE(如Eclipse或IntelliJ)相比,它确实适得其反。乔恩·斯基特(Jon Skeet)对于为什么使用IDE的问题给出了很好的答案。
回到您最初的问题,Linux唯一擅长的就是C编程。在Linux上您可以做的所有其他事情,在Windows上也可以做,反之亦然(明智的编程)。由于历史原因,C编程在Linux上更好,它提供了很多工具(您可以在Windows BTW上获得,但是为它设置Linux要容易得多)。同样,如果您正在编写C#并且喜欢.NET,那么出于显而易见的原因,Windows是更好的选择。其他所有内容都是主观的,您会听到双方的利弊。
apt-get
对于C开发而言,这是很棒的。您可以快速获取例如sudo apt-get install libcurl4-openssl-dev
,的工具,库和调试符号sudo apt-get install valgrind
,sudo apt-get install libz-dbg
并轻松进行尝试。
您选择使用哪种工具(文本编辑器或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”能有所帮助...
我认为Linux发行版是 IDE。
首先,Unix从一开始就被设计为开发环境。它是由程序员为程序员编写的。大多数Unix和Linux仍以默认配置附带开发工具。丢失的零件只有apt-get
(或等效的)距离。另一方面,在您安装不便宜的IDE或琐碎的过程之前,Windows是一个糟糕的开发环境。
IDE的集成度更高,也就是说,与使用GCC,Git和Vi相比,IDE的连接更为紧密。紧密耦合可以使“智能”之类的东西更好地工作。但是另一方面,松耦合具有许多优点(例如灵活性,可互换性,没有锁定)。
编译器设计的进步(具有易于分离的前端的编译器,例如LLVM)最终可能意味着即使在松耦合的环境中,也可以更好地支持诸如语法错误突出显示等功能。
在哲学上: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链接进行编码。
视觉形式的发展很烂。您可能会在GUI IDE上放置的一个优点是可以更快地绘制屏幕。但是,以我的经验,它对于原型很好,但是通常您可以通过在代码中手动进行操作来获得更好的结果。VS2012代码分析器今天早上刚刚警告我有关Visual Studio自动生成的代码的200多个问题?!?!?
vim
。这是一个非常主观的领域!但是,许多人在Linux上使用IDE,因此您在这里将多件事混为一谈。