为什么新手程序员似乎对库避之不及?[关闭]

Why do newbie programmers seem to shy away from libraries? [closed]

提问人: 提问时间:8/28/2009 最后编辑:3 revs, 3 users 100%Byron Whitlock 更新时间:11/11/2023 访问量:6262

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

10年前关闭。

我注意到很多新程序员的问题都可以用库来解决。当有人建议使用一个库时,他们经常会回答“我不想使用 X 库”是学习曲线吗?或?只是好奇!

与语言无关

评论

38赞 Alex 8/28/2009
俗称图书馆恐惧症,对图书馆的恐惧。
19赞 3/4/2010
不是在这里发明综合症。当有人不确定自己在做什么时,当他们不理解别人在做什么时,他们就更加不确定别人在做什么。
14赞 peterchen 3/4/2010
代码比编写更难阅读和理解。
5赞 peterchen 3/4/2010
@Sky:我今天刚和一位优秀的、相当有经验的、但仍然有些年轻的开发人员进行了讨论。我还不知道如何更好地定义“更容易”——也许它是有趣的而不是无聊的。这些年来,我听到过很多“原因”:错误的语言,错误的字符串类。当它不能实现所有内容时,无论如何你都必须编写代码。当它实现的比你需要的更多时,它“过于复杂和令人费解”。“文档太少了,理解代码需要很长时间”,或者“文档太多了,你找不到你需要的东西”。等。
1赞 Byron Whitlock 10/10/2013
很多好的 SO 问题都因为题外话而被关闭。:(这个花了3年时间!:)

答:

13赞 andandandand #1

这是学习曲线。

18赞 Noon Silk #2

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

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

评论

1赞 Cleiton 8/28/2009
+1,不,这并不罕见,但你是对的(老师就是很好的例子)
2赞 IAdapter 9/2/2009
很好,另外,如果你使用库,你的老师也应该学习它来理解你的代码。老师不喜欢学习新事物,因为他们已经知道了一切。
9赞 3 revsstigok #3

我总是有这种自己动手的冲动,但有时我能看到自己的局限性。 最近刚刚下载了一个库来创建PDF文档,但这几乎是我唯一能记得的时间。

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

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

评论

0赞 3/4/2010
如果你使用的是编译器,你就是在使用别人的工作,这是否意味着我们都应该只用机器代码编写?
7赞 Ed S. #4

我不认为这一定是坏事。使用库很棒;它可以节省时间、精力、错误等。然而,你在这个过程中学到的东西很少,对于新程序员来说,学习是目标。为了回答这个问题,我认为他们倾向于回避图书馆,仅仅是因为他们不习惯使用它们,也许他们不知道它们的存在。

评论

0赞 David Thornley 9/2/2009
你学会了使用库,这本身就是一件很有价值的事情。问题也不是人们不了解图书馆,而是他们拒绝使用图书馆。
3赞 Ed S. 9/3/2009
学习图书馆对初学者来说并不是那么有用。
1赞 Perpetualcoder #5

我认为教授们希望他们坚持基本原则。当我从本科毕业时,我知道C++,Java和其他一些语言,但对公司中使用的库和框架一无所知。就像你知道java一样。是的。。你能写一个servlet吗?不。

35赞 Electrons_Ahoy #6

当您仍在学习一门新语言的来龙去脉时,还必须学习如何使用第三方库可能看起来太多了。此外,库的文档往往很糟糕——或者至少文档对新程序员来说似乎完全不透明。

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

