«Первый фотосервис в истории» и 5 вопросов к.NET-гуру: интервью с Дино Эспосито

24 марта 2018, 11:58

Благодаря приглашению Oxagile на недавнем .NET Summit побывал .Net-гуру, тренер, автор книг по .Net-программированию, технический евангелист Android-разработки на Kotlin Дино Эспозито. Специалисты компании взяли у него интервью, которое dev.by публикует с небольшими сокращениями.

Фото: Dino Esposito на .NET Summit в SPACE

Дино, как ты начинал свою карьеру?

На первой работе моим боссом был очень богатый человек с давней семейной традицией меценатства. У него была мечта создать всемирную базу данных для фотографий. Напомню, речь идёт о 1993-м: jpeg-формата ещё не существует, есть только bmp и tga, а Kodak ещё лишь предстоит изобрести Photo CD. Мы были абсолютными пионерами.

Представьте, нас 3 разработчика, мы сидели в углу огромного арт-пространства, где художники печатали материалы, лепили скульптуры и работали с разными видами искусства.

Мы разрабатывали проект 3 года и в итоге реализовали всемирную базу фотографий psphoto.com. Приложение, в котором пользователь имел собственный аккаунт, куда можно загружать и скачивать фото. Мы, чёрт возьми, сделали это в 1997-м!

Первое, с чем пришлось справляться, — это сжатие фотографий. Мы нашли американскую компанию, которая запатентовала алгоритм сжатия на основе фрактального подхода, и купили у них лицензию. Начальной целью было придумать, как разместить плёнку фотографий (24-36 штук) в цифровом формате на дискету. И мы сделали это.

Затем мы договорились с компаниями по распечатке фотографий по всей стране, чтобы они добавили в свои услуги оцифровку фото и их загрузку на дискету. Кроме покупки самой дискеты, клиенты устанавливали себе приложение — альбом для просмотра фотографий. И я горжусь тем, что это приложение написал я. На тот момент это было революционной идеей.

После этого мы принялись за разработку всемирной базы фотографий. Сегодня это может быть Google Photo, Flickr, а тогда нас было четверо: менеджер, лид и 2 обычных разработчика, одним из которых был я. Начали работу над проектом, но пару недель ничего не происходило.

Фото: Dino Esposito на .NET Summit в SPACE

Тогда я приехал домой и представил, как бы я реализовал такой проект. Свои идеи изложил на 4-5 страницах и в понедельник с этим пришел на работу. Менеджер увидел и сказал «Ребята, у нас наконец-то есть с чего начать». Так я стал реальным лидом проекта.

Мы прожили ещё 3 года на деньги инвесторов, но, очевидно, идея опережала своё время, и компания закрылась. Однако мы изобрели вещи, которые стали реальностью через 10-15 лет.  Это был стартовая точка моей карьеры.

Параллельно работе над фотостоком, я начал писать статьи для итальянских и американских журналов. В 1998-м я написал «Cutting edge», и мы недавно отпраздновал 20-летие этой статьи.

Когда проект psphoto закрылся, я писал статьи и книги, работал консультантом. Далее тренинги, работа над различными проектами и вот я там, где я есть. Надо сказать, что мне повезло. Я был правильным человеком в правильное время с правильными навыками: страсть к технологиям, навык публичных выступлений и написания статей. Я собрал множество возможностей и смог построить репутацию, которая до сих пор работает на меня.

Если бы я с этими же навыками начинал сегодня, у меня бы не получилось оказаться на этом месте.

Фото: Dino Esposito и команда Oxagile на .NET Summit в SPACE

А какие навыки нужны программисту сегодня, чтобы построить карьеру?

Я думаю сегодня ключевой навык — это способность читать между строк и видеть суть вещей. Как говорил Микеланджело: «Когда я вижу куб камня, я не вижу куб, я вижу форму в нём». Это замечательная метафора, чтобы объяснить, что навык видения важен больше, чем технические знания.

Если бы я давал советы, я бы рекомендовал развивать способность видеть перед кубом требований цельную систему. Это то, что выделит вас перед всем миром. И, конечно, это социальные навыки, в частности презентационные. И не только когда говоришь, но и когда пишешь, даже электронные письма. Крайне важно презентовать себя в правильной форме.

