我们如何以及为何赢得城市科技挑战赛黑客马拉松大数据赛道

我的名字是德米特里。 我想谈谈我们的团队如何进入城市科技挑战赛黑客马拉松大数据赛道的决赛。 我马上说,这不是我第一次参加黑客马拉松,也不是我第一次获奖。 在这方面,在我的故事中,我想表达一些关于整个黑客马拉松行业的一般性观察和结论,并给出我的观点,而不是城市科技挑战赛结束后立即出现在网上的负面评论(对于例子 ).

首先是一些一般性观察。

1. 令人惊讶的是,相当多的人天真地认为黑客马拉松是某种体育比赛,最好的程序员会获胜。 这是错误的。 我不会考虑黑客马拉松组织者自己不知道自己想要什么的情况(我也见过这种情况)。 但是,通常来说,组织黑客马拉松的公司都会追求自己的目标。 他们的清单可能有所不同:可能是某些问题的技术解决方案、对新想法和新人的搜索等。 这些目标通常决定活动的形式、时间安排、线上/线下、如何制定任务(以及是否制定任务)、黑客马拉松中是否会有代码审查等。 无论是团队还是他们所做的事情都是从这个角度来评估的。 而那些最能达到公司需要的点的团队就会获胜,而许多人完全是在无意识和偶然的情况下达到这一点,认为他们真的是在参加一场体育比赛。 我的观察表明,为了激励参与者,组织者至少应该创造一个体育环境和平等条件的表象,否则他们会收到一波负面情绪,正如上面的评论。 但我们离题了。

2. 由此得出以下结论。 主办方对参赛者带着自己的作品来参加黑客马拉松很感兴趣,有时甚至为此专门组织了一个在线通信阶段。 这允许更强的输出解决方案。 “自己的工作”的概念是一个非常相对的概念;任何有经验的开发人员都可以在第一次提交时从他的旧项目中积累数千行代码。 这会是一个预先准备好的发展吗? 但无论如何,这条规则都适用,我用一个著名的模因的形式表达了这一点:

我们如何以及为何赢得城市科技挑战赛黑客马拉松大数据赛道

为了获胜,你必须拥有某种东西,某种竞争优势:你过去做过的类似项目,特定主题的知识和经验,或者在黑客马拉松开始之前完成的现成工作。 是的,这不是体育运动。 是的,这可能不值得付出努力(这里,每个人自己决定是否值得为了 3 万的奖金而在晚上编码 100 周,由整个团队分配,甚至冒着得不到的风险)。 但是,通常这是取得成功的唯一机会。

3.团队选择。 正如我在黑客马拉松聊天中注意到的那样,许多人非常轻率地处理这个问题(尽管这是决定你在黑客马拉松中的结果的最重要的决定)。 在许多活动领域(无论是体育运动还是黑客马拉松),我都看到强者倾向于与强者联合,弱者与弱者联合,聪明人与聪明人联合,嗯,总的来说,你明白了……这大致就是聊天中发生的情况:能力较差的程序员会立即被抢购一空,而没有任何对黑客马拉松有价值的技能的人会在聊天中停留很长时间,并根据“只要有人愿意接受”的原则来选择团队。 在一些黑客马拉松中,实行随机分配团队的做法,组织者声称随机团队的表现并不比现有团队差。 但根据我的观察,有动力的人通常会自己找到一个团队;如果必须指派某人,那么通常他们中的许多人不会来参加黑客马拉松。

至于团队的组成,这是非常个人化的,并且高度依赖于任务。 我可以说,最小可行的团队组成是设计师 - 前端或前端 - 后端。 但我也知道一些案例,仅由前端组成的团队获胜,他们在 Node.js 中添加了一个简单的后端,或者在 React Native 中制作了一个移动应用程序; 或者仅来自进行简单布局的后端。 一般来说,一切都是非常个人化的,取决于任务。 我为这次黑客马拉松选择团队的计划是这样的:我打算组建一个团队或者加入前端-后端-设计师这样的团队(我自己就是前端)。 很快我就开始与一位 Python 后台人员和一位接受邀请加入我们的设计师聊天。 过了一会儿,一个女孩,一个商业分析师,已经有赢得黑客马拉松的经验,加入了我们,这就决定了她加入我们的问题。 经过短暂的会议,我们决定将自己称为U4(URBAN 4,城市四人组),以类比神奇四侠。 他们甚至在我们的电报频道的头像上放了相应的图片。

