Між дротами: Інтерв’ю з розробником із відкритим кодом Сіндре Сорхус

Ось моє інтерв’ю Sindre Sorhus, плідного розробника з відкритим кодом, який живе в Таїланді.

Розкажіть трохи про своє дитинство та про те, де ви виросли.

Я виріс у заміському районі за межами Осло, Норвегія. Коли я був маленьким, я справді цікавився Legos. Щороку я отримував Лего на день народження та Різдво. Легос справді викликав мої інтереси будувати речі рано. Якось у мене в кімнаті було вбудоване величезне місто Лего, яке мало не займало всю кімнату.

Як ти потрапив у програмування?

Коли мені було сім, моя сім'я отримала наш перший комп'ютер Windows 95. Раніше я грав у гру під назвою Map Blaster, де персонаж стрибав навколо, щоб вирішувати математичні завдання. Через кілька років ми нарешті отримали доступ до Інтернету, і це все змінило для мене. Я проводив багато часу, пишучи в гостьових книгах на веб-сторінках інших людей та збираючи gif-файли. Одного разу мені стало цікаво, як працює веб-сайт, і виявив у браузері кнопку "переглянути джерело".

Це було для мене вражаючим відкриттям. Я міг просто клацнути правою кнопкою миші, переглянути джерело, а потім побачити, як все було зроблено. Спочатку я не дуже багато розумів, але коли я знову і знову дивився на одне і те ж, я почав розуміти, як це працює. Так я розпочав свою подорож програмуванням.

Я створив свій перший веб-сайт, коли мені було десять. Це було після того, як я кілька років дивився на джерело. Він мав всілякі кольори, фон із зоряним малюнком, анімований фоновою музикою медіа - це був один із тих штрихів, які всі мали на своїх веб-сайтах тоді. Я використовував Microsoft FrontPage.

Одного разу мені було нудно, тому я створив тисячі вкладених каталогів на комп’ютері мого батька, і це закінчилось збоєм комп’ютера. Мій тато мав переформатувати комп’ютер; він був вражений і роздратований одночасно. Так само я втратив свій перший веб-сайт.

Пізніше під час мого навчального року я зайнявся флеш-іграми, і ми переглядали багато флеш-фільмів під час шкільних перерв. Мені було цікаво, як вони були зроблені, але ніколи не було жодної кнопки джерела. Тож я декомпілював файли swiff, це було легко, оскільки вони не були затуманеними. Це, знову ж таки, дало мені можливість вчитися на роботі інших людей. Я почав модифікувати чужі ігри та переробляв усіх персонажів, набував нових ворогів, додавав високі бали. Це був гордий момент, коли я зрозумів, що інші насправді можуть зіграти в гру, яку я зліпив.

Ви провели п’ять років у військовій галузі як розробник і фотограф. Якою була веб-розробка на той час?

Після закінчення середньої школи мене призвали безпосередньо до військової служби в Норвегії. Я потрапив до медіа-підрозділу, де проводив більшу частину часу в офісі, працюючи в інтрамережі. Вечорами було не так багато робити, бо ми жили в казармах, тож я вирішив будувати речі. Але більшу частину свого досвіду я копіював та вставляв PHP та JavaScript інших людей, і я не зовсім розумів, як вони працюють. Одного разу я натрапив на Python і Django, у нього була чудова документація та навчальні посібники, яких у PHP ніколи не було. Я читав підручники щодня і починав будувати речі на роботі.

Так почалося моє власне кодування. Після призову я планував поїхати подорожувати до коледжу. Але я отримав пропозицію про роботу від військового підрозділу під назвою Кіберзахист. Це було інтригуюче, тому я прийняв пропозицію і в підсумку провів там 5 років.

Як ви потрапили до TodoMVC та Yeoman?

Я почав використовувати GitHub приблизно в 2011 році, але переважно як споживач. Я ходив би, розглядаючи різні репозиторії та знімаючи їх, бо вони виглядали весело. Я виправив деякі помилки у файлах README.md, але це було про це.

