Український розробник Володимир Агафонкін вилетів із четвертого курсу КПІ, самотужки вивчив JavaScript, написав продукт зі світовим ім’ям – бібліотеку Leaflet, заснував рок-гурт, об’їздив півсвіту, і відмовив Apple та Facebook, коли ті кликали його на роботу.
Його проєкт – open source-бібліотека Leaflet, що дає змогу швидко і просто створювати онлайн-карти – з’явився тільки тому, що якось раз Агафонкіну нецікаво стало просто виконувати поставлене по роботі завдання. Він, ігноруючи вказівки начальства, з нуля написав свій проєкт, а потім ще й домігся від компанії, щоб код Leaflet відкрили для сторонніх розробників. Зараз його сервісом користуються такі проекти, як Foursquare, Pinterest, Flickr, GitHub, Facebook, Єврокомісія та багато інших.
Про те, як навчитися програмувати самостійно, чому opensource крутіше, ніж пропрієтарні продукти, як знайти роботу мрії, а також про те, чому в українській рок-музиці так багато айтішників, Володимир розповів в інтерв’ю AIN.UA.
Звідки інтерес до математики та комп’ютерів?
Батько – інженер, мама – радіофізик, і я, скільки себе пам’ятаю, комп’ютерами захоплювався ще з садка, напевно. На курси комп’ютерної грамотності пішов класі в 5-му, – ці курси називалися «Борисфен» і знаходилися на Харківському шосе. Через рік почав вчити Delphi, намагався писати прості іграшки-квести.
Через цей інтерес і пішов у КПІ?
Так, на прикладну математику: у ФПМ була дуже хороша репутація кафедри, де вирощують програмістів, з іншого боку, сюди був нижчий конкурс.
Але ти недовго провчився, чому пішов?
Десь із другого курсу вже почав підробляти програмуванням, спершу фрілансив, займався html-версткою, а на четвертому курсі знайшов у скриньці лист: Sonopia (пізніше стала Cogniance) кликала на front-end-девелопера. Влаштувався на повний робочий день, але у виші ще продовжував числитися, намагався іноді ходити на заліки. Але взагалі, я ніколи старанним студентом не був, замість пар приємніше було посидіти на галявині з однодумцями і пивом, або зайнятися своїми проєктами. Тож зі стаціонару я врешті-решт вилетів, вирішив, що досвід справжньої роботи важливіший. Довчився до магістра вже на заочному відділенні.
Хоча перші два курси були реально корисні. Справжня школа виживання. Особливо матаналіз і легендарний викладач Чортів: у нього половина курсу вилітала на іспитах, усі складали з третьої перездачі і на трійки, після моторошних безсонних ночей. Бувало, що непритомніли. У мене була стандартна практика: валяти дурня весь семестр, а за останні пару днів усе вивчити. Але вміння за кілька днів освоювати гігантські обсяги суперскладної інформації виявилося пізніше вельми корисним у роботі.
JavaScript ти вивчив самостійно?
Так. Якщо є ентузіазм, вчишся дуже швидко. Зараз у зв’язку з економічною ситуацією дуже багато хто вирішив, що хоче стати програмістами. Якщо в людини є талант до програмування, вона з легкістю знайде спосіб навчитися сама. Просто потрібно придумати реальне завдання, пов’язане з тим, що вам цікаво, і виконувати його: наприклад, створити фан-сайт улюбленої групи. З чого почати – можна легко знайти в Google. Основний навчальний ресурс зараз, як мені здається – GitHub. Більшу частину свого навчання я провів, намагаючись читати чужий код, зрозуміти, чому він написаний саме так. Також корисними будуть такі ресурси, як «Хабрахабр«, DOU…
Єдина критично важлива вимога – знання англійської, без неї зараз стати хорошим розробником неможливо. Тож якщо з англійською погано, починайте з цього.
Розкажи, з чого починався Leaflet?
Ой, це дуже довга історія. Коли у Cogniance, де я працював, з’явився новий клієнт – CloudMade, що спеціалізується на картографії, мені стало страшенно цікаво, з чим доведеться працювати.
У них бізнес заснований на OpenStreetMap – відкритій картографічній базі даних. Мене ідея тоді настільки вразила, що захотілося написати щось своє. Зробив дуже простеньку JavaScript-бібліотеку для перегляду карт, з мінімальними можливостями. Це була програма, реально написана «на коліні», всього кілька сотень рядків.
І коли компанія приїхала до Києва знайомитися з командою, я їм показав цю бібліотеку. Так мене призначили відповідальним за розробку JavaScript API сервісів компанії.
Але зрештою, коли мені поставили реальне завдання щодо JavaScript API, заборонили робити щось «з нуля», мовляв, багато ризиків, тож потрібно використовувати щось уже наявне і стабільне. Розпорядилися, щоб я написав обгортку для OpenLayers. У мене тоді були дуже наївні уявлення про інтерактивні карти, я думав, що це має бути дуже просто. А в OpenLayers близько 100 000 рядків коду, кілька мегабайт важить фінальна збірка, документація таких розмірів і настільки заплутана, що хоч вішайся. Крім того, та бібліотека була страшенно гальмівною.
Я страшенно засмутився, що доведеться працювати з цією глючною і складною штукою. Але в мене до дедлайну було кілька тижнів, тож я нікому нічого не сказав, і замість того, щоб займатися обгорткою, вирішив довести до ладу свій виріб.
Завершив її за кілька тижнів, і коли настав дедлайн, представив команді свою бібліотеку. Вони були шоковані, не могли зрозуміти, як вона вийшла такою швидкою. Ну і мені довелося зізнатися.
А кому належать права на Leaflet зараз?
Зараз – мені, до 2011 року – CloudMade. Вийшло так, що в компанії з часом мені ставало дедалі важче її підтримувати поодинці – бібліотека була закритою, а в компанії JavaScript API не була пріоритетним завданням. Я зрозумів, що такими темпами бібліотека скоро сильно застаріє.
Останньою краплею став лист стороннього розробника, який, щоб виправити баг у бібліотеці, провів реверс інжиніринг і вислав мені патч. Я зрозумів, що код потрібно відкривати, якщо вже людям доводиться так напружуватися, щоб допомогти бібліотеці. Тож я написав листа керівництву на 20 пунктів про те, чому потрібно відкрити код, і вони зі мною погодилися.
У підсумку, перш ніж опублікувати код бібліотеки, я переписав її фактично з нуля – хотілося, щоб код був красивим, простим і зрозумілим. Так у 2011 році народилася бібліотека Leaflet.
Хто з відомих компаній або брендів використовує Leaflet?
Foursquare, Pinterest, Flickr, Craigslist, GitHub, OpenStreetMap, 500px, Etsy, Roadtrippers, The Washington Post, USA Today, Financial Times, The Guardian, Wall Street Journal, National Park Service, NPR, USGS, Data.gov, Energy.gov, Mozilla, Вконтакте, Facebook, Єврокомісія… Їх насправді більше, я просто вже не веду облік. Нещодавно дізнався, що її використовують у карті сайту сиквела «Парку Юрського періоду» зі $150 млн бюджетом.
Щодня щось нове з’являється.
Як вийшло, що Leaflet став популярним?
Дуже хотілося зробити максимально просте і швидке рішення, і людям несподівано сподобалося, підхопили, стали надсилати контриб’юшени. Вийшло вдало зайняти порожню нішу. Люди тягнуться до рішень, які легко зрозуміти і якими просто користуватися.
Візуалізація кількох років спільної розробки:
Зазвичай усе це відбувається без мого відома, просто в якийсь момент мені пишуть, мовляв, чувак, подивися, там Facebook твою бібліотеку використовував.
Найпершою перемогою став Foursquare: вони перейшли на Leaflet буквально через кілька місяців після першої відкритої версії.
Над нею працювало досить велике співтовариство: загалом людей, які що-небудь вносили в код – близько 180, активних розробників – троє-четверо (канал на GitHub).
Зізнавайся, користувачі Leaflet часто тебе хвалять? Розкажи про відгуки.
Про бібліотеку не можу виділити конкретні відгуки, але пишуть і говорять постійно, і не тільки про неї. У мене є один із сайтів, простенький – SunCalc.net, там можна вказати своє місце розташування, і сайт намалює графік руху сонця та освітлення. Я вже років чотири взагалі ним не займаюся, але з приводу цього сайту мені пишуть мало не щодня. Наприклад, надіслав подяку тибетський монах – їм у монастирі став у пригоді сервіс для обчислення часу обіду.
А нещодавно написав 77-річний чоловік, про те, що його надихнув мій ентузіазм щодо JavaScript і він вирішив вивчати програмування.
Навіть поділився зі мною першим результатом роботи: сторінкою, яка обчислює податки для громадян США.
Пишеш якісь ще бібліотеки?
Зараз намагаюся писати якісь маленькі проєкти, щоб працювали швидко і вирішували якусь конкретну задачу. З останніх розробок – алгоритм тріангуляції полігонів (завдання, критично важливе для 3D-додатків). Від’їла дуже багато часу, дуже стресова, дуже важка задача. Але вийшла бібліотека Earcut, яка важить у рази менше, а обчислює подекуди у 20 разів швидше, ніж аналоги Earcut.
Інший приклад – бібліотека для просторової індексації RBush – найшвидша і найлегша у своєму роді, критично важлива для деяких завдань у картографії.
Мобільною розробкою ніколи не займався?
Ой, це смішна історія. Якось мені на пошту написали чергового листа – гнівний відгук про те, що мій мобільний застосунок на App Store не працює. Я не міг зрозуміти, про що йдеться, адже ніколи мобільних додатків не писав. Виявилося, що якийсь в’єтнамець на ім’я Huy взяв SunCalc, замінив копірайт і продавав як платний застосунок в App Store. Я півроку листувався з Apple і врешті-решт його прибрали.
Де працюєш зараз, чи намагаються переманити на роботу кудись ще?
Коли побачив, що робить Mapbox, зрозумів, що це компанія моєї мрії: вони створюють чудові речі у сфері карт, у них працює суперкласна команда інженерів і дизайнерів, та й загалом – дуже талановиті люди. У якийсь момент Mapbox вирішили перейти на Leaflet, і запросили мене на спринт (поїздку до штатів на два тижні для роботи над Leaflet разом з їхньою командою), а потім одразу запропонували роботу.
Кличуть на роботу більш-менш постійно. Були пропозиції від Facebook, Google, кілька місяців тому кликали в Apple, але я завжди відмовляюся.
Навіщо мені залишати роботу, де я роблю все, що хочу? Зараз у компанії flat structure, тобто в тебе немає безпосереднього начальника, ніхто не каже, що треба робити. Компанія просто збирає в одному місці велику кількість талановитих людей з однією місією – зробити найкращі у світі інструменти для карт – і дивиться, що з цього вийде.
Крім того, мені дуже подобається, що ми пишемо opensource, тобто, наприклад, не потрібно питати дозволу викладати код у загальний доступ.
Я так розумію, тебе можна назвати адептом ідеї opensource і в пропрієтарну компанію тобі не хотілося б іти працювати?
Так, я великий фанат опенсорсу, ця робота завжди на виду, будь-хто може користуватися результатами твоєї праці, є відчуття ком’юніті: адже тобі намагаються допомогти люди з усієї планети…
У пропрієтарній компанії мені було б нецікаво. У мене є знайомий розробник, який був opensource-контриб’ютором з дуже активним графіком на GitHub. Коли пішов у Google, як відрізало: у графіку повна порожнеча.
Тобі доводиться часто літати до США. Чи влаштовує тебе життя на дві країни, чи думаєш про переїзд?
Літаю до Вашингтона або Сан-Франциско чотири рази на рік, по два тижні. Дружина страшенно заздрить: у нас дві маленькі доньки-близнючки, тож навіть таке відрядження, коли можна хоч ніч поспати, вважається за відпустку.
З приводу переїзду згадується анекдот про «не плутайте туризм з еміграцією». Коли влаштовувався в MapBox, відразу сказав, що переїзд мені не цікавий. Хотілося б жити і ростити дітей у Києві. У мене тут друзі, рідні, люди, яких я добре розумію, свій музичний гурт. Мені комфортно жити в рідній країні, але, звичайно, якщо з’явиться небезпека для сім’ї, доведеться переїхати, і Mapbox обіцяли допомогти з цим.
Розкажи про свій гурт «Обійми дощу«: як зацікавився музикою, як вдається поєднувати заняття рок-музикою і роботу?
Ніяк не вдається. Якби вдавалося, ми б давно вже випустили другий альбом. В Україні, якщо ти не «Бумбокс» і не «Океан Ельзи», займатися рок-музикою невигідно, однією музикою не виживеш. Якщо ти музикант, ти постійно в мінусі, концерт, якому вдалося вийти майже в нуль, вважається суперуспішним. До речі, саме тому в Україні особливо активно музикою займаються айтішники: можуть собі дозволити.
Формально музики мене ніколи не вчили, пам’ятаю, що на уроках музики в школі мені однокласники казали, що я співаю як поранений лось. Мені завжди була цікава гітара, тож із 14 років, коли став фідошником, знайшов еху, де викладали табулатури «Металіки», інших улюблених гуртів. Завзятість перемогла і я потроху вивчився грати, а пізніше – співати.
Коли закінчував школу і вступив до вишу, вважав себе дуже похмурим і депресивним типом, почав писати вірші про смерть і кохання, а вже у виші спробував покласти вірші на музику і щось почало виходити. Однодумців, з яких зараз складається гурт, знайшов частково у фідо, частково у виші: наш басист – мій колишній одногрупник.
Як придумали назву?
Спочатку це було Rain’s Embrace. Коли вирішив, що писатиму пісні українською, – переклав назву. Вона добре відображає мелодійність, поетичність, атмосферу нашої музики.
Чим ще захоплюєшся?
Фітнес і силові тренування, тренування з вагою власного тіла. Я в якийсь момент усвідомив, що щоб стати сильним і привести себе в гарну форму, потрібно просто добре вивчити це питання і систематично займатися. В інженерів, програмістів, узагалі є така фішка: якщо потрібно домогтися чогось нового, людина проведе глибокий аналіз, прочитає сотню книжок і статей про питання і всебічно його вивчить.
Зі спортом у мене вийшло так само, як із програмуванням і з музикою. Річ у тім, що в школі я був дуже замкнутим, мовчазним. Зазвичай у класі люди діляться на популярних і тих, над якими всі сміються, принижують. Ось я був у другій категорії, і, напевно, тому багато років усередині зростало бажання показати всім, що я чогось вартий. І несвідомо намагався домагатися високих результатів у всьому, за що б не взявся.
Приблизно так я підійшов і до силових тренувань, через якийсь час підсів на них, як на наркотик, з’явилася залежність від почуття прогресу, та й просто ейфорія від занять на свіжому повітрі. Мені здається, що заняття здоров’ям, спортом – важлива частина життя, особливо з огляду на те, як ми проводимо більшу частину часу, скрутившись з ранку до ночі за комп’ютером.
З інших захоплень – бойові мистецтва (карате), сноуборд, фотографія, подорожі.
Розкажи, чим плануєш займатися – професійно і просто в житті?
Планую займатися розробкою в Mapbox, це і справді компанія моєї мрії. Планую з гуртом випустити новий альбом і далі займатися музикою. В особистому плані моя головна справа – доньки-близнючки. Вони повністю змінили моє життя, розпорядок дня, світовідчуття…
Будеш дочок мотивувати займатися математикою чи музикою?
Мотивуватиму займатися тим, що їх захоплює, чим би вони не захоплювалися. Якщо захопляться програмуванням, я їм цілком допоможу. Головне, щоб росли щасливими.