Често чета поредното компютърно списание и виждам поредната алгоритмична задача (най-често комбинаторика или някой NP сложен проблем) и се питам, за какъв дявол хората правят такива състезания, а пък други хора вземат участие в тях?
Няма да скрия, че програмирането е предимно хоби за мен. Никога не съм имал успехи в споменатите състезание, но за сметка на това винаги ме е учудвало каква е ползата да се участва в тях.
В един хубав ден, един мой преподавател ми обясни, че върхът на алгоритмичните задачи е в динамичното програмиране. Там се използва определена рекурентна зависимост (най-трудният момент от решението), на база на която се спестяват голяма част повторни изчисления. Въпреки завидните способности на моя преподавател аз така и не разбрах как мога правилно да съставям тази зависимост и да я прилагам за задачи, които не сме разглеждали в час.
Но дали програмирането е само алгоритми и дали състезанията по програмиране трябва да акцентират върху детерминистични задачи, за които е известно, че съществува оптимално решение? Не съм съвсем убеден! Реших да разгледам това, което предлагат ACM. Всички задачи които ми попаднаха бяха от вече споменатия тип.
И все пак, какъв е смисълът от състезанията по програмиране? Да се покажеш колко си велик? Да покажеш колко по-зле са останалите около теб? Не вярвам! Може би точно състезанията по програмиране са старта на една блестяща кариера в областта на професионалното програмиране! Определено бих предпочел да си мисля, че става въпрос точно за тази, последно споменатата, алтернатива. Странно, защо тогава състезанията по програмиране толкова много се различават от реалната работна практика в софтуерните фирми? Въпреки, че в някои състезания се залага на екипната работа, в българските състезания никъде не се предлага възможност отделните екип да преминат през един цялостен процес за разработка на софтуер. Къде остава анализа на заданието? Къде е мястото на проектирането? Тъй като не можем без кодиране, то винаги присъства. Защо не се отделя достатъчно внимание на документирането? Ами последващата поддръжка на продукта? Всяка софтуерна фирма би ви обяснила, че това са етапите през които преминава тяхната работа.
Иска ми се да вярвам, че в най-скоро време в България ще се появят състезания по програмиране, които ще дават възможност за съревнование между напълно завършени продукти, написани от същите тези състезатели, които в момента решават алгоритмичните задачи на ИТ списанията в страната. Вярвам, че това би било много важна стъпка в развитието на българската софтуерна индустрия, защото ако се замислим колко български open source продукта са налични в световната мрежа, с чиста съвест може да се срамуваме, сравнявайки се с далеч по-малки държави от България, които имат смайваща продукция в областта на софтуера с отворен код.
Апелът ми, а вярвам и апелът на всеки състезател по програмиране, към българските фирми, организатори на конкурси по програмиране, е да се насочат към спонсорирането и финансирането на състезателни екип, които извършват цялостна разработка на малки, но смислени, софтуерни продукти.
Ще се радвам, ако всеки един от вас сподели мнението си и заяви своята съпричастност към тук изложената идея, като напише своя коментар към темата.
Тодор Балабанов
Legacy friendly alias
Защо-младите-хора-участват-в-състезания-по-програмиране-
Ежедневие
Компютри
Интернет
Линукс
Програмиране
Софтуер
Разработчици
Comments