20 юни, 2024

ИТ гуруто на CodeIT 2023/2024 за пътуването към успеха

Олександър Кулков, или “adamant”, е състезателен програмист от Запорожие, Украйна, и автор на над 60 задачи за състезателно програмиране. Участва в състезания по програмиране още от училище и продължава да го прави през университетските си години. Олександър е един от двамата активни автори на CP-Algorithms и част от основните организатори на международния Осиекски лагер за състезателно програмиране. Притежава опит в преподаването на алгоритми, структури от данни и формални езици на университетско ниво. Има и забележителен блог в Codeforces, като в един момент е станал автор номер 1 на сайта.

Олександър разкажи ни за ранния си интерес към състезателното програмиране и как започна?

Започнах със състезателно програмиране около 8 или 9 клас в училище. Харесвам математика и физика от много ранна възраст и участвах в местни олимпиади. Но също така много обичах компютрите! Предполагам, че всичко започна с възхищението ми от видеоигрите и желанието ми да ги разработвам, когато порасна. Записах се на курс, който ме учеше да програмирам на C++ и това ми хареса толкова много! Трудно е да се опише с думи, но идеята, че можеш да контролираш толкова мощна и многофункционална машина като компютър, като му даваш прецизни логически структурирани команди и степента на това колко много можеш да постигнеш, наистина ме впечатли.

След това, тъй като вече участвах в математически и физически олимпиади, се включих и в такива по информатика и наистина ми харесаха задачите в тях, а също така бях впечатлен от теорията на алгоритмите и структурите от данни. Училището ми тогава не беше особено силно в областта на информатиката, така че прекарах много време да се уча сам, основно решавайки задачи от предишни години и от местни архиви и четейки уроци от https://informatics.msk.ru. Това ми позволи да се изкача на национално ниво, където за първи път научих за Codeforces. Участието в състезанията на Codeforces тогава беше като ново начало за мен, тъй като всичко се издигна на съвсем ново ниво.

Кои са най-големите предизвикателства, с които си се сблъсквал по време на състезания, и как ги преодоля?

Най-голямото предизвикателство за мен беше психологическо. Обикновено, когато се състезавам, съм мотивиран предимно от вълнението. За мен това чувство в състезанията произтича от две неща:

– Да правя нещо, което ми харесва особено много.

– Да се откроявам сред останалите.

Това са два наистина лоши стимули, ако целта ви е да постигнете високи резултати в състезанията. Основната причина за това е, че под „открояване“ тук имам предвид да правя нещо необичайно, а не просто да постигна високо място. Така че, решаването на задача, която другите обикновено не решават, би ми донесло повече вълнение, отколкото решаването на същите задачи като всички останали и постигането на по-висок ранг от това.

А „да правя нещо, което особено ми харесва“ също означава, че ще бъда тясно насочен в подбора на „любими“ непопулярни теми (алгоритмични низове, геометрия и т.н.), докато съм посредствен във всички останали, особено в популярните, като динамично програмиране. И това би означавало също, че в реални състезания мога да се съсредоточа върху задачите, които „харесвам“, оставяйки по-лесни задачи, които „не харесвам“, неразгледани. О, и разбира се, това също ме направи нежелаещ да тренирам, тъй като го възприемах като предимно скучна и досадна дейност, която не е толкова вълнуваща.

Горната ситуация е малко по-малко проблематична с правилния състав на отбора, тъй като можете да опитате да оставите неблагоприятни задачи на вашите съотборници, докато се опитвате да решите някои по-трудни, които вашите съотборници може да са по-малко склонни да решат. Но дори и в такива сценарии това води до сериозен риск, който сериозните състезатели не са склонни да поемат. В крайна сметка това вероятно беше част от причините да не бях особено популярен като съотборник в университетските ми години.

Как го преодолях? Е, в някакъв смисъл не го преодолях, тъй като никога не успях да стигна до нито един от финалите на IOI или ICPC.

От друга страна, проблемите, причинени от тези фактори, ми създаваха огромен стрес и с годините се научих да приемам тази част от себе си и просто си позволих да продължа да правя това, което ми харесва и да избягвам да правя неща, които не ми харесват. Може би това не е най-добрият курс на действия, ако вашата цел е високо конкурентно представяне, но на мен ми помага да запазя вътрешния си мир и вярвам, че този подход ми позволява все още да се наслаждавам на състезателното програмиране и да го запазя като част от живота си. В същото време много хора, с които се състезавах и които ме побеждаваха в училище и университетските години, вече не са много активни в състезанията.

Като гросмайстор в Codeforces, кои стратегии и практики намираш за най-ефективни за добро представяне в състезанията?

Хаха, междувременно отново загубих гросмайсторския си ранг 🙂

Мисля, че общ съвет, който би бил полезен за мен самия, е да избягвам да зациклям върху опитването на един определен подход към дадена задача. Ако някога се окажете много назад от всички останали, това е силен индикатор, че общият ви подход към задачата е много далеч от замисления и сте пропуснали някакво просто наблюдение. Съветът за такива случаи би бил да поддържате няколко възможни посоки на решение и да ги изследвате едновременно, вместо да се фокусирате върху опитването на един конкретен подход.

За мен лично това е трудно и все още се боря да избягвам да се вглъбя в опитите да направя едно и също нещо отново и отново, надявайки се, че този път, в тази формулировка, ще проработи. Не, никога не работи, просто трябва да разтоварите главата си и да тръгнете в посока, която не сте обмислили напълно. Това, разбира се, е много по-лесно да се каже, отколкото да се направи.

