在没有API文档的情况下进行编程真的是一项必备技能吗?[关闭]


22

我今天勉强通过了Java编程考试。我不得不回答一些关于线程的一般问题,这些问题做得很好,并且编写了一个更糟糕的线程程序。我必须将笔记本电脑连接到投影仪屏幕并立即编写程序。我的第一次尝试是使用匿名类,但我忘记了确切的语法。也许是因为有些激动,或者是因为最近两周我主要使用php进行编码。然后我问是否可以使用API​​文档。答案是“否”。所以我决定走另一条路,实现了Runnable。该程序正在执行最后要求的操作。当然,考官注意到我的第一次失败,这极大地影响了我的分数。令我惊讶的是它不允许使用API​​文档。

因此,我的问题是:没有API文档就可以完美地进行编码真的重要吗?我应该发展这项技能吗?在现实世界和工作环境中真的重要吗?在编程课程中,我专注于学习模式,开发编写良好的设计应用程序的技能,使用API​​的技能并快速找到必要的信息。我并不是想学习如何在没有API文档的情况下进行编程。在工作面试中必须具备(没有API文档的编码)吗?


2
我认为他是在询问文档,特别是API参考。

3
@bancer-无法使用本机Java类是没有意义的。听起来您好像没有为考试做准备。
Ramhound 2012年

27
在现实世界中,您将始终可以访问文档。我的记忆力很差,试图将注意力集中在应用程序的一般逻辑上,避免对容易查找的事物毫无意义地记忆。不幸的是,学术世界(和认证世界)有所不同,并且常常强调无意义的记忆。我的本科学习主要是数学和物理,但是我记得必须记住很多公式等。这很浪费时间。
Antonio2011a 2012年

11
@ Antonio2011a-知道您使用的语言的API并不是“毫无意义的记忆”。您对API的了解越多,就越能编程,因为您将为解决方案选择适当的类和方法。如果您不知道它们的存在,则不能选择它们。当然,没有人知道整个Java API。这个太大了。但是,尽可能多地了解它总是很高兴的。
达伍德说恢复莫妮卡(Monica)2012年

9
@DavidWallace也许我不清楚。当然,我并不是说您不需要熟悉API!只是您不需要记住类,方法的名称,参数的顺序以及其他诸如此类的麻木细节!您真正需要知道的是它的存在及其用途,然后您可以在编码时查找详细信息。就像我之前所说的那样,我的记忆很糟,老实说,我可以在一小时前上过一堂课,如果您给我一张白纸,我将不记得确切的细节。
Antonio2011a 2012年

Answers:


39

在Real Life™中,我将这项技能评为“必备”,但并非必需。但是,在大学环境中是不同的。

通过查看文档,无需文档即可进行编码的能力可以间接地自己表明学生对该科目的熟悉程度。从某种意义上说,无需编写文档即可看到代码,这告诉教授您之前已经练习过使用API​​-通过做功课和其他作业,甚至可以自己编程来娱乐。对有关API有粗略了解的聪明人应该能够找出几乎所有Java API。这不是巧合:经常期望程序员在工作中学习,并且针对流行的编程系统(包括Java)的API文档旨在帮助程序员快速学习。文档通常提供简短的独立示例,以简洁的方式说明该概念。

这直接违背了教授衡量您对该学科知识的目标(而不是衡量您的聪明程度)。因此,不看文档就询问您的代码并不是没有道理的。

注意:我编辑此答案以响应对该问题的编辑。


2
从我的阅读中,审查员正在研究他记忆API文档的能力。他知道该怎么做,只是不记得语法。
保罗

@Paul我阅读了修改内容,并更改了答案。我以为OP提出了完全不同的要求。谢谢!
dasblinkenlight 2012年

2
+1用于在此处确定真正的问题。如果是工作面试,则面试官会对您如何解决问题更感兴趣,并且可能会允许您仅在白板上写出语法的最佳近似值。在过去三个月中,当您学习特定的材料并且正在对该特定材料进行测试时,最好不要采用“开放Internet”策略。
StriplingWarrior 2012年

@Paul:您说得对
银行家

21

曾经有一个人的代码中有一个小错误,因此他将其带到StackOverflow并寻求帮助。StackOverflow:Java(生成不重复的数字)。我看了看他的代码,并向他指出他的HashSet一直被值填充​​,但从未清除。因此,他问我:“您如何清除它?” 我必须承认,我对自己给出的答案并不感到特别自豪。

您绝对需要了解每天使用的基本知识。您需要全部了解它们,并且也需要充分了解它们。但是只有基本的东西。

