воскресенье, 25 июля 2010 г.

Делай, как мы!

Внимание, в этом посте содержится наглая, ничем не прикрытая пропаганда здорового образа жизни!

Недавно кто-то из коллег обратил внимание на то, что в штате нашего томского офиса компании MCC численностью 9 человек нет ни одного курящего. Интересное совпадение(?) на фоне общей статистики.

А еще после переезда в новый офис у нас появилась парковка для велосипедов, и коллеги один за другим стали этим пользоваться. Я не удержался - и тоже купил байк. Велосипеды - классная тема: это весело, полезно для здоровья (особенно после восьми часового рабочего дня, проведенного за компьютером), да и окружающую среду не загрязняет. Популярность велосипедов - одно из самых приятных впечатлений от посещения Европы. Да и государства в Европе заботятся о велосипедистах: велодорожки, велопарковки и т. д. А у нас... у нас велосипеды не в моде (и климат здесь ни при чем) - и очень даже зря.

В общем, делай, как мы - и умрешь здоровым :)

суббота, 17 июля 2010 г.

Корни теории относительности (Relativity and its Roots)

Забавная штука переезд. На фоне общей рутинности этого процесса, нет-нет да найдется что-нибудь "спрятавшееся", затерявшееся и т. д. Порой случаются очень интересные находки :) В ходе моего недавнего переезда одной из таких находок стала книга "Корни теории относительности" (англ. "Relativity and its roots"). Я с трудом вспоминаю, откуда у меня эта книга... Почему-то кажется, что мне подарил ее преподаватель физики на младших курсах, но не припоминаю, при каких обстоятельствах. Отчетливо помню, что несколько лет назад я хотел прочитать ее, но положил на полку и... и вот.

Было несколько причин для того, чтобы перенести "Корни теории относительности" в верхнюю часть моего ToRead-списка.

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

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


Примечание

Квантовая гравитация — направление исследований в теоретической физике, целью которого является квантовое описание гравитационного взаимодействия, а в будущем — объединение гравитации с остальными тремя фундаментальными взаимодействиями, то есть построение «теории всего».

Два основных направления, пытающихся построить квантовую гравитацию, — это теория струн и петлевая квантовая гравитация.

А в-третьих, просто приятно иногда отвлечься от айтишной литературы и почитать что-нибудь художественное или научно-популярное.

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

Книга оставила после себя очень приятное впечатление и целостную картину, хотя не могу похвастаться тем, что детально разобрался во всех рассматриваемых вопросах (да я и не ставил такой цели).

У меня в руках оказался перевод издательства "Знание" 1987-го года (на Amazon'е есть два издания оригинала этой книги: 83-го и 98-го годов). Мало того, что перевод превосходный, так он еще и дополнен полезными комментариями переводчиков и редакторов. Никакого сравнения с нынешними переводами, на большинство из которых без слез не взглянешь. Интересно, почему в Советское время переводная литература была на качественно другом уровне? Поддержка государства? Понимание важности миссии книгоиздательского дела сознательными советскими гражданами? Что-нибудь еще?

Если качество перевода меня приятно удивило, то тираж, который я заметил совершенно случайно, просто шокировал: 100 000 (!) экземпляров узкоспециализированной (пусть и научно-популярной) книги по физике. Совестский Союз действительной был очень читающим государством... ну или по крайней мере очень покупающим книги :)

P. S. Учитывая тираж, думаю, тем, кто захочет ознакомиться с этой книгой, будет несложно найти ее в ближайшей серьезной библиотеке.

среда, 14 июля 2010 г.

Test-Driven Development vs. Test-First Development

Натолкнулся на днях на статью с провокационным названием "Why Test-Driven Development Really Isn’t Test First". Основная идея заключается в том, что необходимо сначала писать интеграционные тесты (например, при помощи Fit), а затем уже писать Unit-тесты и код в режиме TDD:
... we should not drive our acceptance tests from our unit tests, but rather do it the other way around since we need to be creating our acceptance tests first.

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

Update
Оказывается, Acceptance TDD - широко известная практика. Выходит, мой интерес к этой статье обусловлен лишь слабой осведомленностью в вопросах Extreme Programming.

В этой статье разработчики не соглашаются с критикой ATDD Кентом Беком и рассказывают свою success-story.

По результатам поверхностного изучения ATDD добавил в ToRead-список две книги под авторством Кента Бека: Extreme Programming Explained: Embrace Change и Test Driven Development: By Example

