Mi empresa es una pequeña empresa de ingeniería de veinte hombres. Toda la programación de la aplicación aquí es realizada en VB6 por dos personas, quienes se han enseñado a sí mismos VB6 desde un fondo de ensamblaje mientras trabajan aquí durante los últimos 25 años, y yo mismo.
Como resultado, el código VB6 está plagado de horrendos olores de código, como toneladas de variables tipeadas en cadena , funciones terriblemente largas, cientos de variables públicas globales (algunas de las cuales son preferibles a pasar argumentos y devolver valores) y no un solo objeto clase. La refactorización es casi imposible, y cualquier cambio requiere excavar demasiado el código, y una vez realizado, siempre parece introducir más agujeros.
Mi jefe se está dando cuenta de que VB6 es una tecnología muerta y está dispuesto a escuchar mis ruegos de mudarme a .NET para un nuevo desarrollo. Estamos avanzando hacia .NET, pero él lo ve como una forma de mantener la compatibilidad con los nuevos sistemas operativos Windows, no como una forma de escribir un mejor código.
¿Cómo puedo explicar mejor los beneficios del lenguaje .NET sobre VB6, más allá de la mera actualización? ¿Qué puedo decir para enfatizar mejor que el cambio a .NET es un buen movimiento pero también que significa que nuestro paradigma de programación actual también debería comenzar a cambiar? Tan pronto como mi jefe escuche que Visual Basic .NET se parece a VB6, sé que su primer instinto será simplemente convertir nuestro antiguo desorden de código a .NET.
Entiendo que será imposible cambiar la mentalidad de cualquiera en una sola tarde, pero ¿cómo puedo al menos convencer a mi jefe de montaje de ensamblaje de que cosas como variables fuertemente tipadas, clases personalizadas y campos privados no son un pérdida total de tiempo? y energía?
fuente
Respuestas:
Respuesta corta: no hay nada que pueda hacer para cambiar de opinión en función de los criterios que enumeró en la pregunta, que son todos técnicos . Este es el equivalente de un debate religioso . La ruta más rápida al fracaso es presentar un argumento que no sea desde el punto de vista de la audiencia, en este caso, los dueños de negocios .
Respuesta más larga: el cambio en los negocios es impulsado por una cosa y solo una cosa. Beneficio a la línea de fondo.
No solo pueden ser una pérdida de tiempo y energía, sino más importante, ¡le cuestan dinero ! Debe ser capaz de mostrar cuantitativamente que sus sugerencias conducirán a un beneficio sustancial con el tiempo. Simplemente afirmar que el código limpio es "mejor" no es suficiente, porque el código limpio cuesta mucho más producirlo.
Si puede articular cómo conducirá el costo del uso de la tecnología moderna
($COST + X) * TIME = $PROFIT
, dóndeX
es un número positivo no trivial yTIME
es relativamente corto, puede crear un escenario convincente.Otra forma de calcular el ROI (retorno de la inversión)
Si este ROI / ROR es un número trivial, especialmente durante un largo período de tiempo, tampoco tiene muchos argumentos comerciales.
¿Cómo gana dinero realmente su empresa?
Es difícil para un buen hombre de negocios ignorar el dinero que está sobre la mesa.
Por supuesto, debe poder respaldar sus declaraciones con hechos concretos. Esto significa que debe poder proporcionar números reales que demuestren que realmente comprende el negocio real y no solo los detalles técnicos académicos.
No solo los profesionales
También proporcionar un análisis de riesgo detallado y lo que estos riesgos harían
$COST
si ocurrieran, convencería de que tiene un caso realista y no solo se queja de que ya no quiere seguir haciendo VB6.Enseñar a los perros viejos nuevos trucos
Cambiar o no cambiar el paradigma de programación para que sea lo más idiomático posible de la nueva tecnología es parte del análisis de riesgos. Pero este es un argumento separado solo después de haber demostrado que se puede ganar mucho dinero haciendo un cambio en primer lugar.
Las personas de negocios tienden a escuchar casos de negocios al igual que las personas técnicas tienden a escuchar casos técnicos. Todos sus casos en su pregunta están propugnando méritos técnicos que son académicos en el mejor de los casos.
Predicción
Estoy haciendo algunas suposiciones aquí. La aplicación VB6, una tienda pequeña, pocos desarrolladores, 2 desarrolladores / dueños de negocios más antiguos apuntan a una aplicación de nicho de mercado que probablemente sea madura (se conocen errores y soluciones alternativas), características bastante completas y relativamente estables, independientemente del "desorden" la base del código. Esto me lleva a creer que la pequeña base de usuarios tampoco está creciendo dramáticamente año tras año, lo que me lleva a la siguiente conclusión.
Que realmente no habrá ninguna razón comercial realmente convincente para cambiar la dirección técnica con esta aplicación. Y portar a VB.Net también es una pérdida de tiempo porque solo tendrás el desorden, pero ahora con más, y 2/3 del equipo de desarrollo no se dedica a aprender nada nuevo. Buena suerte.
fuente
Tengo un cliente cuyo producto estrella está escrito en VB6 y mantenido por 3 personas. Vine a ayudarlos porque tenían un socio que quería que llamaran a un servicio web. Eso es muy difícil de hacer desde VB6, pero fácil desde VB.NET o C #, y les escribí un ensamblado .NET que se parecía a VB6 como un componente COM para que pudieran llamarlo. Luego necesitaban ofrecer un servicio web a alguien. Luego querían escribir una pequeña utilidad independiente e iban a necesitar encriptar y desencriptar alguna información, y analizar algo de XML. Les enseñé a escribir eso en .NET. En los últimos 5 años más o menos, más y más de su código está en .NET a pesar de que el producto estrella no se ha reducido en absoluto. Hay partes que odian, todas las aplicaciones las tienen, y donde pueden, están sacando estas partes (ahora comienza la reducción) y poniéndolas en servicios o utilidades separadas. El resto se convertirá holus-bolus a .NET. Sí, nombres de variables erróneos y todo: en mi opinión, hay muchos beneficios al mudarse a .NET, incluso si no cambian su paradigma de programación actual. Éstas incluyen:
Hay más, pero seguramente eso es suficiente?
La cuestión de los paradigmas de programación, la tipificación fuerte, el compilador es tu amigo, la encapsulación es tu amigo y así sucesivamente, en mi opinión (y me pagan por tener estas opiniones) completamente separados. Si quieres morir en esa colina, adelante, pero morirás con una copia de VB6 abierta.
fuente
Comencé con un proyecto VB6 hace unos años (el sistema ERP personalizado de la compañía) y lo he estado migrando lentamente a .NET. Está en algún lugar a medio terminar.
En primer lugar, la conversión de VB6 a VB.Net es casi siempre una mala idea (e investigué mucho sobre eso). Simplemente hay demasiado diferente. Además, si su jefe piensa que VB.Net es "como VB6", está completamente equivocado y debe cambiar su perspectiva rápidamente.
Mi estrategia era mantener las dos bases de código separadas y mantenerlas separadas y luego mover lentamente módulos completos de VB6 a .NET, pero solo cuando haya un cambio significativo a punto de suceder a ese módulo, para que podamos amortizar parte del costo. Aun así, la reescritura es una gran tarea costosa y arriesgada.
Hay dos formas de integrar VB6 existente con el nuevo código .NET (y probablemente lo hará durante mucho tiempo, por lo que será mejor que se acostumbre a la idea). La primera forma en que lo hice fue comenzar a escribir pequeños módulos en .NET y luego hacer que la aplicación VB6 principal inicie el ejecutable .NET pasando algunos parámetros de la línea de comandos. Esto funcionó, pero tenga en cuenta que .NET tiene un tiempo de inicio de 4 a 10 segundos, por lo que está limitado en lo que puede hacer de esta manera.
Una vez que comenzó a ser realmente doloroso, cambié la estrategia y usé el método de este artículo de CodeProject para mostrar los formularios VB6 existentes en mi aplicación principal .NET. Una vez que seguí esta ruta, pude incurrir solo en un tiempo de inicio de .NET y usar ClickOnce para la implementación, lo cual fue un regalo del cielo en comparación con cómo se implementó la aplicación VB6 anteriormente.
Dicho esto, aquí están las ventajas que encuentro en .NET sobre VB6:
Action
yFunc
tiposDecimal
tipo (VB6 nunca tuvo un tipo decimal de primera clase, a pesar de que tiene CDec)Guid
Desventajas de VB6:
Para ser justos, aquí hay algunas desventajas de mantener una solución combinada VB6 / .NET:
Ahora, como has insinuado, realmente deberías reconstruir tu arquitectura desde cero si comienzas a escribir código en .NET. Sin embargo, parece que ninguna de las personas de su empresa está familiarizada con el mundo de programación .NET y / o Java, que es de donde provienen muchos de los patrones y prácticas que son comunes a los marcos de grandes empresas.
Si toma a alguien que está acostumbrado a arrastrar un botón en un formulario, hace doble clic en él y escribe algunas cadenas SQL directamente en el controlador de eventos de clic, y eso ha funcionado para ellos, es realmente difícil hacer que vean una ventaja de seguir SOLID criterios de diseño. Por otro lado, si muerde la bala y decide que todo el código nuevo estará cubierto en un 90% o más por pruebas unitarias automatizadas, se dará cuenta rápidamente de que es realmente difícil de hacer a menos que adopte los principios de diseño SÓLIDO.
Por lo tanto, debe analizar detenidamente la realidad de la situación. En mi caso, yo era el único programador, y estaba decidido a que todo el código nuevo se probara unitariamente, a pesar de que no tenía experiencia con él. No puedo enfatizar lo suficiente lo mucho que esto impactó negativamente en lo que pude hacer en la primera semana, incluso los primeros meses. Aún así, estaba decidido a hacerlo, y tuve la aceptación de la gerencia. La mayoría de la gente no tiene ese lujo. Ahora tengo mucho código y acabo de terminar una refactorización importante casi sin problemas.
Siendo realistas, no vas a hacer pruebas unitarias, lo que significa que es más difícil justificar principios como la inyección de dependencia a tus compañeros de equipo. Tendrá que vender .NET por méritos distintos de los beneficios arquitectónicos. Debe centrarse en un mejor soporte de biblioteca y mejores herramientas. Eso es lo único que resonará. Sugeriría lo siguiente en su demostración:
DataGridView
en la ventana principalAction
cómo resolverlo creando un método que tome un parámetro. Haga esto primero pasando otro método como parámetro, y luego haga volar su mente pasando un delegado anónimo usando la sintaxis lambdaList<T>
yDictionary<T1,T2>
colección y muestre cómo crea código fuertemente tipado (VB6 tiene cosas similares, pero está tipado dinámicamente)foreach
bucle que sea vergonzosamente paralelo, úseloSystem.Diagnostics.Stopwatch
para medir el tiempo que lleva ejecutar, luego use la biblioteca paralela de tareas para cambiar el bucle en unParallel.Foreach
bucle y demostrar la aceleración, suponiendo que esté en una máquina multinúcleo.Eso es lo que yo haría.
fuente
Me parece que esta es una situación en la que necesitarás ponerte el sombrero de político en lugar del de programación. Debes ser muy consciente de cómo haces tu argumento y de que no antagonizas con tu audiencia. Asegúrese de mostrar las ventajas de .Net en lugar de mostrar las desventajas de VB. Argumentar las desventajas de VB pondrá a sus compañeros de trabajo en una posición en la que necesitan defender sus decisiones y obligarlos a admitir que un idioma en el que tienen una fuerte inversión es un mal idioma. En cambio, muéstreles cómo mudarse a .NET aumentará las herramientas que tienen disponibles y facilitará su vida.
Mi forma ideal de hacer este argumento sería encontrar una tarea o un código del que todos se quejan constantemente y solucionarlo usando .NET. No estoy especialmente familiarizado con VB, pero aquí hay una breve lista de tareas molestas que probablemente serían más fáciles usando .NET en lugar de VB.
Elija cualquiera de las tareas anteriores, o alguna otra tarea específica para los proyectos en los que generalmente trabaja, y siéntese con ellas y escriba un código, desde cero, que maneje el problema de manera rápida y fácil. En realidad, mostrar el proceso de escribir el código mostrará las herramientas que las versiones más nuevas de VS traen a la mesa y proporcionará evidencia de que mudarse a .NET no hará que la vida de nadie sea más difícil.
Al entrar en esto, absolutamente, definitivamente debe hacer su tarea. Si se muestra inseguro de cómo funcionan las herramientas o tiene un código que no funciona correctamente, nunca podrá ganárselos a su lado.
fuente
Lo primero que dice es que VB6 ya no es compatible con Microsoft. Si bien puede mantenerlo en funcionamiento, debe comprender que sus opciones a largo plazo son nulas. Ni siquiera sé si las aplicaciones VB6 se ejecutarán en Windows8, o si el IDE se ejecutará en Win8.
Por lo tanto, eventualmente tiene que volver a escribir, y si ese es el caso, también podría comenzar ahora en lugar de más tarde, dándole tiempo suficiente para descubrir qué nueva tecnología desea usar (mientras VB.NET suena ideal, esta es tu oportunidad de probar algo más avanzado, como hacer que la aplicación funcione en iPads).
A corto plazo, puede mitigar un poco el problema mediante la introducción de nuevas secciones como componentes COM para que la aplicación existente los consuma, con suerte, estos componentes permanecerán cuando ocurra la inevitable reescritura.
No me molestaría con argumentos técnicos sobre por qué .NET es mejor que VB6. Tendrás una discusión perdida allí, la tecnología en sí misma nunca resuelve problemas. Depende de usted cómo aplica esa tecnología, y si la aplicación VB6 está resolviendo cosas por usted, no hay ningún argumento para responder. Puede hablar sobre la facilidad de mantenimiento o la disponibilidad de personal experimentado, pero una vez que lo hace, admite que su personal existente no tiene experiencia en la nueva tecnología y tendrá que capacitarse, y luego tomarse un tiempo para ponerse al día por completo con eso. También tendrá que responder las preguntas sobre cómo muchas reescrituras terminan peor que el proyecto original (a veces debido a la falta de experiencia, a veces debido a diseños demasiado grandes).
fuente
Dale la analogía "auto viejo nuevo vs auto":
fuente
En primer lugar, creo que debería cambiar la pregunta (no en stackexchange sino dentro de su empresa). No es tanto por qué .Net es mejor que VB6, sino más bien ya que VB6 ya no es compatible , es hora de seguir adelante, sino a qué. Pregunte a las partes interesadas cuál debería ser esa 'nueva' tecnología Quizás no sea .Net.
Pero parece que necesita pasar a una nueva tecnología Y obtener algunos buenos patrones y prácticas de programación. La respuesta a la segunda parte es mucho más difícil. Probablemente tenga que hacerlo en una pequeña sección de la aplicación y demostrar que vale la pena, es decir, es más estable, más fácil de mantener, etc.
fuente
Dile a tus jefes que escriban dos anuncios de búsqueda. Uno para desarrolladores de C #. Uno para expertos en VB6. Ponlos ahí afuera. Compara resultados.
fuente