跳到主要内容

保存的帖子

最小的开发环境:第一部分

Dave Nicolette |龙头
戴夫尼科尔特 高级顾问
读: 最小的开发环境:第一部分

最小的发展环境

多年来,软件开发工具已经在复杂性和系统资源消耗中发展。大多数开发人员今天依赖于集成的开发环境(IDE),需要一个相当脚步的桌面或笔记本电脑来运行,就像Microsoft VisualStudio,Jetbrains Intellij Ideage和基于IT的语言特定IDES系列,基于它的众多IDE,等等。

我发现自己想知道有一天,如果我们真的需要所有这些“东西”,如果也许是IDES世界正在经历同类的“功能臃肿”,那么就像Microsoft Office和Corel Office一样的办公室软件如此“沉重”,那么很难采用。什么是最小,但功能性的开发环境是什么样的?

大卫霍斯曼提出了一个有用而简单的想法,称为Dude的法律。它是这样的:

v = w / h

它的意思是,价值等于这一点为什么结束了如何

由于IDE开始以无缝方式结合有用的工具,H变小。v变得更大。也就是说,人们发现使用IDE的更具价值,而不是通过与编辑,调试器和其他工具分开使用。

有IDES通过添加功能的回报递减的点吗?H是更大的,从而减少了使用它们的v吗?什么是最小,但功能性的开发环境是什么样的?一个让我们朝着较低的H和更高的v的环境,但不是很久以前?

在进入此之前,让我们审查IDE的优缺点。

IDES:好处

IDES很有帮助,因为它们将开发人员常常与音乐会一起使用的一组工具。这些是核心编辑,编辑器由其他工具(如测试框架,调试器,分析)和集成的传递等其他工具辅以构建工具,命令行窗口和其他系统工具。

有加载项组件可以为各种编程语言提供自动完成和颜色编码,文本标记预览,基本重构和其他有用功能。您甚至可以从IDE中运行服务器,以帮助您在不离开环境的情况下测试和调试应用程序。

可能是IDE(至少在我看来)的最重要的好处是他们“了解”项目的结构以及它所包含的文件之间的关系。他们知道项目root所在的位置,目录包含源,其中包含包含测试的资源以及如何运行各种构建和包装工具。亚傅体育app所有这些详细信息因编程语言而异,良好的IDES“知道”如何与他们旨在支持的语言中的项目合作。文本编辑器,但可配置它们可能是,缺乏这种支持。

IDES:权衡

整合众多职能的权衡包括:

  • 记忆足迹
  • 配置复杂性
  • 不稳定或迟钝
  • 兼容性问题
  • 太多的东西

记忆足迹

在developercommunity.visualstudio.com上,最近作为2017年第4季度,VisualStudio的一些用户在一个案例中报告了超过2 GB的内存使用量,在一个情况下高达2.7 GB。其中一些归因于报告Microsoft已修复或正在修复的错误,并且有些是对产品的长期问题的结果。我的解释是,该产品具有如此多的功能,烘焙到它需要大量记忆。

vscode是一个较轻的替代Visualstudio,即使在微软内也迅速捕获。但它也有关于高内存使用量和高CPU的报告。您可以在Github.com/microsoft/vsode/issues上找到报告,内存使用量高达3 GB,从最近达到2017年4季度。

一些流行的ide和ide家族都是基于Java的。用户经常报告与内存相关的问题,这些问题归结为JVM内存设置,而不是ide本身。这一类的关键产品有ide的JetBrains套件、来自不同厂商的基于eclipse的ide、NetBeans和Android Studio。这些ide需要大量内存因为它们包含这么多的功能和功能。

intellij support.jetbrains.com网站上有许多来自JetBrains ide用户的与高内存使用有关的问题。一名用户报告说WebStorm的内存使用为1gb,这冻结了她的开发程序。这个问题与Markdown Support插件以及控制JVM内存分配的-Xmx设置有关。这些原因指向前面提到的大型ide的其他三个一般问题。公平地说,2017年末报告的大多数其他问题似乎也与Markdown支持插件有关。

