През последните 7 години Георги Ангелов е Senior Software Developer в Astea Solutions. Интересува се от всичко – от UX и front-end, през DevOps, до компилатори, паралелно програмиране и криптография. Обожава решаването на интересни проблеми, експериментирнето с нови технологии и шутърите от първо лице. С него ще ви срещнем на събитието Оръжия в борбата с асинхронността в JavaScript на 10-ти септември. Преди това, Георги ни сподели какво го мотивира в работата му.

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

По случайност в осми клас съученик ми изпрати линк към урок за инсталиране на Apache уеб сървър. Имаше някакъв проблем и търсеше помощ. Не знам защо беше решил, че аз мога да му помогна, но това беше важен момент за мен, защото в този сайт имаше уроци за уеб програмиране. Основната част от уроците бяха за PHP, но покрай тях започнах да разучавам и JavaScript. Не съм писал код на PHP от години, но за сметка на това JavaScript не е спирал да бъде основна част от работния ми ден.
Нямам конкретен спомен как открих JavaScript. Не е било осъзнат момент и едва ли съм знаел в какво се забърквам. Още преди онова събитие в осми клас, си играех да генерирам уеб странички с Web Page Maker и Microsoft Publisher. Тогава съм се сблъсквал с малки снипетчета JS, които добавят някаква интерактивност (например часовници) към изключително грозния генериран автоматично код, който въпросните софтуери произвеждат. Тогава, разбира се, просто ги копирах от някъде без да разбирам как работят.
В това време на Windows XP, Internet Explorer 6 и Firefox 2, jQuery тъкмо набираше популярност. Може да се каже, че в даден момент съм знаел повече jQuery, отколкото JavaScript. По-късно започнаха да се появяват библиотеки като Knockout.js и Angular.js, които наистина издигнаха JS от калта и показаха колко по-удобни могат да бъдат нещата. А ES2015 направи всичко толкова по-изящно.

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

Удовлетворението от това да създаваш. От това всеки следващ продукт или функционалност да се получи по-добре и по-бързо, защото ти самият си научил повече. Обожавам да разучавам различни езици, технологии и библиотеки – да погледна под капака, за да разбера как работят, а нерядко и да ги „преоткрия“ с чисто обучителна цел.
Мотивира ме това нещата да се случват добре не само в програмирането, но и във всички аспекти на разработката. Твърде често виждаме примери за това как компромиси с качеството водят до големи проблеми по-късно и нерядко дори до необходимост от пренаписвания. Виждаме как недообмислени функционалности пречат на потребителите, или отнемат големи части от времето на програмистите впоследствие. Разбира се, перфектен код не съществува, но това не означава, че не можем да дадем всичко от себе си, за да се приближим максимално до него за времето, с което разполагаме. А с всяка натрупана минута опит, всеки следващ път за същото време ще се приближаваме още повече.
Голям източник на мотивация са ми и технологичните предизвикателства. Умението за разрешаване на проблеми е ежедневно необходимо в нашата професия и всяко добро решение носи голяма доза удовлетворение.

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

Едно от най-големите предизвикателства в проект на работа беше реализирането на препоръчваща система за музикални изпълнители и концерти чрез графова база от данни.
Първо, тогава не знаех особено много за препоръчващите системи, заради което научих доста неща. Освен това, имаше и чисто технологични предизвикателства като това как да се синхронизират данните от основната ни SQL база от данни с тези в графовата. Това беше и един от първите проекти, в който съм правил нещо наподобяващо микросървиси. Всичко се случваше асинхронно и беше напълно възможно основната система да продължи да работи безпроблемно дори сървисът за препоръки да не функционира.
Основната система пишехме на Ruby on Rails, докато сървисът за препоръки беше написан на JavaScript с Node.js. Той пък, от своя страна, използваше Java библиотеките на OrientDB и Groovy-базирания език за заявки към графови бази от данни Gremlin. OrientDB сама по себе си се оказа голямо предизвикателство – пълна с огромни обещания на корицата, но и изобилие от недоизгладени ръбове в съдържанието.

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

Решихме да направим препоръчващата система свой собствен сървис, изолиран от основното приложение чрез REST API. Графовата база от данни съдържаше единствено данните, които са необходими за препоръките. Накарахме основния сървър да изпраща на препоръчващата система всяка промяна, която я касае.
За да не създава проблеми с производителност, консистентност и стабилност, направихме тези промени асинхронни – чрез трети сървис, който изпълнява задачи в опашка и при грешка ги повтаря след определено време. Така дори сървисът за препоръки да не работи, системата ще продължи да функционира. Трябваше да предвидим и механизъм за групиране на тези заявки, както и възможността те да се бъдат изпратени в различен ред.
Наученото за оптимизация на заявки в SQL бази от данни се оказа полезно и тук – заявките за препоръчващата система бяха големи и взимаха предвид голямо количество данни, затова трябваше да се оптимизират правилно.
Всичко това беше изключително мотивиращо и удовлетворяващо, а след завършването на тази част от системата знаех много повече неща за най-различни технологии и видове проблеми, отколкото когато я започвахме.

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

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


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


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

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

Прочети още:

Георги Гърдев: Работя в изключително силен и сплотен екип
Илиана Въжарова: Удоволствие ми доставя публикуването на приложение, което се ползва от реални потребители

Share This