Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Мой опыт продуктовой разработки

2 комментария

Возможно всё, что я написал в прошлом посте — слишком очевидно. Жизнь жестока, капитализм, все такое. Что же делать? Очередной сумбурный пост.

Для начала, определитесь с целями. Если вам 20 и вам нечего терять, у вас все еще есть шансы попробовать мир “настоящей работы” просто чтобы набить руку на реальном кодинге и при этом не потерять веры во все святое. И то, как повезет. Я, когда приехал в РФ, устроился на возможно худшее возможное место со средним возрастом “за 40” и сотрудниками которые, по собственному же признанию, “звезд с неба не хватают”. Я работал в зааутсоршеном отделе крупного международного концерна, где народу было по сути пофиг практически на все, зарплата была скромной, но и нагрузка у большинства людей колебалась где-то вокруг нуля. Многие люди просто поддерживали различные легаси продукты (например, основной продукт использовал DCOM что было само по себе забавно), в то время как мне “повезло” и я попал на новый продукт, который мы втроем писали на C#.

Зарабатывал я минимум. Зато ездил час туда час назад на метро, и как следствие адово болел (в метро цепляешь все что можно), т.к., сюрприз, моя имунная система была настроена на Англию и таких вещей как “ангина”, “гайморит” и так далее я не видел и не знал. При этом в Англии другие эпидимиологические проблемы, например засилье MRSA в госпиталях. Но я не хочу уходить в сторону обсуждения “социализированной” медицины т.к. там все плохо. Так или иначе, начало у меня было не из лучших…

Первое что нужно сделать это глянуть на то, какие у тебя конкурентные преимущества по сравнению с другими людьми. У меня это:

  • Свободное знание английского языка

  • Очень хорошие коммуникационные навыки (в универе, до ухода из comp sci на психологию, я был типичным закомплексованным задротом)

  • Неплохое знание математики (родители матфизики были изначально, если что)

  • Паспорта нескольких стран

Все это как-то амортизируется, да? Да не то что бы. Вы не представляете, сколько ИТ контор в России мне открыто говорили “да у нас тут все на английском шпарят”… ага, ага, верю (поймите: HR существует для того чтобы вам лгать). Пардон, в последней компании где я работал, где Н-сто человек, даже руководство (директора, лиды проектов) по факту знают английский настолько плохо что мне тяжело смотреть когда они выступают на всяких сборищах. Собственно, поэтому отдел евангелизма там состоит из иностранцев, и я был там единственный русский (ну, с русскими корнями). Вообще это немного парадоксально/клинично, что люди могут выучить сколько угодно ЯП но когда дело касается реальных языков, тут все динамят.

Заметьте что в списке выше напрочь отсутствуют навыки программрования как преимущество. Людям по барабану на твои coding skills. И вообще, все что ты делаешь, каким бы высоким полетом оно не являлось, никак не влияет на твою зарплату. Соотственно, стимула делать что-то хорошо, развиваться, покрывать код тестами, и так далее нет вообще, т.к. любой здравомыслящий человек делает cost-benefit analysis на основе реальных нужд: могу ли я купить дом, машину, есть ли у меня деньги на роды ребенка (у меня в свое время не хватило, серьезно!). Еще раз: то насколько ты хорошо программируешь никак не влияет на кол-во денег на личном кошельке. А обсуждать что-то отличное от личного кошелька (например собственное эго, согретое красиво решенной задачей) я считаю кощунством.

Мне мало было просто писать хороший код, я хотел писать код быстрее. И тут я, как самый инициативный, взял и запилил под студию кастом тул для того чтобы в студии брать XML файл и использовать XSLT чтобы приобразовывать его в C# код. Я успешно воткнул эту штуку в проект, и она позволила очень быстро через XML нагенерить в файле .Designer.cs стопятьсот однотипных панелек. Это было классно и осталось в проекте даже после того как я ушел из компании. Коллеги правда пытались это саботировать путем изменения нагенеренных структур (надо было бы еще флажок readonly у файла ставить, что ли), но это не сработало и все вроде как поняли что да, придется установить кастом тул зато какая радость когда все так быстро создается.

Вот еще один пример, который раскрылся только после того как я уже уволился: была такая задача физические формулы в код переводить. То есть, есть просто формула которая считает физический показатель, нужно ее реализовать в C#, казалось бы в чем проблема. На каждую формулу программист, который превращал формулу в код, брал один день. Один スカ день!!! А я подумал, а почему бы не автоматизировать этот процесс — взять MathML формулы, распарсить ее и превратить в C#? Так на свет появился MathSharp который, будь я еще в компании, свел бы эту задачу практически к нулю и, главное, обеспечил бы более правильный результат, т.к. автоматическая конверсия по определению эффективнее чем ручной перевод. To err is human.

