新手应该使用IDE自动完成功能(Intellisense)吗?[关闭]


35

当我第一次帮助编程新手并学习它时,经常会遇到这种情况。我说的是真正的新手,仍然在学习OOness,构造对象,方法调用以及类似的东西。通常,他们有键盘,我只是提供指导。

一方面,IDE的自动完成功能有助于向他们提供反馈,表明他们做得正确,他们很快就会喜欢并依赖它。

另一方面,我担心过早依赖IDE自动完成功能会使他们无法真正理解这些概念,或者如果有一天他们仅通过简单的编辑器就能找到自己的能力,它们将无法运行。

在这方面有更多经验的人可以分享他们的意见吗?对于新手,自动完成或手动输入哪个更好?

更新资料

感谢大家的意见和建议!

许多答案似乎都集中在自动完成的主要用途上,例如完成方法,提供方法查找和文档编制等。但是如今的IDE却更像是。

  • 创建列表类型的对象时,IDE会自动完成到右侧的新ArrayList。对于新手来说,可能还不是很清楚为什么它不能成为新列表,但是嘿,它行得通,所以他们继续前进。
  • 根据上下文中的局部变量填充方法参数。
  • 执行对象转换
  • 自动添加“导入”或“使用”语句

以及更多。这些就是我的意思。记住,我所说的是正在开始编程101的人,实际上只是在开始。我已经看到IDE可以完成他们不知道的这些事情,但是它们只是继续进行。

有人可能会说这有助于他们在深入了解语言的细微差别之前先将精力集中在程序流程上,并先了解其本质,但是我不确定。


1
我认为这属于一般禁令:使用工具。不要懒得盲目使用它。
Alex Feinman

我认为他们应该使用“ 标准文本编辑器” ... gnu.org/fun/jokes/ed.msg
JoelFan 2011年

我总结什么我在一篇博客文章在这里学到:codinguser.com/2011/01/abstraction-is-good-magic-is-bad
codinguser

Answers:


11

我认为利用IDE有助于学习过程。方法,属性,参数,重载等都是可以发现的。借助庞大的库,Intellisense有助于滴灌JIT知识。在当今的编码环境中,不可能预先学习所有内容,而JIT学习通常是快速提高生产力的唯一实用方法。

我了解,盲目使用IDE可能会助长一臂之力,但我认为这样做的好处远大于缺点。

另一方面,在不了解为您预构建了什么的情况下使用模板则更成问题。我认为,如果开发人员花时间阅读模板化代码,这些可以用作学习工具。但是大多数人都不会打扰。但是,它可能是一个很好的学习工具。


准时 您不是说.NET FCL吗?=)是的,我同意...多年来,intellisense已为我证明了一种学习工具,我已经了解了许多新的类,方法和属性。
gideon 2011年

1
我的意思是JIT学习,而不是JIT编译;)有太多东西要学习,试图预先学习所有内容都是不现实的,因此,只要您了解概念,就可以“及时”学习实现细节。
Mark Freedman

75

理解概念并记住数十种愚蠢的库类和方法是完全不同的两件事。Intellisense可以帮助您将所有无用的知识完全从您的大脑中剔除,并且越早进行越好。为有用的概念留出更多空间,不要浪费您有限的API资源。

要回答一个问题的更新部分:与通用编程概念相比,语法细节,文件布局,编译器和链接器调用几乎不重要。一旦了解了新手,便不再对低级内容的实际工作方式有更深入的了解。最好在已经了解基础知识的情况下进行此操作,否则可能会拾起一些危险的魔法迷信。

例如,DrScheme IDE在编程教学方面拥有良好的记录,其成功主要归功于其专注于真正重要内容的能力。


30
+1。我当时确实接受了采访,当时他们要我列举一些Win32 API函数的参数列表。永远都无法理解知识的意义。

4
@codinguser:这也不是问题。即使是我自己使用的语言,即使是我目前使用的语法,我也常常记不得。除了导入语句或如何编写一个getter / setter对,还有许多重要的事情要记住。IDE正在做更多有用的事情-例如在工具提示中显示类型。
SK-logic

