解锁您的软件工程师与Unblocked

解锁软件工程师的时尚与Unblocked

开发人员花费数周甚至数月时间在新公司进行入职培训。熟悉新的代码库需要时间。在此期间,开发人员会有很多问题(他们应该有的)!然而,这些问题会打断其他团队成员的工作,他们必须停下手头的工作来提供答案。

大多数工程组织都面临一个难题,即如何确保新的开发人员获得他们所需的支持,同时不会对整个团队的工作速度产生太大影响。

文档化的文化是朝着正确方向迈出的一大步。然而,这些文档通常分散在Slack消息、Notion和Confluence维基、GitHub拉取请求和Jira工单中。如何在这些无尽的信息海洋中成功导航呢?

一家名为“Unblocked”的人工智能初创公司正在试图解决这个问题。他们创建了一个类似于聊天机器人的界面,您可以在其中提问并得到答案,而不会打扰其他人。最重要的是,Unblocked可以连接到您公司使用的所有数据源,因此答案是基于您实际的公司资源而定制的,而不是泛泛的建议。

我最近尝试了Unblocked,以查看它对像我这样的人能够提供多大的帮助。在本文中,我们将看一下一些例子场景,我提出的问题以及我收到的答案。

我们将探讨三个常见的信息搜索类别:

  1. 了解新代码库的总体架构
  2. 尝试理解一个功能是如何工作的
  3. 故障排查和修复漏洞

准备好解除阻塞了吗?

示例存储库

为了使用Unblocked来处理我目前雇主的数据,我需要通过我们的安全流程并获得许可。Unblocked符合SOC 2标准并隔离客户数据。现在,我决定使用我的个人项目来试用Unblocked,以了解其能力。

我找到了我大学时代的一个最大的存储库。这个存储库包含了我在整个计算机科学课程中工作的几十个项目。我很久没有再看过这些项目了。如果你和我一样,你可能已经忘记了你前几个月甚至几个月前工作过的代码的细节,所以回到这个存储库感觉很像重新入职!

你可以在GitHub上找到我们将要使用的完整存储库。 (请不要对代码质量太苛刻。那是我第一次学习!)

场景一:你能给我总体介绍代码库吗?

当我重新熟悉这个旧存储库中的一些项目时,我向Unblocked询问了关于我的存储库的问题。

我开始问一个非常笼统的问题:“这个应用程序做什么?”

Unblocked回答说,这个存储库包含许多不同的项目。它甚至向我描述了其中一些项目。它知道我有关于宠物领养、摄影、健身和电影流媒体的应用程序。它还准确地识别出我的一个应用程序是一个基于Web的游戏。

“这个应用程序做什么?”的问题和答案

我们的进展非常顺利。我问了第二个问题:“这个存储库使用了哪些语言、库或框架?”

Unblocked列出了我在主要的个人项目文件中列出的许多工具。它正确指出每个项目使用了不同的技术。您可以在屏幕截图底部看到Unblocked引用了它的信息来源,以便您知道这些信息来自哪里。

“这个存储库使用了哪些语言、库或框架?”的问题和答案

场景二:这个东西是如何工作的?

好了,对我来说这已经足够好了。接下来,我问了一个关于我的一个项目特定问题:一个使用jQuery构建的四子棋游戏。

请记住,此次试用的目的是看看我如何在日常工作中使用Unblocked。因此,我想象自己是一个在新的代码库上进行入职培训并在这个游戏上工作的开发人员。我对游戏的工作方式有一个问题。我决定不去打扰我的同事,而是问了Unblocked。

我想确定在我的游戏中没有机会让玩家作弊。我问:“在ConnectFour应用程序中,玩家是否可以连续放两个棋子而无需等待对方轮到自己?”

Unblocked的回答令人印象深刻。它能够引用一个特定的代码片段,展示了游戏中的轮流操作行为。

“在ConnectFour应用程序中,玩家是否可以连续放两个棋子而无需等待对方轮到自己”的问题和答案如下:

然而,我并不相信玩家不能找到一些作弊的方式。我问了一个跟进问题:“如果有人在动画结束之前快速点击按钮两次,他们能作弊并同时放两个棋子吗?”