Что происходит когда вы слишком быстро решаете задачу за которую вам платят? Может вы думаете, что решив 2× задач, вы как бы получите 2× денег? А вот нифига. Так эта экономика не работает. Реальная производительность разработчиков разнится в десятки (а то и сотни раз), но их доход отличается обычно на погрешность. Причем с социальной точки зрения, “модель Боинга”, когда у вас практически плоская иерархия и очень маленькая разница в доходе, работает лучше потому что люди не психуют что кто-то получает больше. Но чем больше таких структур вводится, чем дальше мы от меритократии — идеи о том, что каждому полагается по способностям, по таланту и вкладу в проект. Это вам эта идея кажется здравой, а вот в той же леволиберальной долине есть движение против меритократии. Против. Меритократии. В 21 веке. Ладно, не буду снова уходить в политику.

Автоматизация — это действительно классная штука. И уже потом, когда я на 2½ года остался у разбитого корыта, я только ей и занимался. Из полезного я запилил X2C, тулу которая из Excel умеет генерить код, и даже целые приложения. Опять же, это очередная манифестация моей веры в то, что автоматизация сократит количество телодвижений и поможет удалить из нашей работы максимум рутины. А также удалить из нашей индустрии максимум людей т.к., простите, количество планктона который делает хз что в крупных конторах просто бешеный. Да я и сам бывал в положении когда у тебя нагрузка от силы 1 час в день. Это просто безумные реалии большого энтерпрайза где никто не куда не торопится, а на то что лично у вас, в вашей жизни, есть 100500 экономических целей всем как бы плевать.

Вообще разработка собственного продукта — это интересный опыт. При том что сделать сайтик и начать продавать с деньгами капающими на онлайн-счет можно практически моментально и беззатратно. Главное иметь идею, хоть какую-то, и даже если она не выстрелит, все равно интересно. Мне иногда приходят имейлы типа “у вас купили на $150”, я думаю “что это?” а оказывается кто-то еще берет, хотя я своими продуктами уже не занимаюсь за исключением саппорта.

Главное в разработке собственного продукта это то, что ты внезапно никому ничего не должен. Сам сделал, сам денежку получил. Это очень вытрезвляет после того как ты сидишь на чужих деньгах, проедаешь 90% зарплаты и не видишь никаких перспектив. Кстати, насчет перспектив! Примерно через год после того как я начала работать, высшему руководству пришла в голову гениальная идея сделать меня “процессным инжинером”, т.е. человеком который занимается не собственно разработкой а формализацией процесса разработки.

И вот тут-то я понял что процесс не нужен. Что процесс разработки — это не решение, это диагноз болезни под названием “посредственность”. Особенно это было заметно когда я потом пошел работать в компанию без процессов где все просто делалось, без лишних митигов, церемоний и прочих CMMI. Это как пелену с глаз сняли. Теперь для меня наличие процесса — это диагноз, это значит что людям которые работают в компании нельзя позволить автономно делать какую-то фичу без лишних церемоний. А это многое говорит о компании. Мне кажется если уж и работать с людьми, то работать с теми кто сам умеет планировать и реализовывать. Хотя конечно лучше работать без людей.

Тут я должен сказать очевидное: я не достиг каких-то успехов в продуктовой разработке. Отчасти потому что продукты у меня нишевые, отчасти потому, что у меня нет такого большого энтузиазма в этом направлении. Продукт должен приносить пользу, ты должен плясать вокруг клиента. Я это конечно могу делать, но в очень ограниченных количествах. В идеале, нужен такой продукт который, будучи написан, просто продает себя до бесконечности без требования какой либо модернизации. Продукты мои конечно до сих пор кто-то покупают, и это при полном отсутствии всякой рекламы. Как находят сайт? Я не знаю. Я воспринимаю все это как еще одну каплю пассива.

Я бы вам всем советовал попробовать сделать хоть какой-то трэшовый пятидолларовый продукт, сделать сайтик на полторы страницы, открыть счет на e-junkie и попробовать что-нибудь продать. Просто ради эксперимента. Ключевая особенность тут в том, что вы сами все сделали и продали. Прийти в контору и работать над чужим продуктом — это совершенно другой расклад, т.к. в этом случае вы никогда не получите никакой доли от продаж, только фиксированную зарплату и, может быть, 13-ю зарплату в конце года, если повезет.

Продолжение следует…

Реклама

Written by Dmitri

18 ноября 2018 at 13:50

Опубликовано в Career

Tagged with

Что я думаю про карьеру в ИТ

19 комментариев

Я иногда, раз в несколько месяцев, посещаю всякие мертвые ресурсы вроде Хабра и натыкаюсь на статьи про карьеру вроде этой. Лично у меня уже давно был соблазн написать что-нибудь такое каверзное про карьеру в ИТ. Всегда ведь легче писать про прошлое чем про будущее, так?

Так-то может быть оно и так, но я для этого плохой кандидат т.к. никакой “карьеры” в ИТ я не сделал и, если повезет, я уже в ИТ до конца своей жизни не вернусь и никакую “карьеру” там точно не сделаю. Ну, в том смысле чтобы участвовать во всех этих крысиных (а точнее улиточных) бегах непонятно за чем.