4
@Josh K,您听过“抽象”一词吗?您知道为什么会有不同级别的抽象吗?注意当前问题域的抽象级别以下的任何内容都是愚蠢且适得其反。在职业生涯的早期就养成这种破坏性的习惯是一场灾难。我花了十多年的时间才能部分康复。
SK-logic

3
@Josh K,您是否坚持理解一直到syscall以及下一步的一切?这种理解没有附加值。当然,一个好的程序员必须能够在包括机器代码在内的所有级别上进行操作,但是一个好的程序员也应该能够完全从无关的东西中抽象出来。
SK-logic

3
@ SK-logic:我同意,您直接使用的 import和function调用不是抽象的东西。
乔什K

16

使用自动完成功能并不是一件坏事。

这仅仅是为了提高速度,对我来说,这标志着有人开始掌握IDE并很好地使用它。

我不明白不使用它会如何帮助他们例如学习面向对象。


1
掌握基础知识后,我全力以赴。当您知道自己正在加速时,速度就很好。但是,当IDE根据相同类型的局部变量自动填充参数或添加import语句时,它就可以正常工作,而有些新手并不真正理解它。
codinguser

我已经阅读了您的编辑内容,但我想认为我们雇用的菜鸟是聪明的人,他们会仔细研究填充内容,对其进行质疑并理解它们。当然这是否在实践中发生是另一个问题。
ozz 2011年

13

在对编程新手进行教学和辅导之后,我发现自动完成/智能有时会带来弊大于利的后果。是的,他们可以使用它编写程序。是的,它可以编译运行,甚至可以执行我们要求他们执行的操作。但是他们不明白自己在做什么。

当他们不了解正在发生的事情时,它将变得更少的编程工作,而更多的是一起寻找解决方案来获得分数。我发现学生发生了很多事情,因为我们要求他们做的事情变得更加艰辛,他们只是进行黑客攻击,直到有东西起作用为止。当期中考试到来时,情况总是很明显,要求学生用手工编写简单的方法……但事实并非如此。

是的,自动完成/智能帮助对我们(专业开发人员)有很多帮助,它可以加快我们的速度。我们不必记住所有不同的方法和参数列表,但是与此同时,我们也可能会猜测我们有编程经验的方法可能会猜出该方法将采用哪些参数。

新手没有。他们将等待其IDE列出方法列表,然后滚动浏览该列表,直到找到可能需要的方法为止,他们将查看所需的参数,并查看是否需要传入这些参数。 ..最后,他们将一起入侵某些东西,他们可以上交。

而且,在课程通过的最后,他们将以微弱的胜利离开编程班,许多人从不再次参加另一门CS课程,因为b / c他们不了解他们做的任何事情或为什么做它。


2
我会很愤世嫉俗地说,CS中一直有这种类型的学生。如果他们想学习Intellisense只是帮助他们更快地完成工作,而不是花时间在Google或书籍中查找每个函数的名称
user151019 2011年

4
@马克,我同意。我想我的回答范围太广,暗示所有学生。但是,我要说的是,在向课程的开发环境引入了具有自动完成功能的IDE之后,不知道何时上课的学生人数和第一学期的失败人数一样。我收到的问题数量减少了很多,但我知道不是b / c学生理解得更好,但b / c他们可以在不花时间理解的情况下使程序正常运行。
Tyanna 2011年

students were asked to write simple methods by hand...they couldn't.这取决于您要教他们什么。通用编程概念还是特定于语言的语法?
gingerbreadboy

9

一般而言,IDE和开发环境的问题不在于自动完成,而在于使用模板化解决方案(文件|新建|项目),在模板化解决方案中,已经为您完成了许多“有趣”的事情,并且在不同程度上被隐藏了。 。

对于一个大致了解引擎盖下发生了什么的人来说,这很有帮助-但是对于一个了解他们所需内容的人来说,则要少得多。

还有一个问题是启动一个重量级IDE所需的时间...

