Выбрать главу

• Можно безболезненно прерываться. Если кто-то подошел к вам с вопросом, или звонит телефон, или нужно срочно ответить на письмо, или нужно принять участие в совещании, ваш партнер по парному программированию может продолжить работу над кодом. Когда вы вернетесь, ваш напарник все еще будет в состоянии потока, и вы сможете быстро наверстать упущенное и присоединиться к нему.

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

Поток дает невероятную продуктивность. Но это состояние легко утратить. Старайтесь всеми силами войти в рабочий поток, а затем, когда это получилось, удерживайтесь в нем!

Предпочитайте примитивам предметно-ориентированные типы данных

Эйнар Ландре

23 сентября 1999 года космический аппарат Mars Climate Orbiter стоимостью 327,6 миллионов долларов потерялся при выходе на орбиту Марса из-за программной ошибки на Земле. Ошибку впоследствии окрестили смешением единиц измерений (metric mix-up). Программное обеспечение наземной станции производило расчеты в фунтах силы, а космический аппарат ожидал указаний в ньютонах,[22] в результате чего наземная станция недооценила мощность ускорителей аппарата в 4,45 раза.

Это один из многих примеров отказов программного обеспечения, которых можно было избежать благодаря более строгой и предметно-ориентированной типизации. Это также наглядная демонстрация назначения многих возможностей языка Ada, спроектированного преимущественно для создания встраиваемого отказоустойчивого программного обеспечения. В Ada применяется строгая типизация со статической проверкой как примитивных, так и определенных пользователем типов:

type Velocity_In_Knots is new Float range 0.0.. 500.00;

type Distance_In_Nautical_Miles is new Float range 0.0.. 3000.00;

Velocity: Velocity_In_Knots;

Distance: Distance_In_Nautical_Miles;

Some_Number: Float;

Some_Number:= Distance + Velocity; — Компилятор отловит здесь ошибочное использование типов.

Разработчики приложений, сбои в которых менее критичны, также могут выиграть от более широкого применения предметно-ориентированной типизации. Предметно-ориентированные типы можно использовать вместо имеющихся в языках программирования и библиотеках базовых типов данных, таких как строки и числа с плавающей запятой. В Java, C++, Python и других современных языках абстрактный тип данных известен как class. Применение таких классов, как Velocity_In_Knots (скорость в узлах) и Distance_In_Nautical_Miles (расстояние в морских милях) значительно повышает качество кода:

• Такой код легче читать, поскольку он выражает понятия предметной области, а не просто описывает строки (String) или действительные числа (Float).

• Такой код легче тестировать, потому что он инкапсулирует поведение, которое легко проверить.

• Такой код облегчает повторное использование в разных приложениях или системах.

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

Мораль: начинайте пробовать предметно-ориентированные типы с целью повышения качества разрабатываемых программ.

Предотвращайте появление ошибок

Жиль Колборн

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

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

вернуться

22

1 ньютон равен 0,224808943 фунта силы. — Прим. ред.