Сколько времени это экономит генераторы кода? - PullRequest
0 голосов
/ 14 января 2009

Мой вопрос кажется простым, но немного более теоретическим, чем кажется. Есть программное обеспечение Code Generation или программное обеспечение для создания приложений, которое выполняется без использования языка программирования. Такие приложения, как VE Server и VE Designer из Intelliun , должны выполнить эту задачу. Мой вопрос заключается в том, чтобы на самом деле кто-то отслеживал реальную экономию средств такого рода по сравнению с командой разработчиков и процессом эволюции исходного кода.

Для конкретного примера VE Designer приложение выполняется из конструктора, и вы не видите код для него, вы просто запускаете приложение на VE Server. Весь код выглядит как внутренние команды XML.

Ответы [ 4 ]

3 голосов
/ 14 января 2009

Это зависит от того, как мы измеряем это время.

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

Единственное, что меня беспокоит, связано с тем, откуда взялся этот генератор кода и как много внимания было уделено его разработке.

Если вы не хотите прикасаться к коду, который генерирует мастер / генератор кода, потому что вы его не понимаете, его следует посчитать против генератора кода.

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

Если генератор кода выплевывает так много классов, что никто не может следить за тем, что происходит, его следует считать против генератора кода.

Если генератор кода делает вашу жизнь обслуживания адом на земле, его следует считать против генератора кода.

Мне нравится идея понимания и создания моих собственных инструментов, если я могу. Волшебники, которые даны другими, могут вызвать проблемы. Учет за или против них должен отражать проблемы.

2 голосов
/ 14 января 2009

Возможно, вы захотите взглянуть на некоторые ответы на вопрос « Являются ли генераторы кода плохими? ». Хотя сам вопрос относится больше к тому, следует ли мне использовать генератор кода, во многих ответах есть примечания о недостатках использования генератора кода и о том, как часто генерируемый код должен затем просматриваться / редактироваться реальным человеком. бытия. Это не всегда так и во многом зависит от качества сгенерированного кода (в конце концов, это просто плевание шаблонов, написанных потенциально ужасным программистом, который действительно хотел быть дровосеком и его нельзя допускать возле клавиатуры). Если он генерирует высококачественный код, то вы, вероятно, сэкономите время. В противном случае время, потраченное на рефакторинг результата, может оказаться таким же или большим, чем время, потраченное на фактическую запись кода.

У меня лично были смешанные результаты с генераторами кода. Код, сгенерированный автоматически Visual Studio, например (в частности, дизайнер форм), который я нахожу, может быть кошмаром, и если мне нужно реализовать какое-то специальное поведение, то внезапно форма не будет выглядеть или вести себя, как ожидается, что обычно влечет за собой затраты. больше времени. Мне нравится один в eclipse (на самом деле не полностью автоматический инструмент генерации кода), потому что он позволяет мне разметить класс, а затем создать все сигнатуры методов и т. Д., Используя встроенные редактируемые шаблоны (я также знаю, что если он выплевывает дерьмо, это по моей вине). Я считаю, что общая структура намного более полезна для экономии времени (например, учитывая шасси автомобиля), чем получать что-то, что думает, что это хорошо, и делает то, что вы хотите, чтобы точно , но нет (например, получение ' полностью ' построенный автомобиль с тремя колесами, который поворачивает только вправо).

1 голос
/ 14 января 2009

Я использовал генерацию кода (то есть программу, которая автоматически выплевывает примерно 2/3 кода и позволяет программисту заполнить остальное) в двух ситуациях: один раз в огромной компании с гигантским продуктом, а другой время, используя инструмент, который я написал сам. В обеих ситуациях я нашел результаты смешанными.

1) Это сэкономило нам время на разработку того, что нам нужно было сделать в то время.

2) Однако, это заперло нас в нашем дизайне, сделав код намного менее гибким. Это дало нам много дублированной логики, которую мы не могли легко изменить.

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

0 голосов
/ 14 января 2009

На самом деле нет четкого различия между «генератором кода» и «языком программирования». Если вы используете программное обеспечение для генерации кода, вы занимаетесь программированием, даже если вы не понимаете деталей. C ++, Java и C # являются «генераторами кода» в том смысле, что они компилируются в языки более низкого уровня, и сами эти языки более низкого уровня можно кодировать вручную, если программист решит это сделать. Многие языки программирования начинаются как макро инструменты, и написание скрипта с использованием инструмента на основе XML не делает его менее «программным», чем если бы тот же скрипт был написан на Perl, Python или Ruby.

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

Не поддавайтесь ментальной ловушке, думая, что некоторые форматы, такие как XML или даже HTML, являются мертвыми «данными», а другие форматы, такие как C ++ и Python, являются «кодом». Данные и код являются взаимозаменяемыми. Нужен пример «кода» в HTML? Учтите следующее:

HTML является декларативным языком. В нем вы указываете вещи, которые существуют, в виде «здесь параграф, здесь заголовок» и так далее. Python и другие языки программирования имеют обязательные части, в которых вы указываете «теперь добавьте x и y, теперь напишите x в память» и т. Д.

Однако вы можете изменить это отношение. В случае HTML это становится обязательным при подаче через браузер. «Вот абзац с этими свойствами» интерпретируется Firefox как «теперь отображать текст с этими параметрами». Как файл, HTML - это просто мертвые данные, но в контексте интерпретатора он становится живым кодом. То же самое происходит в обратном порядке с Python. Во время выполнения ваши инструкции Python становятся директивами для интерпретатора, но сам файл Python является просто мертвым текстом. В некотором смысле ваша Python-программа находится там как набор потенциальных инструкций в форме данных, пока вы не запустите ее через интерпретатор Python. Точно так же и HTML хранится в виде данных в файле, пока браузеру не придет время действовать над ним.

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

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

...