4. 选择任务。 正如我已经说过的,你必须有竞争优势,黑客马拉松的任务就是根据这个来选择的。 基于此,查看了 任务列表 评估其复杂性后,我们确定了两项任务:DPiIR 的创新企业目录和 EFKO 的聊天机器人。 DPIiR 的任务是由后端选择的,EFKO 的任务是我选择的,因为拥有在 Node.js 和 DialogFlow 中编写聊天机器人的经验。 EFKO 任务也涉及 ML;我在 ML 方面有一些但不是很广泛的经验。 根据问题的情况,在我看来,使用机器学习工具不太可能解决这个问题。 当我参加 Urban Tech Challenge 聚会时,这种感觉更加强烈,组织者向我展示了 EFKO 上的一个数据集,其中有大约 100 张产品布局照片(从不同角度拍摄)和大约 20 类布局错误。 与此同时,那些订购该任务的人希望分类成功率达到 90%。 因此,我准备了一份没有 ML 的解决方案的演示文稿,后端程序根据目录准备了一份演示文稿,在完成演示文稿后,我们一起将它们发送到了城市技术挑战赛。 在这个阶段,每个参与者的动机和贡献水平已经显现出来。 我们的设计师没有参与讨论,回复晚了,甚至在最后一刻才在演示中填写了自己的信息,总体上引起了质疑。

结果,我们通过了 DPiIR 的任务,并且并没有因为没有通过 EFKO 而感到沮丧,因为委婉地说,这个任务对我们来说似乎很奇怪。

5. 准备黑客马拉松。 当终于得知我们获得了黑客马拉松的参赛资格后,我们就开始做准备工作。 在这里我并不是提倡在黑客马拉松开始前一周开始编写代码。 至少,您应该准备好一个样板,使用它您可以立即开始工作,而无需配置工具,也不会遇到您决定在黑客马拉松中首次尝试的某些库的错误。 我知道一个关于 Angular 工程师的故事,他们参加了一次黑客马拉松,花了 2 天的时间来建立项目,所以一切都应该提前准备好。 我们打算这样分配职责:后端编写爬虫来搜索互联网并将所有收集到的信息放入数据库中,而我在node.js中编写一个API来查询该数据库并将数据发送到前端。 对此,我提前使用express.js准备了服务器,并在react中准备了前端。 我不使用 CRA,我总是为自己定制 webpack,并且我非常清楚这可能会带来什么风险(还记得有关 Angular 开发人员的故事)。 此时,我向我们的设计师请求了界面模板或至少是模型,以便了解我要布局的内容。 理论上他也应该做好自己的准备并与我们协调,但我一直没有得到答复。 结果,我借用了我以前的一个项目的设计。 而且它开始工作得更快,因为这个项目的所有样式都已经写好了。 因此得出结论:团队中并不总是需要设计师)))。 我们带着这些进展来到了黑客马拉松。

6.参加黑客马拉松。 我第一次看到我的团队现场直播是在中央配送中心的黑客马拉松开幕式上。 我们会面,讨论了解决方案和解决问题的阶段。 尽管开幕后我们必须乘公共汽车去红色十月,但我们还是回家睡觉,并同意在 9.00 点之前到达那个地方。 为什么? 主办方显然是想充分发挥参赛者的积极性,所以就安排了这样的日程。 但是,根据我的经验,你可以正常编码一晚上不睡觉。 至于第二个,我就不太确定了。 黑客马拉松是一场马拉松,你需要充分计算和规划自己的实力。 而且,我们也有准备。

我们如何以及为何赢得城市科技挑战赛黑客马拉松大数据赛道

于是,睡了一觉后,九点钟我们就坐在了德沃政的六楼。 然后我们的设计师出人意料地宣布他没有笔记本电脑,他要在家工作,我们通过电话沟通。 这是最后一根稻草。 所以我们从四队变成了三队,尽管我们没有改变队名。 再说一次,这对我们来说并不是一个很大的打击;我已经有了旧项目的设计。 总的来说,一开始一切都按计划进行得很顺利。 我们将组织者提供的创新公司数据集加载到数据库中(我们决定使用 neo9.00j)。 我开始排版,然后开始使用 Node.js,然后事情开始失败。 我以前从未使用过 Neo4j,起初我正在寻找这个数据库的工作驱动程序,然后我想出了如何编写查询,然后我惊讶地发现这个数据库在查询时返回实体节点对象及其边的数组的形式。 那些。 当我通过 TIN 请求一个组织及其所有数据(而不是一个组织对象)时,我返回的是一长串对象,其中包含有关该组织的数据以及它们之间的关系。 我编写了一个映射器,它遍历整个数组并根据其组织将所有对象粘合到一个对象中。 但在战斗中,当请求4个组织的数据库时,执行速度极其缓慢,大约需要8-20秒。 我开始考虑优化...然后我们及时停下来并切换到MongoDB,我们花了大约30分钟。 Neo30j 总共损失了大约 4 个小时。

