我记得研究新框架的旧有效方法。 MFC说,这总是阅读这本主题好书的最佳方式。当我试图跳过大量材料以加快编码时,后来发现它会更快地首先阅读整本书。没有很好的方法来研究小部分的框架。或者至少我当时没有看到它们。
过去几年发生了很多新事:改进了Google的搜索结果,编程博客,更多参与互联网讨论的人,以及许多开源框架。
现在,当我们编写软件时,我们通常依赖于第三方(通常是开源)框架/库。很多时候我们只需要知道他们使用它们的少量功能。它只是找到使用库的一个小子集的最简单方法,而没有不必要的悲观化。
您如何尽可能少地研究框架并仍然有效地使用它?
例如,假设您需要使用Lucene索引一组文档。您需要突出显示搜索片段。你不关心词干分析器,将索引存储在一个文件中,而不是多个文件,模糊查询以及如果你深入研究Lucene会占据你大脑的许多其他东西。
那么您的策略,方法和技巧是什么来节省您的时间?
我会列举我会做什么,虽然我觉得我的过程可以改进。
您的学习/搜索路线是什么?如果可能,请按优先顺序写下。
答案 0 :(得分:4)
我使用三阶段技术来评估API。
1)发现 - 在这个阶段,我使用尽可能多的不同搜索短语组合搜索StackOverflow,CodeProject,Google和新闻组,并将可能符合我需求的所有内容添加到一个巨大的列表中。
2)过滤/排序 - 对于我在收集阶段发现的每件物品,我都会尝试找出它是否符合我的需要。为此,我直接进入API文档并确保它具有我需要的所有功能。这个结果进入加权列表,最佳解决方案位于顶部,所有结果都被过滤掉了。
3)原型 - 我采取了前几个竞争者,尝试做一个小的实现,击中所有重要的功能。无论什么适合这个项目最好赢得。如果由于某种原因在实现过程中出现了最佳选择问题,则可以依赖于其他实现。
当然,选择项目的最佳API有很多因素。一些重要的:
......当然还有更多。这完全取决于项目。
至于节省时间,我会说在这里试图节省太多,以后再回来咬你。选择一个好的图书馆的时间至少与实施它的时间一样重要。另外,想想在未来六个月内,您是否愿意开心编码,或者您宁愿与排外的开发团队争论:)。花几天时间对你的选择进行彻底的评估可以在以后节省很多痛苦。
答案 1 :(得分:2)
你的问题的答案取决于你在哪里普遍性/特异性的连续性。你想解决眼前的问题吗?您是否希望深入了解图书馆?你有可能介于这两个极端之间。 Jeff Atwood has a post关于程序员如何根据他们的需要在这些级别之间移动。
首次入门时,请阅读框架或库(或语言或其他任何技术)的高级设计,最好由设计师之一阅读。尝试确定他们试图解决的问题,设计背后的组织原则以及核心功能是什么。这将形成概念框架,未来的理解将悬而未决。
现在跳进去吧。创造一些东西不要复制并粘贴某人的代码。相反,当事情不起作用时,请详细阅读错误消息,并获取有关这些错误消息的帮助,并找出错误发生的原因。当事情不起作用时,它可能令人沮丧,但它会迫使你思考,而这就是你学习的时候。
答案 2 :(得分:1)
1)在Google上搜索我的任务
2)查看带有少数不同库的示例,例如,如果我不知道我有什么其他选项,则无需将自己绑定到Lucene。
3)查看主页上次更新的日期,如果在6个月假期内没有更新(有一些例外)
4)使用库搜索示例任务(不要阅读教程)
5)如果没有教程,我能理解发生了什么吗?如果是,则继续,如果没有重新开始,那么
6)尝试实施任务
7)观察自己失败
8)阅读教程
9)尝试实施任务
10)观察自己失败并在StackOverflow上询问,或邮寄作者,在用户组上发帖(如果看起来很友好)
11)如果我能完成任务,我会考虑值得学习的框架并阅读主要教程2小时(如果它在2小时内不合适我只是在我需要之前忽略剩下的东西)
答案 3 :(得分:1)
在我一直遵循的一系列步骤的意义上,我没有食谱,这主要是因为我学到的一切都是不同的。有些事情对我来说是彻头彻尾的新事物(例如Dojo,我没有流利的Java脚本,所以这是一项大任务),有些只是对以前知识的增强(我知道EJB 2,所以学习EJB 3,而表面上是全新的)它的注释,它建立在概念上。)
我的总体策略是我称之为“螺旋和公园”。我尝试首先圈出景观,了解一般形状,我 Park 概念我还没有得到,不要让它担心我。然后我更深入一些区域,但再次尝试不要沉迷于一个,螺旋进入主题。希望我开始解开并理解,但也需要停放更多的东西。
最初,我想要回答以下问题:
我做了大量的脱脂阅读。
然后我想在这些方面做更多的探索。我开始寻找陷阱和好建议。 (例如,在java中:为什么“wibble”.equals(var)一个有用的构造?)
具体技术和信息来源:
答案 4 :(得分:1)
如果它是一个小型图书馆/ API,只有很少或没有社区,您可以随时联系开发人员并寻求帮助,因为他可能非常乐意为您提供帮助;他很高兴有一个人正在使用他的API。
答案 5 :(得分:1)
邮件列表是一个很好的资源,只要你在提问前先做好功课。
邮件列表档案对于我在CoreAudio相关内容上遇到的大部分问题都非常宝贵。
答案 6 :(得分:0)
我永远不会读javadoc。因为通常没有。当有,很可能它不是最新的。所以最让人感到困惑的是。
从几分钟内找到的最简单的教程开始。 通常,本教程将在最后引导您进一步获取源代码,因此大部分时间都是在一条路上继续前进,越来越深。
答案 7 :(得分:0)
这实际上取决于主题是什么以及有多少信息。通过示例学习是一个很好的方式来开始一个全新的主题,特别是如果你了解其他类似的图书馆或语言。您可以采用您熟悉的主题,并说“我了解如何使用X实现,让我们看看如何使用Y”。
答案 8 :(得分:-1)
那么您的策略,方法和技巧是什么来节省您的时间?
好吧,我搜索。我一般不会问问题,宁愿自己研究。如果情况变得更糟,我会阅读文档。在某些情况下(比如,当我在使用SharpSVN做一些工作时),我不得不查看源代码,特别是测试用例,以获取有关API如何工作的一些信息。
一般来说,我必须诚实,我的大部分“学习”和“学习”都是偶然的。
例如,就在几秒钟前,我发现了如何在C#中获取“Recent”文件夹。在看到问题之前我不知道该怎么做,认为它很有趣,然后搜索。
所以对我而言,真正的'诀窍'是我在论坛上闲逛,回答问题,并意外地获取知识。那时我需要研究一些东西;机会是我对它有所了解,并且搜索更容易,我可以专注于实现[通常首先实施测试程序]并从那里开始。