Только зачем всё это в небольших проектах?Goldsmith писал(а):А конкретно: обсуждение проекта с заказчиком, сбор требований и пожеланий, ранжирование их по степени важности, планирование задач, ведение Wiki по проекту, регистрация багов и отслеживание их исправлений, форум поддержки пользователей продукта и т.д.
И мы вроде говорим об одном программисте, у которого заказчик - или он сам или кто-то из знакомых.
В небольших проектах гораздо проще записать в комментариях или на листочке к коду то что не получается запомнить, чем в отдельной программе. Вопрос именно в том, что может дать отдельная программа по сравнению с листочком или текстовым файлом(в случае общей информации) и комментариями в коде(в случае информации относящейся к этой части программы).Goldsmith писал(а):Конечно, все это можно пытаться держать в голове (лично в моей это все точно не умещается, неоднократно проверено) или записывать в тетрадке, но я предпочитаю напрягать компьютер.
Какая часть из обнаруживаемых им ошибок - ложные срабатывания и какую часть можно легко увидеть просто просматривая код?Goldsmith писал(а):Например, статический анализатор кода тоже очень полезен, поскольку только он может обнаружить массу потенциальных логических ошибок, которые не обнаруживаются компилятором. Хотя без него многие обходятся (впрочем, очень даже зря).
Программисту или даже небольшой команде(состав которой не меняется) обычно документации в виде кода(в первую очередь - заголовочных файлов) и комментариев к нему - вынесение этой информации в отдельный файл не даст никаких приемуществ.Goldsmith писал(а):Генератор документации тоже весьма полезен, поскольку позволяет генерировать проектную документацию, согласованную с исходниками. Хотя можно и ручками. Впрочем, чаще ленятся, и проектной документации либо нет вовсе, либо там полный бардак.
В небольших проектах обычно время необходимое на то чтобы сделать тесты сравнимо со временем написания программы с тестированием вручную. То же самое относится и к "разработке, управляемой тестами" - гораздо быстрее написать программу так, чем сначала составлять тесты, а потом писать на основе них.Goldsmith писал(а):И фреймворк модульного тестирования весьма полезен, поскольку только с его помощью можно автоматически прогонять юнит-тесты всех функций и автоматически же обнаруживать ошибки.
Так же как и без компилятора.Goldsmith писал(а):Даже без паяльника можно обойтись, наверное.
Тут важно, что будет проще - разобраться и использовать(в том числе поддерживать) данную вещь или обойтись без неё. И вот в случае паяльника и компилятора проще первое, а в случае управления проектом(в небольших проектах) - второе.
Только в случае с программистом-одиночкой(да ещё и не достаточно опытным) получается так, что либо удастся найти готовую библиотеку(а то и вообще взять линукс) для реализации этой функции либо заказчику придётся обойтись без этого.Goldsmith писал(а):Заказчик нынче ушлый пошел. Ему и Zigbee подавай, и встроенный в прибор WWW-сервер, и массу прочих вкусностей, а все это требует массу кода.
В случае, если удастся найти библиотеку, то код конечно в мегу8 не влезет, только вот размер кода, который пишет программист, не изменится.
Хотя в случае линукса или другой системы которую нужно допиливать - это уже участие в большом проекте.
Только без умения правильно структурировать программу невозможно написать большой проект - иначе новый код со временем станет дописывать всё сложнее и сложнее и рано или поздно выяснится, что проще переписать программу целеком, чем добавить в имеющуюся ещё одну возможность.Goldsmith писал(а):А вот цивильное программирование в больших проектах далеко не сводится к правильному структурированию программы
Тем не менее там необходимость правильной структуры программы никуда не делась, а даже стала ещё важнее.Goldsmith писал(а):Да и структурное программирование уже вроде как в историю ушло, на повестке дня объектно-ориентированные проектирование и программирование, под них все современные методики заточены.
Согласен. Но прочитать эту пару учебников стоит тогда, когда станет понятно зачем нужна система контроля версий.Goldsmith писал(а):По системе контроля версий прочитал пару учебников - и практически уже эксперт (могу даже порекомендовать такую пару)
Требования к таким системам гораздо серьёзнее, чем к часам-термометру. И делаются они соответсвующе - вы, например, не будете для надёжности делать второй резервный контроллер, прошивка для которого написана с нуля на другом языке программирования(да ещё и другим человеком) или использовать микросхемы с золочёными выводами.Goldsmith писал(а):Хотя все равно есть шанс, что на голову свалится ракета, спроектированная большинством. Или, не дай господь, вживят кардиостимулятор, софт которого не тестировали для экономии сил и времени.
К бытовой электронике это явно не относится - там есть некоторая надёжность, выше которой делать нецелесообразно. А в небольших проектах она легко достигается и так.
И в каких случаях такое использовать целесообразно?Goldsmith писал(а):Ну почему же явно к команде? "Разработка, управляемая тестами" - это очень интересный метод разработки софта, при котором сначала пишутся тесты, а потом код. На первый взгляд выглядит парадоксально (как тестировать то, чего еще нет?), но на самом деле в этом есть глубокий смысл. Куда глубже, чем кажется с виду.
Важен не полный размер спецификации языка, а сложность программировать на нём.Goldsmith писал(а):Опять же, совсем не факт. Посмотрите, например, сколько в datasheet на ту же Mega занимает полное описание системы команд. А теперь положите рядом, скажем, текст стандарта
ISO/IEC 9899:1999 по языку C (554 страницы). Ведь нельзя же всерьез утверждать, что человек, не удосужившийся даже проштудировать стандарт, умеет хорошо программировать на языке C.