Уровень моей тошноты по отношению к ИТ для карьеры (а не как ИТ = инфраструктуры для решения задач) рос с годом от года и наверное никогда не достигнет своего пика. Я все еще проклинаю себя за то что, как дебил, пошел после колледжа на Computer Science хотя надо было идти на чистую математику, т.к. после математики, все эти технические дисциплины вроде “программирования” — это какая-то детская тривиальщина, которую даже упомянать как-то стыдно. Для меня программрование — это не какая-то вещь в себе, это практический навык, такой же как знание английского языка.

К чему все это? Просто иногда люди меня спрашивают типа, что нужно делать, куда нужно пойти если нравится кодить? А у меня нет никакого ответа. Вообще, приоритеты должны быть другими. И вот почему.

Во-первых, я сторонник индивидуализма. Личность — хорошо; общество, большинство — уныло и посредственно, и чаще всего ведет за собой тиранию и насаждение особого мнения с которым ты прям должен быть согласен. Любой большой энтерпрайз с программистами это по определению такое же уныние и посредственность, а все “звезды” очень быстро уходят в свободное плавание т.к. понимают какой это тлен делать добавленную стоимость владельцам того офшора (а у нас все ИТ = офшоры) в котором они работают. Вы можете прийти в большую успешную компанию и, например, обнаружить там целый отдел людей которые полностью некомпетентны для выполнения тех задач на которые их наняли… и это нормально! Вопрос в том, надо ли вам взаимодействовать с этими людьми?

Во-вторых, нищета. Относительная конечно нищета. Да, у вас будет квартира, машина, участок с домиком в садоводстве и редкие полеты на какие-то теплые острова (главное чтобы не в крым). Но на этом, пожалуй, все и закончится. В финансовом понимании, лучшее что вы можете сделать по карьере в ИТ это переехать в Долину, получить при этом где-то в диапазоне 100-200 и при этом отдавать 50%. Если ваша цель “делать соточку” (100 в месяц), то даже в Долине это сделать достаточно сложно. Плюс, я для вас открою секрет, калифорния это засилье Американского либерализма, там всякие Goolag, “феминизм”, “дайверсити”, “мультикультурализм” и другие слова, за произнесение которых в слух нужно высылать первым же рейсом в Венесуэлу. Мое отношение ко всему этому вы и так уже знаете.

Нищета кстати не только на уровне личного кошелька. Да, личный кошелек превыше всего и я, даже когда начинал работать в ИТ, очень удивлялся что со мной никто не делился прибылью (хаха, наивность!) от продаж и все такое. Но нищета существует не только на уровне зарплат (зато у нас бесплатные печеньки на каждом этаже!), но и на уровне оборудования. Когда ты приходишь в большую контору а тебе дают комп с одним экраном и 4гб оперативки, и без SSD, вот тут-то ты понимаешь, что обороты компании никак не связаны с условиями работы и что все вообще плевали насколько эффективно ты работаешь. Это отрезвляет. Это не плохо или хорошо, и я не собираюсь ныть, но когда твой домашний комп в 10 раз дороже, чем рабочий, это о чем-то все же говорит.

А я, прикиньте, фанат железа! Мне подавай FPGA, Xeon Phi, CUDA всякую, и побольше, побольше! И я сейчас уже знаю как все это использовать. Поэтому когда я говорю про 10тыс ядер или десятки тесл люди удивляются, а я считаю, что это “ничего особенного”. Шесть мониторов (ну или хоть три!) на столе это тоже тривиальность, это просто фигня, ты к этому привыкаешь и всё, и компании это стоило бы копейки поставить и люди бы привыкли (не спорьте, привыкли бы, это как электровелосипед, все сначала сомневаются а потом фигеют с того насколько это круто). Мне например стремно было работать в компании, где сотрудники сами за свои деньги покупали SSD или даже отдельные компы (true story, bro!) чтобы делать свою работу. Это бред. И при этом как бы крокодил ловится, кокос растет, все довольны тем что есть, главное зарплату в конце месяца.

Конечно, мое основное несогласие с организованным трудом это время. У меня помимо работы есть 100500 разных вещей, и я не могу делать их на работе. Я хочу есть, спать, читать книги, вступать в интимные связи и т.д. когда я этого хочу, а не в строго определенных промежутках. А еще я пью вино, могу сходить в кино с утра, подирижировать стройкой или улететь на Канары. Для меня офис это нонсенс времен 90х. Но я, как вы понимаете, ратую не только за удаленку, т.к. это все равно подразумевает работу с кем-то еще. You need to go deeper.

И вот тут самый гвоздь программы. Я не вижу будущего в работе с людьми. Я считаю, что у нас есть отдельные, конкретные, выдающиеся личности которые хороши сами по себе. Я знаю что один конкретно взятый человек может, независимо от других, генерить нескромные суммы денег, а приносит он пользу обществу или нет — это вообще неважно. Individuals over societies, все такое. Спасение утопающего есть дело рук самого утопающего. У нас полон ми возможностей где любой талантливый программист может “дожать” до соточки или больше, при этом не создавая “стартап” (само по себе грязное слово).

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