对于其他所有事情,重要的是要知道外面有什么可以满足您的需求。精确地,您不需要使用哪个类,您需要调用哪种方法以及您需要传递给它的参数,这些都是不需要让大脑的宝贵神经元占据的东西。那就是文档的目的,这就是发明具有自动完成功能的IDE的原因。而且,如果一推再推,总会有StackOverflow和更大的interwebz在那儿。

要求程序员完全了解API,就像要求律师完全了解法律法规和所有先例一样。这是没有意义的。无用的练习。


+1:仅由于其庞大的规模,就很难学习大型库(例如Java)的整个API。不过,知道包提供了哪些常规功能会更容易(例如,javax.imageio提供了高级图像处理,而不是我曾经使用过),并且应该学习一些核心功能。特别是,几乎所有Java程序都将使用java.lang和java.util。
Donal Fellows 2012年

9

在没有API文档的情况下进行编程真的是一项必备技能吗?

我不会说这是必需的,但这是

非常可取的技能

即时通讯

最近几个月,我与知道API的人比我更好的人紧密合作进行编码。他的工作效率高得多-仅仅是因为他可以跳过使分心的 API文档检查。


在这里,我说的是流利程度。关于不仅要有能力而且要流利。

你知道要流利吗?当有人看着你的时候,看起来就像在键入代码一样...

  • ...好像正确的代码只是从您的手指流到屏幕上一样。就像您没有查看API文档,教程和手册一样。实际上,您确实检查了所有内容,但这是不可见的,因为它们全在您的脑海中。您已经在大脑中获得了所需的所有知识-已充电,已加载并可以使用。

...这是流利的知识。这是您花一分钟时间做一个新手要花一个小时的时间。确实值得付出努力。闻起来像胜利。

如果你掌握流利的一些 API,如果你正确地记住它是如何感觉,这种记忆将进一步指导您如何成为最富有成效的工作与任何其他API。


我认为他的问题不是您最终是否应该了解文档,而是您是否应该像考试一样背诵文档。
宫坂丽(Rei Miyasaka)2012年

@ReiMiyasaka很好,如果您跳过冗长的考试抱怨,您可能会注意到:“因此,我的问题是:能够在没有API文档的情况下进行完美编码是否真的很重要?我是否应该发展这项技能?在现实世界中真的重要吗?在工作环境中?” 。我专注于问题的这一部分,因为,您看,我最近的经历使我对它可以只需要基本答案可以飞过的想法感到非常不舒服。很公平?
蚊蚋

2
+1用于支付上下文切换到参考文档的费用。必须查寻每一个步骤,会使事情变慢。
Wyatt Barnett 2012年

8

不可以。如果没有从API文档中查找的能力,我会死定的。我唯一没有的是,当我尝试调试某些无法访问文档的内容时。然后,我根据需要对API和“ n粘贴”片段进行“反向工程”。

重要的是要了解API的用途以及最适合使用的部分,但要知道方法名称,变量名称……并不是必须的。


3

在工作中,我从来没有遇到无法访问文档的情况。另一方面,具有阅读理解能力和一般理解能力以能够解释撰写得不好的文档一直是有用的。

您最终应该了解API的模式和结构,但是确切了解所有内容在哪里并不是特别有用。

在SFU Computing Science中,闭卷考试占我们成绩的70%至100%。从理论上讲,考试会测试您对课程材料和适应性的理解。实际上,它真正测试的只是您的神经,睡眠质量/持续时间,机智和死记硬背的技巧-无论是学术上还是软件行业的典型工作,这些都不需要。


2

除了您的最后一个问题外,对所有人都没有了解:任何API文档的百科知识都不重要。如果您知道每个类的每个方法的每个细节,显然可以加快编程速度,但这不是一个合理的期望。

最后一个问题:如果没有API文档,可能希望您了解某些类的详细信息。如果您在参加面试之前就知道您将接受考试,或者工作非常专注(即:您将整天都在做线程),那么您可以合理地期望需要详细了解相关的课程。


附录:在与教授/讲师进行任何考试之前,您应明确说明将提供哪些材料以及您可能带来的哪些材料。假设不允许他们未明确同意的任何事情。我开设了一些课程,在这些课程中,我只能携带写作的基础知识,可以携带自己想要的书的地方,也可以带一张我想要的任何东西的双面纸。考试通常围绕允许使用的材料进行组织。


2

API文档!=语言语法。

当有人不知道各种Java类及其方法的确切名称时,我可以理解。我不认识他们,我每天都用Java编写代码。如果没有文档或全能的IDE自动完成功能,我会迷失-尤其是涉及到Java标准API(以其在变量/类/方法名称中的冗长性而闻名)的情况。

