你会推荐vim/emacs给初学者程序员吗?

13

对于刚开始学习编程的人,您会推荐使用vim/emacs还是应该使用一些IDE?像vim/emacs更适合高级用户而不是初学者吗?我只是想知道,因为我正在尝试让我的一些朋友开始编程。


你在考虑用哪种编程语言? - JasonFruit
可能是Java,对于初学者来说比C++更容易。 - Lucky
1
相当古老的问题,但我还是要点赞。请教他们 Python。我总是认为,在学习编程语言的同时,解决编程问题真正有利于他们成长为优秀的工程师。因此,Python 作为一种语言非常适合学习,因为它的语法简单,几乎可以用 Python 完成任何任务。 - asyncwait
1
+1 给 @asyncwait 建议学习编程的语言是 Python。我可以再加上 Ruby 作为另一个简单的选择吗?这里有一本优秀的书 http://pine.fm/LearnToProgram/ (也可免费在线阅读)。 - rpattabi
http://learnpythonthehardway.org/ - sjas
17个回答

16

如果他们刚开始学习编程,我不建议使用VIM作为起点。

  1. 他们需要先学习编程的基础知识,没有必要花费时间和精力去学习VIM的操作方法。
  2. 根据所用的语言和平台,他们可能会更喜欢带有代码完成、常规语言支持等功能的IDE(我知道在VIM中也可以实现这些功能,但在IDE中的操作更加无缝)。

注意。我是VIM的粉丝,我用带有VIM插件的IDE,所以我并不反对VIM本身。

我注意到你的评论中提到你正在教他们Java。 BlueJ 是一款专门用于学习Java的IDE,可能是一个有用的入门工具。


我还要补充一点,大多数集成开发环境都有半VIM/半emacs的快捷键或插件可以随时添加,一旦你想提高效率...以Visual Studio为例,大多数人甚至不知道VS已经启用了大量的emacs宏,然后他们认为某些很棒的快捷键是VS的。 - chakrit
另一方面,这将彻底破坏他们对编程的认知。 - Stefano Borini
1
我发现使用vim启动程序时,我学会了不要将IDE作为一个支撑。我可以欣赏它们,但我也知道如何查看文档并找到信息,这是许多初学者在IDE上开始编程时容易失去的技能,特别是在Java方面。 - icco

12
当我在80年代晚期/90年代初期商业教授C和C++时,我们所有的教学都是在UNIX系统上进行的,编辑器为vi。许多客户使用MSDOS(后来是Windows)。这些人在五天课程的第一天就必须同时学习UNIX和vi的基础知识,以及C和C++。他们都抱怨不已(我也不能怪他们),但他们都做到了。
也许我们当时对彼此期望更高。即使如此,在那么短的时间里,我们的基因并没有改变,所以如果他们当时可以轻松学会vi,今天的程序员也可以学会它,而且不会遇到太多麻烦。

+1 我使用vi已经很长时间了,甚至都不记得是怎么学会的了。但我肯定是偶然间使用它来完成实际工作的。我不记得感到那么不知所措。一旦你学会了如何移动、如何按下Esc键以及如何按下“i”键,你就可以使用Vim了。 - JasonSmith
许多年后,我确实曾经在一次培训课程中使用过真正的Unix上的实际“vi”。由于仅使用过Vim,我自己使用vi非常糟糕。 - JasonSmith
我曾经上过这样的课程 - 如果我们不需要学习vi和所有可怕的模式更改,也许我们本可以在C语言上学到更多,而不是浪费半天时间在编辑器上。 - mmmmmm

9
避免主观选择编辑器的问题,不仅仅是高级/初学者,而是学习太多一次。最好将编码学习曲线与编辑器学习曲线分开。如果你正在忙于学习编码,请使用您已经熟悉的编辑器(不必是IDE,可以是gedit等)。一旦你感到熟悉编码,如果你不满意你已经知道的编辑器,那么你可以切换到你选择的编辑器。一个高级的编码人员可能仍然喜欢简单的编辑器, 而还没有学习太多的人可能仍然想要更快地工作并转向Vim。

5

既然你建议他们学习Java,那么Eclipse可能是最好的选择。如果你建议他们学习Common Lisp,我会毫不犹豫地说Emacs是最好的选择。对于Python等语言,我会建议使用他们现在已经熟悉的任何文本编辑器,如vi、vim、Emacs、Geany等。但对于Java来说,Eclipse是一个相当不错的标准选择。


