Что нужно знать перед началом разработки большого проекта?
После года работы над проектом, который представляет из себя Web-приложение с front-end'ом на three.js (WebGL) и back-end'ом на PHP+MySQL, стало понятно, что это не совсем верный путь, поэтому нашел им аналоги. Пришлось отказаться как от three.js, с которым производительность оставляла желать лучшего, так и от чистого интерпретируемого РНР, с которым и так все понятно, динамическая типизация и переменные через $ ой как надоели). К тому же обычного хостинга не хватило бы, так как нужны NoSQL БД, а там уже поглядишь, и VPS лучше взять с J2EE
Собственно, последнее время активно изучаю материалы по данной теме, чтобы не наделать новых глупостей, так как первый блин уже "получился". Во многом помогла книга "Совершенный код" (еще не до конца прочел) тем, что дала общее понимание того, с чего нужно начинать проект (не с "написания код", как это делалось, ну почти..)
1. Выработка требований
определить, зачем нужно приложение
что оно должно делать (тот момент, когда фантазия забегает далеко наперед, к счастью медленно но уверено исследую области 3D графики и математики для реализации задач)
и .т.д.
2. Проектирование
продумать то, на какие части должно быть разделено приложение, что они должны делать и как это все должно взаимодействовать (много изучал UML, морально готов приступить к проектированию, но почти не имею практических навыков при составлении диаграмм:) )
3. Конструирование
этап, на котором весь продуманный функционал постепенно воплощается в код, компилируется, тестируется и т.п. неоднократно
Говоря об инструментах, могу сказать, что кроме самых необходимых (от IDE к отладчикам), нужна система управления версиями (git), генератор документации, инструмент прототипирования GUI
Но что еще стоит упомянуть и поправить в вышесказанном? Поделитесь, пожалуйста, опираясь на собственный опыт.
Если к проекту будет подключатся команда разработчиков, а если проект большой я думаю рано или поздно вам понадобятся помощники, тогда вам будет необходим свой code-style-guide ну или позаимствованный например от гугла.
Насчет проектирования, тут не всегда обязательно UML, проектировать можно по разному, зависит от методологии, если вы не боитесь, что во время разработки проект будет терпеть много изменений, то пишите спеку (SRS) в виде IEEE 830 или RUP. В ходе написания спецификации вам и понадобятся разные UML диаграмки.
Если вы любите более гибкую разработку, то можете позаимствовать так называемые user story, суть которых состоит не в подробном техническом документировании каждой функции, а в том, что функционал проекта разбивается на фичи которые описываются человеческим языком, можете примеры из scrum посмотреть.
Вообще все сводится к выбору методологии разработки ПО, их сейчас множество, от себя скажу, что не обязательно зацикливаться на одной, их можно синтезировать подстраивая под себя.
Я для себя понял одно общее правило: большей проект в начале упрощать максимально, отбрасывая все лишнее, стараясь в первом же прототипе, реализовать главную бизнес цель проекта, а потом уже наращивать все остальное.
Это правило помогает, меньше рассуждать и философствовать над проектом и просто делать его, а то много проектов завершаются еще на стадии проектирования, когда ты входишь в ступор от обилия вариантов реализации и возможных проблем и сценариев. Just do it)
Очень удобно и очень эффективно использовать какой-то багтрекер-командный-менеджер-механизм.... аля Jira, Redmine, etc...
Ну и помнить про сроки и бюджет.
Виталий Столяров: без сроков и бюджета проект возможно будет бесконечно затяжным, безгранично убыточным, тратящим и силы и время. хотя это зависит от инвесторов, ну и от мотивации сотрудников, исполнителей, кто готов посвятить этому благому делу во благо мира!