пятница, 30 ноября 2007 г.

Software Factories (Фабрики разработки программ)

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

1) Джек Гринфилд и Кит Шорт, при участии Стива Кука и Стюарта Кента Фабрики разработки программ. Потоковая сборка типовых приложений, моделирование, структуры и инструменты (Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools)
2) Practical Software Factories in .NET by Gunther Lenz and Christoph Wienands
3) Agile Software Factories by Damon Wilder Carr (Author)



Для начала можно начать с wikipedia: http://en.wikipedia.org/wiki/Software_factory. А затем на хорошо проработанную страничку http://msdn2.microsoft.com/en-us/teamsystem/aa718951.aspx

среда, 28 ноября 2007 г.

Аудио-подкасты для программистов

Совсем давно мой хороший знакомы (привет Кирилл!) посоветовал хоороший список аудио-подкастов для разработчиков. Прослушивая их вы убиваете двух зайцев: 1) узнаете самые новые идеи из уст гигантов софтварной индустрии, 2) подкачиваете английский.

Так что подключайтесь к прослушиванию:

* DotNetRocks
* Hanselminutes
* Bits Of Sillicon Hell
* Developer Night in Canada (although it is dormant for a long time)
* Code Sermon
* FLOSS Weekly
* Mondays
* Polymorphic Podcast
* Security Now
* Software Engineering Radio
* This Week in Tech
* Web Dev Radio
* Windows Weekly

(искать в google)

суббота, 24 ноября 2007 г.

Surprising criticism from parting Microsoft development lead

Jay Bazuzi, once Development Lead for the C# Editor, is leaving Microsoft, and he wrote some surprisingly harsh parting words for his friends before he left; things like “OO isn’t a fad” and that “It’s OK to use someone else’s code”.

Оригинал: ссылка
Источник: ссылка

среда, 21 ноября 2007 г.

Выпущена Visual Studio 2008

On Monday, Nov. 19, Microsoft announced that Visual Studio 2008 and the .NET Framework 3.5 were released to manufacturing (RTM). With more than 250 new features,Visual Studio 2008 includes significant enhancements in every edition, including Visual Studio Express and Visual Studio Team System. Developers of all levels – from hobbyists to enterprise development teams – now have a consistent, secure and reliable solution for developing applications for the latest platforms: the Web, Windows Vista, Windows Server 2008, the 2007 Office system, and beyond.

Ссылка на новость
Скачать полную версию (90 дней trial)
Скачать VS2008 Express (900Мб, DVD)
Примеры проектов
.Net Framework 3.5 Full Package

На сайте здесь найдены приполезнейшие ссылки:

вторник, 20 ноября 2007 г.

Инфекция Agile обнаружена в Сибири!

В начале ноября при поддержке Учебного Центра «Люксофта» в городе Омске состоялись тренинги, посвящённые применению гибких методологий в разработке программного обеспечения, а так же техникам повышения личной эффективности.

Тренинги проводил Agile-евангелист Денис Миллер.

 


 В самый последний момент я вспомнил, что нужно сделать снимок на память :)

Цель поездки была распространение эффективных методик разработки программного обеспечения. В течении недели были прочитаны тренинги: шаблоны проектирования, рефакторинг и курсы повышения личной эффективности: управление временем  и использование MindMap. На тренинг по уравлению временем пришло 18 человек, хотя учебный класс не был готов такому повороту событий, но нам удалось поместиться всем вместе и продуктивно провести время. Как говориться в тесноте, но не в обиде. Ребята собрались подкованные поэтому получились не только разобрать теорию, но и обсуждить практические вопросы.

В завершение серии тренингов был организован семинар посвящённый методологии SCRUM в ракурсе развития доверительных отношений внутри команды, между командой и клиентом. Интерес к теме проявился в жарких обсуждениях, и если бы не подкрадывающаяся ночь, то мы бы продолжили общаться ещё несколько часов...

Самый главный результат поездки в Омск был повышение интереса к гибким методологиям и сближению людей, разделённых 4 часами полёта на самолёте... людей, объединённых общей целью повышения качества процессов разработки программного обеспечения и получения удовольствия от своей работы!

 

