Агрегация собственного опыта, идей, мыслей.
Итак, по шагам.
- Самое первое - решить, а нужно ли? возможно уже существует более лучшее решение, в котором легче допилить, то, что тебя не устраивает?
- Берем бумажку, блокнот (блокнот - лучшее оружие вор^Wпрограммиста!), и пишем те задачи которые должна решать программа, эдакие основные фичи, глобальные юзкейсы.
- Продумываем, при помощи того же блокнотика, интерфейс, если он есть.
- По результатам берем, рисуем блок-схему, для начала укрупненную. Особенно это нужно для диалоговых приложений.
- Далее начинаем детализировать блок схему, в виде отдельных схем описываем отдельные алгоритмы, помогает продумывать в том числе и общую архитектуру.
- Если нужна база данных, начинаем чертить таблички, придумывать поля, смотреть какого типа они должны быть, придумывать связи
- Когда уже получится достаточно стройная картина, обязательно переложить все это в электронный вид - если проект закрытый, будет самим легче разобраться, а если OpenSource - то сторонним разработчикам.
- Выбираем инструментарий: тут в основном язык, библиотеки (в том числе с опорой на лицензию, для собственного использования - пофиг, но если планируешь распространять, то озадачься).
- Распечатываем алгоритмы, обклеиваем ими стену - что бы всегда было перед глазами, что бы в любой момент можно было увидеть цельную картину проекта, какие части как между собой взаимодействуют.
- Глядим на все это дело, начинаем думать, какими структурами языка это все реализовывать: что засунуть в структуру, что - в класс, какие классы будут базовыми, какие наследоваться, какие интерфейсы внутри классов, делаем пометки на той же бумажке (результаты уже не нужно будет заносить в комп, точнее не нужно в том виде, в каком вы их, эти пометки делали).
- Может и не логичное место: придумайте правила оформления кода (мои заметки можно глянуть тут), от себя хочу сказать - все равно какой он будет главное: * соблюдайте его на протяжении всего проекта * используйте отступы и пусты строки для оформления блоков - читабельность кода увеличивается в разы * не чурайтесь комментариев (немного далее)
- Про комментарии сказано было, но я рекомендую сразу подумать и о системе документирования самого кода, API библиотек и тому подобного. Для себя использую Doxygen, в коде просто вставляются комментарии в нужной форме, но основе которых, при помощи Doxygen генерируется документация на код в формате HTML/RTF/man
- Ну, наверное, в основном - все. Для проверки - перейдите к пункту 1 :simple_smile:
Естественно, разработка это ниразу не линейный процесс, по ходу дела могут меняться требования, мысли. Главное не забывайте отражать эти изменения в документации. Что перечислено выше, отнимает достаточно много времени, но потом писать становится значительно проще, количество костылей сводится к минимуму. Да и лишний раз заставит подумать - а нужно ли оно?
Из дополнительных пунктов:
- распределение обязанностей в команде: что бы каждый занимался ровно своим делом
- политика использования системы контроля версий
- пиши прототипы: для проверки какой-то новой концепции, создания нового функционала, отладить будет проще, когда эта функциональность является в прототипе основной, легче написать переносимый модуль. Из прототипов можно потом готовую программу собраться как из конструктора.
Ссылки в тему:
- Блок-схемы:
- http://habrahabr.ru/blogs/xkcd_ru/47126/ - учимся читать :)
- http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0
- http://mini-soft.ru/soft/vba/r_2.php - тут есть хороший пример реализации switch
- Почитать книжку Эрика Рейнмонда “Искусство программирования для Unix”: