
在不断努力提高软件开发效率的过程中,不仅关注 无服务器计算 ,优化敏捷工作流以及 创建以开发人员为中心的文化 。 科学家们暗示着我们不应忽视程序员搜索外部在线信息的(低效)方式。
首先让我们从定量的角度探讨这个主题:开发人员花了多少时间进行在线搜索? 我们以杭州,温哥华,金斯敦,新加坡和堪培拉的大学计算机科学系的研究人员最近的研究为起点。 他们的论文“ 开发人员在网上搜索什么? 回顾了两周来自动跟踪外包公司Insigma Global Services和横天的60位软件开发人员的计算机活动。
就此而言:Insigma拥有约500名员工,并为中国网络巨头阿里巴巴和百度完成了项目。 横天公司大约有2000名员工,为美国和欧洲公司(例如道富银行和思科)开发软件。 两者都主要具有熟练掌握Java,.NET和C / C ++的开发人员,并且这些员工平均拥有3.3年的IT经验。
花时间
计算机活动跟踪显示,Insigma和Hengtian的开发人员每天在在线搜索上花费的百分比为15%。 其中一位甚至将35%的时间用于在线搜索,但她解释说她刚大学毕业,并花了很多时间在线搜索用于项目的技术介绍。
研究人员发现,平均而言,开发人员每天在计算机后面工作五个小时。 这意味着,总的来说,他们将每天45分钟的工作时间专用于搜索引擎。

如图2所示,大多数Insigma和Hengtian的开发人员在两周内执行了100-500个查询。 每个工作日可减少10到50个查询,每天在半小时到一小时内执行。

当然,开发人员每天花在在线搜索上的时间会有差异。 研究人员是否正在评估拥有许多经验丰富或初级开发人员的公司? 开发人员是在项目基础上工作还是长期专注于一个平台? 有很多变量可能会影响花费的时间。
例如,去年的“开发人员行为模式:一项1000小时的工业研究”研究追踪了一家公司中的C ++开发人员,他们开发用于控制制造业和农业行业机械设备的实时应用程序。 他们估计,程序员每天只花10分钟进行在线搜索。 但是开发人员,公司类型,项目和参与者的数量都很少:六个程序员。
让我们基于确实试图捕获公分母的研究进行估算。 最近的一项名为“ 开发人员的工作生活:活动,转换和感知的生产力 ”的研究采用了更加平衡的方法,并使用不同类型的编程语言和不同方法,监视了来自四个不同规模,不同地点和项目阶段的不同公司的开发人员。各种产品和客户。 它得出的结论是,开发人员平均每天八个工作时间的11.4%用于与工作相关的浏览。
换句话说,在这种情况下,结果表明开发人员每天花费54分钟进行在线搜索。 考虑到开发人员通常每天可以在计算机后面有效工作五个小时,因此这是相当长的时间。