Не поймите меня неправильно — ИТ это прекрасно! Есть очень много действительно интересных и инновационных технологий, а если шагнуть чуть в край, в сторону электроники например, то интересного и того больше. Но работая в ИТ, вы почти наверняка не столкнетесь ни с чем подобным. Поэтому если вы любите деньги, технологии и прогресс, я советую искать другие пути.

Written by Dmitri

15 ноября 2018 at 14:28

Опубликовано в Career

Dynamic container proof of concept

3 комментария

Итак, я обещал запилить proof of concept идеи касательно динамически изменяемых программ, так что давайте начнем. Для начала нужно сделать контейнер с набором типов и механизмом регистрации:

public class DynamicContainer
{
  private Dictionary registry
    = new Dictionary();
  public void Register()
    where TReturned : TRequested
  {
    // todo
  }
}

Пока все достаточно банально, и мы даже не разбили контейнер на “билдер” (классический GoF паттерн) и сам контейнер, как это делает например Autofac. Но в какой-то момент нам придется таки обойти весь граф зависимостей (давайте представим что мы делаем только property injection) и записать куда-то эти результаты.

Это все очень легко делается. Просто добавляем очередной dictionary который держит список зависимостей для каждого типа. Кстати сюда же можно добавить ассоциативный контейнер в обратную сторону — специально для тех кому лень искать в нугетах bidirectional directionary:

private readonly Dictionary<Type, HashSet> dependencies
  = new Dictionary<Type, HashSet>();
private readonly Dictionary<Type, HashSet> affected
  = new Dictionary<Type, HashSet>();

Теперь, в момент регистрации любого компонента, эти структуры нужно заполнять. Давайте представим что у нас property injection реализован с помошью атрибута [Service]: тогда мы просто берем и для каждого типа находим все проперти с этим атрибутом, и добавляем все что надо в оба словаря:

public DynamicContainer Register(Type requested, Type returned)
{
  var props = returned.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)
    .Where(p => CustomAttributeExtensions.GetCustomAttribute((MemberInfo) p) != null);
  foreach (var p in props)
  {
    dependencies.Set(returned, p.PropertyType);
    affected.Set(p.PropertyType, returned);
  }
  registry.Set(requested, returned);
  return this;
}

Здесь и далее, Set() — это upsert операция.

Теперь, в процессе создания типа, должны быть удовлетворены все его зависимости, то есть:

private object Resolve(Type type)
{
  var actualType = registry[type];
  var instance = Activator.CreateInstance(actualType);
  if (dependencies.ContainsKey(actualType))
  {
    foreach (var p in actualType.GetProperties(BindingFlags.Instance|BindingFlags.NonPublic)
      .Where(p => p.GetCustomAttribute() != null))
    {
      p.SetValue(instance, Resolve(p.PropertyType));
    }
  }
  return instance;
}

Иначе говоря, мы пытаемся рекурсивно внедрить все зависимости для нужных пропертей. Давайте еще сделаем небольшой helper-метод для выдачи инстансов:

public T Resolve()
{
  return (T) Resolve(typeof(T));
}

Теперь сценарий: у нас есть машина которая использует некий сервис…

public class Car
{
  [Service]
  private IAlarmService AlarmService { get; set; }
  public void TriggerAlarm()
  {
    Console.WriteLine("Triggering alarm⋮");
    AlarmService.Trigger();
  }
}

Сам по себе сервис имеет метод Alarm() который просто пишет в консоль:

public class AlarmService : IAlarmService
{
  public void Trigger()
  {
    Console.WriteLine("Alarm has been sent to HQ");
  }
}

Так вот, все это счастье можно спокойно использовать вот так:

var container = new DynamicContainer();
container
  .Register()
  .Register();
var car = container.Resolve();
car.TriggerAlarm(); // Alarm has been sent to HQ

А теперь собственно то, что я хотел показать: допустим мы хотим сервис AlarmService поменять в рантайме. Делается это вот так:

var text = File.ReadAllText(@"..\..\AlarmService.cs");
text = text.Replace("has been sent", "has NOT been sent");
var ipc = new InProcessCompiler();
var newServiceType = ipc.Compile(text);
container.Register(newServiceType.GetInterfaces()[0],
  newServiceType);

Тут происходит следующее:

  • Мы вычитываем сорцы сервиса который хотим менять. Заметьте что это подразумевает что у нас one class per file.

  • Берем и меняем исходник. На этом этапе можно также сохранить эти сорцы в тот файл откуда взяли.

  • Создаем компилятор (это отдельный класс который просто использует компиляторный API чтобы что-то собрать) и компилируем сорцы.

  • На выходе у нас — System.Type. Просто берем и регистрируем его заного в контейнере.

Вот собственно и всё — реализация обновилась. Можно пересоздать объект Car и тут же воспользоваться новым сервисом:

car = container.Resolve();
car.TriggerAlarm(); // Alarm has NOT been sent to HQ

