среда, 12 декабря 2018 г.

Наиболее эффективное программирование на C# - Билл Вагнер (2-е издание)


Закончил чтение очередной книги Билла Вагнера - Наиболее эффективное программирование на C#. 50 способов улучшения кода (2-е издание). Данная книга актуальна для C# версии 7.0 включительно.

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

С большинством советом автора я согласен. По поводу некоторых можно подискутировать. Но в общем и целом, даже с учетом фактора субъективности, советы дельные. Предложенные советы сконцентрированы именно на языке C#. Т.е. нет детального описания платформы и прочих рихтерских штучек. Книга позволяет поднять ваши компетенции именно в части использования языка. Что как мне кажется и является наиболее важным в повседневной работе дотнетчика. Знание нюансов использования и синтаксиса языка позволит быть профессионалом, а не любителем.

Книга не является исчерпывающим описанием всех новых возможностей языка C# 7.0. Несколько советов показывают в каких случаях и для чего эти новые возможности могут пригодиться - локальные функции, кортежи и проч. Но отдельной главы, где были бы собраны все новые фичи языка, нет. Просто раскиданы по разным советам в разных главах  книги.

Качество книги  похуже чем в "Эффективное программирование на C# (3-е издание)". В первую очередь из-за мягкой обложки. Посмотрите на фото - фронтальная обложка уже оттопырилась. А это я фотографировал новую книгу. После чтения края стали топырится еще больше. Тем не менее качество страниц хорошее, фон белый, читать приятно. Но учитывая, что цена книги такая же как у "Эффективное программирование на C# (3-е издание)", то могли бы как и там сделать твердую обложку и не экономить.

Теперь что касается перевода. Переводчик тот же что и в книге "Эффективное программирование на C# (3-е издание)". Поэтому у меня изначально были не высокие ожидания. Но, по всей видимости переводчик понял и осознал свои ошибки в первой книге, поработал над собой. В итоге мы имеем очень хороший перевод. Собственно я даже и не нашел к чему можно придраться.

По тексту присутствуют отсылки к другой книге автора "Эффективное программирование на C# (3-е издание)". Поэтому желательно читать эти книги по очереди. Кроме того содержание книг не пересекается и они органично дополнят друг друга. Единственно как я и говорил - в первой книге перевод заметно хромает.

На сайте издательства есть оглавление и отрывок из книги, чтобы оценить содержание и перевод:
http://www.williamspublishing.com/Books/978-5-9909446-7-1.html







вторник, 27 ноября 2018 г.

Эффективное программирование на C# - Билл Вагнер (3-е издание)





Недавно купил и прочитал книгу Билла Вагнера - Эффективное программирование на C#. 50 способов улучшения кода (3-е издание). Данная книга актуальна для C# версии 6.0 включительно. 

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

И так - твердая обложка, скромная толщина в 224 белоснежных страницы качественной бумаги. Книгу приятно держать в руках. Она не производит ощущения дешевизны. Что в общем-то соответствует ее цене.

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

Некоторые моменты, которые мне показались странными:
  • Кое-где встречалась копипаста в примерах кодах
  • В самом начале книги дается совет про использование интерполированных строк C# 6.0, в тоже время далее во всех примерах книги автор использует string.Format() (Сам не следует своему совету? Или не было время обновить примеры в книге?).

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

Книга хоть и небольшая по величине, но довольно дельная. Ее скромный размер - это большой плюс. Когда нет времени вчитываться в сотни страниц трудноперевариваемой информации. Когда и память и время и внимание уже на пределе. Когда нужна краткая выжимка конкретики. В ней советы, которые можно непосредственно применять в работе, если ваш основной язык программирования C#. Здесь нет глубин платформы .NET как в Рихтере, нет описания развития языка в исторической перспективе как у Скита. Просто советы - бери в работу и делай. 

На сайте издательства есть оглавление и отрывок из книги, чтобы оценить содержание и перевод:


Зачем читать Рихтера?

