Минко Гечев е част от Angular екипа в Google и първият лауреат в историята на наградата “Джон Атанасов”, награден в две различни категории. Научете какво е да си на интервю за работа в офиса на Google, когато пред теб стои създателят на Angular, както и как негова демо версия на “Guess.js” е представена на Google I/O от JavaScript гуруто Ади Османи.
Какви проекти са част от твоето портфолио?
През ноември 2018 се присъединих към Angular екипа в Google. Основният ми фокус са инструменти за разработчици, използващи фреймуърка. Някои от проектите, по които работя са codelyzer, Angular CLI, интеграцията на Angular CLI с Bazel и други. През свободното си време поддържам още 40-50 проекта с отворен код, вариращи от документи с инструкции за създаване на бързи Angular приложения до инструменти за статичен анализ на Go проекти.
Какви средства за разработка използваш?
В свободното си време обичам да експериментирам с езици за програмиране от различни парадигми, но професионално използвам най-активно TypeScript и Go.
В продължителност на доста години, за разработка използвах Vim с персонализирана конфигурация. Въпреки, че се стремях редакторът ми да бъде минималистичен, забелязах, че отделям доста часове месечно за подобряване на потока ми на работа. Възвръщаемостта на тази инвестиция често беше под съмнение. 🙂
Последните няколко години използвам VSCode. Изключително доволен съм от редактора и поддръжката му на TypeScript и Go. Prettier и gofmt са инструментите, които форматират кода ми, а за статичен анализ на проектите си използвам TSLint, ESLint и Revive. Терминалният ми емулатор е iTerm2 и противно на наложения “стандарт” последно време използвам Bash вместо fishshell/zshell. Ежедневно използвам tmux, много удобен инструмент за Terminal multiplexing. Позволява ми лесно да възстановявам сесии, в които работя по проекти, имащи различни изисквания. Използвам цветовата схема Nord за Vim, iTerm2, tmux и VSCode.
Имам файл с Utility функции, които използвам непрекъснато директно от shell-а ми. Например често искам да проверя компресирания размер на скрипт или да променя mac адреса си на летището. Всичко това е в моя GitHub.
Преди да започна работа в Google, работих по различни проекти като консултант във фонда Learn Capital и по-късно съосновател на Rhyme.com. Основните технологии, които използвах там бяха Angular, React, Go, Java и Ruby on Rails.
По какво работиш и за какво отговаряш като Engineer в Angular team @ Google?
Като Developer Programs Engineer работата ми е доста разнообразна. Включва всичко, което правих в свободното си време докато работих по компанията ми Rhyme.com, плюс куп други интересни неща. В момента подпомагам инициативата ни ABC (Angular, Bazel, CLI), по различни начини – говоря с големи компании използващи инструментите, събирам обратна връзка от тях, разработвам инструменти, които да улеснят работата им, правя лекции на конференции и други.
Освен работата ми по ABC, се занимавам активно по подобряването на инструментариума на Angular, който да позволи създаването на бързи приложения от милионите разработчици използващи фреймуърка. Например в CLI версия 8 работих по дизайна и имплементацията на differential loading функционалността, която добавихме. Също така работя по дизайна и координацията на ng deploy инициативата, по която си сътрудничим с Firebase, Google Cloud, Azure, AWS, Netlify, Zeit и други.
Kак протече интервюто ти за Google, от колко етапа се състоеше и каква подготовка изискваше?
Имах удоволствието да работя с Аngular екипа през 2016 година, малко преди да ме поканят да се присъединя към Google Developer Experts (GDE) програмата. Когато реших да се фокусирам върху разработката на инструменти за разработчици на пълен работен ден, Angular беше очевидния избор.
За да започна работа в Google трябваше да мина през редовната поредица от алгоритмични въпроси на бяла дъска.
Въпреки интересите ми в областта на компютърните науки и алгоритми, цялото преживяване беше доста стресово. Бях на интервю с няколко компании в Силициевата долина за подобни роли (инфраструктурни екипи). Разбира се, Аngular беше основният ми фокус. Може би най-стресовият фактор за мен беше, че в един ден трябваше да покажа, че съм квалифициран за инженер в Google.
Изкарах около месец и половина, два, през които решавах по 4-6 алгоритмични проблема на ден. Тъй като повечето код, който пиша е отворен, задачките, които реших са също в GitHub акаунта ми. В деня на интервюто пътувах с Uber от Сан Франциско до Googleplex в Mountain View. Още си спомням неспокойните 30 минути, през които чаках в лобито на една от сградите. Тъй като един от Chrome екипите също искаше да работи с мен за Developer Advocate роля, интервюто ми започна с презентация, на която присъстваха всичките ми интервюиращи за деня.
Всеки един от интервюиращите ми бях виждал предварително – на Google I/O, заради проектите им в GitHub и т.н. От работата на всеки един от тях бях научил много през последните 5-7 години. И така, дойде момента, в който трябваше да направя презентацията си. Въпреки, че до този момент я бях давал на няколко големи конференции, се чувствах доста притеснен от респекта, който имах към интервюиращите. Например, един от тях беше Мишко Хъвъри, създателят на Angular.
Презентацията премина доста добре, получих доста позитивна обратна връзка, което помогна да се успокоя през останалата част на интервюто. По време на последното ми интервю с Ерик Бадълмен, се заговорихме за оптимизации на уеб приложения и той ми спомена, Guess.js, като пример за иновативна библиотека, за по-бързи навигации в single-page applications. Когато му споменах, че аз разработих библиотеката, той остана доста приятно изненадан.
Трудно е да опиша колко развълнуван бях аз, когато човекът, от когото съм учил години наред, повреме на интервюто ми в Google заговори за моята работа. ❤️
По-късно разбрах, че всички Angular проекти вътрешно се валидират от няколко codelyzer правила. Страхотно е усещането да отида на интервю за работа и да разбера, че компанията използва мои инструменти за статичен анализ на кода си.
В края на деня, след 6 интервюта, се чувствах доста изтощен, но също така уверен, че всичко е минало успешно. Още същия ден служителят от Google, който ръководеше процеса по интервютата ми каза, че засега обратната връзка, която получава за мен е позитивна. Няколко седмици по-късно минах през още едно интервю, в което трябваше да демонстрирам организационни и лидерски умения. Няколко седмици след това получих оферта.
Ти си първият лауреат в историята на наградата “Джон Атанасов”, награден в две различни категории – принос в световен мащаб за развитието на компютърните науки и софтуерното инженерство и за разработване на проект с широко социално въздействие. На кои твои приноси са посветени тези високи отличия?
Грамотата “Джон Атанасов” получих за генерален принос към сферите на софтуерното инженерство и компютърните науки. Някои от заслугите са международните ми лекции на големи форуми за софтуерни инженери, популярни статии, книги и други. Към 2017 година, когато получих грамотата, имах около 40 лекции в 12 страни на теми, свързани с производителност на уеб приложения, техники в софтуерното инженерство, функционално програмиране, Angular, JavaScript, и други. Някои от статиите ми имаха стотици хиляди виждания и преводи на десетки езици. През 2016 имах удоволствието да напиша една от първите книги за Angular, която също беше оценена от журито.
I’m humbled and honored to be laureate in two categories for the award “John Atanasoff” of the President of the Republic of Bulgaria. pic.twitter.com/TVg0703MvD
— Minko Gechev (@mgechev) October 10, 2017
Наградата за проект с висок обществен принос, получих заради работата ми по codelyzer и Angular. Codelyzer има над 2 милиона месечни сваляния и проверява милиарди редове код всеки ден. Работата ми по Аngular към 2017 година беше основно фокусирана върху PWA (Progressive Web Applications) с Angular mobile toolkit, Angular style guide и други. По Angular style guide имах възможността да си сътруднича с Google, Microsoft и други компании, докато бях разработчик на свободна практика и по-късно CTO на Rhyme.com.
На Google I/O ‘18 Ади Османи представи проектът Guess.js., в който участваш и ти. Би ли ни споделил повече за това?
Още от 2016-2017 година имах идея за тази техника, при която чрез анализ на информация за това как потребителите използват дадено уеб приложение, можем да създадем стратегия за сваляне и кеширане на статични ресурси. През декември 2017 подадох предложение за лекция на конференция в Оксфорд на тема “Teach Your Bundler Users’ Habits”. Организаторите приеха лекцията ми и така се наложи да разработя идеята, която имах.
На вечеря в Сънивейл, Калифорния се засякохме случайно с Ади и му разказах за идеята си. Той каза, че планира нещо такова от доста време и ще се радва да поддържаме контакт за евентуално взаимодействие. Няколко седмици по-късно, разработих прототип на идеята, който е с отворен код в GitHub, и написах статията “Machine Learning-Driven Bundling. The Future of JavaScript Tooling.”. След представянето на лекцията ми в Оксфорд, Ади предложи да работим с Гетсби, за да развием идеята. Преименувахме проекта на Guess.js и така преместих кода от mlx в GitHub организацията guess-js. С Кайл Матю (CEO на Gatsby) разработихме Guess.js плъгина за Gatsby и направихме демо за Google I/O
[https://guess-gatsby-wikipedia-demo.firebaseapp.com/]
Накратко, Guess.js използва доклад от Google Analytics, за да направи модел, който се използва за предсказване на поведението на потребителя. В Guess.js има две основни предизвикателства:
- Създаване на ефективен модел, който не повишава значително размера на приложението
- Намиране на съответствие между декларации на маршрути в дадено приложение и статистиката, която сме получили от Google Analytics
В момента работя по техника, която ще позволи извикване на модела по време на “компилация” на приложението. По този начин всеки JavaScript файл може да съдържа само няколко байта с инструкции за сваляне и кеширане на файлове, които могат да бъдат необходими в бъдеще. Намирането на съответствие между маршрути и статистика от Google Analytics се случва посредством статичен анализ на кода на потребителя.
Кое би определил като свой най-голям професионален успех?
Най-големият успех са положителните коментари, които получавам от хора, които следят работата ми и се мотивират да учат/правят повече. Например на NG-Conf в Юта преди няколко седмици се срещнах с група от Колумбия.
Там се запознах с Мелина, която представяше първата си лекция, тя в момента организира общност за програмисти в Меделин. Тя ми сподели, че съм един от хората, които са я мотивирали да се занимава с отворен код и общността в Колумбия благодарение, на което е постигнала професионални успехи.
Тези моменти определено ме правят много щастлив 🙂
Проектите ми, които са в сечението между теоритични компютърни науки и/или математика и софтуерно инженерство, също приемам като успех. Често се опитвам да мотивирам инженери да инвестират повече време в идеи от математиката и компютърните науки и по-малко в изучаването на API на различни технологии. Идеите остават, но технологиите се менят често.
Какви са бъдещите ти планове в тех сектора?
Смятам, че инструментите за разработка на софтуер могат да ни помогнат да пишем по-качествен и коректен код. Има още много място за развитие и неразработени идеи, които могат да повишат производителността на стотици хиляди, а от там транзитивно да подобрим живота на милиони.
Интервюто проведе Вяра Стефчева.