促进 C++库

……其中一个世界。 赫伯·萨特安德烈亚历山德雷斯库,C类++编码标准

Boost参与Google Summer的概述Code™2006(代码™2006)

谷歌连续第二年代码之夏™倡议,学生开发人员的赞助计划感谢他们在开源组织中的贡献愿意指导参与者。2006年的竞选活动已经开始4月至9月,积极开展开发工作发生在5月23日至8月21日之间。

大约在4月中旬,当项目刚刚开始时,一些Boost成员开始考虑进入Summer的可能性作为指导组织。尽管时间不够事实上,我们大多数人对此都是全新的倡议,Boost成功申请程序。因此,选定并指导了十个项目,其中大部分预计将成为很快就会提高。

我们在这里给出了这一经验的总结报告,以及对我们发现的主要问题进行简要分析,以便我们能够努力解决这些问题,明年做得更好。

目录

程序的工作原理

谷歌夏令营有三类参与者代码:

  • 谷歌本身作为资金合作伙伴整体方案。
  • 开源组织接受了该计划必须指定组织内部的人员担任项目导师。
  • 学生提交他们的项目想法,如果被选中,与其中一位导师合作组织;项目成功完成后,学生可以获得该项目的全额津贴。

该程序经过以下阶段:

  • 组织选择:那些开源组织愿意进入Summer of Code提交一个表达式对谷歌感兴趣,以及谷歌使用的信息限定用途。选定的组织是公开的宣布并期望每个组织提供一个池项目想法。
  • 学生选择:愿意参与的学生提交一个或多个项目建议书,通常扩展到指导组织以前提供的想法。学生可以多次申请组织,但最终只能选择一个项目。这些提议由谷歌发送至必须对其进行分析的适当组织进行排名并为最有前途的应用程序指派导师。根据指导组织提供的信息,谷歌发布了接受项目的最终名单。
  • 发展:学生在指定导师的指导下,预计将在三年内完成这些项目月。谷歌要求导师对以下项目进行中期审查项目的延续取决于哪一个。
  • 最终审查:一旦开发期结束,导师被要求告知谷歌项目,并确定学生是否有资格获得全额津贴。

2006数字

2006年谷歌代码之夏活动4月14日至9月25日。共102人辅导组织参与了。在提交的6338份申请中由全球3044名学生最终选出630名并获得资金支持。谷歌在学生方面花费了300多万美元对指导组织的津贴和补偿。

促进参与

应用和过程选择

4月14日,谷歌代码夏令营开始的同一天,胡里奥·梅里诺·维达尔(后来成为入选者之一学生)发送消息鼓励Boost成员作为一个指导组织参加这个项目。这个这一呼吁激起了社区的兴趣;虽然时间是做所有准备工作的缩写,Boost主持人迅速投入工作初步注册步骤。与此同时,一个Wiki页面随着Boost成员提供的项目想法而成长,总共有20多个提案。

五月初,Boost被正式接受节目主持人和Boost主持人着手组建一个导师,根据邀请选择。作为学生选择是一个微妙的过程,涉及对个人的评估关于他们的技术技能,所有随后的讨论都是由私人邮件列表中选定的导师进行建立合作关系。

我们没有为学生人数的激增做好准备随后的应用程序。申请后第二天开放期间,我们收到了三份提案;第二天当时是14岁,不到一周就超过了50岁。到年底申请期收到的提案总数是174,这迫使我们进行了一次非常密集的排名处理并招募其他导师。遵循了两条规则从而合理化在数十个不同的建议:

  • 在哪里有相同的竞争应用程序项目理念,只有一个最终被选中;所以,没有有两个目标相同或非常相似的项目认可的。
  • 在给定Boost库上构建的一些应用程序(例如,Boost图库是一个经常出现的目标用于添加算法。)我们限制了应用程序每个Boost库最多两个。

这些规则的综合作用是大大减少了同时符合条件的申请数量将接受的项目均匀分布在思想。此外,学生有独特的建议,即项目不是来自Boost最初提出的人才库的想法,具有竞争优势。

不同的提案根据其相关技术领域,以便每个集群由指定的具有所需专业知识的导师处理主题。导师提交“焦点报告”,总结他们负责的申请;这些报告作为第一过滤器,有助于减少最终数量联合评估申请。在这个过程中,建议最有希望的学生被要求改进他们的想法并提供进一步的信息。

虽然官方规定没有强制执行,但我们还是同意了导师与学生的一对一比例,最终对符合条件的最大人数进行了严格限制项目。

接受的项目

谷歌接受并资助了十个排名靠前的项目由Boost背书。其中八个项目是图书馆或针对未来包含在Boost中的库组件,而剩下的两个主要由实用程序组成依靠Boost。

