跳转到主要内容

保存的帖子

最小的发展环境:第二部分

Dave Nicolette |龙头
Dave Nicolette
读: 最小的发展环境:第二部分

最小的发展环境

本系列的第1部分,我概述了尝试构建最小开发环境并为该项目设定目标的原因。我还总结了尝试使用各种小型Linux发行版建立这样一个环境的经验。在本节中,我将分享使用NeoVim编辑器作为主要开发工具在Debian Linux上构建环境的结果。

这里有很多关于如何安装各种工具的详细信息,哪些Vim插件可以用,哪些不能用,以及“陷阱”在哪里,我觉得写博客太过了。下面是对最终结果的总结,没有太多的描述,除非有必要解释。

约束

我限制了一个512 MB的实例,这样我就会感到自信,在更正常的尚未持续的软件中运行必要的软件,诸如Raspberry PI 3b +的覆盖率,仍然有足够的余量,其具有1 GB的RAM。我也想用尽可能多的语言和Vim插件加载它,证明内存中有充足的房间和所有这些工具的持久存储。这不是因为我希望任何人以例行的方式使用30或40种不同的语言,而是要使任何专业开发人员能够在这些内存和存储约束中配置合适的环境的情况。

得到教训

  • 在小型OS实例(小为512 MB RAM)中并使用最少的不同工具(带插件的NeoVim Editor,以及一些命令行工具)是可行的。在测试的35个编程,脚本和标记语言中,34至少在某种程度上工作,并且剩下的剩余不会构建我设置的紧密内存约束。该结果表明配置支持少数语言的轻量级开发环境是非常可行的真正人可能实际使用的那种。我听说过35种语言的工作表开发设置没有人。
  • 基于Debian Linux,X和Neovim的OpenBox窗口管理器,粗暴的配置很舒适。当我说“舒服”时,我的意思是它感觉自然,而不是使用具有一些键盘快捷键的IDE在后面之明。
  • 最多语言,你牺牲了一些ides便利,但你仍然可以完成工作;如果您需要使用多种语言并希望整体上简单的环境,可能会没问题。如果您更喜欢在命令行上工作,也可能是可以的,并且您可以找到IDE提供的所有“帮助”,而不是预期的帮助。
  • 一些语言中,开发人员工作流程在最小的环境中实际上是更好的而不是一个全功能的IDE;特别是scala,红宝石和cobol;.NET开发人员体验与使用vscode相当;在我看来比使用VisualStudio更好。使用Markdown或Markup语言和超级集合,如HAML,与使用Sublime Text 3或Atom相当。
  • 在大多数情况下,可用的Vim插件并不充分记录或支持。其中一些非常好,但总的来说,你不能指望他们工作甚至安装,而且当出现问题时,你必须期望自己解决问题。至少一半的插件我试图使用不起作用。在许多情况下,您可以获得合理的语法突出显示和缩进,并且在某些情况下合理完成。除此之外,要感谢任何有效的东西。

一个很好的工作流程

在尝试Scala时,我发现sbt可以提供一个非常好的开发人员工作流。我怀疑很多每天使用Scala的人已经在做这个了。当我安装sbt时,我意识到我没有想到在使用IDE时设置这种工作流,除非该工具被融入IDE中。从这个意义上说,我变得懒惰了。这个更简单的工具堆栈使得所有的东西都是可见的。

使用SBT控制台在一个窗口中观看Scala Project目录,并且在另一个窗口中打开编辑器,您可以在代码更改和更改的结果之间平稳地移动。下面的视频在最小VM上显示了这一点。Neovim在上窗口中打开,SBT控制台在下窗口中运行。SBT控制台中的〜RUN命令导致SBT每次检测到项目中的Scala源文件的更改时运行构建。对我来说,使用简单的文本编辑器和命令行窗口更容易,而不是IDE内工作。

对于实验,我没有花时间用测试等待全面的项目设置,但很容易将此工作流推向一个红色的绿色重构周期。您可能已经看到并使用类似的设置,使用Autotest for Ruby或InfiniNIT for Java,甚至是在计时器上以循环执行的命令行脚本。轻量级环境可以很容易地支持这种东西。