基于Eclipse的IDE也加入与内存相关的大量用户问题。在www.eclipse.org/forums上,许多用户报告内存不足。这些问题几乎总是由于JVM内存设置,尤其是-xmx值。Oracle的JDeveloper和IBM的Rational Application Developer(Rad)具有类似的问题,并且用户论坛和博客上的空间很多是与内存相关的调整技巧,以使这些工具运行良好。

更重量的“智能”编辑提供替代厚实的IDES,应该使我们能够在较小的内存占用空间内工作,但情况并非总是如此。基于Electron.js的原子,对于高内存使用来说是臭名昭着的。它可以占用GB来编辑单个文件。问题源于底层框架,电子.JS。

Sublime Text是全吹IDES的另一个流行替代品。虽然2018年1月,但它似乎并没有显着的内存问题。即便如此,它并不完全小的,人们喜欢将包添加到它以自定义自己的需求。任何人都可以写一个包,就像任何人都可以编写Eclipse插件或vscode扩展,你永远不会知道附加情况是否表现得很好。

配置复杂性

每个“重量级”IDE都会关注一些操作系统级别的设置,而忽略其他设置。通常,您必须在操作系统级别配置一些东西,然后在IDE内部再次配置它。从命令行运行构建与从IDE中运行构建的结果可能相同,也可能不同。正确处理这两组配置的过程既耗时又乏味,而且很容易忽略某些东西。

不稳定或缓慢

在这种情况下,我的意思是“不稳定”与配置复杂性密切相关。IDES有时“忘记”先前所做的配置设置。因为我们试图通过与我们的工具进行修补,所以原因往往是神秘的,不值得追踪的时间和努力,因为我们试图完成真正的工作。大多数人每次发生这种情况时都会再次进行配置设置,因此他们可以继续工作。

当您从IDE中运行服务器时,其中一个或两个工具可能会遇到不稳定性。IDE可以定期锁定,要求您杀死它。如果IDE不会锁定,它可能会对服务器的已启动/停止状态感到困惑,或者服务器本身可能以IDE无法检测到或处理的方式挂起。有关某种原因,可能会关闭与服务器的套接字连接,并且您不会收到通知。在此模式下使用时,您可能必须每天重新启动服务器和/或ide多次。

支持自动部署修改的组件的服务器可能不这样做,并且您不会收到警告。您可以花几分钟甚至全小时寻找申请似乎在您实现发生的事情之前似乎“看到”您的修改。

值得一提的是,如果您正在使用充足的内存的机器,比如32 GB,您可能不会像更受约束的系统一样经常看到这些问题。但是,如果您正在进行“正常”机器,那么您很可能会看到稳定性问题。

当我说“迟钝”时,我正在考虑IDE暂停,以执行一些覆盖的维修活动,例如“建筑指数”。我发现这有时会打断我的思想,因为我通常在非常小的TDD周期中工作。普通的旧编辑不会展示这种行为,因为它们没有内置的“魔法”。

其他奇数行为不时出现,通常出现在IDE的新版本中并最终修复。一个例子:a最近的一篇文章描述2017年VisualStudio的奇怪性,当IDE空闲时,源控制同步会在CPU的75%上饮出来。它提供了两个解决方案(或解决方法),其中一个解决方案是禁用源控制同步并使用命令行与源控制系统进行交互。我不了解你,但这通常是我工作的方式。使用IDE进行编辑和命令行,为其他一切单独侧面,任何(也许全部)IDE奇怪。

对版本控制系统的IDE支持似乎对我来说,似乎通常以违反直觉方式工作;不仅是VisualStudio,而且是Eclipse和Jetbrains Ides。那么,即使它没有这样的问题,也是帮助或阻碍的IDE?是否真的需要直接捆绑到IDE中的每一个可想到的函数?

兼容性问题

工具的每一个依赖关系都是一个潜在的兼容性问题。IDE支持的特性和功能越多,依赖关系就越多。每个特性都由库支持,无论是内置的还是作为附加组件提供的。有时,您会发现IDE无法使用应用程序所需的密钥库的最新和最好的版本。最终,供应商将添加支持,但在此期间,您必须以某种方式解决不兼容性问题。你花在这上面的时间是浪费在生产性工作上的时间。

太多的东西