记住,永远不要带着你不熟悉的技术去参加黑客马拉松,可能会有惊喜。 但总的来说,除了这次失败之外,一切都按计划进行。 9 月 XNUMX 日早上,我们就已经有了一个可以正常运行的应用程序。 在当天剩下的时间里,我们计划为其添加其他功能。 在未来,一切对我来说都相对顺利,但是后端在搜索引擎中禁止他的爬虫、在法人实体聚合器的垃圾邮件中遇到了一大堆问题,这些问题在请求时出现在搜索结果的第一位。对于每个特定的公司。 不过这件事还是他自己说比较好。 我添加的第一个附加功能是按全名搜索。 VKontakte 总经理。 花了几个小时。

因此,在我们应用程序的公司页面上,出现了总经理的头像、指向他的 VKontakte 页面的链接和一些其他数据。 这是锦上添花,尽管它可能没有给我们带来胜利。 然后,我想进行一些分析。 但经过长时间的选项搜索(用户界面有许多细微差别),我决定按经济活动代码对组织进行最简单的聚合。 晚上,在最后几个小时里,我正在布置一个用于显示创新产品的模板(在我们的应用程序中应该有一个“产品和服务”部分),尽管后端还没有为此做好准备。 与此同时,数据库突飞猛进,爬虫继续工作,后端尝试使用 NLP 来区分创新文本和非创新文本)))。 但最后的演讲时间已经临近了。

7. 演示。 根据我自己的经验,我可以说你应该在截止日期前大约 3 到 4 小时开始准备演示文稿。 尤其是涉及到视频的时候,拍摄和剪辑需要花费相当多的时间。 我们本来应该有一个视频。 我们有一个专门的人来处理这个问题,并解决了一些其他的组织问题。 在这方面,我们直到最后一刻才从编码中分心。

8. 推介。 我不喜欢演讲和决赛在单独的工作日(星期一)举行。 在这里,组织者极有可能继续实行最大限度地压榨参与者的政策。 我并没有打算请假,我只是想来参加决赛,尽管我的团队其他人都请了一天假。 然而,黑客马拉松的情感投入已经如此之高,以至于早上 8 点我在我的团队(工作团队,而不是黑客马拉松团队)的聊天中写道,我是自费度过这一天,然后去了中央球场办公室。 我们的问题原来有很多纯粹的数据科学家,这极大地影响了解决问题的方法。 许多人拥有一个好的 DS,但没有人拥有工作原型,许多人无法绕过搜索引擎中爬虫的禁令。 我们是唯一拥有工作原型的团队。 我们知道如何解决问题。 最终,我们赢得了赛道,尽管我们很幸运地选择了竞争最不激烈的任务。 看看其他赛道的球场,我们意识到我们在那里没有机会。 我还想说,我们对陪审团感到非常幸运;他们仔细地检查了代码。 而且,从评论来看,这并没有在所有曲目中发生。

9.决赛。 在我们多次被叫去陪审团进行代码审查之后,我们以为我们终于解决了所有问题,就去汉堡王吃午饭。 到了那里主办方又给我们打电话了,我们只好赶紧收拾东西回去。

组织者向我们展示了我们需要进入哪个房间,进入后,我们发现自己正在为获胜团队举办公开演讲培训课程。 本来应该在舞台上表演的人都精力充沛,每个人都像真正的表演者一样。

我必须承认,在决赛中,在其他赛道最强团队的背景下,我们显得苍白;政府客户提名的胜利理所当然地属于来自房地产科技赛道的团队。 我认为,促成我们在赛道上获胜的关键因素是:有现成的毛坯,因此我们能够快速制作原型,原型中存在“亮点”(寻找首席执行官)在社交网络上)以及我们后台的 NLP 技能,这也引起了评审团的极大兴趣。

我们如何以及为何赢得城市科技挑战赛黑客马拉松大数据赛道

最后,要感谢所有支持我们的人、我们赛道的评审团、Evgeniy Evgrafiev(我们在黑客松上解决的问题的作者),当然还有黑客松的组织者。 这可能是我参加过的最大规模、最酷的黑客马拉松了,我只能祝愿他们在未来保持如此高的水平!

来源: habr.com

添加评论