.NET Разработчик
6.51K subscribers
427 photos
2 videos
14 files
2.04K links
Дневник сертифицированного .NET разработчика.

Для связи: @SBenzenko

Поддержать канал:
- https://boosty.to/netdeveloperdiary
- https://patreon.com/user?u=52551826
- https://pay.cloudtips.ru/p/70df3b3b
Download Telegram
Channel photo updated
Hello, world!
В этих ваших интернетах всякие тренеры личностного роста и прочие спецы по мотивации говорят, что бороться с прокрастинацией и не бросать начатое проще, если хотя бы записываешь прогресс в дневник. А ещё лучше, если делишься им с друзьями. Я решил пойти дальше и поделиться с миром.
Коротко о себе. Я быдлокодер с почти 20-летним стажем. Писал понемногу и помногу на многих языках: от паскаля до Делфи (это было давно и не правда), от PHP и VBScript до Java и C#, не говоря уже о всяких там SQLях и о том, что касается разметки web-страниц. В последнее время по работе всё больше приходится писать на C#, поэтому решил подтянуть свои знания в языке, а также в MVC Framework. Идеальной конечной целью вижу получение сертификата от Microsoft, ну а там как пойдёт.
В общем, буду описывать тут свой прогресс, находки и просто мысли. В основном по C#, MVC и веб-разработке. В области я, конечно, не профи, но и далеко не новичок, поэтому темы будут на уровне продвинутый/профессионал. Так что “Hello, world!” в заголовке было первым и последним.
Постараюсь писать ежедневно. Писательского таланта у меня чуть больше, чем волос на голове Вина Дизеля, но, если вдруг вам станет интересно, велкам, подписывайтесь.
Дисклеймер: всё нижеизложенное является исключительно моим личным мнением, не претендующим на истину в последней инстанции. Кроме того, оставляю за собой право, как и любой человек, иногда ошибаться, но буду только рад, если вы меня поправите в личке (см. в описании канала).
👍21
День первый.
Начать решил с книги Джеффри Рихтера “CLR via C#”. Читал её лет 5 назад, но, во-первых, без практики всё быстро забылось, а во-вторых, как это говорят: «Произведения из школьной программы надо перечитать во взрослом возрасте». Так вот, с технической литературой то же самое. Когда есть какой-то опыт, книга воспринимается совсем иначе, чем когда его мало или есть опыт в другой области (языке). Больше внимания уделяешь частностям, находишь более лёгкие решения для своих повседневных задач, а с чем-то даже позволяешь себе не соглашаться.
Я люблю старые добрые «ламповые» бумажные книги. Не могу долго читать с экрана. Но с ними есть несколько проблем. Для начала просто огромный срок от выхода продукта до выхода книги. У нас это усугубляется задержкой ещё как минимум в год на перевод. Для такой быстроразвивающейся отрасли, как ИТ, год – это очень много. Например, моё третье издание книги описывает .Net Framework 4.0. Русская версия книги вышла в 2012м году (спустя 2 года после оригинала), когда свет увидел уже C# 5.0 и .Net Framework 4.5. Кроме того и сам перевод частенько страдает даже в самых известных изданиях. К примеру, в книге Рихтера вводится понятие ссылочных и значимых типов. Под значимым типом понимается структура, определяемая ключевым словом struct. Пример из книги:
// Ссылочный тип (поскольку ‘class’)
class SomeRef { public Int32 x; }
// Значимый тип (поскольку ‘struct’)
struct SomeVal { public Int32 x; }
Казалось бы, перевод в принципе верный. Можно назвать структуры значимыми типами. Но по мере прочтения постоянные отсылки к ссылочным и значимым типам приводят к невероятной путанице. Уже не говоря о том, что в других источниках постоянно «спотыкаешься» о подобные трудности перевода. Вот вроде то же понятие, а слово другое.
Отсюда вывод. Учить английский и читать техническую литературу в оригинале. Например, в марте выходит новое издание ещё одной культовой книги “C# in Depth” Джона Скита. https://www.manning.com/books/c-sharp-in-depth-fourth-edition Уже предзаказал бумажное издание на Амазоне.
👍7
День второй.
Кстати, о разногласиях с автором. Вот для примера цитата из книги Рихтера о примитивных типах:
Я не могу согласиться со следующим утверждением из спецификации языка C#: «С точки зрения стиля программирования предпочтительней использовать ключевое слово, а не полное системное имя типа», поэтому стараюсь задействовать имена FCL-типов и избегать имён примитивных типов. На самом деле, мне бы хотелось, чтобы имён примитивных типов не было совсем, а разработчики употребляли только имена FCL-типов.*
Речь идёт об использовании int или Int32, bool или Boolean и т.п. Так вот. В C# нет абсолютно никакой разницы. Оба варианта приводятся компилятором к абсолютно идентичному коду. Но я тут скорей на стороне разработчиков языка. Большинство примитивных типов, как и структуры, хранятся напрямую в стеке потока. Ссылочные типы – по ссылке в куче. Использование значимых и ссылочных типов может различаться. Поэтому лично для меня важно быстро и чётко различать примитивные типы и ссылочные типы, созданные мной или библиотеках. Кроме того, это повышает читаемость кода в Visual Studio (см. картинку ниже). Кстати, это не единственная претензия к коду в книге Рихтера по поводу читабельности. Но здесь, конечно, всё зависит от ваших стандартов написания кода. Главное – согласованное использование одного или другого варианта везде.
* Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 5.
👍2
Сравните. Переменную string заметно сразу. А определение String легко спутать с соседним определением объекта класса Street.
👍8
День третий.
Аттракцион неслыханной щедрости от Microsoft. Совершенно бесплатно можно скачать полноценную Visual Studio. Версия Community 2017 – это не то же самое, что кастрированные Express предыдущих релизов. Здесь реализован полный функционал. Более того, в Microsoft выпустили прекрасный интуитивно понятный установщик, позволяющий вам легко выбрать для установки только то, что вам нужно, а также в последствии обновлять необходимые пакеты. В чём уловка? Насколько я понял, компания пошла по пути Oracle. Индивидуальные пользователи и научные сообщества могут пользоваться полноценным продуктом совершенно легально и бесплатно. Однако коммерческое использование уже требует платной лицензии. То есть, если вы собираетесь получать прибыль от вашего софта, извольте купить лицензию. Флибустьеры, молчать)))
https://visualstudio.microsoft.com/ru/vs/community/
День четвёртый. #ЗаметкиНаПолях
По возможности указывайте наиболее общие типы параметров, предпочитая интерфейсы классам. Например:
public void ManipulateItems<T>(IEnumerable<T> collection) {…}
вместо
public void ManipulateItems<T>(List<T> collection) {…}
В первый метод можно передать как List<T>, так и массив и даже строку.
Аналогично рекомендуется использовать базовый класс параметра, например, Stream вместо FileStream, NetworkStream, MemoryStream.

