为什么新手程序员似乎回避图书馆?

时间:2009-08-27 23:41:09

标签: language-agnostic

我已经注意到了许多可以使用库解决的新程序员的问题。建议使用库时,他们经常会回答“我不想使用X库”这是学习曲线吗?要么 ?好奇!

40 个答案:

答案 0 :(得分:107)

许多新程序员仍然在非常低的抽象层次上工作,学习交易。这是每个人都必须经历的事情。可以说,“向上移动”需要一段时间。

一旦程序员意识到他们花费大部分时间来解决与其他人已经做过的相同的问题,并且目标是实现“商业价值”,那么他们就能真正体会到优秀图书馆带来的价值。

答案 1 :(得分:34)

当你还在学习新语言的细节时,还必须学习如何使用第三方库看起来像是太多的工作。此外,库往往记录严重 - 或者至少有一些文档似乎对新的(呃)程序员完全不透明。

因此,面对试图解决问题X,说“使用库”听起来很像“解决问题Y那么问题x”。

(另外,他们的教授告诉他们不要。我设法在不学习STL存在的情况下通过我的C ++本科学生得到了所有方法。男孩,那是做我的面条的。)

答案 2 :(得分:22)

  有些人在面对的时候   问题,想想“我知道,我会用一个   图书馆。“现在他们有两个   问题。

说真的 - 对于新手来说,这是一种合理的方式,已经被新语言,编程环境,范例,键击等所淹没,以对使用库的建议作出反应。如果你有一个解决方案,但它没有工作,那么就有很多潜在的错误来源;对它们进行分类是一项挑战。 添加对他们来说似乎是不合理的。

“使用库”表示查找库,下载库,将其安装到项目中,然后调用必要的函数。如果您已经习惯了(并且没有针对它的公司策略,并且您有理由信任供应商,并且库本身具有最小的依赖性等),那就不难了。但是如果它对您来说都是新手,当您提出编程问题并返回系统配置答案时,它似乎无益(实际上,即使它不是)

答案 3 :(得分:17)

几乎总是因为他们的教授告诉他们他们不能。

有时候这只是因为他们想要自己学习,但我会说这很少见。

答案 4 :(得分:13)

这是学习曲线。

答案 5 :(得分:10)

使用库可能是学习程序员可以做的最糟糕的事情之一。他们不是学习如何编码,而是学习如何使用其他人实现的特定API。我不是说每个程序员都必须理解他们使用的每一件事情,但是了解计算机细节(数字逻辑,汇编操作码等)的程序员通常比已经开始的人有优势。像Java Swing这样的东西,只是把库放在一起。

在生产中,这当然是另一回事。但我认为最好的教育方法是至少“做一切”。从头开始编写我自己的Web应用程序框架确实提高了我的编程技能和抽象能力。并不意味着我会使用该框架,如果有人雇用我构建他们的应用程序,但我知道“巨型”框架使用的东西背后的优点,缺点和原因,它可以帮助我选择一个特定的框架对于特定情况。

答案 6 :(得分:9)

我记得只是因为我想看看是否可以创建自己的算法而避开几个库。我不想放弃,让别人为我工作,而是想从错误中吸取教训。一旦我想出了一个我很满意的解决方案,我就会查看这些库。

所以对我来说,只是想看看我是否能做到。

答案 7 :(得分:8)

我总是有这样做的冲动,但有时我可以看到自己的局限。 刚刚下载了一个库来创建PDF文档,但这几乎是我记忆中唯一的时间。

至少对我来说,(尝试)自己做事,是我的学习方式。

我的印象是,许多新手程序员如果要使用别人的图书馆,就不会认为这是他们自己的工作。

答案 8 :(得分:7)

我认为这不一定是坏事。使用库很棒;它节省了时间,精力,错误等。但是,你在这个过程中学到的很少,对于新程序员来说,学习是目标。为了回答这个问题,我认为他们往往只是因为他们不习惯使用它们来避开库,而且他们可能不知道它们存在。

答案 9 :(得分:7)

对于许多文档较差的库,这些库要么松散地实现,要么使用的语言不能很好地控制包容和可见性,因此很难猜测库应该如何使用。