Такой вот proof of concept. Думаю вы поняли, что если держать реестр всех созданных контейнером объектов (как WeakReference-ы конечно же), то можно прямо в методе Register() пройтись по выданным объектам и обновить их сервисы, без какого либо пересоздания. ■

Written by Dmitri

25 июля 2018 at 20:19

Опубликовано в .NET, Technology

Development 2.0

7 комментариев

Ох вау, новый блогпост, а вы-то думали что Нестерук suka мертв. Ну, еще нет, хоть я на пенсии и пишу это на острове пенсионеров (Мадейра). Какой-то адский бабулькоград.

Так ну ладно, я тут пришел поговорить про Optane. Точнее это отмазка. Вся суть в том, что я снова хочу толкать все те же свои программитские идеи которые и раньше толкал, только Optane делает это чуть проще.

Итак, о чем мы? Да о том, что скорость SSD-образных технологий постепенно приближается к скорости RAM — настолько, что те модели Optane которые есть на рынке сейчас — это М.2 драйвы для кэшей для тех у кого еще нет SSD и те кто хочет малой кровью получить прирост к перформансу.

Конечно Intel — это, извините, лживая и не особо заботящаяся о своих клиентах компания. Это я как пользователь всего их стэка говорю, им глубоко пофиг что их компилятор накрывается на тривиальных примерах с “Ошибка 3”, а про то что прирост скорости процов в последнии несколько лет чуть ли не нулевой (ну, процентов 15) вообще говорить не стоит, как и о продолбанном Broadwell.

Так вот, Optane — это такой “звоночек” что идет, пусть и не очень быстро, самая настоящая конвергенция, когда нет разницы в скорости и персистентности между RAM и “долгосрочными” носителями информации. А это в свою очередь открывает интересные возможности, и не только для геймдева где “Loading screen” это нечто ругательное.

Что за идею я вам хочу толкнуть? Да все ту же идею что программы должны быть всегда запущенны, и что разделение программы на этап компиляции и этап запуска — это бред. Еще со времен Java 2, простихосподи, у нас была возможность скомпилировать программу прямо из программы и динамически ее подгрузить. Вот насчет отгрузки все сложнее (легко в C++, очень сложно в .NET) можно долго писать, но возможность такая существует. Итак, что бы хотелось иметь?

  • Программист запускает программу как “чистый лист”, то есть по сути запускает лишь работающий, пустой IoC контейнер без регистраций (и SMS).

  • Программист редактирует программу “по живому”, в процессе запуска. Контейнер дает ему возможность добавить новый класс/интерфейс или поменять существующий. Это кстати — не совсем тривиальные задачи, но в базовом сценарии, когда все зависимости заинжекшены — вполне реально.

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

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

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

Вот это, мои дорогие, то как я вижу Development 2.0 — новая парадигма, в которой ничего не нужно пересобирать и перезапускать. Нужен просто такой IoC контейнер, который настроен на вечную персистентность системы и умеет худо бедно отгружать типы (или делать грамотный перезапуск). Технология динамического прототипирования, про которую я неоднократно говорил — это proof of concept того, про что я тут пишу.

А что, собственно, происходит дальше? Неужто мы редактируем прямо продакшн? Ну это уже от вас зависит — если вы захотите запилить “параллельную реальность” для проверки идей и тестирования, то это реально! И будет работать намного быстрее т.к. все уже загружено в процесс и никакой рекомпиляции “всего и вся” делать не нужно! А уже наработанные технологии code coverage дадут возможность трекать изменения и ранить тесты только на то, что реально поменялось.

Чтобы не быть голословным, я пошалуй напишу proof of concept на это дело. Какие-то наработки у меня уже есть с давнего dotNext, сейчас самое время сделать апдейт…

Written by Dmitri

5 июня 2018 at 19:42

Опубликовано в Programming

Tagged with

Отзыв о конференции DotNext Piter 2018

7 комментариев

Вот и ДотНекст закончился, а поскольку я уже практически перестал писать в блог что-то содержательное, напишу хоть о конференции, т.к. я там был, мед-пиво пил, билет получил халявный но зато купил билет коллеге так что все норм.

Первое что скажу — 12 спонсоров в этот раз, это круто, вроде в 1й присест был JetBrains один и то бесплатно, а тут 12. Правда спонсоры это в основном сервисные компании, которые платят копейки (копейки в моем понимании это <$1kk/год) — EPAM, DataArt (черт, я там работал целых аж 3 месяца), и прочие подобные конторы. Из продуктовых там были JetBrains, Fast Reports, хз не помню кто еще. Главным спонсором был Альфабанк, для меня фраза “ритейловый банк” синоним “раковая опухоль”, да не будем о плохом, товарищи. Короче я понял что я unemployable :)

Так вот, посетил я не все доклады, а только некоторые, так что вот мои отзывы:

Apps, algorithms and abstractions: decoding our digital world, Dylan Beattie: давайте начнем с того что SkillsMatter это какбы контора которая, как и я, зарабатывает деньги. Что они там делают — ну, тренинги делают. А сам по себе доклад был 100% популистский, что хорошо, т.к. конфа должна начинаться и заканчиваться чем-то легким. Поэтому было вообще ОК, Дилан рассказал про то сколько всего сложного происходит в тот момент когда ты получаешь на мобильнике картинку котика и пишешь LOL. Отдельный ему респект за русскоязычный юмор (щи да каша пища наша!), очень хорошо подготовился. Почему правда англичанин одевается как техасский ковбой история умалчивает, наверное это часть его рок-имиджа — это ведь он (и Вагиф Абилов, кстати!) играли рок на закрытии первого дня. Годно.

Fastware, Andrei Alexandrescu, The D Language Foundation — эээ, D какбы мертв, а Алексадреску обычно делает доклады на С++ конференциях вроде ACCU, C++Now и прочие, т.к. он легенда С++ мира который ушел в D. Который не взлетел — он хоть и делал там что-то на D в фейсбуке, но в отличии от Rust нехватило момента и язык не смог преодолеть силу тяготелния. Доклад Александреску показался мне немного несобранным и лишенным консистентности — он конечно потрудился чтобы перевести свои примеры в C#, но примеров было мало и они были клинично-прецезионными. Скорость — это не про те языки где нельзя напрямую писать ASM или манипулировать SIMDом, хотя что-то на C# у вас определенно получится. В целом, доклад не особо понравился.

Lightweight microservice collaboration using HTTP, Christian Horsdal — типичный консалтерский доклад высокого уровня. Я еще должен подчеркнуть тут, что microservices are not a thing: коммуникация через веб-интерфейсы это хорошо, но уровень дробления должно быть адекватно, и резать все на “микро” это очень тупо и никому нафиг не нужно. Поэтому просмотрел доклад, не почерпнув ни одной особой мысли. Да, в микросервисах появляются задачи вроде “как описать весь API”, “что нужно делать при поломке”, но эти задачи не отличаются от аналогов с работос с очередями вроде MSMQ, RabbitMQ и всем этим остальным адом. CQRS/ES — это круто и нужно. Микросервисы — скорее все же нет.

Взаимодействие микросервисов по HTTP/2, Евгений Жиров — вот этот доклад мне понравился, т.к. это была реальная case study о том как использовать HTTP/2. Докладчик объяснил зачем им это было надо, на какие грабли они наткнулись и про “а как же .NET Core”. Совершенно годный доклад, и хоть его основной вывод “нужно подождать”, мне понравилось.

Building real world production-ready web APIs with .NET Core, Alex Thissen — еще один доклад по микросервисам который тоже меня не впечатлил. Было чуть больше конкретики, у докладчика был реальный проект, но опять же весь рассказ как-то скомкался воедино, у него не было какой-то общей структуры верхнего уровня, и в результате я не могу сказать чтобы я из него что-то важное. Опять же, microservices aren’t a thing поэтому горевать по ним никто не будет.

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

Вот как-то так. В Москву я на DotNext не поеду — терпеть не могу этот город, и даже когда был евангелистом испытывал от него тошноту. И вообще, в этом году у меня было желание съездить на Build, но всем из РФ закрыли визы, а лететь одному — ну, в принципе реально, но как-то совсем одиноко. Как-нибудь в другой раз, когда санкции снимут. Хотя я почти уверен что их уже вообще не снимут. Ну еще несколько лет точно.

Да, похвастаюсь, у меня вышла книжка. Такие дела.

Written by Dmitri

24 апреля 2018 at 22:06

Опубликовано в Events

Tagged with ,

Итоги 2017 года

17 комментариев

Обидно когда приходит конец года а у тебя нет желания писать “что мы достигли в 2017”. Все от тебя ждут пост, but you are not helping. Why are you not helping, Leon? (гребаные репликанты)

К слову, новый Blade Runner годный фильм… хотя новых идей там где-то около нуля. Dunkirk тоже годный, хоть этот блог пока и не превратился в обзор кино и прочего (хотя вон по велосипедам в отдельной страничке уже вагон написано).

Этот пост — стена текста без картинок. Не знаю, вроде кому-то такой формат подходит.

Итак, поговорим за достижения. В этом году я худо бедно запилил Kinetica — платформу которая рендерит всякий красивый текст. На базе Кинетики удалось записать один видеокурс, Design Patterns in Java, и несмотря на то что конкретно про механизмы рендеринга которые использовались для курса я не получил слишком много комментов, сам курс людям понравился. Еще бы, я знаю что я делаю. Да, и если кому интересно, Kinetica написана на C# и Direct2D/DirectWrite, и нет, пока что ее скачать нельзя.

В моей голове все больше кристализуется понятие Education 2.0, то есть новый виток обучения. Ествественно, просто красивый анимированный рендер текста — это только начало. Для прогресса в этом плане мне нужна помощь (сейчас у меня 2 сотрудника), время, а также свежие технологии — тут и “мобилка”, и боты, и AR/VR. Будет очень интересно, а главное прибыльно, т.к. с растущей автоматизацией общества (где автономные машины, а?) все большей массе людей придется идти в, гм, автоматизаторы, а это как раз программирование и иже с ним.