В то же время для типов возвращаемых значений желательно выбирать наиболее строгий вариант. Например:
public FileStream OpenFile() {…}
вместо
public Stream OpenFile() {…}
В первом случае вызывающий код сможет обращаться с результатом как с объектом FileStream или Stream.

Однако, чтобы сохранить возможность изменять внутреннюю реализацию метода, можно возвращать интерфейсный тип. Например:
public IList<string> GetStringCollection() {…}
вместо
public List<string> GetStringCollection() {…}
Тогда если метод изменит тип возвращаемого значения на string[], вызывающий код не потребуется изменять. Но здесь так же следует выбирать наиболее строгий интерфейс.

Источник: Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 9.
👍7
День пятый.
Подписался на курсы ITVDN по С#/.Net разработке. Куча видеоуроков и, самое главное, практические домашние задания для закрепления материала. Посмотрим, что из этого выйдет. Стартовые и базовые курсы по C# мне уже, конечно, не интересны, а вот более продвинутые попробую.

Примечание: все ссылки на материалы, которые я привожу, опробованы исключительно на личном опыте и не являются рекламой, если только об этом явно не написано.
👍3
А пока поделюсь с вами книгой, которая, по моему личному мнению, абсолютный “маст рид” для разработчика приложений. Именно для разработчика, а не для труЪ программиста, который не считается труЪ, если не вызубрил Кнута. Ну а для обитателей грешной земли незаменимым руководством по разработке является “Совершенный код” Стива МакКоннелла. Сам перечитывал её несколько раз, а также посмотрел курс лекций самого Стива на https://construx.vueocity.com Решил освежить в памяти основные моменты, поэтому буду выкладывать периодически конспекты с лекций.

0. Введение
Основной концепцией создания программного обеспечения является концепция “Защитного программирования”. Точно так же, как вы смотрите по сторонам при переходе дороги, даже на зелёный свет, в создании ПО есть несколько принципов, которые помогут вам создавать качественный код с минимумом ошибок. Основные принципы:
1. Управление сложностью
2. Именование
3. Процесс программирования псевдокодом
4. Утверждения
5. Отладка
6. Оптимизация кода
7. Обработка ошибок
8. Предвидение изменений
В следующих постах разберу каждый принцип подробнее.

#CodeComplete
👍5
День шестой. #оффтоп
Недавно наткнулся в YouTube на прекрасный канал про программирование вообще и C# в частности ExtremeCode. https://www.youtube.com/channel/UCBNlINWfd08qgDkUTaUY4_w
Более полусотни видео как для начинающих (плейлист “C# для маленьких и тупых”), так и для продвинутых разработчиков. Рассказывается невероятно интересно с обилием мемчиков и шуточек-прибауточек (осторожно, 18+). Так что я после просмотра первого видео, появившегося в моей ленте, зашёл к ним и залип на целый день. К сожалению, у ребят давно не выходило новых роликов. Не знаю, с чем это связано, надеюсь, они найдут потерянное вдохновение и продолжат радовать интересным и полезным контентом.
Повторюсь ещё раз, это не реклама, а личный опыт.
👍5