因此,我认为使用重量更轻的东西并能够运行自己编写了每一行代码的应用程序具有很大的优点-特别是因为使用文本编辑器和编译器表明了不需要IDE等编写软件,但这并不意味着我想长期使用文本编辑器,并且确实在调试方面提出了挑战-您希望能够做断点,并且希望能够单步执行代码因为这样可以更轻松地了解发生了什么。

当然,我们可以考虑使用Python等在您拥有“实时”命令行的地方,从而进一步混淆该问题。

好的问题,没有一个好的答案-除了您要学习一个进步,并从文本编辑器和编译器(或命令行解释器)开始,这将使您在继续学习语法和逻辑的基础知识之前复杂的东西,使用更强大的开发环境将更容易做到。


2
老实说,我认为启动IDE所花费的时间可以忽略不计。在启动之间,我花了数十个小时使用我的IDE。当然,在这段时间内,仅在代码完成时就可以节省30-45秒的启动时间。
EricBoersma 2011年

@Eric-在您的上下文中?是的,100%。在问题的背景下,即完整的初学者?我怀疑IDE会在较短的会话中更频繁地打开和关闭,并且通常会阻碍用户的前进。
Murph

我对ORM感到这样,不应允许数据库初学者使用它们,因为他们对数据库开发的了解不足,无法很好地使用它们。对于知道自己在做什么的人而言,这是很棒的工具,对于新手来说,则是灾难。
HLGEM 2011年

@HLGEM我想指出的是,这要复杂一点...但是我认为我什至没有资格再对初学者和数据库发表评论)-:(而且,为了清楚起见,因为我仍然学习新的语言和框架,我想我可以对IDE问题发表评论-我对.NET和Visual Studio的早期问题做过特别的记忆,这是我的记忆)
Murph

4

学习艰辛的方法通常与您同在。

作为新手,请不要使用IDE。使用命令行,从错误中学习。这也将帮助您更紧密地理解编译器和链接器选项。

那么什么时候使用IDE?当您在设计巨大的东西或在具有大量类,方法和变量的巨大代码库上工作时。


7
如果您还不知道什么是编译器,那么理解编译器和链接器选项有什么意义呢?通常情况下,它一团糟。我花了十多年的时间来清理我自己的混乱,这些混乱是由一开始的太深和太低的曝光(MACRO32,Fortran,DCL ...)造成的。
SK-logic

2
同意 例如,在学习Python或C#之前学习汇编没有任何意义-它只会使您更加沮丧。通常,您学习高级概念,然后过滤为低级概念或其他挑剔的事物。
DMan 2011年

4

我将是第一个说IDE是提高生产力的人,即使我经常抱怨它们的怪癖。但是,我学习了BASIC,C,C ++,Java,Python,Perl,PHP和其他几种语言,但没有什么比文本突出显示编辑器和该语言的编译器/解释器更好的了。我实际上是在记事本中学习Java的!

学习IDE会促进“魔术”,即“有效;无关紧要”的想法。抽象是好的;魔术是坏的。程序员应该知道或能够找到项目中正在进行的所有事情。一个好的IDE旨在照顾bookeeper,而不是控制项目。正确使用它是一个很好的工具。但是,哪个工匠是从使用CNC铣床开始的呢?

我认为当我最终开始使用IDE时,我的学习方式(必须键入所有内容并充分了解编译器才能构建项目)为我提供了不可估量的帮助。例如,Java项目不是Eclipse项目中的小文件夹,而是包结构中的类的集合,其中包含一些用于路径,配置和部署的XML文件。我不想在没有IDE的情况下构建大型企业应用程序,但是我可以构建小型应用程序。这样可以更轻松地理解大对象的结构,并且当我想要构建中的特定行为时,例如,我知道javac的工作原理,因此我可以调整实际的构建提示,而不是尝试查找不可行的魔术组合。在构建配置中存在。我也相信我对错误消息以及如何查找和修复它们有更深入的了解。

我不会教使用IDE。我认为开始的项目足够小,以至于管理复杂性的论点都没有意义。例如,如果您在教Java,则可以将所有类放在同一文件夹和中javac *.java。您不需要为此的IDE!这样做的理由是使项目保持小规模,只不过是概念验证。尽量减少开销,并专注于教授学生所需的概念。IDE有用的较大项目属于更高级的SE类或专用项目。

