Веб-разработка на .NET // dotnet web dev
94 subscribers
1 photo
34 links
Разрабатываю на .NET. В этом канале пишу заметки о программировании в целом и разработке на дотнете в частности

Электропочта: [email protected]
Электросайт: boyarincev.net
Download Telegram
Статья именно о том, о чем говорится в заголовке - о честных взаимоотношениях между руководителем и подчиненным в команде и о контрофферах.
Если кратко - контрофферы будут не нужны, если вы правильно (честно) выстроите отношения с подчиненными.
А со стороны подчиненных - если вы идете получать оффер, чтобы повысить зарплату на текущем месте работы, то это "работа курильщика" и лучше меняйте ее. Да и вообще нет ничего плохого в том чтобы менять работу, если в текущей вас что-то не устраивает и исправить вы это не можете.

#careerbuilding

https://habrahabr.ru/company/yandex/blog/347246/
"Программист-прагматик" уже давненько лежит в моей библиотеке, дожидаясь своего часа, было интересно прочитать краткий конспект первых 4 глав.

#bookreview

https://habrahabr.ru/company/everydaytools/blog/348116/
В новости про Blazor https://teleg.eu/dotnetter/625 больше всего удивляет то, что dotnet в браузере запустили, а я все думал что webassembly ненужная фигня. Это же какие возможности для построения приложений в браузере открываются.
Сегодня столкнулся с такой задачей:

Есть список объектов, каждый объект имеет свойство ElementId. Это свойство может быть одинаковым у нескольких элементов. Нужно уметь быстро выбирать объекты из этого списка по ElementId. Первое, что приходит в голову - это использовать Dictionary<>. Например, нам подойдет Dictionary<long, List<SomeType».

Вот так будет выглядеть код преобразования изначальной коллекции в нужный нам словарь:
var objDict = new Dictionary<long, List<SomeType>>();
foreach(obj in objList)
{
if(objDict.Contains(obj.ElementId))
{
var currentObjList = objDict[obj.ElementId];
currentObjList.Add(obj);

continue;
}

objDict.Add(obj.ElementId, new List<SomeType> { obj });
}


Но оказывается, что с .NET 3.5 есть встроенный тип данных специально для таких случаев - Lookup - https://msdn.microsoft.com/en-us/library/bb460184.aspx.

В итоге весь код выше, превращается в:
var objLookup = objList.ToLookup(obj => obj.ElementId);

#datastructures
Интересные статьи на этой неделе

Почему вам должно быть скучно на работе
https://habrahabr.ru/post/348614/

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

Самое опасное слово в разработке программного обеспечения
https://habrahabr.ru/post/348406/

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

#workingprocess
Сегодня статья про DRY

https://habrahabr.ru/company/mailru/blog/349978/

Оказалось, что принцип DRY был впервые описан в книге "Программист Прагматик", которую я обязательно прочитаю в будущем.

Принцип DRY о дублировании знания (обычно к знаниям относят бизнес-логику или алгоритмы), а не кода, поэтому:

1. Дублирование знания является нарушением принципа DRY.
2. Дублирование кода не обязательно является нарушением принципа DRY.

Неправильное применение принципа DRY приведёт к:

1. Бесполезным абстракциям
2. Преждевременной оптимизации

Которые в свою очередь приведут к увеличению сложности и ненужному объединению кода.

В комментах дали ссылку на "Правило трёх":
https://en.wikipedia.org/wiki/Rule_of_three_(computer_programming)

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

#programmingprinciples
Защитное программирование

https://habrahabr.ru/post/191548/

Старый перевод старой статьи Марка Симана, автора книги "Внедрение зависимостей в .NET". В ней он рассуждает о концепции защитного программирования, также описанной в книге "Совершенный код" (впервые?).

Статья в основном сосредоточена на проблеме NullRefferenceException, хотя защитное программирование в целом касается намного большего круга вопросов.

Суть такова:
Ваш код не должен возвращать и передавать в другие методы null. Если вы находитесь в защищенной местности (область кода в которой вы можете быть уверены, что null вам не будет возвращен из метода или свойства объекта), то вы можете быть уверены, что null вы сами никуда не передадите, соответственно никакие дополнительные проверки для этого не нужны и всё сводится к:

1. Проверяйте данные приходящие из незащищённой местности (пользовательский ввод, системы не являющиеся вашей зоной контроля или не следующие концепции защитного программирования).
2. Не возвращайте в защищённой местности из ваших методов и объектов null.

#defensivecoding #cleancode
Прошлое и будущее командной строки Windows

Серия статей про командную строку Windows. Здесь всё что вы хотели знать о ней, но боялись спросить. Ну как минимум стоит прочитать, если хотите узнать чем отличается TTY, PTY, терминал, консоль и командная строка.


https://blogs.msdn.microsoft.com/commandline/2018/06/20/windows-command-line-backgrounder/
Тут вышло интервью одного сеньора дотнет разработчика, в общем-то ничего экстраординарного, но всё-равно читать было интересно:

https://habr.com/post/420321/

Несколько мыслей возникших у меня после прочтения:

1. С возрастом хочется всё меньше скоростного "бездумного" программирования и горящих сроков, а больше заниматься изучением интересных тебе вещей. И вообще было бы неплохо сделать свой рабочий день официально 6 или даже 4-х часовым.
2. Прежде чем сказать, что весь вчерашний день занимался фиксом бага, сначала воспроизведи его.
Каждый раз, когда читаешь как люди готовятся к собеседованиям в крупную IT компанию, содрогаешься внутри и в очередной раз откладываешь смену работы куда-то подальше - не хочется тратить гигансткое количество времени на подъем в оперативную память всего того материала, который ты не использовал последние годы, а иначе бы ты и так его помнил.

С другой стороны, целенаправлнное изучение Computer Science в течении двух лет не может не вызывать восхищение и недоумённый вопрос к себе: Почему же я так не могу?

https://habr.com/post/419945/

#jobinterview
Скрин из комментов к статье об устройстве в Google.

То что придя в Google или в Яндекс, будешь в первую очередь заниматься изучением их внутренних библиотек и прочей только для них специфичной инфраструктуры, а не общих для индустрии вещей, еще один мощный останавливающий фактор для трудоустройства в них.
Благая весть идёт: предстоящий .NET Core 3 принесёт нам возможность выгружать сборки из памяти. Сделать это можно будет с помощью класса AssemblyLoadContext.
А вот тут инструкция по использованию.

Так как .NET Core забрал у нас Домены Приложений, а это была единственная возможность выгрузить сборку в управляемом коде, то новость просто отличная.
Статья с хорошим объяснением механизма работы джойнов. Если вы забыли, то джойн даёт в результате декартово произведение записей двух таблиц.
А пока читал вспомнил, что когда работал с NHibernate при джойне двух таблиц со связью один ко многие, часто сталкивался с проблемой появления дублирующихся записей в результате выборки. Интересно, можно ли такую аномалию получить при использовании Entity Framework.

#базыданных
Оказывается Entity Framework Core может использовать INotifyPropertyChanged интерфейс для того, чтобы напрямую узнавать о изменениях в моделях и не использовать снапшот данных для их поиска. Думаю, что это можно попробовать использовать в высокопроизводительных сценариях.

#entityframework
How to Make a Poster on Word