几乎,但不是完全,所有的独角兽和彩虹:SBT控制台并不总是干净地关闭。它有时会在内存中留下孤儿Java进程。在这个小环境中,您下次尝试加载程序时发现了,因为您已经不足了。您可能必须杀死SBT Java进程,然后才能完成您想要做的任何事情。容易脚本,但是要写的是让环境放在距离之外。

Arduino开发

对于这个实验,我没有尝试arduino开发。但是,基于克里斯·罗特的近期(2017年)文章,“vim的arduino编程”,听起来很可行。

我已经提到了Vim插件并不总是可靠的,并且不一定在长期内保持。当他开始配置vim for Arduino开发时,克里斯发现了同样的事情。他的文章警告了您在互联网搜索中可能会发现的某些Vim插件。

最终,他在三个插件上解决了支持代码片段和arduino代码的语法突出显示。他还发现一个名为Arduino Makefile的工具,构建了代码并将其上传到Arduino设备。如果您有兴趣给出此设置尝试,请阅读他的文章。

特殊情况 - 不推荐vim

Vim爱好者喜欢说他们最喜欢的插件“把Vim变成一个完整的IDE”,其中一些人通过Vim配置和插件不遗余力地复制或模仿专门开发工具的功能。有任何情况下在这种断言是真的的情况下,它不是首先建立一个极简主义环境的意图。

期望这种轻量级配置像商业构建和支持的IDE一样运行是不现实的。如果有的话,你添加的插件越多,它就变得越脆弱。

这背后的整个想法是简单的。一旦你超越了用插件的回报点递减,你已经颠覆了简单的目标。

还有一些特殊情况,呼吁专业开发工具,以及广义和最少的基于Vim的开发设置将不适合专业工作对他们提供充分的支持。以下是我在本练习过程中认识到的一些。

R -推荐RStudio
R的严重用户可能是QUALL而不是Polyglot应用程序开发人员,并且不会对这样的多语言设置感兴趣。R的最佳Vim插件是RVIM-R,它不适用于广告,即使它所没有,也不会提供甚至与Rstudio远程相当的开发人员体验。

Java/Groovy -推荐IntelliJ IDEA或Spring工具套件
安装了适当的VIM插件,开发人员体验并不差,但仍然与完整IDE一样平滑。对于偶尔使用,或者对于一个非常熟悉的java,谁不需要IDE需要多举手,这种环境会很好。(注意:其他基于JVM的语言可以像Clojure,Kotlin和Scala一样。)

Lisp / Scheme / Cacket - 推荐Lisp / Scheme的Emacs / Slime,以及球拍的Drracket
编辑这些语言是这种工具堆栈的痛苦。命令行恢复良好,但Vim的开发人员体验非常差。用括号“帮助”的插件使事情变得更糟。如果您希望在此环境中提供类似LISP的语言,我建议不要添加VIM插件的方案;这似乎是三个中最好的。我使用了麻省理工学员计划。

Android开发 - 推荐Android Studio
Vim爱好者说你可以使用Eclim插件为Android平台开发。Eclim工作的一种方式是与Eclipse的无头实例通信,以利用Eclipse的特性。Eclipse和一个名为ADT的附加组件曾经是开发Android应用程序的标准方式。除了由于同时运行两个开发工具而带来的开销外,使用Eclim和Vim还会创建对正在被搁置的工具的依赖。它还创建了一个相当复杂的堆栈,其中包含的组件不打算以那种方式相互堆叠。最后,如果您能让这种设置完全正常工作,开发人员的体验将比使用ADT的Eclipse差,使用ADT的Eclipse比Android Studio差。为什么去那里?

iOS开发 - 推荐OSX上的Xcode
人们在无数的方法中尝试并失败了为iOS开发配置Vim。使用Vim的死亡者应该考虑其他方式:使用Xcode的XVIM插件,而不是尝试将所需的一切从Xcode添加到Vim中。

遗产代码怎么样?

我对IDE和编辑器之间的差异的评论主要有关新的开发,或者假设我们正在使用干净的代码库。在使用现有代码库时,通常需要广泛的重构。即使我们练习增量重构,代码群中可能存在显着的设计债务即使是长期的。

