
"Читатель проживает тысячу жизней, прежде чем умрет.. Человек, который никогда не читает, проживает только одну "
- Джордж Р.Р. Мартин.
ASP.NET Core WebAPI, SQL, JavaScript
"Читатель проживает тысячу жизней, прежде чем умрет.. Человек, который никогда не читает, проживает только одну "
- Джордж Р.Р. Мартин.
Эта статья является переводом материала «TDD: What went wrong or did it?».
В сфере разработки программного обеспечения уже давно хвалят Test Driven Development (TDD, разработка через тестирование). Однако в последнее время было сказано много резких слов в адрес TDD, поскольку его обвиняют в плохом проектировании программного обеспечения и невыполнении многих своих обещаний. Кульминацией этой тенденции стал пост Дэвида Хайнемайера Ханссона «TDD is dead. Long live testing.» (TDD мертв. Да здравствует тестирование).
Как это возможно, что одна и та же техника, которая так выгодна для стольких разработчиков, так губительна для других? В этой статье Владислав Кононов расскажет о трех заблуждениях, которые могли бы объяснить это явление.
Андрей Н. начал кодить 8 лет назад, и готов был работать сутками напролет, набирая «шабашки» на выходные, а в свободное от работы время изучая новые фреймворки. Работа приносила удовольствие, он наконец-то нашел себя! Спустя 8 лет Андрей с трудом заставляет себя встать с кровати утром, работа не приносит радости, как не приносит ее ничто другое: все виды развлечений, которые развеивали ранее, больше не интересны. У Андрея эмоциональное выгорание, которое предшествует депрессии.
Меня зовут Ксения Корзун, я психолог, специализируюсь на работе с программистами и, в частности, много работаю с эмоциональным выгоранием, апатией и депрессивными состояниями. Проанализировав множество кейсов, проведя терапию с такими клиентами как Андрей, я выделила несколько причин возникновения эмоционального выгорания и в этой статье хочу привести их и сразу же предложить несколько «антидотов».
Мой босс ну просто «не очень хороший» человек... Сделаешь задачу хорошо, все проходят молча, но когда что-то не устраивает — активно высказываются... Даешь им бонусы, плюшки, а взамен отдачи нет… Наш тимлид думает, что классно лидит команду, а у команды другое мнение на этот счёт… Говорят, что «всё хорошо и всё нравится», но потом увольняются… Руководитель не умеет признавать свои косяки, маскирует их и даже переводит стрелки… Инициатива всё ещё наказуема?! Деньги — отличный мотиватор, но через пол года любая зп кажется маленькой… Постоянно срываются дэдлайны, а всем как будто пофиг… Задаёшь 3 вопроса, получаешь в лучшем случае ответ только на 2 из них… Порой кажется, что меня окружают одни идиоты... Лезешь из кожи вон, работаешь без выходных и даже ночью, а в замен даже спасибо не говорят... Не пинганешь (не дёрнешь) лишний раз, не получишь ответа... Постоянно опаздывают на работу… Вдохновляй, мотивируй — все равно не будет так, как ты хочешь… . Почему так бывает?
Эти и многие другие моменты внутри команды и проекта в целом знакомы многим из нас. В этой статье делюсь инсайтами, которые смог понять за последние 13 лет и проверить на практике. Решил написать в стиле интервью с «самим собой». Ироничная попытка поговорить с собой о мотивации и талантах.
Эта статья является переводом материала «When to Mock».
Использование моков в модульном тестировании является спорной темой. Автор оригинала заметил, что на протяжении всей своей карьеры в программировании он сначала перешел от «моков почти для каждой зависимости» к политике «без моков», а затем к «только моки для внешних зависимостей».
Ни одна из этих практик не является достаточно хорошей. В этой статье Владимир Хориков покажет, какие зависимости следует мокать, а какие использовать как есть в тестах.
Началось все в апреле 2010 года. Я только что успешно продал долю в довольно крупной веб-студии, на создание которой потратил более 10 лет своей жизни и задумался о бизнесе, которому я посвящу свои следующие годы.
Распределенные приложения сложны и влекут за собой свой собственный караван трудностей с отладкой и исправлением проблем в продакшене. Хотя микросервисная архитектура и дает возможность справляться силами меньшей команды, которая работает автономно и фокусируется на разных областях бизнеса, из-за своего распределенного характера она подкидывает нам новые проблемы. Например, в случае возникновения проблемы во время бизнес-транзакции, запрос необходимо отслеживать от начала и до конца, что может охватывать несколько служб и инфраструктур. Некоторые из трудностей таковы:
Чем больше освоишь, тем круче будешь
Довольно популярное мнение среди разработчиков, что уровень квалификации и зарплата зависят от количества языков программирования, которыми разработчик владеет.
Я сам в свое время ходил и думал, что бы такого изучить, чтобы потом писать в резюме много умных слов. Затем однажды на работе познакомился с коллегой, С++ разработчиком, который за всю жизнь освоил только один этот язык и все. А зарплата у него была, как у меня, может даже больше. Помню, как он ходил и с интересом спрашивал, как такие же вещи можно делать на С #. Это меня очень удивило, потому что я увидел, что человек достаточно успешен в IT-карьере, хотя он хорошо выучил всего один язык, а за его пределами почти ничего не знает.
Конечно, это не значит, что надо ограничивать свой кругозор единственным языком. На мой взгляд, секрет успеха в том, чтобы стать профи в чем-то одном, а затем осваивать смежные области, которые будут дополнять друг друга и двигать в направлении одной цели. Например, если вы занимаетесь Web-разработкой, будет плюсом знать какой-то язык для бэкэнда и JavaScript для фронтэнда. Но если я буду учить С++ для бэкэнда, то знания JavaScript для фронтэнда мне ничего не даст, потому что я никогда не буду использовать их вместе.
Обычно, с одного языка пересесть на другой не так сложно из-за схожего синтаксиса и общих принципов. Например, с C # на Java. При этом вокруг каждого языка есть своя большая экосистема: библиотеки, фреймворки, либы. А вот на это уже нужно много времени, и быть достаточно высококвалифицированным специалистом в двух-трех разных областях в программировании очень сложно.
Мой уход из Яндекса, как не потерять мотивацию за полгода подготовки в FAANG и реджект в Google.
Всем же интересно про зарплаты? Давайте про зарплаты
Меня зовут Алексей и я работаю в Райффайзенбанке техлидом. Последние 12 лет я нон-стоп нанимаю технических специалистов и меня всегда интересовал зарплатный гэп между айтишниками и не-айтишниками. Судя по дискуссиям в интернете — разница в зарплатах волнует многих. Так получилось, что в качестве хобби я интересуюсь экономикой. Поэтому когда моих знаний стало хватать для понимания причин такого разрыва, то в голове сразу же щелкнули шестеренки, картина мира обрела гармонию и я получил заслуженную порцию дофамина.
Под катом я рассказываю о том, как формируется зарплата (особенно программиста) с точки зрения экономики.
Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоединился новый игрок или о том что гильдию покинул старый игрок. Между собой мы прозвали этого бота Батрак.
В этой статье я решил поделиться опытом и рассказать как сделать такой проект. По сути мы будем реализовывать микросервис на .NET Core: напишем логику, проведем интеграцию с api сторонних сервисов, покроем тестами, упакуем в Docker и разместим в Heroku. Кроме этого я покажу как реализовать continuous integration с помощью Github Actions.
От вас не потребуется никаких знаний об игре. Я написал материал так чтобы можно было абстрагироваться от игры и сделал заглушку для данных об игроках. Но если у вас есть учетная запись в Battle.net, то вы сможете получать реальные данные.
Не так давно на Хабре я увидел статью с многообещающим названием "Что из себя представляет класс Startup и Program.cs в ASP.NET Core". Меня всегда интересовало и интересует, что именно происходит под капотом той или иной библиотеки или фреймворка, с которыми мне доводится работать. И к веб-приложениям на ASP.NET Core это относится в полной мере. И я надеялся получить из этой статьи новую информацию о том, как работают упомянутые классы при запуске такого приложения. Та статья, к сожалению, меня разочаровала: в ней всего лишь в очередной раз был пересказан кусок руководства, никакой новой информации я оттуда не получил. И при чтении ее я подумал, что, наверное, есть и другие люди, которым, как и мне, интересно не просто знать, как применять тот или иной фреймворк (ASP.NET Core в данном случае), но и как он работает. А так как я по разным причинам последнее время довольно сильно углубился во внутреннее устройство ASP.NET Core, то я подумал, что теперь мне есть много что рассказать о нем из того, что выходит за рамки руководств. И вот потому я решил для начала написать статью про то, что действительно представляют из себя классы Startup и Program - так, чтобы рассказать не о том, как ими пользоваться, а о том, как работают эти классы, причем - в контексте работы всего веб-приложения на ASP.NET Core. Однако поскольку необъятное объять нельзя, то предмет этот статьи ограничен. Прежде всего, она ограничивается рассказом только про веб-приложения, созданные с использованием нового типа шаблона приложения - Generic Host. Во-вторых, статья будет посвящена только тому, как происходит инициализация веб-приложения, потому что основная роль рассматриваемых классов именно такова - инициализация и запуск размещенного приложения.
И ещё - предупреждение, судя по одному из комментариев - необходимое, чтобы не вводить в заблуждение потенциальных читателей: эта статья не предназначена служить руководством, она не содержит рецептов "как это использовать на практике". Такая информация есть в многочисленных уже написанных другими руководствах, и я не вижу для себя смысла писать еще одно. Да и объем статьи и без того велик.
Итак, кому рассматриваемая тема, даже в столь ограниченном объеме, интересна - добро пожаловать под кат.
Чуть больше года при моём участии состоялся следующий "диалог":
.Net App: Эй, Entity Framework, будь любезен дай мне много данных!
Entity Framework: Прости, не понял тебя. Что ты имеешь ввиду?
.Net App: Да просто мне прилетела коллекция из 100k транзакций. И теперь надо по-быстрому проверить корректность цен на бумаги, которые там указаны.
Entity Framework: Ааа, ну давай попробуем…
.Net App: Вот код:
var query = from p in context.Prices
join t in transactions on
new { p.Ticker, p.TradedOn, p.PriceSourceId } equals
new { t.Ticker, t.TradedOn, t.PriceSourceId }
select p;
query.ToList();
Entity Framework:
Классика! Думаю многим знакома эта ситуация: когда очень хочется “красиво” и быстро сделать поиск в базе, используя JOIN локальной коллекции и DbSet. Обычно этот опыт разочаровывает.
В данной статье (которая является вольным переводом другой моей статьи) я проведу ряд экспериментов и попробую разные способы, чтобы обойти это ограничение. Будет код (несложный), размышления и что-то вроде хэппи-энда.