Топ-5 вопросов к Дино Эспосито от участников .NET Summit

Фото: Dino Esposito на .NET Summit в SPACE

1. Что выбирать: микросервисы или монолит?

Когда у меня такое спрашивают, я задаю встречный вопрос «а чего вы хотите?». Я решаю проблему, технология не имеет значения. Единственное, о чем я забочусь — это архитектура и люди, которые реализуют решение проблемы. Могу взять любой микс технологий, который удовлетворит требованиям решения.

Конечно, есть ряд людей, которые популяризуют определённые технологии. Но наша задача не выбирать наиболее крутые технологии, задача — решать  проблемы.

Люди всегда ищут серебряную пулю. А ищут её, когда не задают достаточно вопросов себе. В разработке мы должны делать вещи правильно. Не правильные вещи, а вещи правильно.

Есть случаи, когда заказчик просит решить проблему именно через микросервисы, хотя монолит ему подходит больше. Тогда задайте ему вопрос «зачем». Зачем ему микросервисы, как он видит такую архитектуру? Попросите его доказать, что предлагаемое решение наиболее верное. Задавайте вопросы до тех пор пока не получите ответ. И либо заказчик переубедит вас, либо вы его.

2. Что ты думаешь о .NET Core и его использовании на больших проектах?

Факт, что .NET Core демонстрирует скорость в 10 раз выше ASP .NET. Однако, важно учитывать то, как мы считаем общую скорость: приходит запрос, выполняется некая бизнес-логика, запрос возвращается. И если бизнес-логика занимает много времени, то скорость самого .NET Core не имеет значения.

Однако, ещё одно достоинство: вы можете деплоить .NET Core на линуксе.

Фото: Dino Esposito на .NET Summit в SPACE

3. Где и как применять Event Sourcing, чтобы решение не было over-engineered.

Ответ прост: ивентсорсинг нужен везде, где нужны ивенты.

Есть некоторые сценарии и домены, которые по своей сути cобытийны. Например, электростанция получает данные из турбин, солнечных панелей. Каждый импульс данных с устройств — это событие. Там нет пользовательского интерфейса, предусматривающего заполнение форм, нажатие кнопок, анализ и запросы к данным. Нет уровня представления (presentation layer) для таких данных. Таким образом, приходящие в систему данные и данные? с которыми мы работаем на уровне представления? по существу разные, что есть пример CQRS.

Когда у тебя нет уровня представления для непосредственно событий, ивентсорсинг реализовать легче. Ивент-сорсинг – буквально – о данных, основанных на ивентах.

Я вижу преимущества в использовании этого подхода практически в каждом событийном сценарии. Конечно, архитектура с ивентсорсингом сложна. Но я задаю вопрос «Могу ли я себе позволить не использовать ивентсорсинг? Можем ли мы себе позволить платить за дополнительную работу по написанию базовых операций?»

Ивентсорсинг удобно применять в энтерпрайзе, особенно с фреймворком «Memento». Однако он становится очень проблематичен, если нужно создать архитектуру с нуля.

4. Какие тренды сегодня можно выделить в архитектуре программного обеспечения? Как думаешь, что будет модным через полгода?

Фото: Dino Esposito на .NET Summit в SPACE

Мне иногда хочется послать к чёрту все модные словечки. Например, я виделся с топ-менеджером, который не знает ничего о технологиях, и прежде чем мы приступили к обсуждению самого проекта, он спросил: вы не против, если мы будем делать проект через микросервисы?

Моя жена говорит, что это потому что я старый, но я не люблю все эти модные словечки. Как уже я говорил, не технологии определяют развитие, а способность синтезировать вещи, способность видеть в кубе камня скульптуру.

5. Дино, а как часто тебе поют песню «Despacito»?

Была смешная история недавно: когда я присоединился к новой команде, у нас стал вопрос создания почтового ящика. А политика компании предполагает, что берётся первая буква имени и фамилия. И очевидный выбор был desposito. CEO компании взглянул и сказал «Никогда в жизни!»

Обсуждение