在你使用它一段时间之后,你已经习惯了这个怪癖,或者阅读了其他以正确的方式教你的源代码;但是在那之前,使用一个糟糕的拼凑/设计的库可能会非常恼人。 (或者甚至是一个设计得很好但没有很好记录的文件)。

如果您没有库的源代码,那就是另一个问题 - 您无法控制保持程序正常运行的能力。这种情况现在更为罕见,但在购买的图书馆中仍然会发生。

答案 10 :(得分:6)

大多数要点被覆盖(对我而言,主要的一点是学习曲线),但我认为另外一点起作用:

因为学习图书馆不如自己编写相同的功能令人兴奋。

答案 11 :(得分:5)

更多图书馆=减少计费小时数。

答案 12 :(得分:4)

我认为需要花费大量时间来理解图书馆的目的 - 是的,学习曲线,但更多的是新手程序员可能不知道他们需要什么,直到他们有更多的经验。 / p>

答案 13 :(得分:4)

因为它很有趣。

答案 14 :(得分:3)

我是程序员,而不是心理学家! :)

很久很久以前,对我来说,这是因为我想学习和体验。我不想使用我不理解的东西,所以如果我不认为我理解了库并且可以自己编程,我尽量不使用它。可能也有一点恐惧;编程让你有一种控制感,使用库就像放弃了这种控制。

答案 15 :(得分:3)

来自菜鸟的回答 - “我不确定如何使用这些库,甚至不知道如何访问它们或它是如何工作的”

答案 16 :(得分:3)

因为作为开发人员成熟的部分是学习快速识别可以通过库或现有解决方案解决并需要个人关注的问题。

答案 17 :(得分:3)

与经验丰富的开发人员相同的原因 -

因为通常很难学会如何使用库来编写它的一部分,所以你需要自己。至少那时你可以理解当它没有达到预期效果时它是如何工作的。

经验丰富的开发人员只有在理解如何使用库的经验,因此更有可能考虑它。一个没有经验的开发人员,还有一件事要学习......

答案 18 :(得分:3)

当你试图学习如何做事时,任何时候通过调用AwesomeClass.doAwesomeStuff()“神奇地”完成一些事情,你最终会放弃一部分控制。当你是“新的”并且不知道你送什么或为什么它可能令人不安。当我第一次学习它时,这是我对Rails的主要打击。这么多东西只是“有效”,我不知道为什么不挖掘很多Rails源代码(我通常没有时间去做)。

至少,这是我的看法。

答案 19 :(得分:2)

图书馆经常带来学习一些API的开销,这也是范例。它可以相当快地变得复杂,我可以很容易地理解初学者会更喜欢在他们的舒适区域更多的东西。根据我的经验,我找到了大多数图书馆和框架似乎很好地抽象了一些繁琐的例程,但是当我需要扩展这个功能,或者以一种非预期的方式使用它时,它可能是少数。

我认为这是“实践变得完美”的事情之一。

答案 20 :(得分:2)

嗯,新手的目的可能是解决问题而不是实施解决方案。也许他们真正想要做的就是找出解决问题的 。我的意思是,如果他们仍处于学习阶段,他们很可能不希望得到简单的答案。

答案 21 :(得分:1)

在我看来,另一个因素是额外的库增加了复杂性。程序往往越来越难以理解,更难以维护和更复杂的问题。我认为让特别新的程序员回避库的原因是添加库代码比增加自己的代码更加复杂 - 仅仅因为理解库的工作方式仍然无法理解。所以这似乎是一个技巧和心理问题。

答案 22 :(得分:1)

有些新手认为,如果他们使用图书馆,他们就会失去一些乐趣。他们有这个IWIIOMO(我想要实施它自己的)综合症。

答案 23 :(得分:1)

我会说他们发现他们有点吓人。如果他们对一种潜入更多图书馆的语言不熟悉,可能看起来比他们可以咀嚼更多。更不用说让环境与库一起工作所涉及的更多步骤。 d:

根据我的教育经验,(假设大部分新手都是学生)他们真的没有太多接触他们。

我确定没有(在教室里)。 :/

答案 24 :(得分:1)

