Сообщений 5    Оценка 29        Оценить  
Система Orphus

Программист-прагматик

Путь от подмастерья к мастеру

Авторы: Эндрю Хант
Дэвид Томас
Издательство: "Лори", "Питер Пресс", 2007
288 страниц
ISBN: 5-85582-213-3
ISBN: 0-201-61622-X

Материал предоставил: Сергей Тепляков
Найти в магазинах
Купить в Озоне (333 руб.)

Аннотация

Содержание
Комментарии

Аннотация

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

Прочитав эту книгу, вы научитесь:

Содержание

Глава 1. Прагматическая философия

1 Мой исходный текст съел кот Мурзик
Принятие ответственности
2 Энтропия в программах
3 Суп из камней и сварившейся лягушки
4 Приемлемые программы
Находите компромисс с пользователями
Знайте меру
5 Портфель знаний
Ваш портфель знаний
Построение вашего портфеля
Цели
Возможности обучения
Критическое осмысление
6 Общайтесь!

Глава 2. Прагматический подход

7 Пороки дублирования
Как возникает дублирование?
Навязанное дублирование
Неумышленное дублирование
Нетерпеливое дублирование
Коллективное дублирование
8 Ортогональность
Что такое ортогональность?
Преимущества ортогональности
Проектные группы
Проектирование
Инструментарии и библиотеки
Написание текста программы
Тестирование
Документация
Жизнь в условиях ортогональности
9 Обратимость
Обратимость
Гибкая архитектура
10 Стрельба трассирующими
Программа, которую видно в темноте
При стрельбе трассирующими вы не всегда попадаете в цель
Программа трассировки и создание прототипов
11 Прототипы и памятные записи
Для чего создаются прототипы
Как использовать прототипы
Создание прототипов архитектуры
Как не надо использовать прототипы
12 Языки, отражающие специфику предметной области
13 Оценка
Насколько точной является «приемлемая точность»?
Из чего исходят оценки?
Что сказать, если вас просят оценить что-либо

Глава 3. Походный набор инструментов

14 Преимущество простого текста
Что такое простой текст?
Недостатки
Преимущества простого текста
Подводим итог
15 Игры с оболочками
Утилиты оболочек и системы Windows
16 Мощь редактирования
Один-единственный редактор
Средства редактирования
Производительность
Куда же направиться?
Какой же редактор выбрать?
17 Управление исходным текстом программ
Команда, в которой я работаю, не использует систему управления исходным текстом
Программы управления исходным текстом
18 Отладка
Психология процесса отладки
Умонастроение отладки
С чего начать?
Стратегии отладки
Элемент удивления
Контрольные вопросы при отладке
19 Обработка текста
20 Генераторы текстов программ
Пассивные генераторы
Активные генераторы текста
Генераторы текста не должны быть слишком сложными
Генераторы текста не всегда генерируют тексты программ

Глава 4. Прагматическая паранойя

21 Проектирование по контракту
Реализация принципа ППК
ППК и аварийное завершение работы программы
Другие случаи применения инвариантов
Динамические контракты и агенты
22 Мертвые программы не лгут
Аварийное завершение не означает «отправить в корзину для мусора»
23 Программирование утверждений
Не отключайте утверждения
24 Случаи, в которых используются исключения
Что является исключительным?
Обработчики ошибок как альтернатива исключению
25 Балансировка ресурсов
Объекты и исключения
Балансировка и исключения
Случаи, при которых балансировка ресурсов невозможна
Проверка баланса

Глава 5. Гибкость против хрупкости

26 Несвязанность и закон Деметера
Сведение связанности к минимуму
Закон Деметера для функций
А не все ли равно?
27 Метапрограммирование
Динамическая конфигурация
Приложения, управляемые метаданными
28 Временное связывание
Последовательность операций
Архитектура
Проектирование с использованием принципа параллелизма
Развертывание
29 Всего лишь визуальное представление
Протокол «Публикация и подписка»
Принцип «модель – визуальное представление – контроллер»
Отходя от графических интерфейсов
Все такой же связанный (после стольких лет)
30 Доски объявлений
Реализация концепции доски объявлений
Пример приложения

Глава 6. Пока вы пишете программу

31 Программирование в расчете на стечение обстоятельств
Как программировать в расчете на стечение обстоятельств
Преднамеренное программирование
32 Скорость алгоритма
Что подразумевается под оценкой алгоритмов?
Система обозначений О()
Оценка с точки зрения здравого смысла
Скорость алгоритма на практике
33 Реорганизация
Когда осуществлять реорганизацию?
Как производится реорганизация?
34 Программа, которую легко тестировать
Модульное тестирование
Тестирование в рамках контракта
Создание модульных тестов
Применение тестовых стендов
Построение тестового окна
Культура тестирования
35 Злые волшебники

Глава 7. Перед тем, как начать проект

36 Карьер для добычи требований
В поисках требований
Документация требований
Чрезмерная спецификация
Видеть перспективу
Еще одна мелочь
Поддержка глоссария
Прошу слова
37 Разгадка невероятных головоломок
Степени свободы
Есть более простой способ!
38 Чувство готовности
Здравое суждение или промедление?
39 Западня со стороны требований
40 Круги и стрелки
Какова отдача от методов?
Должны ли мы использовать формальные методы?