вторник, 13 июля 2010 г.

C# 3.0 Design Patterns

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

Перечитывать классическую книгу по этой тематике - "Design Patterns: Elements of Reusable Object-Oriented Software" (aka Gang of Four = GoF) - настроя не было: хотелось найти книгу посвежее (а за 15 лет по мотивам GoF было издано немало книг). Прошерстив Amazon, я остановился на книге "C# 3.0 Design Patterns". Как .NET-разработчика меня не в последнюю очередь привлекло название: интересно было посмотреть, какие изюминки автор видит в портировании паттернов на C# 3.0. Противоречивые отзывы на Амазоне настораживали, но любопытство взяло свое.

После прочтения книги остались двоякие впечатления. С одной стороны, были интересные примеры и идеи, с другой, - остался осадок: встречались неполные описания паттернов, не очень подходящие примеры и т. д. Но могу смело сказать, что с поставленной задачей книга справилась (пусть и отчасти косвенным образом): паттерны я вспомнил. Причем это тот случай, когда "не было бы счастья, да несчастье помогло": моменты, освещенные в книге не самым лучшим образом, заставили меня обратиться к GoF, сравнить материал двух книг, и в результате лучше разобраться в этой теме.

Негатив

Factory method и Abstract factory

В главе про FactoryMethod описывается и реализуется Parameterized Factory Method. Традиционный дизайн этого паттерна (когда тип создаваемого объекта переопределяется в виртуальном методе наследника) остается за кадром. Видимо, поэтому в главе про Abstract Factory автор не упоминает, что приведенный дизайн Abstract Factory - вариация на тему Abstract Method. Кроме того, при описании Abstract Factory опускается альтернативный дизайн этого паттерна, построенный на паттерне Prototype (этот дизайн интересен своей гибкостью).

Bridge

Сравним выдержки из описания паттерна Bridge из GoF:
An adapter often becomes necessary when you discover that two incompatible classes should work together, generally to avoid replicating code. The coupling is unforeseen. In contrast, the user of a bridge understands up-front that an abstraction must have several implementations, and both may evolve independently. The Adapter pattern makes things work after they're designed; Bridge makes them work before they are.

и "C# 3.0 Design Patterns":
The Bridge pattern decouples an abstraction from its implementation, enabling them to vary independently. The Bridge pattern is useful when a new version of software is brought out that will replace an existing version, but the older version must still run for its existing client base.

GoF рекомендует закладывать использование Bridge заранее, а "C# 3.0 Design Patterns" заявляет, что паттерн отлично подходит для legacy-кода. Из оперы "точно так же, но наоборот". Мое понимание паттерна Bridge совпадает с трактовкой GoF, и пример из главы про Bridge, остался для меня загадкой.

Mediator

В GoF паттерн Mediator описывается на знакомом каждому разработчику примере взаимодействия визуальных объектов на форме. При этом показывается, как Mediator позволяет уменьшить связность и сосредоточить логику, которая иначе была бы "размазана" по множеству объектов или обработчиков событий, в одном месте. В "C# 3.0 Design Patterns", в свою очередь, приводится невыразительный пример взаимодействия объектов через Mediator, причем акцент сделан на общении объектов, а не на логике внутри Mediator.

Все так плохо?

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

Однако "C# 3.0 Design Patterns" имеет смысл прочитать/пролистать .NET разработчикам, которые уже изучили фундаментальный труд по этой тематике.

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

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

Вместо заключения

В блоге у Jason McDonald есть отличная шпаргалка по GoF паттернам. Незаменимая штука, если вам нужно быстро вспомнить, кто есть кто.

воскресенье, 11 июля 2010 г.

Читаем блог "от корки до корки"

Бывает, найдешь отличный блог и хочется прочитать его "от корки до корки". Например, недавно натолкнулся на блог Эрика Липперта, одного из разработчиков C#, который за семь лет написал около 400 постов. Нужно ооочень много времени, чтобы прочитать все посты, комментарии, и во всем этом разобраться. Если сильно увлекаться этим процессом, страдают другие задачи (внезапно). Я нашел для себя следующий компромисс: завожу под блог отдельное окно в браузере (чтобы не забывать и не путаться) и даю себе обещание читать фиксированное количество записей в день (в случае с Липпертом это 4). Пока работает. А как поступаете вы?

суббота, 10 июля 2010 г.

Славься, SOLID! Славься, TDD!

Никакой информативности, просто порыв души :)