关于寻找类和API研究的帮助,我再次认为,如果项目规模较小,这将是没有意义的。同样,在Java中,javadoc非常易于阅读。没有人能守在那里头整个API反正和疗法是一个时间,你将需要研究的API没有一个IDE的好处。例如,使用其他语言,或者远程访问无法打开IDE的服务器。教如何查找文档,而不是“按'”。然后您可以看到对象的方法是什么。”

任何程序员都可以学习IDE,但是了解IDE并不能使您成为一名优秀的程序员。除了黑色幽默之外,“魔术”从来都不是程序员可以使用的好词。


通过突出显示文字来学习...幸运朋克。我们中有些人只列出了关键字和提示。
Matthew Whited

@Matthew:Java我从记事本开始... :)
Michael K

大声笑...我开始使用内置在ROM中的Applesoft BASIC的Apple IIc。:o)
Matthew Whited

哇,我很幸运拥有QBasic!
Michael K

4

也许新手应该只是先解决更简单的问题。不,这些问题不应要求或鼓励使用IDE来完成任务。通过了解基本概念,可以长期获得更多收益。该工具应在之后。

在没有先了解木材类型和手工平面的复杂性的情况下,没有木工工匠会直接跳到使用高功率的平面刨床。

(注意:自动完成和智能感知是完全不同的两件事)。

Intellisense本身并不坏。仅当使用拐杖来猜测功能而不阅读或理解基础文档或实现时,这才是不好的。

附带要点:如果该语言需要IDE来为您编写代码,则该语言对于您要解决的问题可能处于错误的抽象级别。


2
+1为边点。我喜欢学习多种语言,所以您会知道哪种语言不适合完成某项任务。
Michael K

3

当我们小时候长大时,我们不会被告知必须先了解英语的复杂规则,然后我们才能说。我们没有被告知我们必须充分理解介词,连词的正确用法,并避免句子片段。我们边做边学。我们从成功和失败中学习。

具有自动完成功能的IDE可以通过促进程序的创建来帮助新程序员获得信心,而不必为记住大量库中的各种功能而苦恼。

如果一个人真正地推断出自动完成伤害了新的程序员,因为它使得它太容易了他们,那么你可能会说的观点,认为参考书不宜使用设计的,因为内应致力于存储第一的概念,因为没有记住它们会减慢它们的速度,并且不允许他们首先完全理解这些概念。

自动完成是一种工具,用于使程序员更加高效。就像第一次学习语言一样,在我们对所学的知识充满信心并取得一定的成功之后,我们将努力提高知识水平。


这是使用IDE的绝佳论据。不过,这在CS中似乎没有得到解决,因为(在我看来)许多事情不仅仅限于“学习说话”。这将需要对课程进行重构,以明确地讲授IDE隐藏的内容。
Michael K

2

从一开始,就很难构建出可行的东西,因此,任何有助于品牌推广的东西都会变得更好。一个新的程序员将需要一个更高级的人来让他们考虑数组绑定列表或链接列表是否将更适合解决当前的问题。他们每个人都有自己的优点和缺点。

无论新手是否具有IDE,还是他们正在在线浏览API文档,他们创建的代码之间都没有任何真正的区别。虽然处理语法错误的痛苦可能是一种学习经验,但是从一开始就有太多的事情要担心。

您不会学会在没有网的情况下直奔高压电线,以走钢丝。您首先要走离地面几英寸的绳索。我敢说我们大多数人都使用IDE,并且使用某种构建脚本(Visual Studio的构建脚本是由IDE创建的,但是已经存在)。我们大多数人不使用文本编辑器手动构建类,而是手动调用编译器。我们为什么要将它强加给有更多知识的新手?


2

我认为即使开发人员正在学习,也没有必要承受上述工具的痛苦。我相信,在没有工具的情况下编写代码将花费更多的时间和精力,这将更好地花费在学习如何编写单元测试和调试上。一旦用户知道如何测试代码并逐步执行代码,他们将学到很多有关代码的实际信息。

