Стефан Иванов е софтуерен инженер в R&D отдела на Chaos Group. Член e на ISO комитета по стандартизация на C ++ като представител на България. Той е бил и стажант в R&D лабораторията за реалистична компютърна графика в EPFL (École Polytechnique Fédérale de Lausanne). Преди да започне в Chaos Group, Стефан завършва АУБГ (Американският университет в България) с пълно отличие от 6.00 с двойната специалност по математика и компютърни науки. С него ще ви срещнем на събитието Major Features in C++20 through Examples на 24-ти юли. Преди това, Стефан ни сподели как е започнал да се занимава със C++ и какво го мотивира в работата му!

Как започна да се занимаваш със C++?

Започнах да се занимавам със C++ (и изобщо с програмиране) сравнително късно – първата година в АУБГ (Американския Университет в България). Ако трябва да съм честен, фактът, че в момента се занимавам със C++ се крепи на една грешка – буквално. На първо място, нямах намерение да се занимавам с компютърни науки в АУБГ, исках да уча математика. Идвах от езикова гимназия, тоест, нямах никакъв опит с програмиране. Тъй като в АУБГ може да направим двойна специалност реших да запиша курса Software Development with C++. Курсът мина доста добре, хареса ми идеята да уча компютърни науки като втора специалност, но не бих казал, че ме вълнуваше C++. Но, това беше преди да разбера оценката си от финалния изпит. Бях напълно сигурен, че ще изкарам отлична оценка. Точни преди Коледа получих резултатите си и бях съкрушен. Бях се справил отлично по-всички други курсове, но не и по този. Нещо в мен се отключи в този момент и реших, че трябва да се докажа, че мога по-добре. Започнах да чета за програмиране и C++ всеки ден, след като намерих множество добри ресурси онлайн. Така цяла зимна ваканция се подготвях, търсех материали и т.н. Като започна семестърът се оказа, че професорът просто е допуснал грешка при сумирането на точките в моя изпит (две страници бяха залепнали). След време, оценката ми беше коригирана, но това ежедневно четене ми стана навик и продължих да чета, гледам лекции и експериментирам с езика. Така че, колкото и странно да звучи, заради една грешка се интересувам толкова много от C++.

Какво те мотивира в работата ти?

Жаждата за нови знания и желанието да “създавам” нови неща са основни мотивиращи фактори. Любознателен съм и винаги съм изпитвал желание да разбера как и защо нещо работи. Също изпитвам удовлетворение, когато допринасям съществено към нещо по-голямо. Поради тази причина много харесвам работата си в R&D отдела на Chaos Group: следя новости в компютърните науки, научавам нещо ново математическо по пътя, и след това да използвам познанията си по C++, за да подобря световния известен продукт.

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

Когато бях на стаж в EPFL (École Polytechnique Fédérale de Lausanne) ми бе дадена задача с така наречените редици с ниско несъответствие (low discrepancy sequences), които се използват в компютърната графика за ефективно семплиране. Без да влизам в детайли (защото би отнело прекалено много) трябваше да имплементирам и генерализирам няколко алгоритми за предсказване на елементи от тези редици (ето пример за един от докладите: http://gruenschloss.org/sample-enum/sample-enum.pdf​ ). На всичко отгоре, трябваше всичко, което пиша да е доста бързо. Всичко беше постижимо, но все още нямах много опит, а комбинацията от сериозна математика и нуждата да знам C++ много добре, за да докарам добра скорост, бяха превърнали цялостната задача в нещо, с което не мислех, че ще се справя.

Как го разреши / разрешихте?

Накратко, с много усилие и търпение. Важното беше да приключа с всичко за 3 месеца и за това си изградих план за всички теоретични и практически знания, които трябва да имам, за да се справя със задачата. Четенето на сложни математически доклади никога не е лесно, но благодарение на курсовете по математика, които бях взел в АУБГ, беше една идея по-лесно. За имплементацията, използвах подобрените възможности на C++ за правене на изчисления по време на компилация, точно поради опасенията за скорост (конкретно, constexpr в C++14). Имайки предвид какво трябваше да правя иначе, съм доста щастлив, че езикът постоянно се подобрява.

Ще споделиш ли трите най-важни неща, които ИТ обществото може да научи от темата на предстоящата ти презентация?

● Разбиране каква е посоката на развитие на C++​ в бъдеще. C++20 ще донесе много големи промени в езика, които малко или много предначертават какво ще става с езика в бъдеще.

● Възможно “най-свежото​ ” представяне на новости в езика (Concepts, Coroutines, Contracts, Module) от някой, който ще присъства на срещата на I​ SO C++ срещата в Кьолн от 15 до 21 юли! Буквално ще си обновявам презентацията с всяко гласуване на срещата – по-актуално от това не знам на къде!

● Примери за необходимостта от​ модулярност, абстракция и формализация на изискванията на алгоритми и структури от данни​.

Какво би посъветвал всички, които сега започват да се занимават със C++?

Всеки един начинаещ трябва да намери качествени ресурси, ефективно да разпредели времето си и да изгради навици за редовно упражняване. Казвайки това и нуждата от рамка за учене, книгата за начинаещи на Строуструп, Programming: Principles and Practice Using C++​ , е моят фаворит за тотални новобранци в програмирането или за такива, които искат да се прехвърлят към C++. Книгата е доста подробна и дори хора с опит биха намерили нещо полезно там. Освен книгата (и упражненията в нея!), всеки би трябвало да започне собствен проект. Има много възможности, но тъй като графиката ми е присърце, препоръчвам да напишете един raytracer от нула на C++. Ако това ви е интересно, вижте мини поредицата на Питър Шърли Ray Tracing in a Weekend! Това са 3 книги (напълно безплатни, лесно се намират онлайн), в които се имплементира работещ raytracer. Добро упражнение е да се водите от книгите, но да го препишете в модерен C++ (примерно C++17 или дори C++20). На последно място, следете различните C++ конференции: CppCon, Meeting C++, ACCU                            (​https://isocpp.org/wiki/faq/conferences-worldwide/​ ). Почти всички качват записи от презентациите в YouTube. Някои от тях са подходящи дори и за начинаещи. За тези вече леко навлезли в C++, горещо препоръчвам лекциите на Шон Парент (​ https://sean-parent.stlab.cc/papers-and-presentations/​ ) и поредицата на Александър Степанов (​ https://www.youtube.com/playlist?list=PLHxtyCq_WDLXryyw91lahwdtpZsmo4BGD​ ) за генерично програмиране от A9. Това са лекциите, които най-много са повлияли на стила ми на писане на код.


Регистрирай се за събитието


Стани част от потребителска група на C, C++. Абонирай се и ще ти изпращаме информация за всичко, което предстои в групата.

Визия: Личен архив

Прочети още:

Андрий Митрошин: Намерете проект, който е свързан с област, която ви харесва!
Живко Петров: Крайната цел не е толкова вълнуваща, колкото самия път

Share This