Так, что еще? Ну, про алготрейдинг я писать не буду, отчасти потому что “деньги любят тишину”, а отчасти потому что начни я тут писать каким матаппаратом оперирую (пежноство, но у меня реально безумные вещи), у вас просто завянут уши, глаза, или что там. Я могу разве что литературу порекоммендовать, для начала читайте Оксендаля, он годный.

В плане гаджетов… ну, если не брать электровелы (блин, я все еще прусь этой темой), я очень мало нового попробовал. Ну, механические клавиатуры (уже писал вроде на эту тему, советую всем начинать со свич-тестера, первой вашей механической клавой вполне можно брать WASD). Что ещё? iPhone X попробовал, с точки зрения фото он Г, камеры реально некачественные, и я не понимаю, как обзоры в интернете все так подтасовали что ли, короче убогий софт для фото, хотя машинка резвая и вообще. Буду воровать у моей SO для тестирования мобильной платформы.

На 2018 у меня нет никаких технологических амбиций вообще. Вот например ироничная ситуация: у меня комп которому лет 8, у него 3 монитора 1080р… я бы мог сейчас вбросить деньжат и сделать 2×3×4K, там GTX1080, все дела… но парадокс в том, что все итак работает! И приносит деньги! А мотивации затеять новую сборку компа как-то пока нет особо, если учесть насколько все это нудно. Проще просто взять и купить свежий ноут.

Эпоха перенасыщения

У меня в последнее время такое впечатление, что народ насытился и даже пересытился всяким дорогим добром. Помнится, обедая в Аспене, я спросил своих американских коллег, нормально ли что местный веломагазин продает велосипеды по 5 тысяч долларов, по 7… они странно на меня посмотрели и сказали что, ну вообще да, что тут странного? И сейчас я сам уже не понимаю, откуда у нас образовался такой огромный разрыв в доходах между теми кто плывет по течению и тех, кто делает хоть что-то.

Перенасыщение идет во всех сферах. Все кажется пройденным, одним и тем же. Летишь на Канары в 100500-й раз и понимаешь что ничего особенного нет. Смотришь на “распродажи” Massdrop (на самом деле немного разводиловский сайт) и понимаешь что у тебя захламлено абсолютно всё, что тебе не нужен 23-й нож или 5-ю клавиатуру или еще одни наушники. Хотя было бы неплохо.

Перенасыщение не тольков материальном плане, но и в информационном: можно пойти в тырнеты и выкачать все интересные сериалы и смотреть до посинения. Но ловишь себя на мысли, что скроллишь к интересным моментам. Или вот еще пример: я включаю видеокурс чтобы разобраться с новой технологией. Но хватает меня ненадолго: хочется быстрее, быстрее, больше инфы, примеров, меньше слайдов. Терпения не хватает досмотреть.

У всех вокруг примерно те же проблемы: short attention span, нет желания ни во что вникать, хочется получить “быстрый контент”. Поэтому меня как раз и не удивляет, что все мои самые прибыльные идеи пришли с максимальной дозой страданий: страдать-то никто не хочет как раз.

Политический сдвиг

Мне, по большому счету, всегда было плевать на политику: я сторонник limited government и мне главное чтобы ко мне не лезли. Санкционная еда у меня имеется (я этот пост в Лапе печатаю, намек!), рутрекер в браузере открывается, чего еще надо? Но если серьезно, та смена парадигмы, которая идет в европе… мне все это очень не нравится, потому что европа — это все еще мой дом.

Я конечно говорю про терроризм и массовый наплыв иммиграции. Тут нужно пояснить: я не сторонник социализма вообще. Шведская модель забрать все у богатых и распределить беженцам — она экономически необоснована. Особенно в плане культурной несовместимости всех этих ребят с нашей культурой. Да-да, я про зоофилию и прочий бред, которым наши гости из Сирии любят баловаться. Бррр.

Мне всегда было плевать на разделение между либералами и консерваторами. Но сейчас у либеральной стороны политики какие-то странные цели: узаконить однополые браки, проводить смену пола детям (детям, блять!), и еще массой всякого ахтунга который к основной массе населения вообще никакого отношения не имеет. Взять например всю эту панику насчет туалетов для трансгендеров… блин, ну серьезно? Я не могу все это воспринимать всерьез.

В связи с этим понятно почему люди так рады, прям ликуют, победе Трампа. Потому что Трамп большой железнодорожный болт забил на весь этот идиотизм. Он (ну, Мэттис) разбомбил к чертям ИГИЛ (Россия тоже руку приложила!), и класть он хотел на всякие Пакистан, Иран, Палестину и прочий мирок где люди просто завидуют и ненавидят. Трамп делает то что хочет, и ни медиа-цирк ни Голивуд, никто уже не сможет его сместить.