输出
当相对安全地得出结论,相当数量的开发人员每天花费45至60分钟进行在线搜索时,我们还应该评估其查询的输出是否达到期望的质量水平。
首先让我们总结一下为什么程序员使用搜索引擎。 “ 开发人员在网上搜索什么的背后的分析师? 得出的结论是,大多数查询与以下内容有关:
- 术语解释,例如关于PaaS,SaaS和区块链的解释
- 有关使用新的(一种功能)编程语言的说明
- 来自第三方的可重用代码段
在“ 开发人员如何搜索代码? “案例研究 ”,爱荷华州和内布拉斯加州大学的工作人员报告了大约27位Google开发人员在搜索代码,结论是他们搜索示例的工作比其他任何事情都要多。 这是关于获取案例示例和/或示例代码。
此外,根据’ 开发人员在网上搜索什么? ”,其中很大一部分与以下内容有关:
- (如何使用)第三方库/服务/ API
- 了解项目的目的和范围,例如与“退休金”或“股票交易流程”的软件相关的作业
- 最佳实践,例如关于“项目的架构”或“将编程解决方案与替代解决方案进行比较”
- 某些异常/错误消息的说明
- 常见编程和配置错误的软件解决方案
- 如何使用操作系统命令行界面的示例和指南
- 有关如何形成SQL语句的示例和指南
- 数据库优化解决方案
- 记住句法细节
谷歌
这些观察结果表明,与代码相关的搜索显然是程序员的首要任务。 当然,这很有道理。 毫无疑问,开发人员在哪里进行此代码搜索:Google。 为了满足在线代码搜索日益增长的需求,过去已经建立了几种商业搜索引擎,例如Google Code Search和Black Duck Open Hub Code Search。 但是它们现在已经过时了。 程序员大量转向通用引擎,到目前为止,谷歌是最常用的引擎。
从这个角度出发,一份名为“ 评估开发人员如何使用通用Web搜索进行代码检索的评估”的科学报告向我们表明,与代码相关的谷歌搜索所花费的时间是与非代码相关的谷歌搜索所花费的时间的两倍。 来自Codealike以及弗吉尼亚,北卡罗来纳州和克莱姆森大学的科学家评估了310位程序员的149,610条查询,发现完成代码搜索任务的时间约为2分53秒。 要完成一个非代码搜索任务,他们花了1分35秒。
因此,相对而言,搜寻代码的软件开发人员必须付出很多努力才能找到所需的结果。 与非代码搜索相比,该过程需要更多的时间,点击结果以及查询修改。 这有点奇怪,因为研究还表明,搜索代码属性的开发人员不太可能点击结果。 他们只是复制出现在其中一个Google搜索页面上的代码。
因此,尽管Google正在自定义搜索结果,但它并未针对软件开发人员来个性化搜索结果。 程序员可以从Google推断其代码历史中优先考虑结果中受益。 如果Google通过例如提供更多操作员或意识到他们当前正在使用的其他工具来了解他们的需求,则可能会为开发人员提供更好的服务。 但是目前,Google仅在内部为自己的程序员服务,从而简化了对代码的搜索。
更好的代码搜索引擎
在“ 开发人员在网上搜索什么? ”(其中还包括对软件开发人员的采访),有关Google代码搜索性能的烦恼非常明显。 程序员向搜索巨头提供了一些建议:
“ Google显然并不总是能够很好地处理代码,例如下划线等。如果它停止自动更正代码,或者如果您可以在URL后面附加某些内容,这将非常有用。”
“在搜索查询中允许使用特殊字符! 当我搜索C ++时,请不要在它后面有两个空格的情况下搜索C!”
“允许我通过编写代码表达式来搜索全球所有开放源代码。 请允许我在所有代码存储库中搜索一个简单的文本框。 请允许我搜索古怪的符号以及按字面意义对待它们的运算符。 显示良好的代码搜索结果,优先处理在语义上有意义的事情,如果在存储库中搜索方法名称,请给我显示方法定义,而不是用法。”
“改进了在线搜索代码的工具。 所有软件托管站点(例如GitHub / Atlassian Bitbucket / grepcode / etc)的搜索代码工具都非常差。 如果代码是在线托管的,则提供一种直接从堆栈跟踪跳转到匹配代码(相同的修订版本/文件/行号)的方法。提供在线代码浏览器中“跳转到定义”的工具。 基本上使在线代码像在IDE中一样易于浏览。”
参与者还发现很难找到公开的数据集来测试新开发的算法或系统,因为Google无法找到特定领域的数据集。
根据评论,对开发人员友好的Web搜索引擎应:
- 支持与软件工程(SE)相关的符号和术语的网页搜索,
- 允许开发人员指定搜索结果应源自代码存储库和SE相关网站,
- 将搜索功能集成到IDE中,以及
- 通过考虑搜索结果相对于开发人员所处的特定上下文的语义含义来确定优先级。
- 了解软件工程术语和特定领域的概念,以便它可以识别有用的软件信息站点,并优先考虑这些站点的结果。
Google当然知道这些挑战。 在“ 开发人员如何搜索代码? 在涉及Google程序员自己的案例研究中 ,搜索公司获得了以下建议:
1. Google应该专注于开发者的问题
“它应该基于提出的问题以及开发人员如何提出问题来着重理解。 Google还应该利用代码库元数据,例如构建依赖关系,所涉及的开发人员,文件和工作流权限,执行的测试以及相关的评论注释,因为搜索过程中提出的许多问题都包含此类信息。”
2.提供简单的代码示例
强烈希望找到代码示例,例如说明API的用法。 为了减少搜索会话的时间并保持开发人员的生产力,这些示例应尽量少用,并举例说明常用用法。 将API使用模式的使用频率集成到排名算法或其大小中,可以帮助开发人员更快地找到所需的信息。”
3.考虑代码位置
“诸如-file:运算符之类的查询功能有助于支持搜索范围的规范,但是其他运算符可以例如帮助将搜索范围限定为特定开发人员或开发人员组(-dev :)涉及的代码。 工具还应该根据搜索历史和最近接触的文件来预测开发人员的所在地需求,以更好地对匹配进行排名。”
4.考虑更丰富的背景
“搜索模式因活动而异。 认识与不同活动相关的上下文元素(例如,打开的应用程序,最近的通信)的工具可能会更有效。 例如,如果开发人员使用审阅和错误跟踪工具,则搜索工具可以将显示代码更改的匹配项放在优先位置。”
5.考虑将代码搜索集成到开发环境中
由于搜索会话仅持续几分钟,并且每个会话少量查询,因此在开发或代码审查环境与搜索工具之间切换上下文的时间变得占主导地位。 将代码搜索集成到开发环境中可以减少开销。
也许是关于不使用Google
在我们首先讨论的报告“ 开发人员在网络上搜索什么 ?”结尾时,一个引人注目的结果是,实际上63%(!)的搜索查询最终都访问了Stack Overflow,这是每个程序员都知道的问答网站。关于。 如果是这样,为什么我们不从头开始在Stack Overflow上开始搜索呢?
在与我们的一位同事编程员交谈时,他声称Stack Overflow的搜索引擎“只是sks”。 所以这就是为什么他仍然喜欢在他的Google查询中包括site:stackoverflow.com。 尽管Stack Overflow的搜索引擎使用了Elastic,这是一家快速发展且广受赞誉的公司,最近刚进行了IPO。 Elastic宣传自己是Google Site Search的自然替代品,提供了自助服务软件,可实时,大规模地使用数据进行搜索和记录。
还是会让我们沉迷于Google? 最近,我们的一位软件开发人员不得不承认,她甚至不真正知道Stack Overflow主页的样子,因为他们非常习惯通过Google搜索查询来访问该网站。 除了一个声称使用DuckDuckGo进行私人搜索的组织之外,程序员是否还陷入Google的弹性例程中?
新解决方案
在科学的背景下,您会发现满足开发人员搜索需求的新尝试。 以最近发布的工具FaCoY为例,这是一个搜索引擎,可以接受用户的代码片段并推荐在目标代码库中找到的类似代码片段。 FaCoY基于查询修改:在生成对输入片段中的结构代码元素进行汇总的代码查询后,它使用StackOverflow和GitHub数据查找具有相似描述但具有可变性的代码段。 FaCoY使用这些变体实现来生成备用代码查询。
更新:周三,GitHub Engineering推出了其新的语义代码搜索工具,该工具仍处于测试阶段。