Книгу Рихтера (само собой речь идет о CLR via C#) я перечитывал порядка четырех раз в разных изданиях, начиная с C# 2.0. Вот моя первая книга Рихтера еще 2007-го года выпуска:


Немного потерлась, но аккуратное отношение привитое с детства позволяет содержать книги в довольно приличном состоянии.

Свою службу дотнетчиком я начал с чтения Троелсена и Дино Эспозито с его замечательными зелеными книжечками по ASP.NET. И только потом в ход пошел Рихтер. Читать его в качестве первой книги по C# и .NET крайне не рекомендую во избежания порчи психики. К слову в последней версии книги про .NET 4.5 в конце предисловия добавили фото Рихтера с семьей. Видимо это как-то должно успокаивать, что такую книгу написал вполне нормальный человек, у которого даже есть семья и дети. У меня сначала было подозрение на фотошоп или подсадных актеров ))

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

Резюмирую, зачем читать Рихтера?:
- для прохождения собеседований (!)
- показать более молодым разработчикам какой ты умный
- для беседы с коллегами за рюмочкой чая
- чтобы понять (и благополучно забыть) внутренности платформы .NET и языка C#
- чтобы быть true-дотнетчиком
- для галочки в чеклисте

Собственно сам я недавно перечитывал Рихтера (уже версию .NET 4.5) как раз для прохождения собеседований. Пришлось искать новую работу. Нынешние собеседования предполагают знание внутренностей .NET и C#. Без этого увы никак.

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

четверг, 15 февраля 2018 г.

Индикатор изменений в обществе

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

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

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

Почему так? Потому что мы делаем как удобно нам и только нам. Другие нас не интересуют. Наш принцип - моя хата с краю. "Я" выйду из дорогой машины и пойду в дорогую квартиру в респектабельном районе. И не важно, что выходя из машины "я" наступаю ногой в говно, а до подъезда колдыхаюсь по льду нечищенной дороги. Это за пределами "моей" зоны комфорта. Машина это мое. Квартира это мое. То что за пределами - не мое.

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

среда, 17 января 2018 г.

Создан для людей, а не для прибыли

Устанавливал новый Firefox и зацепила фраза.
А для чего создаем мы? Для людей или для прибыли?

Ценность знаний программиста

Как fullstack разработчику мне приходится очень много читать литературы по специальности. Но в последнее время я стал замечать, что с моими знаниями стали происходить странные вещи. Они быстро устаревают! Копнем глубже.

Условно знания программиста можно разделить на две большие категории:
  • Фундаментальные знания
  • Знания технологий
Фундаментальные знания
Это понимание ООП, паттернов проектирования, принципов и метапринципов разработки ПО. Эти знания по большей части устойчивы к устареванию. Они лежат в основе вашего чутья в разработке - что такое хорошо и что такое плохо. По сути они для вас как луч света в темном царстве технологий. Какой бы язык, фреймворк или технологию вы не взяли в руки - интуитивно вы отличите говнокод от конфетки. Увы, фундаментальные знания накапливаются медленно - только с опытом и на практике. Не получится их приобрести сходу просто, например, прочитав книгу банды четырех про паттерны проектирования. В одно ухо влетит в другое вылетит со свистом как из турбины самолета. Проверено на себе. Можно читать правильные книги хоть до ноликов и единичек в глазах. Толка не будет. Но зато в каком-то смысле ваши фундаментальные знания антихрупки. К сожалению одних фундаментальных знаний для разработки ПО будет маловато. Нужно знать конкретные технологии.

Знания технологий
Это понимание технологий, с которыми вы активно работаете в данный момент. Знания технологий недолговечны. Перестав работать с какой-то технологий вы постепенно начинаете забывать нюансы. В лучшем случае эти нюансы осядут в долговременной памяти. Тогда если вы снова с этим столкнетесь даже через год, то быстро восстановите в памяти всю картину. В худшем случае знания через некоторое время улетучатся совсем. При необходимости в будущем с ними работать придется вникать повторно.
Знания о разных техологиях плохо сосуществуют друг с другом одновременно. Долго пишешь sql запросы - постепенно вылетают знания по JQuery. Разработал asp.net core приложение - забыл winforms и webforms. Охватить и запомнить все не получится.
В последнее время знания технологий стали довольно хрупкими. Они быстро появляются и быстро умирают. В книге Талеба можно провести аналогию с одной закономерностью. Если технология уже долго живет, как например SQL c 70-х годов прошлого века, то с высокой долей вероятностью такой долгожитель продолжит свое существование. В ближайшее десятилетие наверняка. А какой-нибудь хайповый JavaScript фреймворк вылетит в трубу в ближайшие пару лет вместе с потраченным на его изучение вашим временем. Поэтому надо очень вдумчиво выбирать во что инвестировать свое нерезиновое время. В свое время я не стал абсолютно ничего читать про silverlight. Не потратил ни минуты свое времени. И не зря.

Книги
Ценность книг для меня со временем стала падать. С самого начала своей карьеры я читал взахлеб. Про проектирование, дизайн, тестирование, юзабилити, паттерны, технологии с которыми непосредственно работал. Увы, без постоянной практики многие знания вылетали. А практиковать все и вся не было возможности.
Конечно ценность ряда книг неоспорима. Например "Совершенный код" Макконела. Но будучи новичком вы конечно сможете похвалиться такой прочитанной книгой, но суть не ухватите. Это тоже самое, что в школе писать сочинение про "Войну и мир".
Когда я изучал ASP.NET Webforms, то прочитал всего Дино Эспозито. Мне хотелось хорошо разобраться в вопросе. Понять фундаментальные основы платформы. Да и просто приятно разрабатывать с пониманием вещей. Про ASP.NET Core книги я уже не читаю. Просто нет смысла. Обновления выходят с такой скоростью, что читать фундаментально уже не хватит времени. 

Stackoverflow
Быстрое устаревание знаний хорошо заметно по ответам на нашем любимом stackoverflow. Еще буквально несколько лет назад в поисках решения достаточно было посмотреть первый правильный ответ. В большинстве случаев он вполне устраивал. Сейчас такой подход уже не работает. Правильный ответ чаще всего уже морально устарел:
  • Может быть он еще подходит, но с новыми возможностями языка оно будет короче и понятнее. 
  • Может актуален только для старой версии какого-нибудь фреймворка. 
В итоге надо пролистывать список ответов до конца. Вчитываться в каждый и чутьем понимать какой ответ теперь правильный для вашей конкретной ситуации.
Забавно читать вопросы по asp.net core. Там обычно по факту несколько правильных ответов с кучей коментов, аля в версии 1.0 это походит, в 1.1 не работает, а в 2.0 вообще api изменился и там надо вместо молотка дрель брать в руки.


Какой вывод я хотел сделать из написанного? Надо беречь свое время. Оно скоротечно. Вдумчиво выбирать во что его инвестировать. Ценность ряда программистских знаний аналогична по сроку годности скорее йогурту чем тушенке. А потраченное время вам никто не вернет.

вторник, 16 января 2018 г.

Перезагрузка asp.net core приложения в azure

После обновления через ftp конфигурационного файла (.exe.config) веб-приложения, azure не подхватывает изменения сразу. Веб-приложение работает со старой конфигурацией. Что делать? Куда нажимать?

Помог старый трюк! В корне веб-приложения лежит web.config. Необходимо внести в него любое изменение. Я обычно добавляю в конце файла пробел. Сохраняю. Это автоматически приводит к перезапуску пула приложений. Новые конфигурационные настройки подхватываются.

Наиболее эффективное программирование на C# - Билл Вагнер (2-е издание)

Закончил чтение очередной книги Билла Вагнера - Наиболее эффективное программирование на C#. 50 способов улучшения кода (2-е издани...