Моя компания - небольшая инженерная фирма из двадцати человек. Все прикладное программирование здесь выполняется в VB6 двумя людьми, которые изучили VB6 из опыта сборки, работая здесь в течение последних 25 с лишним лет, и мной.
В результате код VB6 пронизан ужасными запахами кода, такими как тонны строково-типизированных переменных, ужасно длинные функции, сотни общедоступных глобальных переменных (некоторые из которых предпочтительнее передачи аргументов и возврата значений), а не один объект учебный класс. Рефакторинг почти невозможен, и любые изменения требуют слишком много копаться в коде, и после внесения, кажется, всегда появляются дополнительные дыры.
Мой начальник понимает, что VB6 - мертвая технология, и готов выслушать мои просьбы о переходе на .NET для новых разработок. Мы движемся вперед к .NET, но он видит в этом способ поддерживать совместимость с более новыми ОС Windows, а не способ писать лучший код.
Как я могу лучше объяснить преимущества языка .NET над VB6, помимо самой современной? Что я могу сказать, чтобы лучше подчеркнуть, что переход на .NET - это хороший шаг, но также и то, что наша текущая парадигма программирования также должна начать меняться? Как только мой начальник узнает, что Visual Basic .NET выглядит точно так же, как VB6, я знаю, что его первым побуждением будет просто преобразовать наш старый кодовый беспорядок в .NET.
Я понимаю , что это будет невозможно изменить чье мышление в один день, но как я могу по крайней мере , убедить свой сборочные тащил босс , что вещи , как сильно типизированный переменные, пользовательские классы и частные поля не являются общей тратой времени а энергия?
источник
Ответы:
Краткий ответ: Вы ничего не можете сделать, чтобы изменить свое мнение, основываясь на критериях, которые вы перечислили в вопросе и которые носят технический характер . Это эквивалент религиозных дебатов. Самый быстрый путь к провалу - это представить аргумент, который не с точки зрения аудитории, в данном случае владельцев бизнеса .
Более длинный ответ: изменения в бизнесе обусловлены только одной вещью. Прибыль в нижней строке.
Они могут быть не только пустой тратой времени и энергии, но, что более важно, они стоят вам денег ! Вы должны быть в состоянии количественно показать, что ваши предложения со временем приведут к значительной прибыли. Просто утверждая , что чистый код является «лучше» не хватает, потому что чистый код стоит пути больше продукции.
Если вы можете четко сформулировать, к чему приведет стоимость использования современных технологий
($COST + X) * TIME = $PROFIT
, гдеX
нетривиальное положительное число иTIME
относительно мало, вы можете создать убедительный сценарий.Еще один способ расчета ROI (возврат инвестиций)
Если этот ROI / ROR является тривиальным числом, особенно в течение длительного периода времени, у вас также нет особого экономического обоснования.
Как ваша компания на самом деле зарабатывает деньги?
Хорошему деловому человеку трудно игнорировать деньги, лежащие на столе.
Конечно, вы должны быть в состоянии подкрепить свои заявления убедительными фактами. Это означает, что вы должны быть в состоянии предоставить реальные цифры, которые показывают, что вы действительно понимаете реальный бизнес, а не только академические технические детали.
Не только профи
Также предоставление подробного анализа рисков и того, что эти риски будут,
$COST
если они произошли, поможет убедить их в том, что у вас есть реальный случай, а не только нытье, что вы больше не хотите заниматься VB6.Обучение старых собак новым трюкам
Изменение или отсутствие Изменение парадигмы программирования, чтобы быть настолько идиоматичной, насколько это возможно, новой технологии является частью анализа рисков. Но это отдельный аргумент только после того, как вы доказали, что можно внести существенные деньги, внеся изменения в первую очередь.
Деловые люди склонны слушать бизнес-кейсы так же, как технические люди склонны слушать технические кейсы. Все ваши случаи в вашем вопросе поддерживают технические достоинства, которые в лучшем случае являются академическими в вашей ситуации.
прогнозирование
Я делаю несколько предположений здесь: приложение VB6, небольшой магазин, несколько разработчиков, 2 старших разработчика / владельцев бизнеса указывают на нишевое приложение на рынке, которое, вероятно, является зрелым (ошибки и обходные пути известны), довольно полнофункциональным и относительно стабильным, независимо от того, из "беспорядка" кодовая база есть. Это заставляет меня верить, что небольшая база пользователей также не растет с каждым годом, что приводит меня к следующему выводу.
То, что действительно не будет какой-либо реальной убедительной причины для изменения технического направления с помощью этого приложения. А портирование на VB.Net - это тоже пустая трата времени, потому что у вас просто будет беспорядок, но теперь с ним больше, и 2/3 команды разработчиков не посвятили себя изучению чего-то нового. Удачи.
источник
У меня есть клиент, чей флагманский продукт написан на VB6 и поддерживается 3 людьми. Я пришел помочь им, потому что у них был партнер, который хотел, чтобы они позвонили в веб-службу. Это очень трудно сделать из VB6, но легко из VB.NET или C #, и я написал им сборку .NET, которая выглядела как VB6 как компонент COM, чтобы они могли его вызывать. Затем им нужно было предложить кому-то веб-сервис. Затем они захотели написать небольшую автономную утилиту, и ей нужно было зашифровать и расшифровать некоторую информацию, а также проанализировать некоторый XML. Я научил их писать это в .NET. В течение последних 5 лет все больше и больше их кода находится в .NET, хотя флагманский продукт не сократился вообще. Есть части этого, которые они ненавидят - у каждого приложения есть они - и где они могут, они вытаскивают эти части (теперь начинается сокращение) и помещают их в сервисы или отдельные утилиты. Все остальное будет преобразовано в болюс-болюс .NET. Да, плохие имена переменных и все - на мой взгляд, существует множество преимуществ для перехода на .NET, даже если они не меняют свою нынешнюю парадигму программирования. К ним относятся:
Там больше, но, конечно, этого достаточно?
Вопрос парадигм программирования, строгой типизации, компилятор - твой друг, инкапсуляция - твой друг, и так далее, на мой взгляд (и мне платят за то, что эти мнения) совершенно разные. Если вы хотите умереть на этом холме, продолжайте, но вы умрете с открытой копией VB6.
источник
Я начал с проекта VB6 несколько лет назад (пользовательская ERP-система компании) и постепенно перешел на .NET. Это где-то наполовину сделано.
Прежде всего, преобразование из VB6 в VB.Net почти всегда является плохой идеей (и я провел много исследований по этому вопросу). Там слишком много другого. Кроме того, если ваш начальник думает, что VB.Net "точно такой же, как VB6", то он полностью ошибается, и вы должны быстро изменить его взгляды.
Моя стратегия заключалась в том, чтобы разделить две кодовые базы и поддерживать их отдельно, а затем медленно перемещать целые модули из VB6 в .NET, но только тогда, когда произошло значительное изменение в этом модуле, чтобы мы могли амортизировать часть стоимости. Несмотря на это, переписывание является большой дорогой и рискованной задачей.
Есть два способа интеграции существующего VB6 с новым кодом .NET (и вы, вероятно, будете делать это очень долго, так что вам лучше привыкнуть к этой идее). Первым делом я начал писать небольшие модули в .NET, а затем заставить основное приложение VB6 запускать исполняемый файл .NET, передавая некоторые параметры командной строки. Это сработало, но имейте в виду, что .NET имеет время запуска от 4 до 10 секунд, так что вы ограничены в том, что вы можете сделать таким образом.
Как только это начало становиться действительно болезненным, я переключил стратегию и использовал метод из этой статьи CodeProject, чтобы отобразить существующие формы VB6 в моем основном приложении .NET. После того, как я пошел по этому пути, я смог получить только один удар по времени запуска .NET и использовать ClickOnce для развертывания, что было хорошей находкой по сравнению с тем, как приложение VB6 было развернуто ранее.
Тем не менее, вот преимущества, которые я нахожу в .NET по сравнению с VB6:
Action
иFunc
типыDecimal
тип (у VB6 никогда не было десятичного типа первого класса, хотя он имеет CDec)Guid
Недостатки VB6:
Чтобы быть справедливым, вот некоторые недостатки поддержки комбинированного решения VB6 / .NET:
Теперь, как вы уже намекали, вы действительно должны перестроить свою архитектуру с нуля, если начнете писать код в .NET. Тем не менее, похоже, что никто из сотрудников вашей компании не знаком ни с миром программирования на .NET, ни с Java, из которого происходит множество шаблонов и практик, общих для крупных корпоративных сред.
Если вы возьмете кого-то, кто привык перетаскивать кнопку в форме, дважды щелкать по ней и писать некоторые строки SQL непосредственно в обработчике событий click, и это работает для них, очень трудно заставить их увидеть преимущество перед SOLID. принципы дизайна. С другой стороны, если вы прикусите пулю и решите, что весь новый код будет покрыт автоматическими модульными тестами на 90% или более, то вы быстро поймете, что это действительно сложно сделать, если вы не примете принципы разработки SOLID.
Так что вам нужно очень внимательно взглянуть на реальность ситуации. В моем случае я был единственным программистом, и я решил, что весь новый код должен быть модульно протестирован, хотя у меня не было никакого опыта с ним. Я не могу не подчеркнуть, насколько это негативно повлияло на то, что я мог сделать в первую неделю, даже в первые месяцы. Тем не менее, я был полон решимости сделать это, и у меня был бай-ин от руководства. У большинства людей нет такой роскоши. Теперь у меня много кода, и я только что закончил основной рефакторинг, почти без проблем.
На самом деле, вы не собираетесь проводить модульные тесты, а это означает, что труднее обосновать принципы, такие как внедрение зависимостей вашим партнерам по команде. Вам придется продавать .NET не по архитектурным, а по достоинствам . Вы должны сосредоточиться на лучшей поддержке библиотеки и лучших инструментах. Это единственное, что будет резонировать. Я хотел бы предложить следующее в вашей демонстрации:
DataGridView
на главное окноAction
в качестве параметра. Сделайте это сначала, передав другой метод в качестве параметра, а затем поразите их, передав анонимный делегат с использованием лямбда-синтаксиса.List<T>
иDictionary<T1,T2>
коллекции и покажите, как он создает строго типизированный код (в VB6 есть похожие вещи, но он динамически типизирован)foreach
цикл, который смущающе параллелен, используйтеSystem.Diagnostics.Stopwatch
для измерения времени, которое требуется для выполнения, затем используйте библиотеку параллельных задач, чтобы преобразовать цикл вParallel.Foreach
цикл и продемонстрировать ускорение, предполагая, что вы работаете на многоядерной машине.Это то, что я бы сделал.
источник
Мне кажется, что это ситуация, когда вам нужно надеть свою политическую шляпу вместо своей программной. Вы должны быть очень внимательны к тому, как вы приводите свои аргументы и чтобы вы не противодействовали своей аудитории. Убедитесь, что вы показываете преимущества .Net вместо того, чтобы показывать недостатки VB. Спор о недостатках VB поставит ваших коллег в положение, в котором они должны защищать свои решения и вынудить их признать, что язык, в который они вкладывают большие средства, является плохим языком. Вместо этого покажите им, как переход на .NET расширит имеющиеся у них инструменты и облегчит их жизнь.
Мой идеальный способ выдвинуть этот аргумент - найти задачу или фрагмент кода, на который все постоянно жалуются, и исправить это с помощью .NET. Я не особенно знаком с VB, но вот краткий список раздражающих задач, которые, вероятно, были бы упрощены при использовании .NET вместо VB.
Выберите любую из вышеперечисленных задач или другую задачу, специфичную для проектов, над которыми вы обычно работаете, и сядьте с ними и фактически напишите некоторый код с нуля, который быстро и легко решит проблему. Фактическое отображение процесса написания кода покажет инструменты, которые новые версии VS предоставляют на стол, и предоставит доказательства того, что переход на .NET не сделает жизнь никому тяжелее.
Зайдя в это, вы абсолютно положительно должны делать свою домашнюю работу. Если вы обнаружите, что не знаете, как работают инструменты, или у вас есть код, который работает неправильно, вы никогда не сможете привлечь их на свою сторону.
источник
Первое, что вы говорите, это то, что VB6 больше не поддерживается Microsoft. Пока вы можете поддерживать его работу, вы должны понимать, что его варианты в долгосрочной перспективе равны нулю. Я даже не знаю, будут ли приложения VB6 работать на Windows8, или сама IDE будет работать на Win8.
Таким образом, вам, в конечном итоге, придется переписать, и если это так, то лучше начать сейчас, а не позже, чтобы у вас было достаточно времени, чтобы выяснить, какую новую технологию вы хотите использовать (хотя VB.NET звучит идеально, это ваша возможность попробовать что-то более современное, например, заставить приложение работать на iPad).
В краткосрочной перспективе вы можете немного смягчить проблему, введя новые разделы в качестве COM-компонентов для использования существующим приложением, надеюсь, эти компоненты останутся, когда произойдет неизбежное переписывание.
Я не стал бы беспокоиться о технических аргументах о том, почему .NET лучше, чем VB6. Там вы будете проиграть, технология сама по себе никогда не решает проблемы. Это зависит от вас, как вы применяете эту технологию, и если приложение VB6 решает проблемы за вас, нет никаких аргументов, чтобы ответить. Вы можете говорить об удобстве обслуживания или о наличии опытного персонала, но как только вы это сделаете, вы признаете, что ваши сотрудники не имеют опыта работы с новыми технологиями и должны пройти обучение, а затем потребуется некоторое время, чтобы полностью освоиться. с этим. Вам также нужно будет ответить на вопросы о том, как много переписываний оказываются хуже оригинального проекта (иногда из-за недостатка опыта, иногда из-за слишком грандиозных замыслов).
источник
Приведите ему аналогию «старая машина новая против автомобиля»:
источник
Прежде всего, я думаю, что вы должны изменить вопрос (не на stackexchange, а в вашей компании). Дело не в том, почему .Net лучше VB6, а в том, что VB6 больше не поддерживается, пора идти дальше, но к чему. Спросите заинтересованных лиц, какой должна быть эта «новая» технология? Может быть, это не .Net.
Но звучит так, как будто вам нужно перейти на новую технологию и использовать некоторые хорошие шаблоны и практики программирования. Ответ на вторую часть гораздо сложнее. Возможно, вам придется сделать это в небольшом разделе приложения и доказать, что оно того стоит, то есть оно более стабильно, проще в обслуживании и т. Д.
источник
Скажите своим боссам, чтобы написать два объявления о поиске. Один для разработчиков на C #. Один для экспертов VB6. Положите их там. Сравните результаты.
источник