(另外,他们的教授告诉他们不要这样做。我设法在C++本科生中一路走来,而没有学习STL的存在。男孩,那是煮我的面条吗?

评论

0赞 David Thornley 9/2/2009
一想到要教没有各种 STL 功能的 C++,我就不寒而栗。如果没有像 vector<> 和 auto_ptr<> 这样的东西,C++ 并不比 C 更安全。
3赞 Electrons_Ahoy 9/3/2009
我会说不太安全,因为它意义不大。发现 STL 令人兴奋。我一生中从未如此高兴地扔掉数百行自定义代码。(“我不必编写自己的哈希表?非常好!等等“)
2赞 Brendan Long 4/4/2010
“图书馆往往记录得很糟糕”——这是我的主要原因。至少在开源领域,库往往是用 C 语言编写的,变量名称模糊不清,几乎没有文档。
0赞 Earlz 4/4/2010
更糟糕的是,教授们不鼓励使用这种图书馆,只是因为它在20年前就存在一些问题。例如,说“你不应该在实际代码中使用 STL 或虚拟函数,因为它们太慢了”
0赞 quantum 7/3/2012
当我阅读库时,我发现阅读源代码比阅读文档更容易,至少在文档只有函数名称的情况下,我可以从源代码中看到它在做什么。
3赞 Rex M #7

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

7赞 Bill K #8

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

在你使用了一段时间后,你已经习惯了这些怪癖或阅读了其他教你正确方法的源代码;但在那之前,使用一个组合/设计不佳的库可能会非常烦人。(甚至是一个设计精良但记录不充分的)。

如果你没有库的源代码,那就是另一个问题——你无法控制保持程序工作的能力。如今,这种情况更加罕见,但在购买图书馆的情况下仍然会发生。

评论

0赞 J. Polfer 8/28/2009
粗略浏览一下 Boost 库文档的(一些)内容,可以很好地说明您的第一段。
4赞 Craig Shearer #9

我认为需要投入大量时间来理解库的目的 - 是的,这是一个学习曲线,但更多的是新手程序员可能不知道他们需要什么,直到他们有更多的经验。

1赞 user161433 #10

对于速度恶魔来说,他们很少使用第三方库,而新程序员通常希望压缩他们代码的每一倍速度。我认为,如果他们无法控制自己的代码,他们就无法获得他们想要的性能。至少这就是为什么我刚开始编程时避免使用库的原因。

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

评论

2赞 David Thornley 9/2/2009
一个实现良好的库可能比没有经验的人要编写的任何代码都要快。几乎可以肯定,它更健壮,错误更少,我不认为为了提高速度而放弃这些错误是一个很好的原则。
3赞 2 revs, 2 users 80%Juice #11

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

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

3赞 MattC #12

当你试图学习如何做事时,每当通过调用 AwesomeClass.doAwesomeStuff() “神奇地”完成某件事时,你最终会放弃一部分控制权。当你是“新人”,不知道你在放弃什么,或者为什么它会令人不安。这是我第一次学习 Rails 时对它的主要打击。很多事情都“有效”了,我不知道为什么没有挖掘大量的 Rails 源代码(我通常没有时间这样做)。

至少,这是我的看法。

1赞 codingbear #13

一些开源库存在错误或效率不如其他库。

111赞 2 revs, 2 users 80%Nader Shirazie #14

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

一旦程序员意识到他们大部分时间都在解决与其他人相同的问题,并且目标是实现“商业价值”,那么他们就可以真正体会到一个好的库带来的价值。

评论

15赞 Noldorin 8/28/2009
在我看来,说得好。
0赞 Graviton 8/28/2009
我不同意!那些能够达到那个阶段的人是优秀的开发人员;大多数人不会。因此,你会看到高级开发人员“仍然在非常低的抽象级别上工作”。
0赞 Nader Shirazie 8/28/2009
当然,有时你的前辈们在低水平上工作......但那是值得他们花时间在业务上的时候。另外,高级开发人员,我并不是说人们已经编程很长时间了......
15赞 Martin Beckett 4/4/2010
你也可以责怪教育。很多关于编写字符串类或编写快速排序的课程,以及使用现有库会作弊的总体印象。
5赞 Ken 7/9/2010
更深入地讨论“使用现有库会作弊”:为了获得计算机科学学位,我不得不参加许多关于如何编写代码的课程,但没有一门关于如何管理库的课程。如果你能做到前者,你最终可能会自己弄清楚后者,而且课堂上的时间有限,所以我不确定我会为此“责怪”任何人。应届毕业生经验不足,11岁就拍电影。:-)
24赞 Carl Manaster #15

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

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