好吧,作为回应中最“新手”的人,我可以回答我的犹豫是什么......我正在努力学习编程的基础知识,所以我觉得即使我“可以”使用一个图书馆,我觉得我还需要更好的理解才能深入了解这些。

我不确定这是否合理,但想象一下图书馆......好吧......就像物理图书馆一样。它充满了信息,我想要学习的任何东西都很容易找到......对吗?

但如果您还不知道如何阅读 - 或者更准确地理解您正在阅读的句子,那么图书馆就没用了。

我还在学习如何阅读。 :-D

答案 25 :(得分:1)

我可能已经足够接近一个新的程序员才能发表评论,至少就个人而言,我不得不说我不喜欢使用库,因为我现在宁愿自己去做。我没有对时间表做任何事情,所以时间不是问题。当我知道我完全理解某个区域时,我会使用库,并且无法使用别人的代码。

答案 26 :(得分:1)

我不是一个新手程序员,但很多时候我喜欢自己先实现一些东西,所以我至少了解它的工作方式。然后,当我必须将它用于客户端工作时,我会继续使用库实现任何需要完成的工作。

答案 27 :(得分:1)

也许我还是初学者,有时我还是会避免使用某些库。有些图书馆引入了太多的抽象,迫使你付出更多的努力来绕过它或迫使你以某种方式做事,我认为这很糟糕。当我在做Javascript时,我习惯不依赖于任何库。但是,我会从中复制并粘贴一些代码,并构建我自己的“迷你”常用函数。我的一个观点是因为一些库引入了太多的“批量”,使得网页加载速度变慢。但是在做C / C ++时,我倾向于不怕使用库。但是,当你选择一个更精简,更小的图书馆和一个几乎完全相同的巨大复杂图书馆时,我会选择前者。

答案 28 :(得分:1)

一些潜在的原因(作为新手):

  • 您不确定图书馆正在做什么。它可能不适合平台或具有意想不到的后果,并且将其研究到所需的严格性可能被视为浪费时间。如果文档很差,那么开放源代码往往是。

  • 如果您编写的代码被窃听,那么当您注意到时,您很有可能快速修复。如果一个库被窃听,你可以i)解决bug ii)向图书馆所有者投诉或iii)删除它并编写你自己的实现。由于首先包含库引用是您的决定,因此您负责修复。由于上述原因,缓慢修复使您看起来像一个糟糕的程序员。

  • 您可能需要证明您决定使用您认识的图书馆,但您的导师却没有。看着你的肩膀上有一种可疑的类型,通常是不值得的。

  • 您可能包含库的代码不够便携,无法使用库作为完成任务的有效方法。专家可以编写整洁,优雅,可移植的代码,可以愉快地接受库调用的结果。新手可能没有。将图书馆变成一个由新手建造的天真建筑可能比它的价值更麻烦。

答案 29 :(得分:1)

我认为自己是一名中级程序员,大部分是自学成才,几乎完全独立工作。我已经开始使用库,但最近才开始使用。

对此的一个主要障碍是缺乏对不同设计模式的理解 - 甚至是概念。我将确定一种以自己的方式解决问题的方法,一路上开始编码。如果我确实看过一个图书馆,我会经常想“嘿,看起来很方便,但它不符合我的设计。”

尝试应用新想法以实现两件事需要相当多的阅读和经验:

  1. 我的设计很差,没有把东西妥善分开。
  2. 如果我提前考虑现有的库,那么剩下的部分通常会更容易到位!

答案 30 :(得分:1)

发生 noobs使用Libs而不知道,但是当他们必须导入/添加一个记录相当少的人时,会有害怕不知道。这主要发生在已编译的语言中!

在解释的(或编译的IRT)中,主要是当有控制台时,这种恐惧几乎不存在;既然您可以要求并查看它是否失败,请调用方法并查看它返回的内容。

游戏机是勇敢的工具!

答案 31 :(得分:1)

我确信新手不想使用新库有很多原因。但是,如果你有足够的时间向他们展示使用图书馆的优势是什么,这不是一个好机会吗?与我合作的人一起,我会提供一个例子,说明为什么有些东西比他们的方法更好。它有助于他们作为程序员学习和成熟。

答案 32 :(得分:1)

