代码之家  ›  专栏  ›  技术社区  ›  Sergey

部分[关闭]学习框架/库的有效策略

  •  6
  • Sergey  · 技术社区  · 15 年前

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

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

    现在,当我们编写软件时,我们常常依赖于第三方(通常是开源的)框架/库。很多时候,我们只需要知道它们的一小部分功能就可以使用它们。这仅仅是寻找一种最简单的方法来使用库的一小部分,而不需要不必要的纠缠。

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

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

    那么,你节省时间的策略、方法和技巧是什么呢?

    我将列举我将要做的,尽管我觉得我的过程可以改进。

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

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

    9 回复  |  直到 12 年前
        1
  •  4
  •   Rick Minerich    15 年前

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

    1)发现-在这个阶段,我用尽可能多的搜索短语组合搜索stackoverflow、codeproject、google和新闻组,并将所有可能适合我需要的内容添加到一个巨大的列表中。

    2)过滤/分类-对于我在收集阶段发现的每一个项目,我都试图找出它是否适合我的需要。为此,我直接跳到API文档中,并确保它具有我需要的所有特性。这个结果将进入一个加权列表,其中最好的解决方案位于顶部,所有的故障都被过滤掉。

    3)原型——我选择了少数的竞争者,并尝试进行一个小的实现,以实现所有重要的特性。任何最适合这个项目的项目都会获胜。如果出于某种原因,一个问题在实现过程中产生了最佳选择,那么就有可能回到其他实现上。

    当然,选择项目的最佳API需要大量的因素。一些重要的因素:

    1. 这会增加多少我的发行量?
    2. API与我现有代码的样式有多匹配?
    3. 是否有高质量/任何文件?
    4. 很多人都用它吗?
    5. 社区有多活跃?
    6. 开发团队的活跃程度如何?
    7. 开发团队对bug补丁请求的响应如何?
    8. 开发团队会接受我的补丁吗?
    9. 我能把它扩展到我的需要吗?
    10. 总体实施成本有多高?

    …当然还有很多。这完全依赖于项目。

    至于节省时间,我想说,在这里省太多的钱,以后会回来咬你的。选择一个好的库所花费的时间至少和实现它所花费的时间一样重要。另外,想想这条路,六个月后,你会很高兴地编写代码,还是会和一个仇外的开发团队争论。多花几天时间对你的选择做一个全面的评估,可以在以后省去很多痛苦。

        2
  •  2
  •   Justin R.    15 年前

    你的问题的答案取决于你属于普遍性/特异性连续体的位置。你想解决眼前的问题吗?你想对图书馆有更深的了解吗?你很可能处于这些极端之间。 Jeff Atwood has a post 关于程序员如何根据需要在这些级别之间移动。

    当第一次开始时,阅读一些关于框架或库(或语言,或任何技术)的高级设计的内容,最好是由其中一个设计者完成。试着确定他们试图解决的问题,设计背后的组织原则是什么,以及核心特性是什么。这将形成概念框架,未来的理解将从中悬挂。

    现在跳进去。创造一些东西。 复制粘贴某人的代码。相反,当事情不起作用时,请详细阅读错误消息以及这些错误消息的帮助,并找出发生错误的原因。当事情不起作用时,它可能会令人沮丧,但它会迫使你思考,而当你学习时,它也会让你沮丧。

        3
  •  1
  •   Robert Gould    15 年前

    1)在谷歌搜索我的任务

    2)用 几个不同的图书馆 例如,如果我不知道还有什么选择的话,就不需要把自己绑在露西身上。

    3)查看主页上的上次更新日期, 如果在6个月的假期内没有更新 (有些例外)

    4)使用库搜索示例任务(尚未阅读教程)

    5) 我能理解没有教程的情况吗? 如果是,继续如果不是,从1开始

    6) 尝试执行任务

    7)看着自己失败

    8)阅读教程

    9)努力完成任务

    10)看着自己失败,在stackoverflow上提问,或者给作者发邮件,在用户组上发帖(如果看起来友好)

    11) 如果我能完成这项任务,我会认为这个框架值得学习。 阅读主教程2个小时(如果它不适合2个小时,我只会忽略剩下的内容,直到我需要它为止)

        4
  •  1
  •   djna    15 年前

    我没有食谱,从我一直遵循的一系列步骤的意义上说,这主要是因为我学到的每件事都是不同的。有些事情对我来说是全新的(Dojo,例如,我在Java脚本中没有流畅性,这是一个很大的任务),有些只是对以前的知识的增强(IDENEJEB 2很好,所以学习EJB 3在表面上是新的,所有注释,它建立在概念上。)

    不过,我的总体策略是将其描述为“螺旋式和公园式”。我试着先圈出风景,了解一般的形状,我 公园 我不知道的概念 得到 不过,别让我担心。然后我深入到一些领域,但再次尝试不要沉迷其中, 螺旋形的 深入主题。希望我开始理解和理解,但也需要停车更多的东西。

    最初我想回答以下问题:

    • 这是干什么用的?
    • 为什么我要用这个而不是其他我已经知道的东西
    • 有什么可能?有什么有趣的好地方吗?”“哦,看看那个由Ajax驱动的更新。”

    我读了很多短文。

    然后我想做更多的探索如何。我开始寻找正确的建议。(Java中的Eg.:为什么?) “wibble”。等于(var) 一个有用的结构?)

    具体技术和信息来源:

    • 最重要的是:做!我想尽早上一两门辅导课。我可能要完成螺旋线的第一个回路,但之后我想接触并进行实验。
    • 概述文档
    • 产品文件
    • 论坛和讨论组,通过回答问题来学习是我最喜欢的技巧。
    • 如果可能的话,我会设法找到古鲁。我很幸运在我的同事中拥有丰富的知识和经验。
        5
  •  1
  •   Leo Jweda    15 年前
    1. 快速入门指南。
    2. 快速查看API文档(如果可用)。
    3. 读取样本代码。
    4. 瞎搞 你得到处乱转(对不起帽子)。

    如果这是一个小的库/API,有一个小的或没有社区,你可以随时联系开发人员自己并寻求帮助,因为他可能会非常乐意帮助你;他很高兴有更多的人在使用他的API。

        6
  •  1
  •   emullet    15 年前

    只要你在提问之前先做作业,邮件列表就是一个很好的资源。

    邮寄名单 档案馆 对于我在coreadio相关内容上遇到的大多数问题来说都是无价的。

        7
  •  0
  •   Goathill    15 年前

    我绝不会读JavaDoc。因为通常没有。如果有的话,很可能不是最新的。所以一个人最好是困惑。

    从几分钟内找到的最简单的教程开始。 通常,本教程会在结尾处引导您找到更多的源代码,因此,大多数情况下,您都在一条不断前进、不断深入的路径上。

        8
  •  0
  •   Nick    15 年前

    这真的取决于主题是什么以及有多少信息。以身作则是开始一个全新话题的好方法,尤其是如果你对其他类似的库或语言有一定的了解。你可以选择一个你熟悉的主题,然后说“我了解如何使用x实现,让我们看看如何使用y实现”。

        9
  •  -1
  •   Noon Silk    15 年前

    那么,你节省时间的策略、方法和技巧是什么呢?

    好吧,我搜索。我一般从不提问,更喜欢自己研究。如果情况更糟,我将阅读文档。在某些情况下(例如,当我使用sharpsvn进行一些工作时),我必须查看源代码,特别是测试用例,以获取有关API如何工作的一些信息。

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

    例如,就在几秒钟前,我发现了如何在c_中获取“recent”文件夹。在看到这个问题之前,我不知道该怎么做,考虑到这个问题很有趣,然后进行搜索。

    所以对我来说,真正的“诀窍”是我在论坛上闲逛,回答问题,不小心学到了知识。当我需要研究一些东西的时候,我很有可能对它有所了解,并且搜索更容易,我可以集中精力(通常先实现一个测试程序)的实现,然后从那里开始进行。