“使用库”意味着找到库,下载它,将其安装在您的项目中,并调用必要的函数。这并不难,如果你习惯了它(并且没有反对它的公司策略,并且你有理由信任供应商,并且库本身具有最小的依赖性,等等)。但是,如果它对你来说是全新的,当你提出一个编程问题并得到一个系统配置答案时,它似乎没有帮助(即使事实并非如此)。

评论

4赞 Paul Nathan 7/28/2010
对于不会使用其全部复杂性的程序来说,某些库的麻烦程度根本不值得。通常,这就像 4 天安装一个库,阅读文档,弄清楚它想要如何输入,并将其与 1 或 2 天与您自己的代码进行比较,您可以为自己的代码编写详细的文档......
0赞 1/20/2011
是的,这就是我的理由,@carl。
5赞 Seth #16

更多的库 = 更少的计费小时数。

评论

3赞 Esti 8/29/2009
这是一个非常短视的愿景,但对于经验不足的程序员来说可能是正确的。事实上,你应该做的是尽快克服重新发明轮头的过程,以便为你的客户提供真正的商业价值(他们确实注意到了)。
6赞 Matthew Whited 3/4/2010
计费小时数越短,意味着每小时收费更高。
4赞 Breton #17

因为它很有趣。

10赞 Nope #18

我记得我回避了几个库,只是因为我想看看我是否可以创建自己的算法。我不想就这样放弃,让别人为我做这项工作,而是想从错误中吸取教训。一旦我想出了一个我满意的解决方案,我就研究了图书馆。

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

评论

2赞 Brendan Long 7/9/2010
这就是库的伟大之处,你可以做一些事情,直到你达到“哦,我的想法会起作用”的时刻,然后切换到使用库而不是:D
7赞 Jon Hopkins #19

大部分都涵盖了(对我来说,主要的是学习曲线),但我认为还有一点起到了作用:

因为学习库不如自己编写相同的功能那么令人兴奋。

3赞 jcoder #20

更有经验的开发人员这样做的原因相同——

因为学习如何使用库通常与编写自己需要的部分一样困难。至少这样你就可以理解当它没有达到你的预期时它是如何工作的。

有经验的开发人员只是在了解如何使用库方面有经验,因此更有可能考虑它。一个没有经验的开发人员,这是另一件事要学习......

评论

2赞 Michael Borgwardt 8/28/2009
我敢肯定,学习如何使用库几乎永远不会像自己编写库那样困难——当你开始时,它似乎是这样,因为你没有意识到问题的所有方面,而且因为程序员总是低估调试。
2赞 Matthew Whited 3/4/2010
不要忘记,大多数第三方 API 都具有您可能不需要的功能和要求。这可能会导致 API 膨胀,并导致需要更多时间来学习 API,然后编写新的更轻量级的 API。
1赞 Kage #21

在我看来,另一个因素是额外的库增加了复杂性。当程序变得更复杂时,程序往往会变得更难理解、更难维护和出错。我认为,让新程序员对库望而却步的原因在于,添加库代码比添加自己的代码更能增加复杂性——仅仅是因为了解库的工作原理仍然超出了他们的掌握范围。所以这似乎是技能和心理的问题。

评论