好的,也许这对大多数人来说并不重要。毕竟,很常见的是,找到带有32 GB的RAM和2 TB的持久存储的笔记本电脑,所以谁在关心你有很多和大量的工具吗?但对我来说,它看起来很多杂乱。所有这些IDE都有自己的约定和默认和配置细微差别。即使是码头的IDES家族甚至在其键盘映射中也不完全一致。

这些是当前在我的笔记本电脑上安装的IDE和编辑器:

  • Android Studio
  • AppCode.
  • Arduino Studio
  • 原子
  • C-Lion.
  • 数据涂鸦
  • Drracket.
  • 艾菲尔工作室
  • GoLand
  • 纳米
  • 新疆
  • NetBeans
  • intellij想法
  • 开放的COBOL IDE
  • 分娩
  • Pycharm.
  • Qt.
  • 骑士
  • rstudio.
  • 红宝石矿
  • 弹簧工具套房
  • Sublime Text 3.
  • vscode.
  • WebStorm.
  • Xcode.

这只是太多的东西。

寻找简单性

虽然我很欣赏将工具一起使用的工具一起使用,但在IDE窗口中的一组面板工作并使用几个单独的窗口时,我没有看到有巨大区别。我很少使用调试器,因为我是“那些TDD人”之一。For the same reason, I don’t benefit much from being able to click on a test failure message to jump to the offending source line, as the error is almost always the line of code I just modified, and my editor window is already positioned there anyway.

自动完成是IDES非常有用的功能,但它也支持许多“智能”编辑器。除此之外,自动完成弹出窗口常常觉得自己令人分心而不是帮助。我的手指可以在更短的时间内键入剩下的陈述,而不是让自动完成弹出窗口,所以我可以看到我正在研究的代码。我认为,自动完成对无法输入的人来说更有用。

当您不确定表达式的给定点可能是什么代码时,IntelliSense非常有用。使用面向对象语言时,能够看到上下文中可用的方法很棒。但是一旦我熟悉一种语言,IntelliSense就会变得越来越有价值。

语法高亮显示是比较简单的编辑器特性之一,对我来说,它实际上比更复杂的特性提供了更多的价值。当我忘记了一个愚蠢但重要的东西,比如右括号、引号或大括号时,颜色编码可以一眼告诉我。许多编辑器都支持语法高亮显示,而且您并不一定需要一个复杂的IDE来实现它。

可配置编辑器和IDES上可用的另一个基本功能是智能缩进。不是最复杂或“高级”功能,而是最方便的。

一般来说,开发人员更喜欢使用键盘快捷键,避免过度使用鼠标。对于一些ide,我发现最有效的方法是将两者结合起来。例如,在使用JetBrains IntelliJ IDEA时,我喜欢禁用编辑器选项卡并使用无干扰模式。使用键盘在编辑器中的文件中导航、启动构建、运行单个微测试以及切换到其他打开的文件缓冲区都更快。

但是使用鼠标的各种不同的面板和视图中的浏览更快。这是一个权衡。达到鼠标的成本低于该类导航的多个多关键“快捷方式”的成本。(也许那些关键序列应该被称为“LongCuts”。)一个编辑器设计在我看来,对于只有键盘的使用情况会稍微好转。

我在智能编辑器中没有看到的IDES的一个功能是支持重构。vscode在智能编辑器和IDE之间袭击了我作为中途的中途,并且由于最近,您可以通过Omnisharp添加Roslyn Refaction支持(但我自己没有尝试过)。我知道Sublime文本的软件包,以支持JavaScript和Python中的重构。Atom提供了据称支持JavaScript,Coffeescript和PHP中的重构的软件包。我不知道这些工作有多好,但我对他们的期望没有很高的期望。即使是复杂的IDE中最佳的重构支持往往不会做你真正想要的,你必须手动调整代码。项目范围重命名可能是大多数工具中最有用的内置重构。

在VisualStudio / Resharper,Intellij理念和亲戚或Eclipse中,我们无法升级到重构支持的水平。人们为他们用来支持他们使用的语言的编辑,人们已独立建立插件。GitHub上有一个很好的Emacs-Refactor项目,支持几种用于Emacs语言的基本重构。您还可以将一些冒犯权益投入建筑物原油但功能重构工具,以获得Vim等可定制编辑;但是:v = w / h?

