суббота, 17 августа 2013 г.

Семь навыков профессионального программиста

1. Проводит декомпозицию задачи и проектирует ее решение
Получив задачу, программист не должен сразу бежать писать код. Правильный программист 80% времени работает головой, и только 20% времени — руками. Даже создание не очень сложной программы требует анализа и проектирования: декомпозиции задачи на боле простые подзадачи и последующего синтеза общего решения из частных. Например, выбор длины переменной целого типа есть элемент проектирования.

2. Адекватно оценивает затраты на выполнение
Ответ «Для решения этой задачи мне потребуется 8 часов», — неправильный. Оценка всегда величина вероятностная. Правильный ответ, например, «от 4 (быстрее точно не смогу) до 16 часов (скорее всего, точно сделаю)». Большой разброс не должен смущать руководителя, он отражает высокий уровень неопределенности при решении программистских задач.

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

4. Соблюдает принятые стандарты
Ну, тут все просто. «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». (с) Стив Макконнелл.

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

6. Выполняет тестирование и отладку кода
«Откомпилировалось – отправляем в тестирование!» — подход неверный. Программист обязан найти максимум ошибок в своем коде. Он может сделать это намного эффективнее, поскольку для него программа – «прозрачный ящик». Большинство ошибок лежит на границах областей определения и изменения переменных алгоритма. Тестировщик же будет тестировать код, как «черный ящик», бомбя по площадям перебором большого количества наборов данных.

7. Анализирует найденные дефекты и отклонения от графика
Ну и последнее, как любая самоуправляемая система программист должен обеспечивать обратную связь. Обязан анализировать фактические отклонения от планов по срокам и качеству и выявлять их причины для того чтобы скорректировать свой рабочий процесс и минимизировать подобные отклонения в будущем.

Заключение

Как-то подошли ко мне два студента с вопросом: «А почему Вася получает в три раза больше каждого из нас? Он что, пишет код в три раза быстрее?». «Нет, — ответил я, – он пишет код медленнее вас. Просто он решает такие задачи, которые вы вместе, пока, не сможете решить за любое отведенное вам время. Потому учиться, учиться и учиться!» Мастер с большой буквы отличается от просто профессионального программиста не навыками, а сложностью и масштабностью решаемых задач.

Комментариев нет:

Отправить комментарий