Использование прототипов при создании приложений
В принципе, можно представить следующую методику:
1. Проектируем набросок программы в виде диаграмм.
2. Воплощаем программу на Питоне (другом подобном языке).
3. Корректируем диаграммы.
4. Переводим в программу на C++ (Java, C#). То есть, используем свой разум в качестве компилятора с одного языка в другой.
Пункты с диаграммами можно пропустить – дело вкуса. Ну и, возможно, пункты 3 и 4 лучше делать маленькими шажками в цикле.
То есть, мы получаем все преимущества, которые нам дают языки типа C++, но получаем ли какие-то выигрыши в скорости создания программы, в красивости программы, еще в чем-то?
Если прикинуть, что писать на Питоне программу можно в 2 раза быстрее, и переводить с одного языка на другой – тоже в 2 раза быстрее, чем писать новую, то никакого выигрыша не получаем. Однако если программа на Питоне читается проще (?), то мы получаем определенный вид документа, который может пригодиться при редактировании программы.
В случае с C++, разница в скорости может быть большей, так как теоретически выигрыш получается и от разницы во времени, которое тратится на компилирование. Кроме того, возможно, проводить всякие рефакторинги в Питоне намного безопаснее и проще, чем в C++.
Вопросы: использует ли кто-нибудь из участников форума подобный подход? Какие могут быть плюсы, минусы? Видел ли кто-нибудь подробные материалы по этой методике?
Щитаю использование прототипирования вполне целесообразным. особенно в тех случаях когда
- клиент не знает чего хочет
- клиент не умеет обяснить чего хочет
- исполнитель не имеет понятия как сделать то что просят
- используются новые инструменты и нет времени на их детальное изучение.
В ином случае ИМХО скорее всего получим продукт с багами и не гибкой архитектурой.
Поддержываю мнение что прототип должен быть выброшен. Хотя если он написан самостоятельными блоками (что при быстрой розроботке прототипа думаю не так уж и часто встречается) и некоторые из них соответствуют требованиям, то почему бы их и не оставить. Еще раз подчеркну - если блок независимый.
Использование разных инструментов для написания продакшен кода и прототипа щитаю нецелесообразным. Разве что нужно создать чистый ЮИ с минимумом функцыонала. Но в таком случае получается что мы розрабатываем чтото не слишком сложное и нужен ли в таком случае прототип вообще ?
ЗЫ. Повторюсь. Ето мое общее представление по сабджекту. Никакого практического опыта нет.
...
Использование разных инструментов для написания продакшен кода и прототипа щитаю нецелесообразным.
То есть предлагается писать в дурном стиле, но быстро (например, с "магическими" числами, длинными функциями, классами, которые включают по сто функций и т.п.), а потом переделывать заново по науке?
А если можно писать в хорошем стиле сразу, но применяя специальный язык? В этом случае мы не будем закреплять плохие привычки в программировании, а сделаем 2 программы с хорошим стилем.
Ну, в общем, и это пойдет. Чужой взгляд на определенный вопрос тоже полезен.
Если одна програма хорошая - зачем тогда писать другую на другом языке ? (для быстродействия, економии ресурсов и портабельности ?) Сомневаюсь. Тогда тот язык на котором быстро розрабатывать прототипы сделли бы економным к памяти, прикрутили офыгенный оптимизатор, написали бы гипер быструю выртуальную машыну и только для того чтоб ускорить процес розработки ПО. И ето было бы очень выгодно.
А потом все ето еще бы раз переписали на етом же языке :)
Кроме того инструменти для продакшен кодирования выбирают так чтоб они были максимально удобны. А тут получается что есть еще чтото на чем еще удобнее писать именно прототип. Помоему я чегото не понимаю.
Быстрота разработки и качество вещи обратнопропорцыональны. А прототип помоему делается для того чтоб самому прикинуть какие трудности ждут нас впереди, а не заколачивать потом гвозди в подводную лодку потому что она уже на плаву, мотор прицепили плохой, заклепки закончились, а сварочный апарат взять не додумались. Конечно прототип не должен быть уродом потому что его тоже придется писать, дописывать и рефакторить забивая в него гвозди. Только суть етой стадии - очень быстро понять что надо делать и каким путем (время деньги заказчика). Тут главное быстро и точно понять а не качественгно сделать. А можно и вообще не сделать, а пооставлять кучу заглушек.
Ну да чтоо я увлекся. Лутше помолчу и сам послушаю что думают об етом знающие.
Не надо сомневаться. Если почитать про недостатки питона, то низкое быстродействие среди них. Хотя дело не только в быстродействии.
Виртуальная машина есть, Google разрабатывает быструю версию, но когда разработает - мне неизвестно.
Есть утилита py2exe, но насколько я понял, это не компилятор, иначе, непонятно, зачем он к создаваемому маленькому приложению добавляет pythonXX.dll в пару мегабайт и архив с библиотеками :)
Подозреваю, что подобное безобразие в IronPython и Jython, но более замаскированное (не исследовал).
Они рвут оригинальный питон на части, иные параметры на порядок превосходят - вот что значит качественная JIT компиляция.
Однозначно писать прототип на другом языке - это крайне странный подход, если, конечно, нет каких-то чисто технических ограничений.
Другое дело - использование альтернативных технологий в рамках одного языка. Если есть способ спроектировать интерфейс максимально быстро и показать заказчику - грех не воспользоваться. Я таким макаром WPF юзаю иногда вместо WinForms.
Вообще стараюсь проектировать софт таким образом, чтобы все последующие изменения несли инкрементаьный характер и потому прототип постепенно движется к целостному продукту. Выбрасываю я только экспериментальный код - черновики каких-то фичей, неудачные бранчи.
Уже 2 умных человека написали, что я ерунду говорю. Возможно. Но как понять тогда утверждение Википедии, что Питон "активно используется для создания прототипов будущих программ"? Неужели врут, фантазируют?
Ознакомился кратко. Напомнило html :)
Вообще, заметил тенденцию использования xml-подобного синтаксиса для составления GUI.
Скорее недоговаривают, что речь идет об экстремальном программировании (методология такая) и быстром прототипировании.
XAML - это подмножество XML, язык совершенно декларативен и однозначно отображается на систему типов CLR.
Мое имхо такое - интерфейс пользователя, это по сути иерархия оконных элементов, а описывать такие структуры удобнее в XML. Так что тенденция себя оправдывает.
Хм... при чем тут XP я совсем не понял (единственная ассоциация в том, что Кент Бек на Питоне показывал как разработать xUnit), а про быстрое прототипирование я понял не совсем. То есть строится не полный прототип программы, а какие-то куски, имитации, за которыми ничего нет?
Ну ладно. Предположим так. Но зачем для этого использовать другой язык, раз все утверждают, что использование другого языка - плохая идея? Тогда уж совсем не надо программировать: взял листок бумаги и рисуй прототип, ну или в графическом редакторе набросай, если удобнее.
В общем, пока все в тумане.
[QUOTE=hardcase]Если есть способ спроектировать интерфейс максимально быстро и показать заказчику - грех не воспользоваться. Я таким макаром WPF юзаю иногда вместо WinForms.[/QUOTE]ИМХО, интерфейс должен проектировать специалист по интерфейсам. Конечно, реально это происходит очень уж не всегда, но тем не менее, разработка интерфейсов - занятие со многими нишевыми тонкостями. По-моему, программист вообще не должен этим заниматься. Интерфейсы принято прототипировать не в среде разработки, а вообще в InDesign. Во всяком случае, Влад Головач прототипирует именно там, а ему я верю.
Хм. Такой путь мне еще больше непонятен. В таких случаях я писал прототипы на том же языке (C++), но с некоторым упрощением (например, вместо GUI использовал консоль и т.п.). Тогда, при правильном подходе, из модели можно взять кучу объектов, функций для использовании в основной программе.
Однако, как я понимаю, тут все рассуждают теоретически. Надо будет провести какие-нибудь эксперименты на практике. Хотя и в этом случае выводы будут субьективными.
Другой вопрос, что иногда кажется быстрее тупо решить задачу на продакшен-языке, пусть и в упрощённом виде. Я не проверял, что реально быстрее, поскольку питон не знаю вообще никак. Видимо, логика прототипирования на питоне в том, что на питоне можно за 500 строк сделать то, что на другом языке - за 1000 или 2000, а прототип всё равно нужен. Например, как у меня в тот раз - когда даже архитектура системы менялась по мере разработки.