少即是多

您需要做严重的软件开发所需的最低设置是多少?

裸骨Linux发行版具有C / C ++支持,制作和纳米(最小编辑器)。使用这些工具,您可以重新编译内核,从源版本和编辑配置文件构建包。通常,一旦您从基本的功能级别引导到系统,您将安装其他开发工具。

典型的消费者导向的Linux发行版比那些更多样的开发工具。它可能拥有Python,Ruby和Java,以支持与发行版捆绑在一起的一些软件包。它可能会或可能没有Java SDK,但它可能至少有一个JRE。不同的发行版附带不同的文本编辑,比纳米更容易使用,例如VI,GEDIT,LEGPAD或GEANY。

因此,原则上,您完成安装Linux的那一刻,您可以使用可用的开发环境,并且您可以在1 GB总RAM下工作。

少一点较少的, 请

但这可能会带来太远的东西。当然,你避免了肥胖,复杂性,不稳定性和兼容性问题的肥胖IDE,但在什么费用?公式中H的值是什么,v = w / h?li开始假设可配置的文本编辑器,而不是富有的功能丰富的IDE,可以提供足够的功能,为大多数开发人员提供实用和可用。这一类别中存在少数候选人,最重要的是Vim和Emacs,最近的vsode。

原子很好,但由于电子,而且有问题。Sublime文本非常可用,我已经广泛用于“真实”的发展工作;它的包裹系统允许添加对语法突出显示,片段等的有用支持。

还有几个非常棒的轻量级文本编辑器,不会假装是IDE-killers,但这足以为已经熟悉他们使用的编程语言的开发人员,如Geany,Lefpad和Notepad ++。

我很满意使用sublime文本for shell脚本,各种文本格式和标记语言,甚至在Ruby,Python和JavaScript中的严重开发。我认为atom,geany,其他人也会很好。但是,当您需要在大型java或C#项目上工作时,开始使用像这样的工具击中墙壁。像项目元数据,包和类路径一样有太多“移动零件”。太多的“少”为一个悲惨的一天。有时你需要少一点较少的还有一点更多的

有些人坚持他们无法进入,没有所有特色IDE的所有钟声和口哨。在弹簧的另一端是最小的编辑器纳米VI.。在设置新的Unix/Linux实例时,您已经使用它们来编辑配置文件。你也可以用它们来编辑程序源文件。必要时,你可以用这种方式完成所有的开发工作;归根结底,源代码就是文本。问题既不是(a)“我们能在我们最喜欢的IDE中添加多少特性?”(二)“要证明自己是忍者,我们到底能做多少?”而是“在我们的环境中,什么样的工具对我们的需求有意义?”

Vim和Emacs非常成熟,人们创建了插件,以支持任何类型的开发工作。vscode正在迅速成熟,并且有可能成为该俱乐部的另一个成员。我知道在Microsoft工作的人和使用VisualStudio的人已经转换为vsode的20多年以来,并没有意图再次打开VisualStudio。这些编辑实际上除非您真正需要您的工作中真的需要一些更复杂的IDES,否则有可能作为FAT IDES的替代品。

它很有趣的是,Jetbrains IDE允许您禁用编辑器选项卡,以“无分散点化模式”操作,并通过击键在打开缓冲区之间切换;就像vim和emacs自然一样。编辑是否试图成为IDES,或者是想要成为编辑的IDES?有关系吗?

轻质但功能性的环境

我们需要将钟摆到中心的钟摆,融合IDE和Bare-Nekkid文本编辑器之间?我认为不是,我想:

  • 小Linux发行版
  • 轻量级窗口经理
  • 配置编辑器
  • 编译器等

为了证明(或反驳)这个想法,我尝试了几种轻量级,小型的小型印象在MacBook Air上的VMware Fusion。我决定与Neovim一起去,这是一个现代化的Vim,作为编辑。这对Emacs或Vscode不是一个评论;只想最小化变量的数量。

目标