C++Coroutine库
乔瓦尼·皮耶罗·德雷塔(Giovanni Piero Deretta),由埃里克·尼布勒(Eric Niebler)指导。
通过现代C++接口管理库OS提供的协同程序设施。

并发库
Matthew Calabrese,由David Abrahams指导。
受STL启发的高级规范通用框架以及可并行化算法的执行。

TR1数学特殊函数
张晓刚,由约翰·马多克指导。
23个特殊数学函数的实现在C++标准库扩展建议TR1中指定。

助推。进程库
Julio M.Merino Vidal,由Jeff Garland指导。
用于进程启动和基本的可移植库管理层。

核心外图形和图形算法
由杰里米·西克(Jeremy Siek)指导的斯特凡·赞佩利(Stéphane Zampelli)。
Boost图库的扩展以处理非核心结构,即数据集太大,无法保存在主数据库中立即记忆。

MISC(M)ulti(I)ndex(S)专用(C) 安大略省
马蒂亚斯·卡佩莱托(Matías Capeletto),由Joaquín M指导洛佩斯·穆尼奥斯。
内部专用容器系列基于促进。MultiIndex。

通用树容器
伯恩哈德·雷特(Bernhard Reiter),由雷内·里维拉(RenéRivera)指导。
一类STL兼容树的设计与实现容器。

FSM的查看器实用程序
由安德烈亚斯·胡伯·德尼(Andreas Huber Dönni)指导的Ioana Tibuleac。
有限状态可视化实用程序使用Boost指定的计算机(FSM)。状态图。