现在已经很久了,但是当我大学毕业时,我对图书馆一无所知。这是在大型机和迷你电脑的时代。我们的学院有一个VAX,管理人员对学生黑客攻击系统很偏执,因此我们甚至不能看到图书馆的手册。所以,当我第一次上大学时,我甚至都没想到图书馆可用。

答案 33 :(得分:1)

使用库需要您了解库的相对复杂的设计,这是新程序员可能无法掌握的,因为他们所编写的所有内容都是简单/过程/单一用途的代码。例如,对于有经验的程序员来说,模板方法,观察者和命令等标准设计模式看起来非常明显,但对于新手而言,这一切似乎都是魔术和/或不必要的复杂性。对我来说,转折点就是当我足够好去理解设计模式并编写一些基本的可重用代码时。

答案 34 :(得分:1)

我认为更多基本问题可以被认为是对使用现有图书馆的一种威慑。

  1. 部分原因是“新手程序员”缺乏对图书馆的接触。如果你不知道它们存在,你怎么知道使用它们?
  2. 可供选择的数量。让我说我真的很想学习更多关于MVC的知识,但是如果我必须在cakephp和smarty以及zend之间做出选择......那么你可以很快看到齿轮工作以找到实现目标的方法,而无需投入时间试验。看看Freshmeat或SourceForge,可以更好地了解可用的库。
  3. 可疑支持与图书馆的粗略/过时文档相结合。我是否想要使用此工具可能不再有效或将来可能被放弃?项目很可能会发展,因此它也适用于图书馆的项目。它的用处是否会持续到项目的生命周期,还是我需要再次重新完成这项工作?

答案 35 :(得分:1)

  • 新手程序员不仅意味着刚刚开始学习编程的人,还有一些人刚开始学习新语言。

    • 学习曲线是最受欢迎的学习曲线,除此之外,学习新语言的人往往没有那么奢侈去参考所建议的框架。

让管理者妥协以推进新框架并非易事。它需要大量的测试,并且必须研究它应该如何满足您的需求。

看我的情况,我基本上是一名c#程序员,并开始为我的工作学习javascript。前段时间我在堆栈中问了一个关于javascript puplisher / subscriber模式的问题。大多数人回应告诉我它已经在JQuery和原型等框架中实现,你可以轻松地重用它们。

干杯

Ramesh Vel

答案 36 :(得分:1)

有些开源库存在问题,或者效率不高。

答案 37 :(得分:1)

对于速度恶魔,他们很少使用第三方库,新程序员通常希望挤压他们代码的每一次速度。我认为如果他们无法控制他们的代码,他们就无法获得他们正在寻找的性能。至少这就是我开始编程时避免使用库的原因。

我记得编写了我的第一个DAL并避免了网上的所有其他免费库,因为我希望我的代码以最快的速度执行。后来,我发现通常它不是bttleneck实际上是数据库的代码。

答案 38 :(得分:1)

我认为教授们希望他们坚持基础。当我从研究生毕业时,我知道C ++,Java和其他一些语言,但对公司使用的库和框架一无所知。这就像你知道java ..yes ..你能写一个servlet ..没有。

答案 39 :(得分:0)

信不信由你,当我上大学的时候,我用C ++创建了自己的库。是的,这是对的。我自己做了这个。它包含许多不同类型的DOS C ++不支持或者它受到某些第三方头文件的支持。

为什么我这样做?

老师问了同样的问题,我要告诉他,我想知道基本的,我想学习基础,我想建立自己的基础。如果我使用别人的代码,我将无法理解正在发生的事情......爱情怪异的周期。当我喜欢更快地键入我的键盘或者如果我不想坐12小时我不喜欢的时候,我不能太讨厌。

他印象深刻,我也印象深刻。这样做我知道的事情。那是我开始写自己的时候的开始。

我现在做什么?

图书馆很好。我们必须使用它。但是,不能在学龄期进行比较和尝试使用。它们对商业有利,但可能对个人不利!

如果您不了解HTML的基本知识并且可以在没有编辑器的情况下操作Html标记,您将如何定义?

所以我认为图书馆应该用于学习者,我会计算初级课程,不到1 - 2年,重新面对他们的图书馆并看到魔术。