Больше рецензий

outsight

Эксперт

Эксперт Лайвлиба

15 ноября 2016 г. 14:22

2K

4 Держаться корней

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

Речь пойдет про голый, коробочный .NET версии 4.5 - без лишних слов про ASP.NET, Entity Framework и прочее. Тут базовые классы, типы, механизмы и равно важный и адски сложный раздел про многопоточность на четверть книги. Это корни, за которые мы должны держаться, чтобы стоять - так пел молодой Гребенщиков. Первые 150 страниц - о том, как работает компилятор и как выглядит IL-код. Скучно? Но это же введение. Нет. Примеры-простыни на CIL-ассемблере будут преследовать нас до последних страниц. Впрочем, судя по Stack Overflow, немалое число разработчиков - только не начинающих - залезает в код СIL: одни по нужде (в хорошем смысле), другие удовольствия ради - то есть практика есть: автор не такой уж чудак.

NICK GENTRY. Profile Number 13 (2015)
NICK GENTRY. Profile Number 13 (2015)

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

Аудитория Рихтера - не новички, скорее - их противоположность. Я сам пишу под .NET чуть меньше года, и не скажу, что чтение далось легко: хоть понял я все-таки больше, чем не понял. Можно долго и успешно работать в среде CLR, не зная и десятой доли того, о чем пишет Рихтер. Я уверен, что двадцать из тридцати глав ни вам, ни мне в практической жизни не пригодятся. Другое дело, что это - разные двадцать глав.

Для того, чтобы вскипятить чайник, не нужно знать ничего об агрегатных состояниях вещества, и даже температура кипения воды - сто градусов Цельсия - лишь бесполезная константа. И все же знание физики наполняет кипятящего чайник тщательно скрываемым чувством превосходства над теми, кто заваривает чай, не зная науки. Хотя бы по этой причине уважающему себя - и, тем более, гордящемуся собой - C#-разработчику обязательно следует прочесть Рихтера. Да и нет, наверное, такого человека (только если он программист), в котором эта книга не оставит следа - некоторые рекомендации очень конкретны, стыдно будет их игнорировать:

Если вы хотите изменить регистр символов строки перед выполнением простого сравнения, следует использовать предоставляемый String метод ToUpperInvariant или ToLowerInvariant. При нормализации строк настоятельно рекомендуется использовать метод ToUpperInvariant, а не ToLowerInvariant из-за того, что в Microsoft сравнение строк в верхнем регистре оптимизировано.

Да! Но и эти прекрасные слова, а следом и весь остальной текст, тоже можно было бы оптимизировать - совсем просто - вот так, например:

Если вы хотите изменить регистр символов строки перед выполнением простого сравнения, следует использовать предоставляемый String метод ToUpperInvariant, оптимизированный в Microsoft по сравнению с ToLowerInvariant.

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