Одного разу я натрапив на TodoMVC, який допомагає вам вибрати фреймворк JavaScript. Це була дійсно приголомшлива ідея, хоча, оглядаючись назад, нам потрібні набагато вдосконаленіші програми, щоб насправді вирішити проблеми тестування продуктивності та можливостей фреймворку. Перше, що я запам’ятав про TodoMVC, - це те, що він мав гарний логотип. Це здається дуже поверхневим, але саме з цього мене почали.

Мені так сподобався логотип, що я вирішив ще трохи озирнутися. Я помітив, що у них насправді немає програми jQuery, тому я вирішив створити її. Я подав запит на витяг у вихідні дні і отримав відповідь від Адді Османі, який є супроводжувачем проекту. Він швидко об’єднав мій піар, що було надзвичайно приємним досвідом для такого новачка, як я. Я відчував себе добре, що мій додаток тепер включено до цього справді популярного проекту. Я робив це протягом декількох тижнів, і Адді додав мене до проекту, який був справді крутим.

Це насправді зацікавило відкритим кодом. До цього я був просто пасивним споживачем, але завдяки TodoMVC я відчув смак ведення великого проекту, над яким багато працювали. Але я багато чому навчився на цьому досвіді.

Через кілька місяців Адді пішов працювати в Google. Його першим проектом в Google був Yeoman, інструмент будівельних лісів для сучасних веб-додатків. Оскільки ми так добре працювали над TodoMVC, тому він вирішив запросити мене як зовнішнього співавтора.

Нашою початковою метою з Yeoman було створити набір інструментів, які кожен може використовувати для створення чудових веб-програм. Тоді ми не усвідомлювали, що неможливо вирішити проблему кожного одним інструментом, оскільки в Інтернеті занадто багато випадків використання. Yeoman став популярною конфігурацією, що багато розробників створили генератори для розширення Yeoman, які підходять для власних випадків використання.

Історія також повторюється, якщо подивитися на Create React App або Webpack. Хтось починає виготовляти цей продукт, який повинен вирішити одну проблему, але оскільки у кожного різні потреби, виникають проблеми. Коли ви зрозумієте, що цей інструмент не може охопити всього, ви додаєте конфігурацію. Ключовим є збалансований підхід. Ви повинні сказати “ні”, і ви повинні знати, коли казати “ні”. Ви можете розчарувати деяких користувачів, оскільки вони мають неясні випадки використання. Це найскладніша частина виготовлення інструментів, і це ще складніше в проектах з відкритим кодом, тому що існує так багато відгуків.

Чому ви захоплені відкритим кодом?

Я люблю відкритий код, і я думаю, що це повертається до кнопки "Переглянути джерело" в браузері. На мою думку, відкритий код - це найефективніший спосіб створення програмного забезпечення, оскільки він дозволяє нам будувати поверх роботи один одного. Кожен виграє, якщо хтось вирішує важку проблему. Відкритий код дозволяє мені працювати з неймовірними людьми з усього світу, з якими я б ніколи не міг працювати. Ми працюємо над тим, що для нас важливо, і зосереджуємось на тому, що потрібно громаді, замість того, щоб зосереджуватися на отриманні доходу.

Пол Ірланд має чудове відео на YouTube під назвою "Десять речей, про які я дізнався з джерела jQuery". Саме це мене зацікавило читати вихідний код jQuery. Пол Ірланд був правий, ти багато чому вчишся, фактично роблячи те, що хочеш навчитися робити.

Як щодо стійкості з відкритим кодом?

Це, безумовно, конфліктний момент, про який я останнім часом багато думав. Я працюю з відкритим кодом повний робочий день вже близько трьох років. Я не заробляю грошей, але було б непогано робити це повний день як оплачувану роботу. Vue.js від Evan You - це чудовий приклад того, як може працювати система з відкритим кодом. Він створив фреймворк, який хотіли всі, і ним користується досить багато компаній. Інші компанії та приватні особи стимулюють інвестувати в його проект, оскільки він корисний у виробництві. Головне - зробити ваш проект надійним. Я особисто не думаю, що внесків окремих людей недостатньо для підтримки проекту.

