четверг, 25 октября 2007 г.

Джим Мак-Карти "Программируем командный дух" и "Правила разработки программного обеспечения"

Год назад пытался читать эту книгу. Ничего не понял. Засыпал. Спустя год всё изменилось. Я понял оказывается её читать можно.

Фактически Джим предлагает формализовать некие часто встречающиеся моменты во взаимодействии разработчиков. Как начинать митинги, как вести. Как выявлять намерения и цели разработчиков. Как формировать цели команды. То есть разработать паттерны командного взаимодействия.

Некоторые техники конечно так и хочется покритиковать -- но пока не попробовал, я не имею права это делать. Очень критично читал его вторую книгу - "Правила разработки программного обеспечения" Мак-Карти М. Вот там есть с чем я не согласен (так как попрактиковался уже некоторым вещам). Грубовато как-то. И ещё в начале странные слова "Эта книга представляет собой наглядное и практическое пособие по разработке ответственного крупномасштабного программного обеспечения..." :)

Справка:

Джим и Мишель Мак-Карти, «Программируем командный дух. Базовые протоколы, позволяющие создавать и поддерживать общее видение», Символ-Плюс, 2004, ISBN-5-93286-065-0

Jim McCarthy, Michele McCarthy, “Software for Your Head: Core Protocols for Creating and Maintaining Shared Vision”, Addison-Wesley, 2001, ISBN-0201604566

http://www.microsoft.com/rus/news/issues/2006/06/JimMcCarthy.mspx
http://www.mccarthyshow.com/TheMcCarthyShowIndividualEpisodes/Episode15FamilyTime/tabid/1256/Default.aspx
http://www.sdexpo.ru/data/speakers_2007/jim_mccarthy_software_for_your_head.pdf

Отзывы
http://kirillk.livejournal.com/51279.html
http://community.livejournal.com/mustread/6340.html


В общем, сейчас, считаю книгу очень толковой. Чтобы понять как нужно делать, как не нужно. Аналогов не встречал. Рекомендую к использованию и обсуждению.

воскресенье, 21 октября 2007 г.

Применение DDD и шаблонов проектирования: проблемно-ориентированное проектирование приложений с примерами на C# и .NET

Совсем свежая книга, к сожалению, ни на развалах, ни в интернете её купить нельзя.
Как только выйдет - советую покупать! Правильная книга для правильных разработчиков.
К сожалению, лучше бы перевели классическую книгу Эрика Эванса.

--- cut ---
Эта книга о разработке корпоративных программных приложений в среде .NET с применением шаблонов проектирования. В ней описаны: проблемно-ориентированные методы проектирования (DDD, или Domain Driven Design), разработка посредством тестирования (TDD, или Test-Driven Development), объектно-реляционное преобразование, т.е. методы, которые многие относят к ключевым технологиям разработки программного обеспечения. По мере развития и усложнения технологии все большее значение приобретают вопросы правильного применения методов проектирования. Ценность этой книги в том и состоит, что она помогает разобраться в этих вопросах. Хотя большинство примеров кода представлено на языке C#, материал книги может оказаться полезным и для тех, кто работает на платформе Java. Книга адресована опытным разработчикам архитектуры и прикладного программного обеспечения уровня предприятий, в том числе и в среде .NET.
--- cut ---

http://www.williamspublishing.com/Books/978-5-8459-1296-1.html

воскресенье, 14 октября 2007 г.

Intention Revealing Method

Всё чесались руки сделать паттер "Intention Method". Думал присвоить себе славу и мировое признание. Но и тут меня обогнали на 10 лет :)

[1] Smalltalk Best Practice Patterns. Kent Beck, 1997
[2] Patterns in Java, V.2, Mark Grand

Очень рекомундую прочитать главу 6 [2] под названием "Organization Coding Patterns". Очень простые решения "Intention ..." & "Composed Method" решат многие проблемы нечитаемого кода.

"Если название функции не очевидно, определите метод который будет отражать намерение"


if(LOCK_FILE.CreateNewFile()) {...
меняется на
if(CreateLockFile())


И другой пример из библиотеки java.awt.EventQueue:
if(eventQueueListener != null)
  eventQueueListener.eventPosted(theEvent);

смело меняем на
private void notifyEventQueueListener(AWTEvent theEvent)
{
  if(eventQueueListener != null)
    eventQueueListener.eventPosted(theEvent);
}

среда, 10 октября 2007 г.

for VS while

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


while (nextLeaseEnd < _finishedRollOverYear)
{
_mtm += _squareFeet.Value;
nextLeaseEnd = nextLeaseEnd.AddMonths(_category.MonthsToNextLeaseEnd);
}



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

DateTime nextLeaseEnd = _tenant.LeaseEnd.Value;
DateTime end = _startRollOverDate.Value;
int delta = _category.MonthsToNextLeaseEnd;

for(; nextLeaseEnd < end; nextLeaseEnd = nextLeaseEnd.AddMonths(delta))
{
_mtm += _squareFeet.Value;
}


Фактически я ввёл ненавистные мне временные переменные.
Но получил 2 разных куска кода с разными намерениями.
Первый - инициализация и границы перебора.
Второй - бизнес-логика.

Ваше предложение?