3
无论你选择哪个编辑器,都应该将这张速查表贴在你的屏幕旁边。

3

无论程序员的技能水平如何,人们都会喜欢vi(或emacs)或讨厌它。


2
运行vimtutor命令。这是学习Vim许多有用基础的互动方式。Vim非常强大高效。你不可能一次性学会所有内容,但随着使用的不断深入,你将不断学习到更多实用功能。如果你掌握了基础,就会开始更多地使用命令模式。不要使用箭头键。一开始使用hjkl键进行移动可能感觉很奇怪,但很快你会习惯并变得更快,因为手指不需要离开键盘上的主键区。Vim的一个伟大之处在于用户几乎从不需要把手指离开主键区。
至于Java,我认为Netbeans非常出色。这不足为奇吧?它是由开发Java语言的同一团队制作的。所以当我使用Netbeans时,我会使用jVi插件,让我像使用Vim一样来操作它。

2

我绝对不是一个Emacs专家,但在学习一门新语言的基础知识方面,我认为Emacs非常方便。使用IDE会分散你学习的注意力(你最终会花时间去学习IDE而不是语言),而Emacs提供了良好的缩进和语法高亮,以及方便的编译、调试和访问shell。


1
你认为学习一个集成开发环境比学习emacs更难吗? - Gabe Moothart
完全不是这样,我是说最初避免使用集成开发环境可以让你更专注于语言本身。集成开发环境是关于生产力的,而不是语言熟练程度。你越彻底地理解语言,就越能利用集成开发环境。 - cmsjr

2
我知道我会被这里的众多emacs/vi用户投票否决,但就学习一门语言而言,拥有一个带有智能感知(或者通用版本)的集成开发环境是绝对必要的。例如,如果你使用Visual Studio,你几乎不需要花时间去玩弄IDE。自动完成清晰地显示了成员变量之间的关系,并且使您不必记住细节。对于初学者来说,作用域和类型解析也非常宝贵。然而最重要的是,无论您使用什么,都应该包含一个工业级别的调试器。将字符串记录到文本文件中并不是生活的好方法。即使是emacs的忠实爱好者也可能会承认,使用专业IDE的人更加高效,而初学者则更不容易感到沮丧。现在,如果您选择某些开源/免费的东西,您的体验可能会有所不同。

2
我是一个vim的忠实拥护者,我认为上面的观点很正确。我花了很长时间才转向使用IDE,但一旦我这样做了,我的生产力就飞速提升了。我使用Eclipse中的vim插件来兼顾两者的优点,但如果你在现代IDE(例如Java的Eclipse或Intellij)的强大面前仍然坚持使用vim,那么我认为你会自讨苦吃。 - Brian Agnew
2
我认为这很大程度上取决于编程语言以及它的项目结构与特定IDE的紧密程度。我不会在没有Visual Studio的情况下编写C#.NET,但我从未尝试过使用Python、PHP或类似语言的IDE。对于这些语言,我使用Emacs,但是对于Java或C#.NET,我不会想象使用Emacs。 - JasonFruit
1
不,如果他们真的开始编程,智能感知不是正确的选择。它可能会让新用户感到困惑,因为它给予了太多的帮助。当然,他们可以通过创建一个新项目来编写一个“Hello world”程序,但那并不是真正的编程。 - he_the_great
3
如果他们真的是初学者,那么IDE对他们几乎没有帮助,除了设置一些文件以外。它清晰地展示了“Hello World”程序所需的文件和骨架代码的结构。当你从“Hello World”转向更复杂的内容时,Intellisense是很有启发性的,而不是令人困惑的。它并不提供任何编程帮助,它只是扩展了你的记忆,使你能够专注于编程而不是细节。 - Steve
1
你可以在Emacs(以及毫无疑问的Vi)中使用Intellisense(或其相似功能)。 - Marcin

2
如果你刚开始学习Java,我建议你选择其中一个图形化IDE。是的,像Eclipse或Netbeans这样的IDE可能有些臃肿,但这并不改变它们通过建议错误修复等方式降低了入门门槛的事实。
vi或emacs与gcc相结合也很棒,但我建议初学者使用更友好的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接