此外,使用IDE并不意味着代码会自行编写。一个无能或初学者的开发人员将编写无论​​他们是否使用IDE都不起作用的代码。

我只是将IDE视为编码时的另一种抽象级别。如果我正在编写Java,则通常不需要了解它生成的字节码是如何工作的。如果新程序员正在使用Java库,则IDE可以自动为他们添加它们,而无需知道它们在哪个软件包中。在任何一种情况下,如果可能引起较低级别的错误或问题(例如,类名冲突),从而导致错误,那么开发人员便应该手动查看它。


0

还有许多其他好的答案,因此请不要认为这是一个完整的答案,但是对于新手和有经验的用户而言,最好能全面了解他们可以使用的功能。

在Delphi中,我可以按ctrl-j,然后会看到我在语法上期望能够正常工作的所有可能事情的列表。

我不一定同意,但是我已经读过一些论据,以至于程序员甚至都不应该查看他们使用的对象的私有类成员,这样,自动完成功能可以为每个用户提供即时的API引用。

较新的IDE可以使用户和语言开发人员将元数据放入其智能感知中,从而进一步增强了在不读取源代码的情况下读取和理解功能的作用的能力(这是他们本来不必做的事情)。

也许,对于新手来说,最好是真正阅读并理解他们实现的所有内容。但是,也许是一个更好的问题:是否应允许新手包括或导入他们想要的任何名称空间或单元,而无需说明为什么要包含它们。


0

以我的经验,使用IDE来学习OO的基础知识非常棒,因为它隐藏了实际编写代码的一些复杂性,同时允许新开发人员专注于程序的逻辑。但是,在学习了程序设计和基本的OO原则之后,我很快就通过课程学习,通过编程课程来更精确地理解源文件中需要相互交互的部分(不要忘记导入语句,实例化正确的类等)。在这里,我们只能使用终端机Unix计算机。

这在学校中是可能的,因为有人拥有“权限”来强迫您使用lo-fi工具。这将是很多更难以在企业或公司环境来实现。


0

我对此有两个想法。首先是要真正学习一些东西,我相信您必须知道实际情况。凭借IntelliSense的出色表现,它可以将其中的一部分隐藏给新开发人员。例如,我在大学里有一个网络工程课程,实际上我们建立了自己的网络框架来构建最终的应用程序。我从该类中脱颖而出,具有适应几乎所有Web框架的能力,因为我了解了一切的基础。使用IDE的程度还不高,但是我认为仍然很重要。

但是,使用IDE也可以做一些事情,例如向新开发人员开放API。当我开始认真地编码时,我使用的IDE会极大地帮助我,因为我会做一些事情,例如键入对象,使用自动完成功能查看其使用的方法,然后使用可用的文档进行研究。这些都是在IDE中完成的,并且是一个很好的学习工具。

因此,是的,我相信只要您花时间了解正在发生的事情,就可以使用它。仅使用对象强制转换而不理解为什么要这么做确实很糟糕,但是,如果新开发人员发现您可以使用对象强制转换,然后又看得出我为什么没有发现任何错误,那就不好了。


0

学习需要实践。当您不知道自己能做什么或如何工作时,编程可能是一个非常令人沮丧的任务。

例如,不编写任何代码而阅读许多有关编程原理的书是不切实际的。人们不会以这种方式学到任何东西。

Intellisense在为新程序员提供持续编程,继续练习并因此学习所需的帮助方面非常有用。

如前所述,学习特定的API与学习编程原理并不相同。无疑会发生的是,新的程序员会犯错误(无论Intellisense如何),而他们如何选择纠正这些错误将导致他们成为优秀的程序员或贫穷的程序员。

如果您想教别人如何编程,我会让他们使用Intellisense并四处游玩,直到他们陷入困境。那时候我会尝试通过教他们卡住的原因来建立基础。


0

IMO,IDE将使您的工作效率更高。但是对于初学者来说,开始使用IDE进行编程通常不是一个好主意。文本编辑器(如notepad ++,notepad等)就足够了。

而且,通常也不认为开始学习高级语言编程是一个好主意。我建议您从汇编语言开始。这将教会您基本知识和耐心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.