模块化C++预处理器,使用促进。精神
由乔尔·德·古兹曼(Joel de Guzman)指导的Hermanpriet“Lally”Singh。
使用Boost实现。精神与激励。一波又一波模块化C++的前端转换器(如Daveed Vandevorde建议将模块添加到C++标准C++。

实现最先进的Mincut/Maxflow算法。
斯蒂芬·迪德里奇(Stephan Diederich),由道格拉斯·格雷戈(Douglas Gregor)指导。
Boost的快速mincut/maxflow例程的实现基于Vladimir设计的新算法的图形库科尔莫戈罗夫。

开发

设立了两个主要设施来帮助学生和开发阶段的导师:邮件列表和具有单独目录的Trac/SVN项目管理系统针对每个项目。其中一名学生,马蒂亚斯·卡佩莱托,出于个人倡议,注册了一个谷歌集团,旨在为Boost的学生提供一个非正式互动的场所讨论常见问题。

初始热身期结束后,每对学生-学生对主要是私下进行开发工作。的用法Boost邮件列表非常稀少,仅在这个项目让一些学生公开宣布了他们的成绩。

结果

截至开发期正式结束之日,不同项目的状态如下:

  • 七个项目已完成或接近完成预计学生将在2006年内要求进行正式审查或2007年初。其中四个项目需要一个目标在开发过程中重新定位,主要是因为最初的计划在三个月内过于雄心勃勃。大多数几个月来,项目仍在积极开发中代码夏季计划之后。
  • 有两个项目没有达到计划目标,但尽管如此,还是产生了可以扩展的有用材料代码夏季计划之外。
  • 有一个项目在期中考试后不久就被放弃了审查。放弃的原因尚不清楚。

所有项目的结果都可以在线查询,网址为专用的Trac公司网站

分析

我们研究了Boost参与的各个阶段代码之夏,强调发现机会以进行改进。

促进上诉

在中期项目中演示2006年OSCON,谷歌的Chris DiBona提供了一些数据关于收到最多应用:

组织 应用程序数量
KDE公司 244
Ubuntu和Bazaar 236
Python软件基金会 212
GNOME公司 199
Apache软件基金会 190
促进 174
即时通信工具 152
GNU项目 148
猪跑 146

这里显示的数字是根据图表估计的包含在演示文稿幻灯片中。此图表包含附加的列标记为“谷歌”,实际帐户因为申请数量少而被驳回质量。

Boost排名第六最具吸引力102人中的组织机构完全出乎意料,特别是考虑到其他一流的组织。有一个或多或少隐含的Boost成员一致认为我们是一个相对利基市场该项目以其质量标准而闻名于世++从业者,但在入门级中渗透有限程序员:也许上面的数字应该让我们重新考虑这个假设。对申请的粗略审查提交给Boost的报告显示,大多数申请者都是固定的Boost的用户:许多人引用了C中的Boost状态++社区作为申请的吸引力因素。

失去机会?

如果我们看看有关收到的申请,数字不太适合促进。

组织 项目数量 项目/应用程序比率
KDE公司 24 9.8%
Ubuntu和巴扎 22 9.3%
Python软件基金会 23 10.8%
GNOME公司 19 9.5%
Apache软件基金会 27 14.2%
促进 10 5.7%
即时通信工具 8 5.3%
GNU项目 10 6.8%
猪跑 14 9.6%

事实证明,几乎前九名中的任何其他组织都相当高于Boost。碰巧的是,谷歌最初要求组织提交的最大数量他们觉得可以应付的项目,我们得到了资金正是我们的目标,所以限制因素完全在于Boost这边。

项目启动

对Boost的贡献取决于大量的指导原则以及编码、文档、测试和维护。许多必需的工具都是专门使用的在Boost中,其中一些并不平凡,比如实例Boost。生成。尽管Boost网站包含有关所有这些工具和程序的信息情报分散在不相关的页面上,有时很难找到。

因此,需要大量的专业知识才能开始在Boost工作。一些学生报告了创业情况了解这些细节和熟悉困难他们自己使用工具,尤其是卡姆Quickbook。每个学生都在他们自己或求助于他们的导师(请参阅公共传播问题).

正在进行的开发

一旦学生通过创业阶段,大多数项目进展顺利,无严重并发症。在大多数情况下案例中,在开发过程中的某个时间点实现了没有时间完成。一些参与者不得不重新定义目标,使项目保持在而其他人只是决定继续在夏令时的官方截止日期之后工作。

每个学生与其导师之间的信息流双方通常表示满意。这个缺乏沟通的项目正是那些产生最差结果的人。一般来说,导师并没有被他们的要求压倒学生们,甚至在一些情况下,项目都在运行实际上无人看管。这一事实证明了被招募入该项目的学生的能力。

Trac/SVN系统的使用程度有所不同。一些学生们经常更新,而其他人只是使用存储库为官方转储最终结果提交给谷歌。

公共传播问题

学生和导师有三种不同的公共信息交流论坛支持:

  • 增加公共列表,尤其是开发人员和用户列表。
  • 向所有学生和在Boost的Summer of Code工作的导师。
  • 一个更随意的谷歌集团,由学生,旨在为参与者提供一个位置用于社交和解决常见问题。

尽管资源丰富,但各方之间完全缺乏团体沟通参与其中,并在这些社区和更大的Boost社区之间。看起来,学生们对从事他们的活动感到满意仅仅依靠导师的支持。这个情况阻止了Boost成员丰富主动提供经验和见解可能导致学生产生错误印象,认为Boost从必需品开始以可预测的线性路径前进完成工作。当被问及他们没有参与时在公共交流中,学生们给出了模糊的理由可分为以下几类:

  • 怀疑被认为过于技术性或具体而不值得公开募捐。
  • 对完美主义的渴望分散了学生的提问兴趣或提交正在进行的工作,直到他们感觉到自己的材料看起来足够好了。
  • 害羞:一些学生可能缺乏有在公共场合交流的经验,大多数不是英语母语为英语的人,这也可能是一个限制因素。

尽管学生们没有确定以下原因很可能,他们中的许多人并不觉得需要随时与导师联系享受。很容易习惯这样一个专用的支持和忽视使用其他资源。导师应该鼓励学生追求公众项目讨论,这是提升知名品质。

项目范围

事后来看,很明显,大多数项目雄心勃勃,无法在三个月内完成课程的持续时间,甚至那些被视为成功需要数周或数月的磨练才能实现材料已准备好进行正式审查。与其他相比参加代码夏季计划的组织,在撰写本文时,Boost的代码库中没有包含任何结果。尚未要求对任何项目进行正式审查,两者都可以。

这些范围问题非常依赖于特定类型项目的。我们可以对年夏季的Boost项目进行分类代码如下:

  • 全功能图书馆,
  • 对现有Boost库的添加,
  • 使用Boost的实用程序和工具项目。

其中,添加(例如最大流量最小值Stephan Diederich的BGL算法)是最合适的在短时间内完成:大多数准备工作已经完成,学生已经清楚指导遵循哪些编码和文档标准。此外,这些项目不需要进行正式审查,因为托管库作者有责任审查并在她的自由裁量权范围内将其包括在内。公用事业项目虽然大多数项目都适用于小时间段提案和请求自然以捐款为导向Boost项目的实际代码。

对于那些涉及设计和实现的项目对于成熟的图书馆来说,目标几乎没有希望对于三个月的计划,范围可以保持适度。推动专业作者开发的候选库通常需要三个月以上的时间才能被接受;一些图书馆经历了几个阶段的发展在加入Boost之前。所以,我们能期望的最好的如果我们要支持实现图书馆项目代码Summer中的Boost是可以对该程序进行评估,以构成一个可行的潜在的对Boost的贡献。在这种情况下,至关重要的是,学生要致力于进一步研究直到项目完成和正式审查。也许更多与对库进行编码相比,重要的是吸引新的作者与Boost项目保持长期合作关系。

对的建议改进

以下建议旨在缓解一些我们在Summer开发过程中发现的问题Boost中的代码。这些动作点仅与发现与Boost相关的问题:我们没有解决与代码夏季相关的其他改进领域程序本身。

准备

在实际项目开始之前,可以做很多工作。这个已经可以启动以下准备活动:

为项目创建一个想法库。这个行动将为评估和在“代码之夏”开始之前完善想法。这个经验表明,这些项目需要更多的准备工作,尤其是设计领域的工作,最终更多成功。游泳池也可以用来保持有趣邮件列表中出现的想法,通常不是给予适当的关注并被抛弃。

创建学生池。之前的参与无论是在选择阶段,使用Boost都是一个优势以及项目开发的后期。那些学生非常有兴趣参加Boost代码夏令营可以进入人才库并开始探索想法和互动社区在夏季到来之前他们处于有利的选择地位。学生池的广告可以在2007年初通过常规渠道(网站和邮件列表):此外,Boost成员参与大学可以在当地传播此信息并帮助筹集学生对环境的兴趣。

创建导师库。考虑到哪个Boost进入了2006年夏季代码活动导师的邀请必须按需进行很明显,任务越来越大更大的。组织必须更好准备明年让几个有能力的人以及作为Boost导师参与的意愿前进。

准备启动包。为了促进初步熟悉各种Boost指南、协议和工具对于准备启动资料的汇编非常有用对于学生来说。此文件包可以由单个文件组成收集当前分散的信息,或超越并提供一些文档和预构建包工具,一个学生目前正在使用的方法正在工作。

公共传播

学生必须参与社区活动尽快成长,并欣赏关于单独编码的公共开发。

授权(双)周报告。这些报告应指向公共邮件列表,以允许所有Boost成员关注正在进行的工作并做出贡献。报告对以下学生有额外的好处迫使他们定期反思自己的工作努力完成通常困难的任务向他人传达想法。

通过公共渠道开展学生辅导频道。这可能是一项过激的政策,因为事情需要隐私,取决于可能会出现信息交换泛滥的问题。不太严重变化包括允许在导师的判断力,并将这种沟通转移到专用公共邮件列表不同于一般邮件列表个。

项目管理

在尊重方面需要改进的两个最重要的问题对管理层来说是:

  • 必须控制项目范围,
  • 进展必须公开,因此问题范围、设计和/或时间表可以更容易检测。

本节中的一些建议不予考虑作为严格的规则,而不是作为要遵守的一般准则学生的想法和导师的鼓励。

创建最佳实践文档。这个文件可以作为项目管理的指南Boost传统上不强加任何要求的领域。学生可能缺乏这方面的专业知识在传统模式中被视为理所当然的贡献Boost由专业程序员制作。

授权设计阶段。有混凝土项目早期的设计设置和明确描述将帮助估计完成工作所需的工作量。这也是一个公开讨论的机会。

并行维护代码、文档和测试。通常,新手程序员一下子就完成了编码然后才开始测试和记录他们的工作。这是所有现行方法标准所不能接受的,并且可能导致严重低估完成。

鼓励KISS原则。这太多了最好完成一个更简单的库,然后进行迭代进化一旦它被公开审查和使用。

更多Trac更新。存储库应该是被视为一种日常工作工具,不仅仅是在以转储最终结果。更新通常会带来更多导师和公众对工作的可见性概述。

非正式审查。典型的夏季官方不会完成Code Boost项目如前所述,截止日期。以某种方式正式完成规范夏季内完成的工作,以及也让学生达到某种心理里程碑,可以在Boost成员评估在夏季末完成的工作代码。

让学生参与进来。这一经验表明有可能引导有意愿且聪明的学生为推进做出贡献所需的能力水平。最好的“代码之夏”活动的可能结果是将新人纳入Boost活动圈贡献者。努力让学生致力于助推。

结论

尽管之前在Boost方面缺乏经验,但我们的参加谷歌代码夏令营的人数非常多成果丰硕:产生了许多有用的材料,也许更重要的是,一些学生可能会并成长为定期的助推贡献者。传统上,成为一名高效的Boost作者有一个非常由于极端的质量标准,缺乏高进入壁垒公众支持和项目的特定文化。规范本身的Summer的吸引力和被温柔地引导进入Boost的世界很可能是降低这一进入壁垒的关键因素。

这个过程也并非没有一些困难,因为这是一个新的组织作为Boost的期望。我们有试图在本文中确定改进的领域和建议具体行动,以便即将到来的谷歌夏季Code2007可能是一次更有价值的体验。

致谢

如果没有众多Boost学生和导师:非常感谢所有参与者分享他们的我的经历。也感谢谷歌的那些人促进并实施了准则夏季倡议。