Николай Стоицев е отдаден на технологиите Senior Software Engineer, който още от гимназиалните си години ясно е насочил вниманието си към информационните технологии, приоритизирайки ги в своето развитие. Това води и до сегашния момент, в който освен, че успява да е важна част от екипа си и работи по свой проект, успява и да отдели от времето си в предаване на знания на бъдещи IT специалисти.
Кога започнахте да се интересувате от IT сферата и програмирането? Какво Ви привлече?
Започнах да се занимавам с програмиране в гимназията. Първо започнах да уча C++ от един самоучител и след това HTML покрай една игра. Привлече ме това, че лесно мога да създавам неща и да виждам веднага, как те работят. С течение на време научих и други уеб технологии и в 10-ти клас отидох на едно състезание по уеб дизайн за ученици. Хората, които срещнах и средата, в която попаднах ми харесаха много. Запалих се да ходя на подобни състезания и се мотивирах изключително много да уча нови неща и да се развивам като програмист. Това даде резултат и в 11-ти и 12-ти клас получавах винаги призови места на състезанията, в които участвах. Спечелих второ място на Националната олимпиада по информационни технологии и влязох във ФМИ като лауреат от олимпиадата. Тези състезания в гимназията бяха основното нещо, което ме предизвика и мотивира да се занимавам сериозно с програмиране. Радвам се, че от 2012-та година насам участвам като жури на тези състезания и мога да допринеса обратно към инициативите, които ме направиха софтуерен инженер.
С какви програмни езици работите?
В ежедневната ми работа работя с Python и Go. Но езикът е просто инструмент. Смятам,че е по-важно да изграждаме умения, които ни позволяват да сме адаптивни и да учим бързо различни езици. Например, когато започнах работа в Uber, повечето микросървиси бяха написани на JavaScript върху Node.js и на Python. Причината за това е, че тези езици позволяват много бързо разработване, а това е изключително важно за една млада компания. С течение на времето преминахме към Go и Java, понеже те доставят добро бързодействие, типова система и лесна работа с големи количества код. Средата, в която работим се променя и респективно, инструментите, които използваме. Затова е добре да умеем да изучаваме нови езици лесно.
Има няколко основни групи езици, от които е добре да знаем поне по един. Например един динамичен, като Python или Ruby, един компилируем, като C++ или Java, и един функционален, като Clojure или Scala.
Има други неща, които са по-важни за ежедневната ми работа от езика, на който програмирам. Например като Back-End инженер е по-важно да знам как да проектирам и разработвам системи, които могат да скалират лесно като просто добавя нови ресурси. Важно е да могат да издържат на разнообразните неизправности, които могат да възникнат, докато работят. Същото се отнася и за Front-End или SRE. По-важно е да знаем основите неща в сферата, а не конкретен език.
С кой програмен език предпочитате да работите? Може ли да се каже, че има някой, който би могъл да бъде най-лесен за един начинаещ програмист?
Когато рабработвам нещо за мен в свободното си време, винаги използвам JavaScript. За мен е лесен за работа, защото го познавам добре. В същото време мога да разработвам едновременно Front-End и Back-End решения с него. Има и много библиотеки за всичко. Помага ми бързо да създавам нови неща. И в същото време става и за големи приложения.
Това, доколко един език ни е лесен или труден за работа зависи от две неща. Едното е до колко познаваме езика. Колкото повече време прекараме да научим основите, толкова по-лесно и ефективно ще работим с него. И другото важно нещо е екосистемата. Трябва да знаем кои са най-добрите начини да компилираме, да дебъгваме или да пускаме тестове. Ако сме наясно с всички аспекти около разработването на приложение на даден език и самия език, със сигурност ще ни е лесно да работим с него.
Най-подходящите езици за начинаещи, са тези, за които има много информация, както за езика, така и за екосистемата около него. Затова винаги препоръчвам Java и C# на приятели, които искат да започнат да програмират. Има много информация за двата езика и много места, на които хората могат да потърсят помощ.
Какво точно е естеството на Вашата работа в Uber? По какъв проект работите и как той се отразява върху потребителите и партньорите Ви?
Моят екип разработва голяма разпределена система, която обработва много данни. Тя работи на 400 контейнера в няколко центъра за данни по света. Системата генерира финансови документи, така че Uber и всички, които използват платформата да спазват данъчните закони в държавите, в които оперираме. Като резултат, трябва да съхраняваме голям обем данни от няколко стотин терабайта. И по време на своята работа, системата обработва десетки милиони събития всеки ден. Трудността идва от това как да се справим с постоянно увеличаващия се брой събития, които трябва да обработим и с увеличаващия се обем данни, които трябва да съхраняваме надеждно.
Всеки ден пускаме нови подобрения в системата и въпреки това имаме много добро availability – 99.999% за последните 12 месеца. Това означава, че въпреки че пускаме нови неща няколко пъти на ден, е имало само 26 секунди средно на месец, в които системата не е работила, както се очаква. Това се дължи на голямото внимание, което обръщаме на автоматичния monitoring и alerting и високото качество на кода, което поддържаме. За това допринасят още и големия брой автоматизирани тестове, които разширяваме и изпълняваме постоянно.
В момента имате добра кариера, водите и участвате в конференции… Какъв е Вашият “код” за успех спрямо сферата в която работите?
За мен е важно да съм сред хора, от които мога да се уча постоянно. Средата, в която работя всеки ден ми дава такава възможност и аз се възползвам максимално от това, за да се развивам. Постоянно се стремя да излизам извън зоната си на комфорт. Ако има нещо, което ми е трудно да правя, се стремя да го правя, колкото се може повече, за да имам възможност да се науча да го правя добре. И не на последно място, отделям време да уча нови неща и постоянно да усъвършенствам нови умения. Всеки в сферата знае колко е важно това и се опитвам да го правя ежедневно.
Също така сте и асистент, преподавате в СУ. Какво е общото и различното между материята, която преподавате и тази, с която работите като програмен език, онлайн инфраструктура и т.н.?
Нещата, които преподаваме в университета са широко приложими. Аз водя упражнения и по време на тях студентите прилагат наученото към реални проблеми. Предметът, по които водя упражнения се нарича “WWW технологии” и учи студентите на нещата, които трябва да знаят за уеб технологиите. Там сме избрали конкретна технология, която да използваме по време на упражнения. Но фокусът е изцяло върху основите на нещата, а не върху самата технология. Например, много по-важно е да разберем какво са бисквитки и за какво служат, отколкото да се научим как да работим с тях с конкретната технология. Причината за това е, че технологиите се сменят и еволюират постоянно. Но основите на уеб технологиите остават добре утвърдени. Ако ги познаваме добре, можем лесно да научим как да ползваме конкретна технология просто като видим как основните неща са представени там. И мога да кажа, че без добро познаване на тези основи, няма да мога да се справям в работата и да се развивам като програмист.
Понастоящем какво се случва, например в СУ? Как Ви се струват задаващите се нови специалисти?
С всеки випуск студентите стават все по-любознателни. Може би това е продиктувано от все по-голямото море от технологии, в което трябва да се ориентират. Добрата новина е, че това им действа мотивиращо. А това мотивира и мен.
Кои предмети от гимназиалното образование са най-важни, така че човек да се превърне в добър IT специалист?
В гимназията участвах и печелих състезания по програмиране. За тази цел трябваше да науча различни системи и технологии. Когато след това влязох в университета, част от колегите ми никога не бяха програмирали преди това. И някои от тях станаха по-добри специалисти от мен, въпреки че имах преднина със знанията ми от гимназията. Това се дължи на факта, че в университета те положиха повече усилия да усвоят много добре основите на компютърните науки. Също се научиха как да приемат нови знания ефективно. И комбинацията от двете им помогна да се превърнат в изключително добри специалисти. А предметът от гимназията, който допринася за по-доброто усвояване на основите на компютърните науки е математиката.
Общо взето, всяко едно звено има някакви проблеми, дефекти за изглаждане. Какви според Вас са те в IT сферата?
Един от проблемите, които трябва да решим е недостигът на хора. Повечето компании в България имат амбициозни цели за разширяване на екипите си и IT сферата има нужда от много нови кадри, за да отговори на това търсене. За това е важно цялата IT екосистема да подкрепя хората, които искат да навлизат в сферата и хората, които искат да им помогнат. Според мен, за да може да развием софтуерната индустрия, ни трябват повече академии, школи, обучителни центрове и студенти в университетите. Само така ще може да скалираме и да продължим растежа в сферата. Друг проблем, който забелязвам е, че индустрията е централизирана в София. Има чудесни специалисти по всички краища на България. И трябва да помогнем те да имат среда, в която да се развиват и да привличат повече хората в IT сферата в цялата страна.
Водил сте лекция за Apache Kafka. Разкажете как платформата помага в бизнеса, стартъпите, програмиране… Как улеснява работата?
Apache Kafka намира много широко приложение в решенията за обработка на големи обеми от данни. Тя е основен компонент в архитектурата на много от системите в Uber. Много често, когато трябва да решим някакъв сложен архитектурен проблем, се питаме дали може да го решим с Apache Kafka. И в повечето случаи отговорът е да.
В началото е проектирана като система, която да съхранява логове и метрики от много машини. Представлява опашка от съобщения. Има producers приложения, които добавят нови съобщения. И има consumers приложения, които ги консумират. Тя може да скалира до голям обем от данни и голям брой producers и consumers. Също позволява на софтуерните инженери да изберат баланса между по-бърз или по-надежден трансфер на съобщения.
Това намира голямо приложение в случаите, когато трябва да имаме голяма надеждност, че даден процес със сигурност ще бъде изпълнен в една сложна разпределена система. Ако имаме важно съобщение и то е публикувано в Apache Kafka, знаем, че то няма да се загуби и ще може да бъде прочетено лесно. Също така знаем, че, ако възникне проблем по време на обработката, няма да загубим съобщението, докато то не бъде обработено успешно. Добър пример за това са съобщения, свързани с парични транзакции.
Разкажете, също така, за Вашия side project TechEvents.bg? Какво представлява и кога го стартирахте? С какво се различава от Meetup, например, където също може да се види календар със събития?
Проектът беше вдъхновен от проблем, който имах. Всеки месец организираме Uber Engineering Meetup в София, където разказваме за проблемите, които решаваме и за технологиите, които използваме. И всеки път, когато избираме дата за следващото събитие, трябва да отворя няколко сайта, за да намеря подходяща дата с малко събития. Реших, че ще е добре да има едно място, на което може да се видят всички технологични събития в София.
Започнах да работя по проекта в средата на април 2018 и го пуснах месец по-късно. На сайта могат да се видят всички технологични събития, организирани в различни платформи и от различни организации. За целта съм разработил решение, което автоматично агрегира данни от няколко платформи и ми дава възможност лесно да въвеждам нови събития и да ги редактирам на ръка. А разликата с meetup.com е, че на techevents.bg могат да бъдат намерени всички събития от всички платформи, а не от една конкретна.
Като следваща стъпка искам да доразвия седмичния бюлетин. На сайта има функционалност за записване за e-mail бюлетин със събитията за предстоящата седмица, който се изпраща всяка неделя. Искам да го автоматизирам и да го популяризирам.
С какво се занимавате в свободното си време? Имате ли хобита и какви?
Опитвам се да използвам свободното си време за пътуване. Обичам да посещавам нови места и да се запознавам с нови култури. Това ме вдъхновява и зарежда с нови сили.
Интервюто проведе Пламен Михайлов