部分研究框架/库的有效策略

时间:2009-03-25 21:30:00

标签: search frameworks

我记得研究新框架的旧有效方法。 MFC说,这总是阅读这本主题好书的最佳方式。当我试图跳过大量材料以加快编码时,后来发现它会更快地首先阅读整本书。没有很好的方法来研究小部分的框架。或者至少我当时没有看到它们。

过去几年发生了很多新事:改进了Google的搜索结果,编程博客,更多参与互联网讨论的人,以及许多开源框架。

现在,当我们编写软件时,我们通常依赖于第三方(通常是开源)框架/库。很多时候我们只需要知道他们使用它们的少量功能。它只是找到使用库的一个小子集的最简单方法,而没有不必要的悲观化。

您如何尽可能少地研究框架并仍然有效地使用它?

例如,假设您需要使用Lucene索引一组文档。您需要突出显示搜索片段。你不关心词干分析器,将索引存储在一个文件中,而不是多个文件,模糊查询以及如果你深入研究Lucene会占据你大脑的许多其他东西。

那么您的策略,方法和技巧是什么来节省您的时间?

我会列举我会做什么,虽然我觉得我的过程可以改进。

  • 搜索“lucene tutorial”,“lucene highlight example”等。尝试根据发布日期,评论的数量和基调来估计非官方文章(博客文章)的信任评分。如果没有明确的答案 - 在目标上收集新的搜索关键字和链接。
  • 在官方网站上搜索非常快速的教程/新手指南
  • 估计javadoc对新手的价值。 (阅读Lucene highlight package summary
  • 搜索图书馆附带的简单示例,与您需要的内容相关。 (学习“src / demo / org / apache / lucene / demo”)
  • 在Lucene邮件列表中询问“简单的Lucene搜索突出示例”。如果你问一个愚蠢的问题,你就无法得到答案,甚至得不到好名声。通常你不知道你的问题是否是愚蠢的,因为你还没有深入研究这个框架。
  • 在Stackoverflow或其他QA服务上询问它“你能给我一个在Lucene中突出显示的搜索关键词的工作示例”。然而,这个问题非常具体,无法得到答案或得分不好。
  • 估计如果框架代码是开源的,那么从框架代码中获得答案是多么容易。

您的学习/搜索路线是什么?如果可能,请按优先顺序写下。

9 个答案:

答案 0 :(得分:4)

我使用三阶段技术来评估API。

1)发现 - 在这个阶段,我使用尽可能多的不同搜索短语组合搜索StackOverflow,CodeProject,Google和新闻组,并将可能符合我需求的所有内容添加到一个巨大的列表中。

2)过滤/排序 - 对于我在收集阶段发现的每件物品,我都会尝试找出它是否符合我的需要。为此,我直接进入API文档并确保它具有我需要的所有功能。这个结果进入加权列表,最佳解决方案位于顶部,所有结果都被过滤掉了。

3)原型 - 我采取了前几个竞争者,尝试做一个小的实现,击中所有重要的功能。无论什么适合这个项目最好赢得。如果由于某种原因在实现过程中出现了最佳选择问题,则可以依赖于其他实现。

当然,选择项目的最佳API有很多因素。一些重要的:

  1. 这会增加我的发行量大小多少?
  2. API与我现有代码的风格的匹配程度如何?
  3. 它有高质量/任何文件吗?
  4. 是否被很多人使用?
  5. 社区有多活跃?
  6. 开发团队的活跃程度如何?
  7. 开发团队如何响应错误的补丁请求?
  8. 开发团队会接受我的补丁吗?
  9. 我可以扩展它以满足我的需求吗?
  10. 整体实施的成本有多高?
  11. ......当然还有更多。这完全取决于项目。

    至于节省时间,我会说在这里试图节省太多,以后再回来咬你。选择一个好的图书馆的时间至少与实施它的时间一样重要。另外,想想在未来六个月内,您是否愿意开心编码,或者您宁愿与排外的开发团队争论:)。花几天时间对你的选择进行彻底的评估可以在以后节省很多痛苦。

答案 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 概念我还没有得到,不要让它担心我。然后我更深入一些区域,但再次尝试不要沉迷于一个,螺旋进入主题。希望我开始解开并理解,但也需要停放更多的东西。

最初,我想要回答以下问题:

  • 这是为了什么?
  • 为什么我会使用这个而不是我已经知道的其他东西
  • 什么可能?任何有趣的甜点。 “例如,看看那个很好的AJAX驱动的更新”

我做了大量的脱脂阅读。

然后我想在这些方面做更多的探索。我开始寻找陷阱和好建议。 (例如,在java中:为什么“wibble”.equals(var)一个有用的构造?)

具体技术和信息来源:

  • 最重要的是:做!我想尽早开始一两个教程。我可能必须完成螺旋线的第一个电路,但后来我想触摸并进行实验。
  • 概述文件
  • 产品文档
  • 论坛和讨论组,通过回答问题来学习是我最喜欢的技巧。
  • 如果可能的话我会尝试找到大师。我很幸运能够在我的直接同事中获得丰富的知识和经验。

答案 4 :(得分:1)

  1. 快速入门指南。
  2. 快速查看API文档(如果有)。
  3. 阅读示例代码。
  4. 徘徊你必须要有所了解(对不起盖帽)。
  5. 如果它是一个小型图书馆/ API,只有很少或没有社区,您可以随时联系开发人员并寻求帮助,因为他可能非常乐意为您提供帮助;他很高兴有一个人正在使用他的API。

答案 5 :(得分:1)

邮件列表是一个很好的资源,只要你在提问前先做好功课。

邮件列表档案对于我在CoreAudio相关内容上遇到的大部分问题都非常宝贵。

答案 6 :(得分:0)

我永远不会读javadoc。因为通常没有。当有,很可能它不是最新的。所以最让人感到困惑的是。

从几分钟内找到的最简单的教程开始。 通常,本教程将在最后引导您进一步获取源代码,因此大部分时间都是在一条路上继续前进,越来越深。

答案 7 :(得分:0)

这实际上取决于主题是什么以及有多少信息。通过示例学习是一个很好的方式来开始一个全新的主题,特别是如果你了解其他类似的图书馆或语言。您可以采用您熟悉的主题,并说“我了解如何使用X实现,让我们看看如何使用Y”。

答案 8 :(得分:-1)

那么您的策略,方法和技巧是什么来节省您的时间?

好吧,我搜索。我一般不会问问题,宁愿自己研究。如果情况变得更糟,我会阅读文档。在某些情况下(比如,当我在使用SharpSVN做一些工作时),我不得不查看源代码,特别是测试用例,以获取有关API如何工作的一些信息。

一般来说,我必须诚实,我的大部分“学习”和“学习”都是偶然的。

例如,就在几秒钟前,我发现了如何在C#中获取“Recent”文件夹。在看到问题之前我不知道该怎么做,认为它很有趣,然后搜索。

所以对我而言,真正的'诀窍'是我在论坛上闲逛,回答问题,并意外地获取知识。那时我需要研究一些东西;机会是我对它有所了解,并且搜索更容易,我可以专注于实现[通常首先实施测试程序]并从那里开始。