суббота, 10 апреля 2010 г.

Замыкания в языке программирования C#

Возможно, вы никогда не слышали о таком понятии как замыкания (closure), или слышали, но все эти функциональные штучки показались вам настолько сложным, что вы решили отложить его изучение до тех славных времен, когда компиляторы будут писать программы за вас или хотя бы в компьютерах будет предусмотрен отдельный процессор для сборщика мусора. Но не зависимо от ваших знаний и представлений о замыканиях, можно сказать с уверенностью, что вы, будучи программистом C#, не раз сталкивались с этим понятием в своей повседневной деятельности (конечно, я рассчитываю, что вы не застряли в прошлом и перешли хотя бы на C# 2.0), поэтому знать, что же это такое будет не лишним.

вторник, 6 апреля 2010 г.

Новости Цитатника

Я опять решил выделить время и выложить наиболее интересные цитаты, опубликованные за последнее время в Цитатнике.

Стив Макконнелл. Совершенный код

Как сказал Дэвид Грайс, подход к программированию не должен определяться используемыми инструментами. В связи с этим он проводит различие между программированием на языке (programming in language) и программирование с использованием языка (programming into language). Разработчики, программирующие "на" языке, ограничивают свое мышление конструкциями, непосредственно поддерживаемым языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными.
Разработчики, программирующие "с использованием" языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка.
Глава 4.3 Волны развития технологий

Цитаты: Часть 1

Дж. Ханк Рейнвотера “Как пасти котов. Наставление для программистов, руководящих другими программистами”

Заниматься менеджментом было бы значительно проще, если бы все подчиненные были как две капли воды похожи на своего начальника.
Введение

Чем лучше вы знаете людей, которыми вам предстоит руководить, тем выше шансы на успех.
Глава 1. Как привыкнуть к роли руководителя

Не стоит забывать, что любой руководитель должен оценивать свои успехи исключительно по тому, насколько эффективно работают его подчиненные.
Глава 1. Слава, почет и деньги

Цитаты: Часть 1

Джоэл Спольски. "Джоэл о программировании"
Продвижение хороших кодеров выдвижением их на другие должности, где требуется писать на человеческом языке, а не на С++, служит классической иллюстрацией принципа Питера: люди продвигаются по службе, пока не достигнут своего уровня некомпетентности.
Глава 7. Как принимать на работу менеджера программы?

Идея рекламы состоит в том, чтобы врать и не быть пойманным.
Глава 37. Второе письмо о стратегии: что сначала - курица или яйцо.

Если показать непрограммисту экран с интерфейсом пользователя, который на вид готов и красиво выглядит, то он решит, что программа почти готова.
Глава 25. Важное следствие номер два

Цитаты: Часть 2, Часть 3, Секреты айсберга, Справочник бойца по проведению собеседования

Скотт Мейерс. Эффективное использование С++

Сорок лет назад код, изобилующий операторами goto, считался вполне приемлемым. Теперь же мы стараемся писать структурированные программы. Двадцать лет назад глобальные данные ни у кого не вызывали возражений. Теперь мы стремимся данные инкапсулировать. Десять лет назад написание функций без учета влияния исключений было нормой. А сейчас мы боремся за достижение безопасности относительно исключений.
Времена меняются. Мы живем. Мы учимся.

Правило 29. Стремитесь, чтобы программа была безопасна относительно исключений

Цитаты

Гради Буч. Объектно-ориентированный анализ и проектирование

Абстракция и икапсуляция дополняют друг друга: абстрагирование направлено на наблюдаемое поведение объекта, а инкапсуляция занимается внутренним устройством.
Глава 2.1 Инкапсуляция

Разумная инкапсуляция локализует те особенности проекта, которые могут подвергнуться изменениям.
Глава 2.1 Инкапсуляция

Сокрытие информации - понятие относительное: то, что спрятано на одном уровне абстракции, обнаруживается на другом уровне.
Глава 2.1 Инкапсуляция

Деление программы на модули бессистемным образом иногда гораздо хуже, чем отсутствие модульности вообще.
Глава 2.1 Модульность

Цитаты: Часть 3. Объектная модель. Основные определения, Часть 4

Эдвард Йордон. Путь камикадзе

Неразумное поведение корпораций заключается в том, что они делают одно и то же снова и снова, каждый раз ожидая различных результатов.
Глава 1

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

Для проведения переговоров нелишними будут такие вопросы, как «обанкротится ли организация, если система будет готова не к 1-му сентября, а к 5-му?» или «все хотят, чтобы работа была сделана хорошо, быстро и дешево. Все знают, что реально можно выполнить только два требования из трех. Какие именно два для вас важнее?»
Глава 3.2 Допустимые компромиссы

Цитаты: Часть 1, Часть 2

Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования

Шаблоны позволяют нам видеть лес за деревьями, поскольку помогают поднять уровень мышления.
Глава 5. Зачем нужно изучать шаблоны проектирования

Наличие возможности реализовать что-либо вовсе не означает, что это обязательно должно быть выполнено.
Глава 13. Принцип проектирования от контекста

Цитаты: Часть 3, Несколько слов о работе с заказчиком

суббота, 3 апреля 2010 г.

[Book ANN] The Design of Design by Frederick P. Brooks

Brooks Совсем недавно вышла новая книга Фредерика Брукса, автора знаменитого "Мифического человеко-месяца" - "The Design of Design – essays from a computer scientist".

По словам самого Брукса книга "Мифический человеко-месяц" предназначена прежде всего "профессиональным менеджерам в программировании", но если вспомнить ее содержимое, то станет понятно, что вопросам архитектуры и проектирования там уделено не меньше внимания, чем человеческому фактору и управлению проектами. Но на этом интерес Брукса вопросами проектирования не ограничивается:

"За последние шесть десятков лет я участвовал в проектировании систем в пяти различных областях: аппаратной части компьютеров, программного обеспечения, домов, книг и организаций. В каждой из них у меня была роль главного проектировщика или соавтора системы. Процесс проектирования меня интересует очень давно; тема моей диссертации 1956 года "Аналитическое проектирование систем автоматической обработки данных" ("The analytic design of automatic data processing systems"). Возможно сейчас пришло время более зрелых размышлений".

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

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

Краткое содержание книги

Section I: Models of Design
Section II: Collaboration and Telecollaboration
Section III: Design Perspectives
Section IV: A Computer Scientist’s Dream System for Designing Houses
Section V: Great Designers
Section VI: Trips through Design Spaces Case Studies

Дополнительные ресурсы об этой книге:

1. Fred Brooks, "Is There a Design of Design?" NSF Science of Design Workshop, November 2003 (3 pp., pdf)

2. Summary of Brooks' talk on "Collaboration and Telecollaboration in Design"

3. Fred Brooks, "The Design of Design", video of talk at CMU in 2002, which is an updated version of his Turing Award lecture (wmv) (с исходной ссылкой какие-то проблемы, поэтому я нашел вроде бы тоже самое видео на youtube).

3.  Книга входит в список This Week's Developer Reading List от Dr.Dobb's от 25 марта 2010

4. Обзор книги от Michael Keeling

5. Обзор книги от Hector Correa (описывает подробное содержимое первых трех разделов и кратко касается трех последних)