我們如何以及為何贏得城市科技挑戰黑客馬拉松大數據賽道

我的名字是德米特里。我想談談我們的團隊如何進入城市科技挑戰黑客馬拉松大數據賽道的決賽。我馬上說,這不是我第一次參加黑客馬拉松,也不是我第一次得獎。在這方面,在我的故事中,我想表達一些關於整個黑客馬拉松行業的一般性觀察和結論,並給出我的觀點,而不是城市科技挑戰賽結束後立即出現在網上的負面評論(對於例子 ).

首先是一些一般性觀察。

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(我們在黑客鬆上解決的問題的作者),當然還有黑客鬆的組織者。這可能是我參加過的最大規模、最酷的黑客馬拉鬆了,我只能祝福他們在未來保持如此高的水平!

來源: www.habr.com

添加評論