Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Использование прототипов при создании приложений

87
12 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Читал в Википедии про использование языка Python. Одно из применений: "активно используется для создания прототипов будущих программ". Однако, нигде я не нашел подробной методики как применять такое "прототипное проектирование", как оно помогает.

В принципе, можно представить следующую методику:

1. Проектируем набросок программы в виде диаграмм.
2. Воплощаем программу на Питоне (другом подобном языке).
3. Корректируем диаграммы.
4. Переводим в программу на C++ (Java, C#). То есть, используем свой разум в качестве компилятора с одного языка в другой.

Пункты с диаграммами можно пропустить – дело вкуса. Ну и, возможно, пункты 3 и 4 лучше делать маленькими шажками в цикле.

То есть, мы получаем все преимущества, которые нам дают языки типа C++, но получаем ли какие-то выигрыши в скорости создания программы, в красивости программы, еще в чем-то?

Если прикинуть, что писать на Питоне программу можно в 2 раза быстрее, и переводить с одного языка на другой – тоже в 2 раза быстрее, чем писать новую, то никакого выигрыша не получаем. Однако если программа на Питоне читается проще (?), то мы получаем определенный вид документа, который может пригодиться при редактировании программы.

В случае с C++, разница в скорости может быть большей, так как теоретически выигрыш получается и от разницы во времени, которое тратится на компилирование. Кроме того, возможно, проводить всякие рефакторинги в Питоне намного безопаснее и проще, чем в C++.

Вопросы: использует ли кто-нибудь из участников форума подобный подход? Какие могут быть плюсы, минусы? Видел ли кто-нибудь подробные материалы по этой методике?
276
12 мая 2009 года
Rebbit
1.1K / / 01.08.2005
Никогда не делал прототипов, так как не приходилось создавать чегото более-менее сложного. А то что создавал не тривиальное не становилось прототипом изза нехватки времени на перероботку (хотя несколько раз я настаивал на том чтоб переписать, так как требования часто изменялись, разрабатывалось быстро с отговорками типа "потом поправим, главное чтоб сейчас роботало както")

Щитаю использование прототипирования вполне целесообразным. особенно в тех случаях когда
- клиент не знает чего хочет
- клиент не умеет обяснить чего хочет
- исполнитель не имеет понятия как сделать то что просят
- используются новые инструменты и нет времени на их детальное изучение.
В ином случае ИМХО скорее всего получим продукт с багами и не гибкой архитектурой.

Поддержываю мнение что прототип должен быть выброшен. Хотя если он написан самостоятельными блоками (что при быстрой розроботке прототипа думаю не так уж и часто встречается) и некоторые из них соответствуют требованиям, то почему бы их и не оставить. Еще раз подчеркну - если блок независимый.

Использование разных инструментов для написания продакшен кода и прототипа щитаю нецелесообразным. Разве что нужно создать чистый ЮИ с минимумом функцыонала. Но в таком случае получается что мы розрабатываем чтото не слишком сложное и нужен ли в таком случае прототип вообще ?

ЗЫ. Повторюсь. Ето мое общее представление по сабджекту. Никакого практического опыта нет.
87
12 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Rebbit
Поддержываю мнение что прототип должен быть выброшен.
...
Использование разных инструментов для написания продакшен кода и прототипа щитаю нецелесообразным.


То есть предлагается писать в дурном стиле, но быстро (например, с "магическими" числами, длинными функциями, классами, которые включают по сто функций и т.п.), а потом переделывать заново по науке?

А если можно писать в хорошем стиле сразу, но применяя специальный язык? В этом случае мы не будем закреплять плохие привычки в программировании, а сделаем 2 программы с хорошим стилем.

Цитата: Rebbit
ЗЫ. Повторюсь. Ето мое общее представление по сабджекту. Никакого практического опыта нет.



Ну, в общем, и это пойдет. Чужой взгляд на определенный вопрос тоже полезен.

276
12 мая 2009 года
Rebbit
1.1K / / 01.08.2005
Цитата: Kogrom
А если можно писать в хорошем стиле сразу, но применяя специальный язык? В этом случае мы не будем закреплять плохие привычки в программировании, а сделаем 2 программы с хорошим стилем.


Если одна програма хорошая - зачем тогда писать другую на другом языке ? (для быстродействия, економии ресурсов и портабельности ?) Сомневаюсь. Тогда тот язык на котором быстро розрабатывать прототипы сделли бы економным к памяти, прикрутили офыгенный оптимизатор, написали бы гипер быструю выртуальную машыну и только для того чтоб ускорить процес розработки ПО. И ето было бы очень выгодно.
А потом все ето еще бы раз переписали на етом же языке :)
Кроме того инструменти для продакшен кодирования выбирают так чтоб они были максимально удобны. А тут получается что есть еще чтото на чем еще удобнее писать именно прототип. Помоему я чегото не понимаю.

Быстрота разработки и качество вещи обратнопропорцыональны. А прототип помоему делается для того чтоб самому прикинуть какие трудности ждут нас впереди, а не заколачивать потом гвозди в подводную лодку потому что она уже на плаву, мотор прицепили плохой, заклепки закончились, а сварочный апарат взять не додумались. Конечно прототип не должен быть уродом потому что его тоже придется писать, дописывать и рефакторить забивая в него гвозди. Только суть етой стадии - очень быстро понять что надо делать и каким путем (время деньги заказчика). Тут главное быстро и точно понять а не качественгно сделать. А можно и вообще не сделать, а пооставлять кучу заглушек.

Ну да чтоо я увлекся. Лутше помолчу и сам послушаю что думают об етом знающие.

87
12 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Rebbit
Если одна програма хорошая - зачем тогда писать другую на другом языке ? (для быстродействия, економии ресурсов и портабельности ?) Сомневаюсь.


Не надо сомневаться. Если почитать про недостатки питона, то низкое быстродействие среди них. Хотя дело не только в быстродействии.

Цитата: Rebbit
Тогда тот язык на котором быстро розрабатывать прототипы сделли бы економным к памяти, прикрутили офыгенный оптимизатор, написали бы гипер быструю выртуальную машыну и только для того чтоб ускорить процес розработки ПО. И ето было бы очень выгодно.


Виртуальная машина есть, Google разрабатывает быструю версию, но когда разработает - мне неизвестно.

Есть утилита py2exe, но насколько я понял, это не компилятор, иначе, непонятно, зачем он к создаваемому маленькому приложению добавляет pythonXX.dll в пару мегабайт и архив с библиотеками :)

Подозреваю, что подобное безобразие в IronPython и Jython, но более замаскированное (не исследовал).

5
13 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Kogrom
Подозреваю, что подобное безобразие в IronPython и Jython, но более замаскированное (не исследовал).


Они рвут оригинальный питон на части, иные параметры на порядок превосходят - вот что значит качественная JIT компиляция.

Однозначно писать прототип на другом языке - это крайне странный подход, если, конечно, нет каких-то чисто технических ограничений.

Другое дело - использование альтернативных технологий в рамках одного языка. Если есть способ спроектировать интерфейс максимально быстро и показать заказчику - грех не воспользоваться. Я таким макаром WPF юзаю иногда вместо WinForms.

Вообще стараюсь проектировать софт таким образом, чтобы все последующие изменения несли инкрементаьный характер и потому прототип постепенно движется к целостному продукту. Выбрасываю я только экспериментальный код - черновики каких-то фичей, неудачные бранчи.

87
13 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: hardcase
Однозначно писать прототип на другом языке - это крайне странный подход, если, конечно, нет каких-то чисто технических ограничений.


Уже 2 умных человека написали, что я ерунду говорю. Возможно. Но как понять тогда утверждение Википедии, что Питон "активно используется для создания прототипов будущих программ"? Неужели врут, фантазируют?

Цитата: hardcase
Если есть способ спроектировать интерфейс максимально быстро и показать заказчику - грех не воспользоваться. Я таким макаром WPF юзаю иногда вместо WinForms.


Ознакомился кратко. Напомнило html :)
Вообще, заметил тенденцию использования xml-подобного синтаксиса для составления GUI.

5
13 мая 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Kogrom
Уже 2 умных человека написали, что я ерунду говорю. Возможно. Но как понять тогда утверждение Википедии, что Питон "активно используется для создания прототипов будущих программ"? Неужели врут, фантазируют?

Скорее недоговаривают, что речь идет об экстремальном программировании (методология такая) и быстром прототипировании.


Цитата: Kogrom
Ознакомился кратко. Напомнило html :)

XAML - это подмножество XML, язык совершенно декларативен и однозначно отображается на систему типов CLR.
Мое имхо такое - интерфейс пользователя, это по сути иерархия оконных элементов, а описывать такие структуры удобнее в XML. Так что тенденция себя оправдывает.

87
13 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: hardcase
Скорее недоговаривают, что речь идет об экстремальном программировании (методология такая) и быстром прототипировании.


Хм... при чем тут XP я совсем не понял (единственная ассоциация в том, что Кент Бек на Питоне показывал как разработать xUnit), а про быстрое прототипирование я понял не совсем. То есть строится не полный прототип программы, а какие-то куски, имитации, за которыми ничего нет?