但是,正如您自己说的那样,文档中通常找不到您不记得的任何内容。它是内部类的语法-这是语言本身的功能,而文档中没有记住。

尽管我认为应该(在许多情况下)允许学生使用标准API的文档,但我确实认为希望通过编程考试的任何人都应该了解语言语法。我的意思不是说只有语言设计者才知道的一些怪异的案例,只是标准的案例,就像您的示例中那样。


2
我认为也不值得记住语法。功能,模式和陷阱,是的,但是语法,不是。我使用太多的语言来使其有意义,我认为大多数开发人员也是如此。
宫坂丽(Rei Miyasaka)2012年

@ReiMiyasaka:我不认为您应该记住整个语言规范,但是您应该随时了解基本语法。您是否在文档中查找如何用您的任何一种语言编写循环?还是您只是编写代码?
Goran Jovic

实际上,我使用多种语言,即使是基本的东西,我也经常忘记确切的语法!因此,我发现自己总是需要参考文档。
Antonio2011a 2012年

@ Antonio2011a:我承认我自己做的,尤其是当我使用不太通用的语言时。但是对于许多学生来说,正在学习的语言是有史以来的第一门编程语言。如果学生甚至没有学过语法,那么对于他/她为考试做准备的方式也不会说什么好。
Goran Jovic

@Goran实际上,我不一定要这样做,原因有二:1.后台编译告诉我语法错误,并且2.循环在诸如Haskell和ML的语言中是次要的(几乎不存在)。语言比您想象的要多样化。即使我花了大部分时间在F#上编码,只是模糊地记得Haskell,但我仍然可以很好地理解Haskell代码,并记得要注意语义上的差异。另一方面,我同意从内而外地学习第一语言是非常重要的,而且经常被忽视。
宫坂丽(Rei Miyasaka)2012年

2

在Eclipse中,您可以编写obj.并按ctrl + space键,它将通过为给定对象提供所有方法选项来尝试自动完成。如果由于某种原因使我无法解决,则Java API拥有其余的答案。我很难想像有一天我没有Google怎么做。

学校是一个完全不同的故事。


2

恕我直言,学术界通常会讨厌培养优秀的软件工程师。只有在课后为乐趣编写代码的人才有机会在现实世界的项目中取得成就。

再说一次,学术界与培养开发人员无关,整个世界都与解决抽象问题和进行研究有关。大多数时候,这与实际应用相去甚远。而且研究人员不一定是好的编码员。

并发臭地学习API。有autocomplete / google / msdn / javadocs来查找所有的角落和缝隙,为什么有人要始终将所有这些内容保存在大脑中?您将在数周/数月内学习到最常见的功能,如果您了解语法,结构和一般思想,那么只需几秒钟即可查找所有其他功能。

再说一次,有些人仍然在文本编辑器中编写代码,并牢记每个函数的名称,这不一定是错误的,但是如果他们狂热于此,那么就请教您的教授。

此外,即使您内心知道函数名称和参数,在最新的API文档中进行验证仍然是一个好主意。10年前,strtok在单线程情况下还不错,但现在不行了。如果仅学习名称和参数,您将永远不会知道该功能可能已被弃用或发明了更好的替代方法。

语言会发生变化,因此您需要与它们一起进行变化,记住一种正确的方法不利于此。


1

如果您迟早会开始使用api在某个项目上工作一段时间,那么您会很好地学习该api。我相信这是完全不必要的技能,因为我不认识任何人从未看过任何文档(msdn,手册页等)。

但是大学是一个完全不同的世界,因此,如果您失败了,也不要惊讶,因为您不知道CreateWindowEx的第10.th个参数的typedef名称。


与我的大学经历不一致。如果有的话,他们倾向于迷恋理论并且对细节缺乏关注。还是水平下降到职业学校之一?
AProgrammer 2012年

我不是在谈论一所大学,这只是您可能会在世界上某所大学看到的一个例子。如您所知,它们并不完全相同
HayriUğurKoltuk 2012年

2
大学一直都有一定程度的记忆与反省。如果我有一部CRC书籍,而不必记住积分表,那我将获得微积分。
Blrfl 2012年

1

我会说,不,不是必需的,人脑在物理上不可能记住这么多信息,但是您仍然需要了解基本知识或最常用的东西,因为没有太多要记住的信息。否则,就不可能记住Java上的所有内容。

要求老师让学生知道一切,或者用他知道学生是否分配语言,这也是不公平的,除了他分配给您的练习或项目。对我来说,这就像想知道自己在不上学或从事相关工作时会做什么。

编辑:显然,老师要问你的取决于他,有些老师更重视理论,而另一些老师则重视实践,不在乎你是否不了解一切。

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.