понедельник, 19 ноября 2007 г.

Практика Рефакторинг on-line

Нашёл интересный сайт. Хотите попрактиковаться в рефакторинге. Хотите получить совет. Заходим на сайт http://refactormycode.com.
В основном там Ruby и Java поклонники были замечены. Но есть и колонка для C#.

пятница, 16 ноября 2007 г.

Implementation Patterns by Kent Beck


Буквально недавно выпущена книга гуру качественного кода и мною примного уважаемого автора Кента Бека под названием "Implementation Patterns". Беглый просмотр оглавления и аннотаций навели меня на мысль, что эта книга компиляция идей мира smaltalk в Java. А раз это так, то этот труд стоит читать! Ведь там идей очень много и очень они качественные.

Ждём завоз этой книги на территорию России. Если кто будет пролетать мимо и увидет в продаже. Просьба купить -- деньги верну :)

четверг, 15 ноября 2007 г.

Качественный проект

Идея 1. Во время проекта создаётся не только ПРОДУКТ, но так же ДОКУМЕНТАЦИЯ (можно считать, это отдельный проект), создаётся ПРОЦЕСС (многие это уже осознали) и создаётся КОМАНДА (это осознали только адаптивные методологии).

Идея 2. Успех проекта зависит 100% от человеческого фактора. А он в свою очередь складывается из ВЗАИМОДЕЙСТВИЯ, ДОВЕРИЯ, ЭМПАТИИ, ОРГАНИЧЕСКОЙ АРХИТЕКТУРЫ, ДОКУМЕНТАЦИИ, ОБРАТНАЯ СВЯЗЬ и др. (что значат некоторые вещи - не спрашивайте, не знаю). Этим waterfall не занимается.

Согласно Agile, наша цель -- создать лучшй продукт. Причём самым эффективным способом. А как практика последних десятилетий показала, что эффективность зависит от КОМАНДЫ и ЧЕЛОВЕЧЕСКОГО ФАКТОРА. На что и ориентируются множество практик Agile.

среда, 14 ноября 2007 г.

Семейный SCRUM (Family Scrum)

Уже второй день проводим вечерний SCRUM в семейном кругу.
Немного необычно. Чувствуется у меня скованность. Но интересно.
Итак наша команда: муж, жена, 2 пацанов по 3.5 года.

Стандарные вопросы Daily Scrum Meeting:
- что было сегодя?
- что будешь делать завтра?
- что тебе мешало быть эффективным? (проблемы)

Я очень много узнал нового, что происходило дома за моё отсутствие. Забавно. Очень здорово, когда узнаю, что один из бандитов постоянно задирался (проблема). И после скрама сразу оптираем со всеми ситуацию. Причем виновник активно подключается по выработке идей, как это можно исправить :)

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

Knowledge Transfer with SCRUM



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

Agile нам помогает разобраться с этим раз и навсегда. В последнем моём проекте я считаю мы сделали прорыв и осознали, что управлять знаниями можно. А самое главное не просто управлять, но использовать, внедрять и эффективно прилагать к решению проектных задач.

На семинаре я попытался взглянуть на практики SCRUM с точки зрения передачи знания. Мне кажется такой срез очень важен, поэтому смотрите и я жду ваших комментариев :)

четверг, 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 разных куска кода с разными намерениями.
Первый - инициализация и границы перебора.
Второй - бизнес-логика.

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

суббота, 29 сентября 2007 г.

Материалы курсов

Выкладываю материалы презентаций для тренинга "Рефакторинг". Структура тренинга:
1. Философия Рефакторинга
2. Каталог некачественного кода (Code Smells)
3. Каталог рефакторингов
4. Завершение.

http://rapidshare.com/files/59088808/ref001.rar

Дополнительные материалы по другим тренингам:
1) Тренинг MindMap для программистов, аналитиков и руководителей проектов
http://rapidshare.com/files/59092681/mm.rar
2) Материал для тренинга "Управление временем" (Time Managmenent)
Презентации тренинга Time Management (Управление временем)
Видео-ролик. Презентация управление временем на outlook