Я думав про те, щоб використовувати Open Collective, щоб ми могли збирати гроші для винагороди учасників та акцій подій. Webpack зробив там велику роботу. Я насправді був проти цього довгий час, тому що переживав, що у нас будуть очікування щодо небажаних змін, коли хтось вкладає гроші на проект. Зазвичай, якщо компанія інвестує в проект, вони хочуть, щоб робота була пріоритетною та проблеми швидко вирішені.

На даний момент я живу в Таїланді, і думаю, мені було б добре з меншими 1500 доларів.

У вас більше 1000 пакунків на хвилину. Як ти залишаєшся такою продуктивною?

Це помилкова думка. Люди бачать число 1000 пакетів, і вони думають, що я шалено продуктивний, але те, чого вони не усвідомлюють, це те, що більшість цих пакетів є маленькими та модульними. Вони майже робляться, коли їх публікують. Мені подобається порівнювати програмування з побудовою з Lego: я створюю безліч цегл Lego, які можна зібрати для побудови більших конструкцій. Я використовую їх з іншими пакетами перед публікацією, щоб переконатися, що вони вирішують мої проблеми. Ось чому користувачі не надсилають багато запитів на функції, оскільки вони настільки малі. Якщо їм потрібно щось більше, вони можуть просто створити ще один модуль. 90% мого часу витрачається на мої 10 найбільших проектів.

Яку одну пораду ви можете дати новим учасникам OSS, маючи справу з вибагливими та токсичними людьми?

Я займаюся відкритим кодом вже шість років, тому у мене з’явилася товста шкіра. Я не думаю, що мене вже щось турбує, тому що мені подобається думати, що я це все пережив. Я розмовляю з багатьма початківцями, які відчувають певну токсичність, а потім кидають. Відкритий код повинен бути цікавою справою, а не причиною стресу у вашому житті.

Моя порада новим розробникам полягає в тому, що ви не повинні дозволяти незнайомцям в Інтернеті негативно впливати на ваш настрій або ваше потяг. Не варто. Якщо у вас є можливість піти, скористайтеся цим - натисніть кнопку скасування підписки. Супровідники з відкритим кодом повинні пам’ятати, що користувачі не платять клієнтам. Ми надаємо їм щось безкоштовно у власний вільний час.

З токсичними людьми потрібно завжди бути більшою людиною. Це звучить неправильно, але я намагаюся вбити їх добротою. Якось це працювало у мене багато років. Наприклад, якщо хтось дратує, я постараюся бути максимально відкритим і добрим щодо ситуації. Я переконуюсь, що ніколи не буду саркастичним і не розмовляю з ними. Тролі харчуються вашим роздратуванням і дискурсом, тому, коли його там не буде, вони залишать вас у спокої.

Я використовую опцію вимкнення звуку скрізь, де це передбачено, особливо в Twitter. Добре усвідомлювати, коли хтось межує з токсичною речовиною, і набагато краще просто замовкнути цей голос і внести сигнал, замість того, щоб викликати зайві конфлікти.

Ви розробили деякі логотипи для власних модулів, вони чудові. Як ти навчився дизайну?

Я почав з того, що дотримувався онлайн-підручників, щоб робити круті ефекти. Раніше я використовував Adobe Illustrator, а зараз використовую Sketch.

Мені дуже цікаво розробляти, і я думаю, що більше програмістів повинні спробувати. Програмувавши годинами, приємно зробити перерву, щоб виконати якусь творчу роботу по-іншому.