我对这个实验进行了几个目标:

  • 配置可用和实用的开发环境足够紧凑,以在覆盆子PI(或类似)上,其中1 GB内存。
  • 用一个可以支持所有主流编程语言的单个开发工具替换语言特定和平台特定的IDES的星座,有关某些定义全部,一些定义主流,以及一些定义支持

为什么所有的警告?嗯,不是每个开发人员都关心支持“所有”语言和“所有”平台。对于大多数人来说,这个目标可能是矫枉过正。但如果可以完成,它将表明一个简单的发展环境确实可以实现子集语言和平台,和可能非常有用。

关于“某种定义”的一点支持“提到这一事实,如果我们从IDE切换到文本编辑器,我们将至少放弃一些围绕智能感知、辅助重构以及集成调试和分析的功能。使用好的文本编辑器,语法高亮显示、某种程度的自动补全和语言感知的自动缩进绝对是可能的。我们这些严格使用测试驱动开发的人很少需要调试器,随着使用非常小的服务构建应用程序的趋势,当我们将线程编织在一起时,调试的真正挑战就发生了。

为什么我称之为“实验?”实验的目的是通过试图反驳假设来学习一些东西。My hypothesis is that it’s possible to configure a very lightweight development environment that provides all the tooling necessary for “real-world” development work, as an alternative to working with multiple IDEs, each of which eats up huge quantities of RAM and other system resources. I aim to disprove that.

实验的“控制”是我们已经居住的胖胖境界的美妙世界。我在我打字的机器上安装了20多个IDES。这真的是必要的还是有用的?

方法

最初,我的方法是首先,通过添加软件开发所需的软件包,从“Tiny”Linux发行并从那里搭建。承诺比从来源开始的更容易,仍然提供了紧凑型操作系统的可能性。在改变方法之前,我尝试了几个:

每个人都证明了一个原因或另一个原因不合适。授予,你可以让他们的大部分支持一些我希望这个环境的工作来支持,但不是全部。我对尝试配置这些发行人的所有困难进行了广泛的笔记,但此时,所有细节都与实验无关紧要。

许多“微小的”Linux发行版甚至不能正确安装。一般来说,它们没有很好地打包、文档化或维护。Arch Linux是其中最好的一个。它有特别好的文档、活跃的用户社区和良好的支持。不幸的是,由于镜像管理很差,安装总是在加载基本包组时挂起。我从未跳过配置实例的第一步。我对此感到很沮丧,于是就去找其他候选人。

相反的方法是从“桌面”发行版开始,删除不必要的软件包来精简它。事实证明,这一策略比听起来要难。我仍然在寻找一个小的足迹,所以我没有选择Ubuntu、Mint或Absolute。这些发行版都预装了很多程序,要在不破坏重要内容的情况下删除软件包将是一个挑战。这是可以理解的,因为它们的目的是支持普通计算机用户的开箱即用。

什么不起作用

我尝试了这些小型脚印Linux Distor:

我最接近的那些选择的工作环境是Lubuntu。问题对C / C ++和CPPUNIT进行了支持。如果您知道您永远不会与这些工具一起使用,则Lubuntu配置可能足够好。还有其他方法来构建C / C ++应用程序;而不是每个人都需要在C / C ++代码上工作。我正在挑剔。我怀疑使用Lubuntu的汽车问题是暂时的,将在未来的释放中消失。但这不是我通过OS问题工作的时候。我花了几个小时的时间,每天打电话给它。

Debian是我打算尝试的最后一个“桌面”发行版,然后才能从Gentoo或者刚刚来自来源的建筑物策略之前尝试。在网站上,我注意到有一个ARM构建,这意味着如果在VMware测试环境中证明,这可能会在Raspberry Pi上工作。Raspbian是一个Debian变体。建立一个非常便宜但全功能的开发环境很有趣,在物理世界和虚拟中具有小的占地面积。

进入第2部分:配置Debian和Vim

在下一期间,我将通过轻量级窗口管理器和新域来介绍安装和配置Debian实例的过程,这是一个现代化Vim的实现。我们将为多种编程语言添加支持,并查看我们是否可以拒绝我们可以设置轻量级且强大且可用的开发环境的次次级别,其中单个编辑器支持所有开发语言。

下一个>最小的发展环境:第二部分

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*