0赞 David Thornley 9/2/2009
添加库代码比编写自己的库代码增加的复杂性要小 - 对于每个接触代码的人来说。出于这个原因,只有令人讨厌的原始唐纳斯和还不知道的新手才会避开图书馆。
1赞 Kage 9/3/2009
我敢部分不同意。如果它是一个小型库,完全按照您的意愿而已,那么您是完全正确的,但是如果您不花时间阅读它们的源代码,较大的库确实会增加复杂性,并且它们的内容将不受您的控制。如果你只需要一个功能,那么自己编写代码可能确实是更好的选择,而不是添加整个库的代码和复杂性。关于代码质量,添加一个已建立的库来完成这项工作可能比自己修补更好 - 特别是如果你是一个新手。
1赞 3 revs, 3 users 67%RameshVel #22
  • 手程序员不仅意味着刚开始学习编程的人,还有一些情况包括刚开始学习新语言的人。

    • 学习曲线是可以接受的最受欢迎的一种,除此之外,学习新语言的人通常没有那么奢侈地去学习建议的框架。

要让经理们妥协以继续采用新框架并不总是那么容易。它需要大量的测试,并且必须研究这应该如何满足您的需求。

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

1赞 Joshua K #23

我认为更基本的问题可以被认为是使用现有库的威慑因素。

  1. 作为“新手程序员”,部分原因是缺乏对库的接触。如果你不知道它们的存在,你怎么知道使用它们?
  2. 可用选项的数量。假设我真的很想了解更多关于 MVC 的信息,但是如果我必须在 cakephp 和 smarty 以及 zend 和 ...好吧,您可以快速看到齿轮的工作方式,以发现实现目标的方法,而无需投入时间进行实验。查看 Freshmeat 或 SourceForge,以更好地了解令人生畏的可用库选择。
  3. 可疑的支持与库的粗略/过时的文档相结合。我是否要使用这个可能不再起作用或将来可能被放弃的工具?一个项目很可能会发展,图书馆的项目也会发展。它的用处会持续到我的项目的生命周期,还是需要我再次重做这项工作?
2赞 Rev316 #24

库通常伴随着学习一些 API 及其范式的开销。它很快就会变得复杂,我很容易理解初学者更喜欢在他们的舒适区多一点东西。根据我的经验,我发现大多数库和框架似乎在抽象一些繁琐的例程方面做得很好,但是当我需要扩展此功能,或者以一种非预期的方式使用它时,它可能是少数。

我认为这是“熟能生巧”的事情之一。

1赞 dsimcha #25

使用库需要您了解库中相对复杂的设计,这是新程序员可能没有掌握的,因为他们编写的只是简单/过程/单一用途的代码。例如,对于有经验的程序员来说,模板方法、观察者和命令等标准设计模式似乎很明显,但对于新手来说,这一切似乎都像魔术和/或不必要的复杂性。对我来说,转折点是当我变得足够好,可以摸索设计模式并编写一些基本的可重用代码时。

1赞 GreenMatt #26

现在已经很久了,但当我从大学毕业时,我对图书馆一无所知。那是在大型机和微型计算机的时代。我们学院有一个VAX,管理人员对学生入侵系统感到偏执,所以甚至不允许我们看到图书馆手册。所以,当我刚从大学毕业时,我甚至没有想到图书馆可用。

2赞 BigBeagle #27

好吧,新手的目的可能更多的是解决问题而不是实施解决方案。也许他们真正想做的是弄清楚如何解决问题。我的意思是,如果他们仍然处于学习阶段,他们很可能不希望得到简单的答案。

1赞 Ascalonian #28

我敢肯定,新手不想使用新库的原因有很多。但是,如果您有足够的时间,这难道不是一个很好的机会,可以向他们展示使用图书馆的优势吗?对于与我一起工作的人,我通常会举例说明为什么某些东西比他们的方法更好。它帮助他们学习和成熟为程序员。

1赞 Fabiano Soriani #29

碰巧菜鸟在不知情的情况下使用 Libs,但是当他们必须导入/添加一个文档较少的库时,就会担心不知道。这主要发生在编译的 langs 上!

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

控制台是勇敢的工具!

1赞 mbmcavoy #30

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

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

花了相当多的阅读和经验来尝试应用新的想法来实现两件事:

  1. 我的设计很差,没有把东西适当地分开。
  2. 如果我及早考虑现有的库,剩下的部分通常更容易到位!
11赞 2 revsLotus Notes #31

使用库可能是学习程序员能做的最糟糕的事情之一。他们不是在学习如何编码,而是在学习如何使用其他人实现的特定 API。我并不是说每个程序员都必须了解他们使用的每一件事,但是了解计算机的来龙去脉(数字逻辑、组装操作代码等)的程序员通常比那些从 Java Swing 之类的东西开始并且只是把库放在一起的人更有优势。

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

评论

0赞 AlvinfromDiaspar 8/2/2016
我同意这一点。这绝对是学习过程的一部分。有些人比其他人更亲力亲为。但我认为,一旦初出茅庐的程序员对他/她的手艺感到满意,那么秩序就会从混乱中产生(使用库、创建库、使用设计模式、数据结构......等)。我敢打赌,这并不是软件工程所独有的。
1赞 Hao Wooi Lim #32

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

1赞 Ryan Giglio #33

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

1赞 AaronM #34

我可能和一个新程序员很接近,可以发表评论,至少就我个人而言,我不得不说我不喜欢使用库,因为我现在宁愿自己做。我没有按照时间表做任何事情,所以时间不是问题。当我知道我完全理解某个领域,并且无法从使用别人的代码中获得任何好处时,我会使用库。

评论

0赞 Byron Whitlock 4/7/2010
有趣。谢谢你的评论。
1赞 Joel #35

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

我不确定这是否有意义,但想象一下图书馆是......井。。。就像一个实体图书馆。它充满了信息,任何我想学的东西都很容易找到......右?

但是,如果你还不知道如何阅读或更准确地理解你正在阅读的句子,那么图书馆就毫无用处。

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

3赞 m0g #36

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

1赞 2 revsmissingfaktor #37

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

1赞 Ashley Grenon #38

我会说他们觉得他们有点吓人。如果他们是一门语言的新手,那么潜入更多的库可能看起来比他们咀嚼的要多。更不用说让环境与库一起工作所涉及的更多步骤了。D:

根据我的教育经验,(假设这些新手中的大多数是学生)他们真的没有太多接触过它们。

我当然没有(在教室里)。:/

1赞 Tom W #39

一些可能的原因(作为新手):

  • 您不确定该库到底在做什么。它可能不适合该平台或产生意想不到的后果,并且以所需的严谨性对其进行研究可能会被视为浪费时间。如果文档很差,那就加倍了,开源通常是这样。

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

  • 您可能需要证明您决定使用您知道的图书馆的合理性,但您的导师却没有。一个可疑的人看着你的肩膀,这通常不值得付出努力。

  • 您可能在其中包含库的代码不够可移植,无法将库用作完成任务的有效方法。专业人士可以编写整洁、优雅、可移植的代码,这些代码可以愉快地接受库调用的结果。新手可能不会。将图书馆硬塞进一个由新手构建的幼稚架构中可能比它的价值更麻烦。

0赞 codebased #40

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

我为什么这样做?

我的老师也问了同样的问题,我会告诉他,我想知道基础知识,我想学习基础知识,我想建立自己的基础。如果我使用其他人的代码,我将无法理解正在发生的事情。循环,爱,极客。当我喜欢更快地打字时,或者如果我不想坐 12 小时,我们的习俗,我不会感到极客。

他给我留下了深刻的印象,我也给我留下了深刻的印象。我通过这样做来了解事情。那是我开始自己写作的开始。

我现在做什么?

好吧,图书馆很好。我们必须使用它。但是,从学龄开始就不能比较和尝试使用。它们对企业有好处,但可能对个人不利!

如果您不了解 HTML 的基础知识并且无需编辑器即可操作 Html 标签,您将如何定义它?

所以我想图书馆应该用给学习者,我会算初级课程,不到1-2年的时间,重新面对他们的图书馆,看看它的魔力。