• Мне было стыдно за свой интерпрайз-код настолько, что я сделал свой велосипед. За него стыдно меньше

      image


      Это продолжение текста про архитектуры интерпрайз-систем. Рассуждения это хорошо, но какой в них толк без практического применения. Я покажу свой фреймворк в деле.


      Всё началось с того, что я рассказывал про проблематику проектирования приложений на .NET и ныл про нелёгкую жизнь в кровавом интерпрайзе. Затем я описал решение, которое сам придумал и реализовал — Reinforced.Tecture. То была теория, концептуальные рассуждения, визионёрство и снова нытьё. На этот раз о том, что на дворе 2020 год, а HKT в C# так и не завезли.


      Сегодня я продемонстрирую свой подход в действии на примере простенького проекта и покажу профиты, которые он даёт: от сокращения количества кода до автоматизации тестирования и оригинального подхода к документации. Как советовал старина Торвальдс: "Болтовня ничего не стоит, покажите мне код".

      Читать дальше →
    • Никто не умеет управлять программистами — и все придумывают костыли, вместо решений



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

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

        Если коротко — все ещё хуже, чем выглядело со стороны.
        Читать дальше →
      • Архитектура интерпрайз-приложений может быть другой

          image


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


          Мне нравится перебирать архитектурные концепции. Всю жизнь я пытаюсь найти в области архитектуры и дизайна ПО что-то работающее и в то же время простое. Не требующее разрыва мозга для понимания и кардинальной смены парадигмы. Идей накопилось порядочно и я решил объединить лучшие из них в своём фреймворке — Reinforced.Tecture. Разработка таких штук даёт гигантское количество пищи для размышлений, я хочу ими поделиться.


          Тексты про такие технические вещи обычно до ужаса нудные. Я честно постарался не нудить, поэтому мой текст получился слегка агрессивным. Если вам с этим норм и интересно почитать про архитектуры .NET-приложений — заходите.

          Читать дальше →
        • Я посредственный разраб, плохой муж и ужасный отец — нет никакого баланса и выбора



            Мне нравятся пост-ковидные правила игры. Добрая половина вакансий — удаленка. Мы больше не ищем в описании слова «гибкий график» — это теперь само собой разумеется. Никому не придет в голову заставить программиста строго сидеть за компом от 9 утра до шести вечера. Боссы теперь уважают наше время и личное пространство. И нам все еще очень хорошо платят.

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

            Когда я первый раз получил оффер на ремоут, я так и подумал. В том, как офис пожирает лишнее время очень простая арифметика — конкретно на работу тратишь часа четыре, еще четыре ты страдаешь фигней, два тратишь на дорогу и час вычеркиваешь из каждого утра — он хоть и свободный, но бесполезный. Около восьми часов ты должен спать. У тебя остается всего пять часов на свои дела по дому и общение с семьей. Это ничтожно мало — ведь ты ещё обычно и зверски устал, когда вернулся.
            Читать дальше →
          • Объясните, почему мой рокет-саенс бэкенд билдится пару секунд, а четыре формы на фронте — полгода

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

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

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

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

                image


                Я программирую 16 лет, и перебрал за это время много технических стеков. Изучать языки весело, в начале они всегда как новенькие игрушки, пока месяце на третьем не появляются первые проблемы.


                В языках вечно не хватает чего-то простого — лямбда-функций, именованных объединений, кастомных примитивных типов. Я лезу в обсуждения на Stack Overflow, в Github и вижу, как разрабы жалуются — им не хватает того же, чего и мне. Но обсуждения почти всегда заканчиваются одинаково: нужная фича не появится, потому что главный дизайнер языка и члены его команды нужной ее не считают.


                Раньше в эти моменты мне казалось, что это я неграмотный, и чего-то не понимаю. Что создатели языков за гранями приземленной разрабовской критики. Они умны, дальновидны, преисполнены мудрости, и пути их неисповедимы.


                Но сейчас я понимаю — это полная чушь.

                Читать дальше →
              • Я десять лет страдал от ужасных архитектур в C# приложениях — и вот нашел, как их исправить


                  Я второй десяток лет участвую в разработке приложений для бизнеса на .NET и каждый раз вижу одни и те же проблемы — быдлокод и беспорядок. Месиво из сервисов, UoW, DTO-шек, классов-хелперов. В иных местах и прямой доступ в базу данных руками, логика в статических классах, километровые портянки конфигурации IoC.


                  Когда я был молодым и резвым мидлом — я тоже так писал. Потом бил кулаком в стену с криками: "Хватит! В следующий раз сделаю по-другому". Следующий раз действительно начинался "по-другому" — с холодной головой и строгим подходом к архитектуре — а на выходе все равно получалась та же субстанция, лучше на пару миллиметров.


                  Однако, эволюция — беспощадная штука: моя последняя система показалась мне более-менее близкой к идеалу. Сложность не сильно росла, скорость разработки не падала довольно долго, в систему худо-бедно въезжают новые сотрудники. Эти результаты я взял за основу, улучшил и теперь анонсирую вам свою новую разработку: Reinforced.Tecture.

                  Читать дальше →
                • Мы тратим годы на то, что делается неделю — потому что все ларьки заигрались в IT-гигантов



                    Я работал в команде, которая делала десктопное приложение для VPN. Не самая простая штука в мире, много нюансов, много обратной совместимости. У нас были четыре разраба, три тестера, продукт оунер, проджект менеджер, сторонняя команда дизайнеров. Все по-серьезному. Помимо десктопного клиента делалась ещё и либа, которая содержала в себе всю бизнес-логику, и использовалась на других платформах. И эта либа в свою очередь использовала сишный бинарь, который и поднимал VPN туннель.

                    Если бы меня кто-то спросил, за сколько можно сделать такое приложение в одиночку — я бы сказал: «два месяца на разработку, один на тестирование». Но нас было много, поэтому мы работали больше двух лет.
                    Читать дальше →
                  • Не прыгайте выше головы — останетесь тупицей в плену больших денег



                      В C# есть такие штуки — структуры. Это как классы, но хранятся на стеке, и работают не по ссылке, а по значению. В среднестатистической разработке их почти не используют. У структур много преимуществ, и я искренне топил за то, что их можно применять для улучшения кода. Типа, смотрите, мы можем использовать особенности структур, чтобы писать более безопасный и отказоустойчивый код.

                      Такую чушь может сказать человек, который не знает, что у структур есть пустой конструктор по умолчанию, который нельзя ни убрать, ни переопределить. Знаете почему я этого не знал? Да, потому что я никогда их не использовал. Ведь хорошего разрабовского опыта у меня мизер. Я давно уже не хочу читать книжки про сишарп. Зачем, если мне и так платят?
                      Читать дальше →
                    • Завязывайте со своим «Хабр не торт». Хабр — это феномен



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

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



                          Когда-то давно моя девушка начала использовать инстаграм. Она попросила меня зарегаться и подписаться на неё. Я попробовал — у меня не получилось, потому что в инстаграме нельзя было регистрироваться с десктопа. Я тогда подумал — до чего же странные люди. Ну какой дурак будет делать софтверный продукт, которым нельзя пользоваться с компа? У них ничего не получится, и этот инстаграм станет маргинальным сервисом для кучки странных женщин, которые почему-то не любят десктопы.

                          Прошло всего несколько лет, рынок все расставил по местам — и самым большим дураком оказался я. А гении из инстаграма предсказали, как и куда все будет развиваться. Сегодня большая часть продуктов для пользователей делается в первую очередь под мобильные платформы. В лучшем случае они фигачат универсальный веб, который все равно оптимизирован под мобильники. Потому что пользователи любят айфоны, а не компы. Бизнес сел, посчитал, и принял решение — давайте зарабатывать больше денег, давайте у нас везде будет мобайл ферст.
                          Читать дальше →
                        • Медленный код — вообще не проблема, если ты знаешь как его ускорить. Главное красиво


                            Я много раз слышал, как программисты смеются над тиммейтами, которые написали медленный код. Резкие, самодовольные фразы в стиле "этот болван четыре раза пробежался по коллекции, хотя можно было один", и тому подобное. Когда слышишь такое, сразу думаешь — ну тут все по делу, зачем делать лишние итерации? Почему нельзя изучить пару элементарных вещей, вроде принципов работы LINQ выражений в C#, и писать нормальный код? Ты смеешься над некомпетентными тупицами до тех пор, пока смеяться не начнут над тобой. И можете мне поверить — никакие знания в программировании не спасут вас от ситуации, когда вы по незнанию зафигачили квадратичный алгоритм вместо линейного.

                            Читать дальше →
                          • В России плохо жить, даже если ты разраб. Но я все равно отказываюсь от релокейта



                              Несколько лет назад я читал на Хабре про скандал разраба Алексея Адамовского с компанией Xored. Липкий кейс, компания не заплатила человеку деньги, и для меня сразу стал очевиден главный враг в этой истории. Непонятно было другое. Адамовского наняли работать в новосибирском офисе компании, а он очень хотел поработать в пражском. За те же деньги. Кое-как уговорил их и уехал туда. В целом его право, но меня тогда очень задело другое — неужели человек настолько ненавидит жить в РФ, что готов смотаться отсюда на любых условиях?
                              Читать дальше →
                            • Созвоны не решают никаких проблем. Они нужны только людям, которые не умеют писать код


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


                                Я подумал — ну окей, так, наверное, бывает не всегда. С тех пор прошло лет 5, я не раз менял работу, но везде и всегда созвоны были пустой тратой времени.

                                Читать дальше →
                              • Я мечтал вырваться из Узбекистана и стать крутым разрабом. Больше не хочу — но разработка не отпускает



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

                                  На меня никогда не давили с учебой. Говорили, отучись и иди работай, не важно кем, главное без дела не сиди. Я не сидел — я рубил в игры, прям дико, даже операцию на глаз пришлось делать. Начал зависать в прокуренных клубах, и одобрение пацанов поднял тем, что хорошо играл в варчик. Потом стал деградировать на районе. Среди друзей никогда не было ни одного разработчика — но это мне в них скорее нравится. Никаких клубов по интересам, даже рэпером никто не хотел стать — просто обычные ребята.
                                  Читать дальше →
                                • Объясните мне, как вы для себя разобрались в моделях типизаций — они же все размыты


                                    Когда я был начинающим, я мог писать простые приложения на C# и C++. Долго игрался с консольными прогами, пощупал десктопные, и в какой-то момент захотел сделать сайт. Меня ждал большой сюрприз — чтобы делать сайты, одного сишарпа мало. Надо ещё знать жс, хтмл, цсс и прочую фронтовую хрень. Я потратил около недели на эти вещи, и понял — не мое. Я мог написать какой то код на джаваскрипт, но он не содержал типов, и я никак не мог взять в толк — как к этому вообще подходить. Это какое-то игрушечное программирование. Ну и забросил к чертям.


                                    Уже потом, работе на третьей, меня перевели в отдел, где делали веб. Я подумывал уволиться, но мне объяснили — там тайпскрипт, тайпскрипт — это такой сишарп для браузера.


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

                                    Читать дальше →
                                  • Мне надоело, что обычные продавцы выдают себя за разработчиков и позорят индустрию. Они делают мир хуже



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

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

                                      Мои новостные ленты были завалены обсуждениями, восхищением и критикой выпуска. Каждый раз читая что-то об этом, я испытывал непонятную почти физическую боль. Ну хорошо, главный журналист страны рассказал про мою индустрию, но рассказал не так, как хочу я. С этим можно жить. Да, со всей своей преисполненностью и трушной технарскостью, я все ещё маленький завистливый чмошник. Я тоже хочу сидеть в кофейне в Пало-Альто и смотреть, как мне выписывают чек на пять миллионов долларов. Но смотрите, я вырос в России и давно научился не обращать внимания на свою патологическую зависть. Мне давно не бывает от нее больно.

                                      Бомбанул я точно не от зависти — и я долго не знал, почему.
                                      Читать дальше →
                                    • Хватит уже бояться субъективно красивых решений в коде — вы же не роботы


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

                                        Читать дальше →
                                      • Как я искал пацанский движок для блога



                                          Я много пишу в интернетах и мне захотелось завести свой личный стэндалон блог, куда можно писать мелкие заметки и статьи, не подходящие для других площадок. Главная проблема личного блога — мне лень оформлять посты. Чтобы черкануть пару строк в каком-нибудь Wordpress, нужно слишком много телодвижений. Я попробовал несколько разных движков и каждый раз ловил себя на ощущении, что мне не хочется ими пользоваться, намного быстрее и проще писать в записную книжку вроде Evernote или Notion. Так я стал искать идеальный движок для блога, отвечающий всем моим потребностям.

                                          Мои требования к идеальному движку:


                                          • Желательно self-hosted — я пережил много закрытий сервисов, от narod.ru до google+ и точно знаю, что рано или поздно все протухает, поэтому надежнее всего держать контент у себя. Также посты могут удалять по каким-то фейковым жалобам или по DMCA, как это происходит на Medium и LiveJournal.
                                          • Возможность подключения своего домена — мне нужен сайт-визитка со всеми проектами и ссылками в одном месте, где можно разместить портфолио, резюме, контакты.
                                          • Минимум телодвижений и интерфейса — в идеале интерфейса CMS вообще не должно быть видно, админская панель не нужна, посты должны редактироваться, создаваться и просматриваться в одном месте.
                                          • Полноценный WYSIWYG редактор — поддержка разметки Markdown и обработка её в реальном времени, подсветка кода, вставка картинок из буфера обмена.
                                          • Нормальные комментарии — возможность оставлять анонимные комментарии и авторизовываться через максимум соц. сетей для персонифицированных комментариев.
                                          • Минималистичный внешний вид — я не хочу заниматься версткой и темами, подходящее оформление должно быть из коробки.


                                          Внутри я рассказываю какой вижу идеальную CMS, редактор постов и комментарии, почему большинство существующих движков устарели на десять лет, и сравниваю между собой разные движки.
                                          Читать дальше →
                                        • Динамическая типизация — это не инструмент для разработки. Это чепуха (паршивая)



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

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

                                            Большую часть жизни я просто махал на них рукой и проходил мимо. Эти глупцы не понимают очевидных вещей, и я не нанимался разъяснять каждому js-нику, почему его код — это не разработка, а игрушечное прототипирование. Но время идёт, а количество идиотов вокруг и не думает уменьшаться, вместо того, чтобы всей своей фронтенд индустрией переехать наконец на статический тайпскрипт, эти ослы начинают использовать всякие кложуры, писать тонны тестов, и идти на все мыслимые ухищрения — лишь бы не разбираться в типах.
                                            Читать дальше →