Рано или поздно, окажется что США, с ее жесткой миграционной политикой и реальным движением человечества вперед, останется единственной вменяемой страной… мы будем жить на планете США, подчиненной демократично-капиталичтическим принципам, нравится вам это или нет. А ребятам в платках придется искать себе другую планету, т.к. на этой их никто терпеть не будет. Может на Венеру? Смотрите кто там живет.

Экономические веяния

Все уже знаю что углеводородам хана. Страны Европы постепенно вводят законы чтобы к 2030-40м годам запретить ДВС полностью. Кто-то из вас наверняка захочет поныть в комментах, но ваш лживый национализм неуместен: таким странам как РФ, Саудовская Аравия, Иран/Ирак… им полностью придет хана. Они итак не особо экономически эффективны, но после перехода на электрику, закупать Бентли штабелями уже не получится. Я бы был рад если бы РФ производила, ну, микропроцессоры например, или одежду или мебель на конкурентноспособном уровне, но поезд уже ушел, причем ушел давно. Остается только пилить лес и копать землю.

Вообще автоматизация сильно поменяет расклад… в том смысле что ну не нужно нам 8 миллиардов людей, и кормить их нечем. Я понимаю, всем хочется пожить и понарожать детишек, но извините посоны, планета у нас одна. Достаточно одного качественного скачка (например, бессмертие) чтобы устроить такое расслоение общества, о котором вы и не мечтали. Представьте что у богатых, с их армиями роботов, появится возможность жить без масс рабов. Что они сделают? Правильно, избавятся от всей ненужной биомассы.

Все это, отчасти, мечты и спекуляции, т.к. в ближайшем будущем мы разве то водил попросим освободить авто, т.к. авто будут возить нас сами… посмотрите что делает Uber и прочие в этом плане. Вот это — будущее, с которым сложно спорить. Я все еще хочу понять как получится миссия на Марс если космическая радиация приводит к бесплодию и болезни Альцгеймера.

Что со всем этим делать?

Все делают на что-то ставки. Мне кажется, ставку нужно делать на idle, не-рабочее население у которого есть всё и которое хочет получить интересную информацию, причем прямо в моск. Вот это и нужно строить — игры, шоу на YouTube (идешь в лес, находишь суицидника, записываешь, общее презрение), образовательные программы. Нам нужно занять человека в период перенасыщенности, т.к. есть подозрение что тело, которое не стимулирует внешняя среда, быстрее умирает. А мертвое тело не сможет вам занести денюжку, что как бы критично!

Здесь было напутствие насчет 2018 и мои персональные планы на этот год, но их захавал Сотона. А у меня +100500 к инфантильности, спасибо за прочтение этого опуса. С Новым Годом!

P.S.: критика велкам, как всегда!

Written by Dmitri

4 января 2018 at 0:57

Опубликовано в Life

Tagged with

Заметка про видеокурсы

17 комментариев

Самое время поговорить про видеокурсы и то, как я до этого дошел. Если коротко, процесс был такой:

  • Работая в JetBrains, я делал всякие рекламные видео. Их, к сожалению, никто не смотрел. Максимум просмотров было где-то 5к, что в контексте YouTube равно нулю. Но мне за это платили зарплату, так что я делал, и вроде делал неплохо. Скиллы хоть поднял.

  • Я решил сделать свой YouTube канал для того чтобы постить видосики. Также, я постил некоторые из них на TechDays.ru пока ms зами на забили на эту платформу в угоду Channel9.

  • Я понял что мои видосы на YouTube не смотрит ровным счетом никто. 1к просмотров, где-то 2к подписчиков: хвастаться нечем. На yt вообще доход только от рекламы, а я подозреваю что у всех разработчиков стоит AdBlock.

  • В какой-то момент, я вышел на Pluralsight, и начал писать для них курсы. Completion fee (сколько денег платят за завершенный курс) для одного курса где-то $4k. Серьезно, 4к это больше разработческой зарплаты. Так что норм. Особенно если еще и работаешь.

  • Пассивный доход с ps был где-то в районе нуля. А потом один курс выстрелил. Причем самый нежданный. И понеслась.

  • Я сделал много видосиков для ps, а также рискнул сделать что-то на Udemy. К сожалению на Udemy у меня доход был где-то нуль, поэтому я на это подзабил.

  • В какой-то момент я решил выкладывать на Udemy все, что я изучаю в данный момент. Просто «в потоке». И постепенно оно начало более менее приносить.

  • Далее во времени, я насобачился маркетить в Udemy и вот тут уже пошел заметный love.

Вся эта ситуация немного патологична: я думал что все будут потреблять бесплатный контент, а получается что люди хотят видеть ценность, и поэтому ненулевой ценник для них — показатель качества.

Впрочем, я не против. Я когда делаю курсы, я делаю их хорошо. Очень хорошо. Качество везде. Иначе не выдержать конкуренции, да и вообще, самооценка, «ачивки» — это не только деньги (они уже не волнуют), это когда ты победил себя и поставил все точки над i. ■

Written by Dmitri

27 августа 2017 at 22:54

Опубликовано в Education