четверг, 2 октября 2014 г.

Задачник.NET

Этот пост предназначается всем любителям платформы .NET и языка C#. Думаю, многие встречали на просторах сети разнообразные задачки на понимание тех или иных особенностей платформы или языка. Я большой любитель подобных задачек и головоломок. Они помогают глубже понять определённые области и повысить собственные программистские навыки. Однажды я решил сделать подборку подобных задачек, чтобы можно было показывать другим людям и обсуждать нюансы работы с .NET/C#. Когда задачек накопилось достаточное количество, появилась новая мысль — оформить мою подборку в виде книжки. Вашему вниманию предоставляется текущий вариант этого сочинения под названием «Задачник.NET».

Читать online
Скачать PDF-версию
Исходные коды на GitHub

Данная книга представляет собой сборник задач на знание платформы .NET и языка программирования C#. Дабы у читателя и автора не возникло недопонимания, сразу хочется сказать, чем не является эта книга:

  • Эта книга не является универсальным способом проверить ваше знание платформы .NET. Это не сборник задач для собеседования. Если вы легко прорешали все задачки, то это не значит, что вы замечательный .NET-программист. А если вы встретили много новых для себя вещей, то из этого вовсе не следует, что вы плохо знаете .NET.
  • Эта книга не является подборкой новых, ранее нигде не виданных задач. Многие примеры можно встретить в литературе, в вопросах на StackOverflow, в программистских блогах. Просто потому, что они уже давно стали классическими.
  • Эта книга не является ориентированной на тех, кто уже считает себя Senior .NET Developer и хочет узнать много нового.

Так чем же тогда является эта книга? Задачник.NET — это попытка собрать в одном месте разные интересные практические задания на знание платформы. Скорее всего, наибольшую пользу извлекут для себя .NET-разработчики, которое ещё просто не сталкивались с теми или иными областями. Задачи разбиты на главы, так что можно читать не всё подряд, а только вопросы из тех областей, которые для вас представляют интерес. В этой книге вы не найдёте глубоко философских вопросов типа «Что такое класс?» или «Зачем нужен полиморфизм?». Большая часть заданий представляет собой фрагмент C#-кода, для которого необходимо определить результат работы. Каждый вопрос снабжён ответом с описанием того, отчего .NET ведёт себя именно так.

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

Я догадываюсь, что многие могут начать возмущаться: «А вот в такой-то задачке такая-та штука написана не совсем корректно!» или «А почему задачек так мало?». Поэтому обращаю ваше внимание, что это первый рабочий вариант. На текущем этапе мне хотелось бы получить немного фидбека: нужно ли вообще такое сочинение? Если нужно, то в каком направлении его лучше развивать, про какие области здорово было бы написать? У меня в черновиках накопилось много интересных заданий (которые я пока не успел красиво оформить и включить в задачник) как для уже существующих глав, так и для будущих. В первую очередь планируются главы про многопоточность, WPF и жизненный цикл объектов.

Для каждого задания в конце книги имеется ответ. Часть ответов снабжена кратким описанием того, почему же происходит именно так. На текущий момент подробные объяснения приводятся только для вопросов в главах «Математика», «Значимые типы» и «Строки». Ответы также планируется пополнять и совершенствовать, ведь порой в них и содержится основная полезная информация.

Немного о технической части. Читать обычные книги в классическом формате удобно не всем, поэтому было решено сделать online-версию с помощью GitBook. Как бонус — имеются ePUB и MOBI версии. Но pdf на GitBook верстается просто безобразно. Поэтому я вооружился LaTeX-ом и сверстал нормальную pdf-версию. С помощью Zenodo для книжки получен DOI. На сегодняшний день они самую малость отличаются, но на подходе чудо-скрипт, который будет всё красиво синхронизировать.

Буду рад конструктивным отзывам о моём небольшом сочинении. Также приветствуются новые задачки в любой форме: можете присылать их мне или же присоединяться к разработке на GitHub.

Оригинал поста на Хабре