好的ide使它比编辑器更容易重构,也更不易出错。这是IDE最有用的特性之一。在使用遗留代码库时,出于这个原因,我使用IDE,即使我更喜欢使用针对特定语言的文本编辑器。

环境摘要

最小的开发环境工作很好地配置如下。

一般注意事项

  • 在整个存储器中为512 MB,当系统感觉迟缓时,在此实验中没有时间,除了安装IDRIS时,没有内存相关的错误,并且最初在启动Scala SBT时最初。
  • 使用工具和库将虚拟硬盘加载到极致,使用了15 GB的空间。这包括操作系统。所有的东西都在一个单独的分区里。
  • 我没有安装版本经理,如数位视讯rbenv, 和NVM.。理由是使用Debian的替代系统来管理多个版本的软件。我想避免加载冗余工具进行版本管理,以便以极简主义的方式保持。

虚拟机

  • VMware嘉宾
  • 64位
  • 512 MB内存
  • 20 GB虚拟磁盘

操作系统

  • Debian 9.
  • 各种语言要求的开发人员包

窗口管理器

  • OpenBox

坚持

  • SQLite3 - 关系DB
  • 关系数据库
  • MongoDB - 文件DB
  • BerkeleyDB -索引文件

HTTP服务器

  • Nginx
  • Lighttpd.
  • 各种语言分布(Npm, Python, Java,等等)

测试工具

  • 苏普苏

编辑器

  • Neovim与:
    • 病原体-包管理器
    • vim-plug - package管理器
    • 剥落 - 多语言完成
    • 新克 - 综合制作工具
    • rainbow_圆括号-圆括号匹配器
    • nerdtree - 集成文件浏览器
    • 空间彩色方案
    • 和许多特定于语言的插件

编程/脚本/标记语言和NeoVIM插件
[0]失败
[1]在环境上工作,但没有Vim帮助
[2] Vim插件部分工作(或我不能弄清楚)
[3] Vim插件似乎去工作
[4] Vim插件效果很好
[5]开发人员工作流程是好的(在我看来)

  • [2] awk
  • [2] Bash
  • [3] C / C ++
  • [5] clojure
  • [5] COBOL
  • [2] CoffeeScript - 集成工作,拆分窗口模式没有
  • [5] C#
  • [3]长生不老药
  • [3] Erlang
  • [5] f#
  • [4]去
  • [3] Groovy
  • [3]哈姆
  • [4] Haskell - 使用GHC,不是Vim插件
  • [3] HTML
  • Idris -安装时内存不足
  • [2] J -文档很差;你必须要摆弄它
  • [3] Java
  • [3] JavaScript /节点
  • [3] JSON
  • [3]芬兰湾的科特林
  • [3]乳胶
  • Vim插件的问题
  • [3] Lua
  • [2] Markdown - 编辑插件的问题;预览插件OK.
  • [3] Matlab
  • Vim插件的问题
  • [3] perl
  • [3] Python3
  • [1] R - Vim插件的问题
  • [1]球拍-问题与Vim插件
  • [5]红宝石
  • [3] Sass
  • [5] scala
  • [1]方案 - Vim插件的问题
  • [3] SCSS
  • [2] TypeScript -几个备受推崇的插件;很少发表
  • [3] XML
  • [3] vimscript
  • [5] VisualBasic
  • [3] XML

结论

从这个练习中,我得出结论,创建一个完全适合专业软件开发的轻量级环境是可行的,它可以舒适地容纳在一个小型VM、Docker容器或Raspberry Pi中。这种环境不适合某些类型的开发,但对于大多数语言中的一般应用程序开发来说,它是很好的。

我很想地建立一个基于廉价硬件和一些这些开发工具的开发机器,看看这是怎么回事。毕竟,我不需要35种语言;我只是想尽可能完整地把握这件事,以证明或反驳它将起作用的假设。下一个实验可以是将系统放在一起,并将其使用它进行一段时间,然后报告优点和缺点。这将是一个较窄和更深入的想法的试验,采用完全配置了一组选定的开发工具,用于真实的使用。

下一个>敏捷2018访谈:一天

自1977年以来,Dave Nicolette一直是IT专业人士。他在各种技术和管理角色方面服役。自1984年以来,他主要担任顾问,在管理营中保持一英尺。

发表评论

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