Це також приносить користь моїм проектам шляхом створення логотипів, оскільки це надає проекту більше особистості. Зазвичай, коли ви вводите репо на GitHub, ви отримуєте однакові текстові речі: заголовок, деякий вступ та README.md. Приємно приправити це якоюсь графікою. Виявляється, люди частіше використовують проект, якщо є логотип. Наприклад, Вадим Демедес, розробник з України, подав цей запит на витяг відразу після звільнення AVA. Пізніше Вадим став членом команди AVA. Він сказав мені, що зацікавився AVA через приємний логотип.

Що спонукало вас переїхати до Таїланду? Розкажіть, як для вас виглядає типовий день.

Я насправді не дуже багато знав про Таїланд. Коли я працював на військовій обов'язковій службі, я планував поїздку. Я отримав пропозицію і в підсумку залишився ще чотири роки. Я просто пішов потоком, бо життя буває.

Одного разу, коли я готував телефонне інтерв'ю з Google, я просто вирішив, що якщо я коли-небудь збираюся подорожувати, це буде зараз, інакше цього ніколи не станеться. Тож я скасував співбесіду та на наступний день подав заяву про звільнення на роботі. Я купив квиток в один бік до Таїланду і все.

Я півроку робив рюкзаки в Південно-Східній Азії, і тут я зустрів свою дівчину. Зрештою я оселився в Таїланді, бо це був мій улюблений. Я люблю його багату культуру, привітні місцеві жителі та їжу. Я вже два роки живу в Таїланді.

Я працюю в місцевих кав'ярнях три дні на тиждень, тому що я більш продуктивний, коли біля мене є люди. В іншому випадку з дев'яти до шести я багато займаюся кодуванням та технічним обслуговуванням з відкритим кодом, іноді виконую свої побічні проекти. У більшості днів я отримую понад 20 запитів на витягування та безліч проблем, які потрібно виправити. Увечері я проводжу час зі своєю дівчиною Ім; ми обоє любимо гостру вуличну їжу на нічних ринках. Іноді телефонує черговий, і я опиняюся перед комп’ютером пізно ввечері.

Я не вивчав тайську мову, тому що, хоча я добре володію мовами програмування, розмовна мова набагато складніша за будь-яку мову програмування, а тайська особливо важка. Натомість моя дівчина вільно володіє тайською, російською, англійською мовами і досить добре володіє шведською. У якийсь момент я хочу вивчити тайську та інші мови, але час мені не потрібен.

Що спонукало вас розпочати проект AVA?

Я багато використовував Mocha, тому що зробив багато модулів, які потрібно було протестувати. Я насправді не був задоволений тим, як це працювало. Mocha вводить деякі глобальні об'єкти, але вони ніде не визначені. Оскільки я робив це в Node.js, у мене було багато асинхронних API, і це було не дуже зручно робити з Mocha.

Я хотів чогось більш простого та оптимізованого для мого випадку використання. Отож одного вихідного я вирішив над цим попрацювати і до неділі ввечері опублікував версію 0.0.1 для AVA на npm. Незважаючи на те, що JavaScript є однопоточним, введення-виведення в Node.js може відбуватися паралельно через його асинхронну природу. AVA цим користується і одночасно запускає ваші тести, що особливо корисно для важких тестів IO. Крім того, тестові файли запускаються паралельно як окремі процеси, що забезпечує потенційно ще кращу продуктивність та ізольоване середовище для кожного тестового файлу.

Оскільки я не встиг виправити помилки, і я хотів використовувати їх лише для власних проектів, це було приватно. Через півтора року я нарешті зробив логотип для AVA, прибрав репо, написав багато документації. Потім я опублікував проект.

Більшість користувачів, здається, дуже раді AVA, оскільки ми постійно отримуємо позитивні твіти про проект. Їм дуже подобається, наскільки синтаксис простий і як легко розпочати. Я просто зробив це, щоб подряпати власний свербіж, але виявляється, що інші люди мали таку ж проблему і сподобалося моє рішення.

В даний час я витрачаю більше часу на управління проектом, оскільки щотижня з’являється так багато нових питань і запитів, що залишає мені дуже мало часу для кодування.

Чому ви вирішили зайнятися розробкою macOS?