Глава 8. Прагматические проекты

41 Команды прагматиков
Никаких разбитых окон
Сварившиеся лягушки
Общайтесь
Не повторяйте самого себя
Ортогональность
Автоматизация
Чувствуйте момент, когда нужно остановиться
42 Вездесущая автоматизация
Все в автоматическом режиме
Компилирование проекта
Автоматизация процесса сборки
Автоматические административные процедуры
Дети сапожника
43 Безжалостное тестирование
Что тестировать
Как проводить тестирование
Когда тестировать
Кольцо сжимается
44 Все эти сочинения
Комментарии в программе
Исполняемые документы
Технические писатели
Печатать документ или ткать его на холсте?
Языки разметки
45 Большие надежды
Передача надежд
Небольшой довесок
46 Гордость и предубеждение

Приложение А. Информационные ресурсы

Профессиональные общества
Собираем библиотеку
Интернет-ресурсы

Приложение В. Ответы к упражнениям

Комментарии

Сергей Тепляков

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

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

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

Основной лозунг книги – никогда не останавливайтесь в своем развитии. Если вы знакомы с одним языком программирования и чувствуете, что дальнейшее изучение в рамках текущего проекта просто невозможно, начните изучать другой язык. И пусть он вам никогда не пригодится, но эти знания никогда не будут лишними. Вот что говорит в одном из своих интервью Бьерн Страуструп по этому поводу:

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

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

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

Единственный выход из сложившейся ситуации – инвестирование в собственный "портфель знаний" на регулярной основе.

Многие авторы поднимают проблему модульности и связанности. Авторы этой книги не исключение. Но они используют несколько непривычный термин «ортогональность».

«Термин "ортогональность" заимствован из геометрии. Две линии являются ортогональными, если они пересекаются под прямым углом, например оси координат на графике… Этот термин был введен в информатике для обозначения некой разновидности независимости или несвязанности. Два или более объекта ортогональны, если изменения, вносимые в один из них, не влияют на любой другой».

Не было ли у вас случая, когда вы за месяц до завершения проекта понимаете, что DCOM для построения клиент-серверной архитектуры не подходит? И нужно искать альтернативные решения… Я был в такой ситуации, и только ортогональность системы позволили перейти на .Net Remoting за неделю и не сорвать сроки.

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

Крис Дейт в предисловии к своей замечательной книге "Введение в системы баз данных" приводит следующую выдержку Бертрана Рассела:

«Меня обвиняли в привычке менять свои суждения… Но разве мог бы физик, работающий с 1900 года, например, похвастаться в середине двадцатого века тем, что его суждения не изменились за последние полстолетия?... Та философия, которую я ценю и которой стараюсь следовать, научна в том смысле, что мы должны всегда стремиться получить неопровержимые знания, но новые открытия могут выявить прежние ошибки, неизбежные для любого беспристрастного разума. Когда бы и что бы я ни говорил, сейчас или в прошлом, я никогда не утверждал, что это – окончательная истина. Я утверждаю лишь то, что в свое время высказанное мной мнение было вполне обоснованным… Я был бы очень удивлен, если бы дальнейшие исследования не показали, что его необходимо пересмотреть. К тому же я никогда не высказывал свое мнение как окончательный вердикт, а просто подчеркивал, что это – лучшее, что я мог сделать в то время для достижения ясного и точного понимания. Моей целью было, прежде всего, полная ясность во всем».

Поэтому никогда не стесняйтесь признаваться (и прежде всего себе) в том, что вы совершили ошибку. Быть может это и не ошибка вовсе, может быть в тех условиях, с тем опытом и знаниями – это был единственно правильный выход?

А разве не были вы в такой ситуации, когда менеджер проекта, представитель заказчика или кто-то из руководства подходит к вам и спрашивает: "Сколько тебе нужно времени, на завершение того-то и того-то?" И как часто вы отвечали: "Неделя" или "Три дня", когда совершенно точно понимали, что вы совершенно не понимали (простите за каламбур), что от вас требуется?

Авторы советуют говорить: "Я вернусь к вам с этим позже".

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

А что вы думаете по поводу требований? Может быть, ваши требования нужно было "добывать в карьере"? А может, быть вы столкнулись с проблемой чрезмерной спецификации? Может быть, вы сталкивались с документами, которые занимали десятки страниц, в которых было определено, сколько "битиков" должно быть отведено на тот или иной параметр, в которых выдумывалась собственная терминология, полностью противоречащая предметной области? Когда за всем за этим просто невозможно разглядеть семантику… что же должна делать система в конечном итоге? К сожалению, не все стремятся постоянно пополнять свой багаж знаний…

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

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

Главное, что хотят авторы, это то, "чтобы вы гордились правом собственности. "Я это написал, и я стою за своей работой". Ваша подпись должна стать признанным знаком качества. Люди должны увидеть ваше имя в заголовке программы и рассчитывать на то, что она будет солидной, хорошо составленной, проверенной и документированной. Это должна быть поистине профессиональная работа. Написанная настоящим профессионалом своего дела.

Программистом-прагматиком".

    Сообщений 5    Оценка 29        Оценить