понедельник, 24 сентября 2007 г.

Как писать качественный код

Три пути (по мере бесполезности)
1) Пригласить меня в свою команду разработки в качестве Scrum Master'a
2) Читать книги (см. ниже)
3) Прийти ко мне на тренинг "Рефакторинг" (Refactoring), "Шаблоны проектирования" (Design Patterns) и другие.

Пробегусь по пункту два. Минимальный набор следующий:
1. Мартин Фаулер. Рефакторинг. Улучшение существующего кода
2. Макконнелл С. Совершенный код
3. Refactoring Workbook By William C. Wake
4. Велкий GoF. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
5. Мартин Фаулер. Архитектура корпоративных программных приложений
6. Джошуа Кериевски. Рефакторинг с использованием шаблонов (паттернов проектирования)
7. Scrum and XP from the Trenches

Если вы детально прочтёте эти книги ваш уровень в написании качественного кода будет очень высокий. Заодно напишите мне письмо -- было бы неплохо узнать ваш отзыв.

суббота, 22 сентября 2007 г.

Jimmy Nillson on Domain Driven Design

http://www.infoq.com/interviews/jimmy-nilsson-domain-driven-design

Хорошенькое интервью с Jimmy Nillson.
Ничего не понятно, но стенограмма помогает.

Любой Agile-разработчик должен иметь DDD под подушкой.

суббота, 15 сентября 2007 г.

Тренинги в Киеве

Пропагандируя Agile и принципы качественного кодирования мне удалось забраться в Киев и прочитать такие тренинги:

1. Design Patterns
2. Refactoring
3. Time Management
4. MindMap

Мне всё это дело понравилось. Особенно "Пузата хата" :)

суббота, 28 июля 2007 г.

C# 3.0 на пальцах

Сегодня я отмечу одну супер важную вещь, которая перевернёт всю идеологию объектного программирования. Это xLinq. SQL запросы для объектной модели. Этот синтаксический сахар грандиозное решение для простых программистов. Увеличивает качество кода в разы, а читаемость просто идеальная.

Выключите музыку, будьте внимательны.

Итак доменная модель. Как часто вам приходилось делать обход коллекции объектов и из них формировать новую? Не знаю как вам, но мне постоянно :)

Получалась следующая убогая конструкция


foreach(...)
...
if(...)
...
if(...)
...
newArray.Add(x);

Теперь этому положен конец.

Используем конструкцию:
var my = from r in people
where r.Age > 25
select r;
или
var my = people.Where(r => r.Age>25);

(что одно и тоже)

Здесь это главное сообразить где условия, где выборка
В примерах под переменной 'r' что-то типа итератора. То есть пробегаемся по массиву people, последовательно, текущая запись это 'r'. После обхода собираеются все записи удовлетворяющие условию и кладутся в 'my'.

То есть Linx это SQL для объектной модели. Просто класс!
Linq - это sql для объектов, xLinq - для xml, dLinq - для баз.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmptyConsoleApplication
{
class Program
{
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public int Age {get; set;}
}

static void Main(string[] args)
{
List people = new List
{
new Person {FirstName = "Scott", LastName="Guthrie", Age = 20},
new Person {FirstName = "Andre", LastName="Guthrie", Age = 27},
new Person {FirstName = "Peter", LastName="Guthrie", Age = 26}
};

//var my = people.Where(r => r.Age>25);

var my = from r in people
where r.Age > 25
select r;

foreach (var item in my)
{
Console.WriteLine(item.FirstName + ", " + item.LastName);
}
Console.ReadLine();
}
}
}


И в качестве проверки подумайте, что будет если

var my = from r in people
where r.Age > 25
select new Person { FirstName = r.FirstName, LastName = "UNKNOWN", Age = r.Age };


Для примера использовался виртуальныйы образ Orcas Beta 2 (около 5Гб), скачанный
Visual Studio 2008 Downloads (Напомню после VS2005.Net Beta 2 вышел релиз)