Я трішки програмував Objective-C, але не мав великого досвіду. Цього січня у мене з’явилася ідея щодо програми для Mac, і у мене було трохи вільного часу, тому я перейшов прямо до Свіфта. Саме так я зазвичай пізнаю нові речі. Це дуже спонтанно. Я починаю з бажання виготовити продукт, потім з’ясовую, які навички мені потрібні, щоб виготовити цей продукт, а потім навчусь їх. Ідея постає перед плануванням.

Swift набагато складніше вивчити спочатку, ніж JavaScript, але Swift блищить, оскільки він сильно набраний. Коли ви компілюєте, набагато менше шансів вийти з ладу, якщо ви правильно використовуєте додаткові засоби. Єдине, що мені не сподобалось у Swift - це те, що вам все одно доводиться взаємодіяти зі старими API в C.

Я написав кілька додатків для підвищення продуктивності та службових програм. Lungo - це програма в рядку меню, яку я написав, і ви знайдете її в App Store. Інший, який я написав, - Індикатор заряду батареї.

Який ваш план на наступний рік? Чи плануєте ви йти на повну ставку чи розглядати інші шляхи, щоб стати фінансово стійким?

Я живу за рахунок заощаджень останні три роки і працюю з програмним забезпеченням з відкритим кодом. В Азії набагато простіше, але це не триває вічно. В ідеалі, я хотів би зробити відкритий код фінансово стійким способом, але це складно, тому я, мабуть, зроблю деякі контракти наступного року.

Я спробував кілька різних речей. Одне, що я зробив, це попросити підтримки у файлі GitHub README.md. Я б назвав це не рекламою, а більше маленьким банером. Я трохи заробив грошей, але це далеко не те, щоб підтримати мене.

Я можу спробувати Патреона.

Які речі ви хочете вдосконалити в екосистемі JavaScript?

На мій погляд, екосистема JavaScript вже чудова, але у нас все ще є багато примх, які можна обійти на стороні браузера. З цим гігантським сценарієм збірки існує так багато проектів, щоб просто випустити простий додаток, тому я люблю Node.js.

Проблема браузерів полягає в тому, що вони дуже складні. У вас є мережа, про яку потрібно подумати, вам потрібно оптимізувати як розмір, так і продуктивність, у вас є безліч різних варіантів використання, фреймворки на вибір. Кожен намагається спростити це, але тоді ви в кінцевому підсумку виявляєте занадто самовпевненість, тоді ви додаєте конфігурацію, але шаблону занадто багато. Я не бачу легкого шляху вперед, якщо ви не виправите фактичну платформу, замість того, щоб створювати безліч рішень поверх неї. Я думаю, що ситуація покращиться, коли ми нарешті отримаємо модулі в браузері. Тоді вам може не знадобитися крок побудови для всього.

Чому розробники JavaScript одержимі єдинорогами?

Весь рух поні розпочався фактично із спільноти Джанго. Коли ви починали задавати потрібні вам функції, розробники казали “Я хочу швидший синтаксичний аналізатор HTTP” або “Я хочу ORM, який просто працює”. Одного разу один із основних розробників у списку розсилки Django відповів на один із запитів функцій "ні, у вас не може бути поні!" Весь рух єдинорога розпочався з відхилення цього запиту функції.

Існує навіть веб-сайт, присвячений симпатичному поні.

Я не пам’ятаю, як саме він поширився на спільноту JavaScript. Це було одне з тих речей, які просто трапились самі собою. Наявність чогось такого веселого та безглуздого, як єдинороги, допомагає мені працювати з програмуванням та OSS та піднімає моральний стан. Те саме стосується безглуздих gif-файлів.

Спочатку я опублікував це інтерв’ю в серії “Провід”, серії інтерв’ю, де представлені ті, хто розробляє розробницькі та дизайнерські продукти.

Цей проект став можливим завдяки спонсорству від frontendmasters.com, egghead.io, Microsoft Edge та Google Developers.