четверг, 28 апреля 2011 г.

Дизайн ревью

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

Постановка задачи

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

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

воскресенье, 17 апреля 2011 г.

С юбилеем, RSDN!

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

- Ничего, Серега, еще годик-другой поработаешь, и отношение к работе у тебя изменится.

С того памятного разговора прошло уже без малого восемь лет, а мое отношение к работе, к изучению чего-то интересного и нового осталось таким же самым.

четверг, 14 апреля 2011 г.

Классические книги по C#/.NET

Однажды я задался целью собрать в одном месте наиболее влиятельные книги по программированию с точки зрения компьютерной общественности. Конечно же, выполнить эту задачу практически невозможно по нескольким простым причинам: во-первых, понятия у «компьютерной общественности» настолько широки и настолько сильно отличаются от индивида к индивиду, что говорить о каком-то списке, подходящем всем и каждому очень сложно. Кроме того, хотя и старался быть непредвзятым, в список все же попали книги, которые, прежде всего, произвели на меня лично сильное впечатление. Вторая проблема того списка заключалась в том, что понятие «книги по программированию» также слишком широко. Как правильно заметил старина Брукс в своем «человеко-месяце», количество направлений компьютерной науки сейчас столь огромно, что одному человеку достаточно глубоко охватить все, Бог ты мой, даже основные темы, связанные с программированием практически невозможно. Ну, и последним недостатком предыдущей статьи является достаточно поверхностный охват каждой из тем; многие жаловались на то, что в списке по той или иной теме не хватает слишком многих хороших книг.

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

понедельник, 11 апреля 2011 г.

Как не надо писать код

По статистике мы значительно чаще читаем код, чем пишем новый. Этот код может быть своим, а может быть чужим, это может быть ревью чужого кода пред коммитом, а может быть вам дали задачу добавить новую возможность, пофиксить багу или просто разобраться в логике существующей системы. Отношение к коду, как чему-то очень важному совсем не ново, об этом написаны десятки книг и, наверное, сотни статей; но практика показывает, что обилие информации по этой теме никак не влияет на качество существующего кода в реальных системах. На практике все чаще слышишь, «вот дали бы побольше времени, вот тогда бы я все сделал как нужно, никакого г#$@о-кода бы не было» или «ладно, вот эту заплатку я делаю последний раз, а вот потом я вернусь и все исправлю».

Недавно на rsdn.ru был задан вопрос, а точнее поднято обсуждение того, как не нужно писать код, и автор этого обсуждения привел пример, который это отлично демонстрирует. Поскольку я потратил некоторое время на написание ответа, то решил его немного облагородить и добавить некоторые мысли, которые посещают мою голову, когда я сам сталкиваюсь с подобным кодом, и выложить все это дело здесь.

четверг, 7 апреля 2011 г.

Рецензия на книгу Джона Скита “C# in Depth”, 2nd Edition

CSharp_In_Depth

В последнее время я все чаще и чаще слышу от своих коллег о том, что язык C# двигается куда-то не туда. Новые возможности в нем появляются слишком быстро, мы тут, дескать, предыдущие еще не освоили, а бравые ребята из Редмонда успели новые навыдумывать, да еще и парадигмы новые к нему прикручивают. Фич в языке уже столько, что их ни в одну нормальную голову уже не впихнуть; мало того, что их много, так с некоторыми еще и без бутылки (без спецификации) не разобраться. Да и вообще, какой-то второй С++ получается, осталось добавить undefined behavior в десяток мест спецификации и мы получим чудище, аналогичное детищу Страуступа.

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

воскресенье, 3 апреля 2011 г.

О книге Барта де Смета “C# 4 Unleashed”

C# 4.0 Unleashed Знаете ли вы парня по имени Барт де Смет (Bart de Smet)? Нет? Напрасно. Это автор весьма популярного (*) блога B# .NET BLOG, в котором он пишет всякие умности по разным темам, связанным с языком C# и платформой .Net, причем делает это очень подробно, углубляясь в такие дебри, из которых не всегда удается выбраться, не повредив свое хрупкое ментальное здоровье. Зная его стиль изложения, каково же было мое удивление, когда я обнаружил, что этот парень написал книгу по языку C#. Нет, сам факт написания книги таким человеком меня ни сколько не удивил, меня удивило сочетание двух не слишком совместимых до этого понятий: объема в 1650 (!) страниц и глубины изложения. Я, конечно, понимаю, что товарищ Кнут накрапал побольше, да и фундаментальность темы с глубиной изложения у него не подкачали, но, во-первых у него ушло на это несколько десятков лет, ну а во-вторых, сравнивать кого бы то ни было с Кнутом вообще не честно.

суббота, 2 апреля 2011 г.

Visual C# MVP

MVPLogo Я честно вчера хотел рассказать о новой замечательной книге по языку C#, о которой я упоминул в конце предыдущего поста, но мой провайдер отлично пошутил и вырубил интернет на полдня.  Ну а вечером, когда интернет появился, я получил письмо от Майкрософт, в котором говорилось, что я получил MVP Award в разделе Visual C# (сегодня я все еще могу залогиниться на сайт www.mvpaward.com, значит это была не первоапрельская шутка). Так что рассказ об этой таинственной книге по языку C# откладывается еще на день.

Итак, что это звание значит для меня? Прежде всего, что работа по переводу блога Эрика (*), редактированию книг и написание статей, как на этом блоге, так и на rsdn.ru не прошли незамеченными. Ну, а для читателей это значит лишь то, что я буду стараться втыкать глубже, брать больше, кидать дальше, а пока будет лететь, буду отдыхать держать достойными, как темпы публикаций, так и их качество.

В любом случае, всем читателям огромное спасибо, и не забывайте, что ваше мнение, по фармату, содержанию или предполагаемым темам очень важно. Так что, если у вас есть какие-то мысли по этому поводу – обязательно пишите.

UPDATE: ссылка на мой профиль

-------------------------------------

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