Ну ладно. Предположим так. Но зачем для этого использовать другой язык, раз все утверждают, что использование другого языка - плохая идея? Тогда уж совсем не надо программировать: взял листок бумаги и рисуй прототип, ну или в графическом редакторе набросай, если удобнее.

В общем, пока все в тумане.

241
17 мая 2009 года
Sanila_san
1.6K / / 07.06.2005
[QUOTE=Kogrom]В общем, пока все в тумане.[/QUOTE]Да нет. Приведу пример из личной практики, где никаких прототипов особо не было, но могли бы быть. Стояла задача: сделать обработчик СМС и в зависимости от их содержимого предпринимать какие-то действия. Логика системы была в общем простой до безобразия, однако на этапе реализации столкнулись с некоторыми сложностями. Гадость была в том, что к тому моменту было написано уже приличное количество legacy-кода (и, что хуже, legacy-логики – по сути, алгоритм оказался не самым удобным), и выбрасывать всё это было экономически нецелесообразно. Поэтому в идеале надо было более-менее быстро накидать на том же Питоне прототип, на котором отработать архитектуру и алгоритм действия системы. По сути, от прототипа не требуется ни полная функциональность, ни быстродействие - а только реализация самого главного, каковое потом и надо допиливать напильником в продакшен-стадии. Объединять конечный продукт и прототип может, пожалуй, только высокоуровневое сходство.
241
17 мая 2009 года
Sanila_san
1.6K / / 07.06.2005
[QUOTE=Kogrom]Но зачем для этого использовать другой язык, раз все утверждают, что использование другого языка - плохая идея? Тогда уж совсем не надо программировать: взял листок бумаги и рисуй прототип, ну или в графическом редакторе набросай, если удобнее.[/QUOTE]Ни бумажный, ни битмаповый прототип не работают. Их трудно протестировать и едва ли возможно протестировать эффективно. Поэтому в особо сомнительных случаях как раз и надо писать программу-прототип. Сложность подхода в том, что не каждый программист знает кроме основного продакшен-языка ещё и Питон или что-то подобное.

[QUOTE=hardcase]Если есть способ спроектировать интерфейс максимально быстро и показать заказчику - грех не воспользоваться. Я таким макаром WPF юзаю иногда вместо WinForms.[/QUOTE]ИМХО, интерфейс должен проектировать специалист по интерфейсам. Конечно, реально это происходит очень уж не всегда, но тем не менее, разработка интерфейсов - занятие со многими нишевыми тонкостями. По-моему, программист вообще не должен этим заниматься. Интерфейсы принято прототипировать не в среде разработки, а вообще в InDesign. Во всяком случае, Влад Головач прототипирует именно там, а ему я верю.
87
19 мая 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Sanila_san
Логика системы была в общем простой до безобразия, однако на этапе реализации столкнулись с некоторыми сложностями. Гадость была в том, что к тому моменту было написано уже приличное количество legacy-кода (и, что хуже, legacy-логики – по сути, алгоритм оказался не самым удобным), и выбрасывать всё это было экономически нецелесообразно. Поэтому в идеале надо было более-менее быстро накидать на том же Питоне прототип, на котором отработать архитектуру и алгоритм действия системы.


Хм. Такой путь мне еще больше непонятен. В таких случаях я писал прототипы на том же языке (C++), но с некоторым упрощением (например, вместо GUI использовал консоль и т.п.). Тогда, при правильном подходе, из модели можно взять кучу объектов, функций для использовании в основной программе.

Однако, как я понимаю, тут все рассуждают теоретически. Надо будет провести какие-нибудь эксперименты на практике. Хотя и в этом случае выводы будут субьективными.

241
20 мая 2009 года
Sanila_san
1.6K / / 07.06.2005
Я тоже писал прототипы на продакшен-языке (VB.NET), но могу предположить, что зная питон, мог бы проводить эксперименты на более высоком уровне абстракции, стало быть, быстрее. Собственно говоря, тут прикол как раз в том, что скорость разработки на питоне выше за счёт более высокого уровня абстракции, в сравнении с тем же VB.NET. Например, в VB.NET нет кортежей, а в питоне есть. Если бы выяснилось, что кортежи нужны для решения какой-то задачи, так стоило бы потратить время на их реализацию и потом пользоваться.

Другой вопрос, что иногда кажется быстрее тупо решить задачу на продакшен-языке, пусть и в упрощённом виде. Я не проверял, что реально быстрее, поскольку питон не знаю вообще никак. Видимо, логика прототипирования на питоне в том, что на питоне можно за 500 строк сделать то, что на другом языке - за 1000 или 2000, а прототип всё равно нужен. Например, как у меня в тот раз - когда даже архитектура системы менялась по мере разработки.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог