我已经注意到了许多可以使用库解决的新程序员的问题.建议使用库时,他们经常会回答"我不想使用X库"这是学习曲线吗?要么 ?只是好奇!
许多新程序员仍然在非常低的抽象层次上工作,学习交易.这是每个人都必须经历的事情.可以说,"向上移动"需要一段时间.
一旦程序员意识到他们花费大部分时间来解决与其他人已经做过的相同的问题,并且目标是实现"商业价值",那么他们就能真正体会到优秀图书馆带来的价值.
当你还在学习新语言的细节时,还必须学习如何使用第三方库看起来像是太多的工作.此外,库往往被严重记录 - 或者至少有一些文档似乎对新的(呃)程序员完全不透明.
因此,面对试图解决问题X,说"使用库"听起来很像"解决问题Y那么问题x".
(另外,他们的教授告诉他们不要这样做.虽然我没有学习STL,但我还是设法通过C++本科学生得到了所有方法.男孩,做了我的面条.)
有些人在遇到问题时会想"我知道,我会使用图书馆."现在他们有两个问题.
说真的 - 对于新手来说,这是一种合理的方式,已经被新语言,编程环境,范例,击键等所淹没,以对使用库的建议做出反应.如果你有一个解决方案,但它没有工作,那么就有很多潜在的错误来源; 对它们进行分类是一项挑战. 添加它们似乎是不合理的.
"使用库"意味着找到库,下载它,在项目中安装它,并调用必要的函数.如果您已经习惯了(并且没有针对它的公司策略,并且您有理由信任供应商,并且库本身具有最小的依赖性等),那就不难了.但是如果它对你来说都是全新的,那么当你提出一个编程问题并找回一个系统配置答案时,它看起来就没那么有用了(即使它实际上并非如此).
几乎总是因为他们的教授告诉他们他们做不到.
有时它只是因为他们想要自己学习,但我会说这很少见.
这是学习曲线.
使用库可能是学习程序员可以做的最糟糕的事情之一.他们不是学习如何编码,而是学习如何使用其他人实现的特定API.我不是说每个程序员都必须理解他们使用的每一件事情,但是了解计算机细节(数字逻辑,汇编操作码等)的程序员通常比已经开始的人有优势.像Java Swing这样的东西,只是把库放在一起.
在生产中,这当然是另一回事.但我认为最好的教育方法是至少"做一切".从头开始编写我自己的Web应用程序框架确实提高了我的编程技能和抽象能力.并不意味着我会使用该框架,如果有人雇用我构建他们的应用程序,但我知道"巨型"框架使用的东西背后的优点,缺点和原因,它可以帮助我选择一个特定的框架对于特定情况.
我记得只是因为我想看看是否可以创建自己的算法而避开几个库.我不想放弃,让别人为我工作,而是想从错误中吸取教训.一旦我想出了一个我满意的解决方案,我就查看了这些库.
所以对我来说,它只是想看看我能否做到.
我总是有这种冲动自己做,但有时我可以看到自己的局限.刚刚下载了一个库来创建PDF文档,但这几乎是我唯一记得的时间.
至少对我来说,(尝试)自己做事,是我的学习方式.
我的印象是,许多新手程序员如果要使用别人的图书馆,就不会认为这是他们自己的工作.
我认为这不一定是坏事.使用库很棒; 它节省了时间,精力,错误等.但是,你在这个过程中学到的很少,对于新程序员来说,学习是目标.为了回答这个问题,我认为他们往往只是因为他们不习惯使用它们来避开库,也许他们不知道它们存在.
对于许多文档较差的库,这些库要么松散地实现,要么使用的语言不能很好地控制包容和可见性,因此很难猜测库应该如何使用.
在你使用它一段时间之后,你已经习惯了这个怪癖或者阅读其他教你正确方法的源代码; 但是在那之前,使用一个糟糕的拼凑/设计的库可能会非常恼人.(或者甚至是一个设计得很好但没有很好记录的文件).
如果您没有库的源代码,那就是另一个问题 - 您无法控制保持程序正常运行的能力.这种情况现在更为罕见,但在购买的图书馆的情况下仍然会发生.
大多数要点被覆盖(对我而言,主要的一点是学习曲线),但我认为另外一点起了作用:
因为学习图书馆比自己编写相同的功能更令人兴奋.
更多的图书馆=较少的可计费小时数.