Забудьте о мысли, будто вы когда-нибудь закончите создание программы. Не думайте о том, что надо написать 400 строк или ещё 3 модуля — просто пишите по одной функции в день, это помогает. Однажды вы с удивлением обнаружите, что завершили свою работу и программа работает!
Пишите свободно и так быстро, как можете — чтобы выплеснуть всё в исходный код. Никогда не переделывайте и не оптимизируйте до тех пор, пока не поставите точку. Переписывание и рефакторинг в процессе создания программы — это обычно не более, чем предлог, чтобы не двигаться вперед, а топтаться на месте. Оно также препятствует свободному потоку мысли и ритму, которые приходят только при бессознательной работе с программой. Когда всё заработает - сможете заняться рефакторингом, либо начать писать заново - это забавный секрет получения отличного результата.
Забудьте о пользователях своей программы. Во-первых, эта безликая масса напугает вас до смерти, во-вторых, она существует только в театре, а в программировании — нет. У программы вашим пользователем является один-единственный человек. Я пришел к выводу, что иногда лучше всего выбрать кого-нибудь из знакомых и писать для него. Это позволяет сконцентрироваться на идее и не распылять свою энергию.
Если класс или метод не получается — оставьте его в покое и идите дальше. Когда вернётесь к нему через некоторое время, ответ найдётся сам собой, например, поймёте, что эта функция была не в том классе.
Я взял на себя смелость модифицировать их для программстов,
потому что полностью разделяю их суть, в истинности советов не раз убеждался на личном примере.
Эпиграф: Разделяй и Повторяй.
Крупные проекты не появляются на пустом месте. Написать в самом деле большую и сложную программу на пустом месте не получится.
Однако, выход есть, и его название я вынес в эпиграф. Лучше всего это правило продемонстрировать на примере. Например, вы хотите написать программу для решения судоку. Чтобы навёл камерой на журнал судоку - и сразу увидел ответ.
Круто? Было бы классно.
Как написать такую программу?
Сначала нужно разделить её на множество подзадач, как технических, так и алгоритмических.
- Как получить фото с камеры?
- Как его сделать чёрно-белым?
- Как выделить область с судоку?
- Как распознать цифры?
- Как решить головоломку?
- Как показать результат?
- Как запустить это всё на телефоне?
Далее необходимо в "лабораторных" условиях разобраться с каждым пунктом. То есть найти способ решения каждой подзадачи, хорошенько "погуглить", сделать тестовый проектик, реализовать указанный функционал по принципу "лишь бы заработало", только чтобы поставить галочку, что ты понял, как это делается, что у тебя есть рабочий пример.
Когда все части реализованы, начинается самое интересное - создание полной программы.
Не нужно перед собой ставить задачу сделать супер-правильное архитектурное решение, просто пиши, чтобы заработало:
- вызывай модуль фотографирования, делай фотку чёрно-белой,
- находи область задачки, запускай распознавание,
- вычисляй решение и показывай его на экране.
На данном этапе не стоит отвлекаться на оптимизацию, проверку данных, универсальность.
Твоя задача состоит в том, чтобы сделать так, чтобы программа могла отработать от начала до конца под твоим контролем.
Когда это всё получится, тогда можно сделать "ресет" и начать создавать программу "с нуля", имея в запасе функционал для решения каждой подзадачи и опыт их совмещения.
Опять же, не стоит слишком заморачиваться на универсальности и на оптимизации, впрочем, ты сам почувствуешь, как лучше начать писать эту программу, с определённой долей объектно-ориентированности и удобности использования.
Когда и это будет завершено, ты, наконец-таки поймёшь, как твоя программа на самом деле должна работать.
И вот теперь можно в самом деле начать её создавать.
Да, снова "с нуля", используя все былые наработки.
Крупные проекты не создаются на пустом месте. Необходимо сделать несколько итераций, от эскиза до прототипа и до рабочего продукта.
На каждой итерации продукт будет получаться более качественным и эффективным. Может не всегда новая версия будет лучше прежней, впрочем, при желании можно вернуться к прошлой версии, ведь так?
Зачем начинать сначала? Чтобы избежать "монстров" и "колосов", которые могут обрушиться, когда уже не ясно, как оно работает.
Программисты любят создавать своё, а не разбираться в старом. И это прекрасно, если только позволяет бюджет :)
Разделяй и повторяй, и будет тебе счастье :)