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