Какво те мотивира да станеш един от основните организатори на Osijek Competitive Programming Camp?

Когато бях студент, участвах много в лагери за състезателно програмиране и това беше едно от най-завладяващите преживявания в целия ми живот. Дори продължих да се опитвам да се присъединя към хора, които познавам онлайн, за да продължа да участвам в лагерите в Петрозаводск, след като завърших. Взех участие поне два пъти, но от 2022 г., когато Русия започна инвазия срещу Украйна, наистина не исках да имам никакви икономически отношения с руски държавни институции, като например Петрозаводския университет. Реших, че може би не съм единствен с това разсъждение, но в същото време много ми харесваше форматът на лагерите по програмиране, така че споделих идеята в сървър за състезателно програмиране в Discord, и така намерих съорганизатор. Намерих човек с връзки в потенциален университет домакин и успяхме да го осъществим.

Опиши ни целите и структурата на Osijek Competitive Programming Camp.

Аз и Техвенд Уусталу, сме в основата на организацията на лагера. Обикновено имаме и подкрепа от университет домакин (например те често управляват плащанията и организацията на сайта за нас). Освен това, за всеки лагер разполагаме с екип от автори, разпределени по 7 различни състезания, които се променят за всеки лагер. Обикновено се обръщаме към потенциални автори на платформи за състезателно програмиране, като Codeforces и различни Discord сървъри, свързани с програмирането. Работим и с различни спонсори, които ни предоставят средства.

Що се отнася до нашите цели, описах основната си първоначална мотивация по-горе, но на по-широко ниво има няколко неща, които искаме да постигнем:

– Искаме да предоставим качествено изживяване на нашите участници. Тъй като самите ние сме участвали в много лагери, обикновено имаме добро разбиране за това, което сме харесали и намерили за полезно в тях и онова, което не сме харесали. Така се опитваме да оформим лагера в съответствие с тази визия, разбира се, вземайки предвид обратната връзка от нашите участници.

– Искаме да запазим лагера достъпен за широката публика. Мисля, че много лагери в региона имаха проблеми с това по един или друг начин, например, като поставят големи такси за участие или участието е само чрез покана. В OCPC поддържаме лагера отворен за всеки, който иска да участва, и се стремим да поддържаме таксите за участие на разумно и достъпно ниво, така че студентите да могат да участват, дори ако нямат университет-спонсор, който да покрие таксата.

– Искаме нашият лагер да бъде платформа за авторите на задачи, които да покажат своите оригинални идеи и да бъдат достойно компенсирани за това. От самото начало на лагера решихме, че компенсацията на авторите ще бъде наш приоритет. И за мен лично това не е само за да привлечем повече автори (макар че това, разбира се, е желан резултат), но и да отдадем нужното уважение, тъй като подготовката на състезания на ниво ICPC е много трудна и взискателна. В същото време се придържаме към духа на лагера в Петрозаводск, като предлагаме на авторите голяма свобода в това как искат да оформят своето състезание. Доверяваме се на авторите да използват най-добрата си преценка и досега вярваме, че това е от полза за лагера, дори когато отделните състезания се оказват малко по-различни от стандартните.

Като специален гост на предстоящото състезание по програмиране CodeIT, какво най-много очакваш с нетърпение?

Не съм много запознат със състезанията от типа маратон, въпреки че участвах в няколко, докато бях в университета. Малко съм притеснен, защото не бях много добър в тях и обикновено бях по-добър в по-стандартните алгоритмични предизвикателства, но е хубаво да излезеш от зоната си на комфорт от време на време, така че искам да видя какво ще бъде предизвикателството и какви стратегии ще използват всички, за да го решат 🙂

Какво послание или съвет би дал на участниците в CodeIT?

Не се страхувайте да излизате от зоната си на комфорт и да изследвате неща, които никога не сте си мислили, че ще изследвате!

Как виждаш бъдещето на състезателното програмиране? Каква ще  е ролята му в бъдеще?

Мисля, че има определена тенденция в състезателното програмиране да се фокусира повече върху ad-hoc задачи и да избягва задачи, които могат да облагодетелстват тези, които са добри в имплементация или имат много напреднали компютърни знания. Въпреки че е логично стиловете на задачи да се променят заедно с общността, лично аз не съм голям фен на промяната, тъй като обикновено ми харесват задачите, в които можете да придобиете или използвате някакви систематични знания за темата на задачата.

От моя страна се надявам, че като не сме много рестриктивни в стиловете на задачи за лагера в Осиек, ще помогнем на хората да си спомнят, че добрите задачи идват във всякакви форми и размери, не непременно в строгото съответствие с текущите трендове в състезателното програмиране 🙂

Още любопитно от CodeIT:

От Състезанията по Информатика до MIT – Формулата за Успех на Румен Христов

Екипът на CodeIT 2024 за Конкурса и Пътешествието в Света на Програмирането

Таланти от България и Сърбия на Върха след 5 Кръг на CodeIT

Душко Обрадович: Сплотена ИТ Общност на Балканите – Мисия за Цял Живот


ГЛЕДАЙТЕ: Къде Инвестират ИТ Специалистите? Успешните Стратегии – Част 1

ГЛЕДАЙТЕ: Къде Инвестират ИТ Специалистите? Успешните Стратегии – Част 2

ГЛЕДАЙТЕ: ИТ Индустрията във Варна – част 2 | Епизод 2 | The BIG TECH #BG | DevStyleR

Тагове: , , , , , , , , , , , , , , , , , ,