В зависимости от личных предпочтений и потребностей, от уровня абстракций, на котором моделируется мир, а также от места в спектре между идеализмом и цинизмом, можно с полным правом сказать, что
работа разработчиков ПО заключается в следующем:
- написание кода;
- создание и поддержка качественного ПО;
- создание и поддержка достаточно хорошего ПО экономически выгодным образом;
- управление сложностью;
- удовлетворение потребностей пользователей;
- решение задач;
- удовлетворение потребностей заказчиков;
- зарабатывание денег для организации-работодателя или для её заказчиков;
- зарабатывание денег (для себя).
Разумеется, этот список далеко не полный. Некоторые из этих задач можно абстрагировать, редуцировать или вывести из других. Некоторые из них фундаментально несовместимы между собой или противоречат друг другу и могут сосуществовать с другими в конфликте. Например: допустим (в определённой мере), что качественное ПО порадует наших пользователей и заработает денег работодателю. Но в то же время нам нужно жертвовать качеством, чтобы оставаться в рамках бюджета, или добавлять функции, которые надоедают пользователям, но генерируют прибыль.
Каждая цель проистекает из определённого способа моделирования мира и наших действий. Как и в случае с любой абстракцией, они выполняют свою задачу в подходящем контексте и становятся
ложными вне этого контекста; многие проблемы в разработке ПО могут быть объяснены такой искажённой перспективой, о чём я говорил в своём
предыдущем посте. В этой статье мы будем считать, что основная задача разработчика ПО — это
управление сложностью.