Unblocked的回答再次令我印象深刻。它突出了另一个代码片段,展示了我如何禁用点击事件处理程序,以防止有人点击两次同时放两个棋子。

它甚至还找到了一个已关闭的GitHub问题,提到了类似的可能问题,但向我保证此问题已得到解决。

“如果有人在动画结束之前快速点击按钮两次,他们能作弊并同时放两个棋子吗”的问题和答案如下:

第三场景:你能帮我修复这个错误吗?

让我们换个角度,考虑另一种情景。假设我在一个新的代码库中工作,需要帮助修复一个错误。我可能会向同事寻求帮助,但这似乎也是Unblocked可以帮助的事情。

在接下来的几个问题中,我提到了一个名为Pixel Mania的多人游戏,这是多年前我作为毕业项目之一开发的。该游戏使用JavaScript构建,并使用Web套接字来进行对等通信。在游戏中,每个玩家都是一个小点。他们在屏幕上移动,吃食物以增长体型。玩家还可以互相吃掉。他们必须在避开将使体型缩小一半的障碍物的同时进行这些操作。

这个游戏在有两到四名玩家在线时运行得非常好。但是,当玩家数量增多时,游戏开始出现延迟。

在这种情况下,假设我是一个在这个项目上工作的开发人员,注意到了这些性能问题,我需要一些帮助。我应该问谁?当然是Unblocked!

我的第一个问题是:“在PixelMania中,当有很多玩家玩的时候,我遇到了性能问题。为什么会这样?”

Unblocked给出了一些初始的想法。游戏管理所有玩家、食物和球的位置信息。Unblocked推测随着物品数量增加,操作将花费更长时间。

顺便说一下,这是正确的。游戏中的许多操作都涉及到遍历所有物品,寻找碰撞以确定您是否吃到了食物,吃掉了其他玩家或被球碰到。从大O符号的角度来思考,这些操作至少需要O(n)的时间。

然后,Unblocked建议可以通过使用“诸如限制更新速率、使用增量压缩进行更新或实现区域管理系统,使客户端只接收附近物体的更新”等技术来实现一些可能的优化。

“在PixelMania中,当有很多玩家玩的时候,我遇到了性能问题。为什么会这样”的问题和答案如下:

Unblocked的好处是你可以与它进行对话,就像ChatGPT一样。我有后续问题,想把这个当作一次双人编程的头脑风暴会话。

我问:“你能详细解释一下你提出的优化技术吗?”

Unblocked详细介绍了它的五个建议:

  • 限制更新速率
  • 增量压缩
  • 区域管理
  • 空间划分
  • 优化数据结构

“你能详细解释一下你提出的优化技术吗”的问题和答案如下:

我想进一步了解。我问:“空间划分听起来对我来说是一种不错的方法。你能给我一些建议,告诉我如何在PixelMania中实现它吗?”

它给了我更详细的建议!请注意,这不仅仅是关于空间划分的通用信息,还将建议应用到我应用程序的特定文件上,比如game.jsPlayer.js

关于“空间分割听起来对我来说是一个不错的方法。你能给我一些建议,我要如何在PixelMania中实现它?”的问题和答案

之后,我对我使用的数据结构提出了一个问题:“你还提到了优化数据结构。PixelMania中是否有使用效率低下或错误的数据结构,可以进行优化?”

Unblocked回答了我对设计选择的一些具体实例,并强调了一些潜在的缺点。我的许多操作都是以O(n)的时间完成的,可能我可以使用不同的数据结构并更好地利用对象以实现O(1)的时间。这有可能改善一些性能问题。

关于“你还提到了优化数据结构。PixelMania中是否有使用效率低下或错误的数据结构,可以进行优化?”的问题和答案

到现在,我对下一步该做什么已经有了一个很好的想法。如果我在工作中处理这个问题,我将能够很好地开始对代码进行改变。

结论

在问问题和自力更生之间找到适当的平衡是困难的。打断会导致上下文切换,并且可能会浪费时间。我们都希望帮助同事,但我们也需要保护自己的时间。

人工智能在我们作为开发人员的领域中扮演着越来越重要的角色,它有能力以我们从未见过的方式显着提高我们的生产力。

Unblocked就是其中之一。通过使开发人员更容易自行找到问题的答案,Unblocked使我们能够在需要时获得我们所需的正确帮助。