Prefacio
Esta es una tarea desalentadora, y hay mucho camino por recorrer. Así que sugiero humildemente que esto sea una guía bastante completa para su equipo, con consejos sobre herramientas apropiadas y material educativo.
Recuerde: Estas son pautas , y como tales están destinadas a ser adoptadas, adaptadas o descartadas según las circunstancias.
Cuidado: volcar todo esto en un equipo a la vez probablemente fallará. Debes tratar de elegir los elementos que te darán el mejor golpe para sudar e introducirlos lentamente, uno a la vez.
Nota: no todo esto se aplica directamente a los sistemas de programación visual como G2. Para obtener detalles más específicos sobre cómo lidiar con estos, consulte la sección Adición al final.
Resumen ejecutivo para el impaciente
- Defina una estructura de proyecto rígida , con:
- plantillas de proyecto ,
- convenciones de codificación ,
- sistemas de construcción familiares ,
- y conjuntos de pautas de uso para su infraestructura y herramientas.
- Instale un buen SCM y asegúrese de que sepan cómo usarlo.
- Indíqueles buenos IDEs para su tecnología y asegúrese de que sepan cómo usarlos.
- Implemente verificadores de calidad de código e informes automáticos en el sistema de compilación.
- Combine el sistema de construcción con la integración continua y los sistemas de inspección continua .
- Con la ayuda de lo anterior, identifique "hotspots" de calidad de código y refactorice .
Ahora para la versión larga ... ¡Cuidado, prepárense!
La rigidez es (a menudo) buena
Esta es una opinión controvertida, ya que la rigidez a menudo se ve como una fuerza que trabaja en su contra. Es cierto para algunas fases de algunos proyectos. Pero una vez que lo ve como un soporte estructural, un marco que elimina las conjeturas, reduce en gran medida la cantidad de tiempo y esfuerzo desperdiciados. Haz que funcione para ti, no contra ti.
Rigidez = Proceso / Procedimiento .
El desarrollo de software necesita buenos procesos y procedimientos por exactamente las mismas razones por las que las plantas o fábricas químicas tienen manuales, procedimientos, simulacros y pautas de emergencia: prevenir malos resultados, aumentar la previsibilidad, maximizar la productividad ...
¡Sin embargo, la rigidez viene con moderación!
Rigidez de la estructura del proyecto.
Si cada proyecto viene con su propia estructura, usted (y los recién llegados) se pierden y deben comenzar desde cero cada vez que los abre. No quiere esto en una tienda de software profesional, y tampoco lo quiere en un laboratorio.
Rigidez de los sistemas de construcción
Si cada proyecto se ve diferente, hay una buena posibilidad de que también se
construyan de manera diferente . Una compilación no debería requerir demasiada investigación o demasiadas conjeturas. ¿Quieres ser capaz de hacer lo canónico y no tiene que preocuparse de detalles: configure; make install
, ant
,
mvn install
, etc ...
Reutilizar el mismo sistema de compilación y hacer que evolucione con el tiempo también garantiza un nivel constante de calidad.
Necesita README
apuntar rápidamente los detalles del proyecto y guiar con gracia al usuario / desarrollador / investigador, si corresponde.
Esto también facilita enormemente otras partes de su infraestructura de construcción, a saber:
Por lo tanto, mantenga actualizada su compilación (como sus proyectos), pero hágalo más estricto con el tiempo y más eficiente al informar violaciones y malas prácticas.
No reinvente la rueda y reutilice lo que ya ha hecho.
Lectura recomendada:
Rigidez en la elección de lenguajes de programación
No puede esperar, especialmente en un entorno de investigación, que todos los equipos (y menos aún todos los desarrolladores) utilicen el mismo lenguaje y tecnología. Sin embargo, puede identificar un conjunto de herramientas "oficialmente compatibles" y fomentar su uso. El resto, sin una buena justificación, no debería permitirse (más allá de la creación de prototipos).
Mantenga su pila de tecnología simple, y el mantenimiento y la amplitud de las habilidades requeridas al mínimo: un núcleo fuerte.
Rigidez de los convenios y directrices de codificación
Las convenciones y pautas de codificación son las que le permiten desarrollar una identidad como equipo y una jerga compartida . No desea errar en terra incógnita cada vez que abre un archivo fuente.
Las reglas sin sentido que hacen la vida más difícil o prohíben acciones explícitas en la medida en que se rechazan los cometidos basados en violaciones simples y simples son una carga. Sin embargo:
un conjunto de reglas básicas bien pensado elimina gran parte de los quejidos y pensamientos: nadie debe romper bajo ninguna circunstancia;
y un conjunto de reglas recomendadas proporcionan orientación adicional.
Enfoque personal: Soy agresivo cuando se trata de codificar convenciones, algunos incluso dicen nazi , porque creo en tener una
lingua franca , un estilo reconocible para mi equipo. Cuando se registra el código basura, se destaca como un herpes labial en la cara de una estrella de Hollywood: desencadena una revisión y una acción automáticamente. De hecho, a veces he ido tan lejos como para recomendar el uso de ganchos de precompromiso para rechazar los compromisos no conformes. Como se mencionó, no debería ser demasiado loco y obstaculizar la productividad: debería conducirlo. Preséntelos lentamente, especialmente al principio. Pero es preferible pasar tanto tiempo arreglando un código defectuoso que no se puede trabajar en problemas reales.
Algunos idiomas incluso hacen cumplir esto por diseño:
- Java estaba destinado a reducir la cantidad de basura aburrida que puedes escribir con ella (aunque sin duda muchos logran hacerlo).
La estructura de bloque de Python por sangría es otra idea en este sentido.
Ve, con su gofmt
herramienta, que elimina por completo cualquier debate y esfuerzo (¡ y ego! ) Inherentes al estilo: corre gofmt
antes de comprometerte.
Asegúrese de que la descomposición del código no pueda pasar. Las convenciones de código , la integración continua y la inspección continua , la programación de pares y las revisiones de código son su arsenal contra este demonio.
Además, como verá a continuación, el código es documentación , y esa es otra área donde las convenciones fomentan la legibilidad y la claridad.
Rigidez de la documentación.
La documentación va de la mano con el código. El código en sí mismo es documentación. Pero debe haber instrucciones claras sobre cómo construir, usar y mantener cosas.
Usar un solo punto de control para la documentación (como WikiWiki o DMS) es algo bueno. Cree espacios para proyectos, espacios para más bromas al azar y experimentación. Haga que todos los espacios reutilicen reglas y convenciones comunes. Intenta hacerlo parte del espíritu de equipo.
La mayoría de los consejos que se aplican al código y las herramientas también se aplican a la documentación.
Rigidez en los comentarios del código
Los comentarios de código, como se mencionó anteriormente, también son documentación. A los desarrolladores les gusta expresar sus sentimientos sobre su código (principalmente orgullo y frustración, si me preguntas). Por lo tanto, no es inusual para ellos expresar esto en términos no inciertos en los comentarios (o incluso en el código), cuando un texto más formal podría haber transmitido el mismo significado con menos improperios o drama. Está bien dejar pasar algunas por razones divertidas e históricas: también es parte del desarrollo de una cultura de equipo . Pero es muy importante que todos sepan qué es aceptable y qué no lo es, y ese ruido de comentario es solo eso:
ruido .
Rigidez en los registros de confirmación
Los registros de confirmación no son un "paso" molesto e inútil del ciclo de vida de su SCM: NO se lo salte para llegar a casa a tiempo o continuar con la siguiente tarea, o para ponerse al día con los amigos que se fueron a almorzar. Son importantes y, como (la mayoría) del buen vino, cuanto más tiempo pasa, más valiosos se vuelven. Así que hazlos bien. Me quedo estupefacto cuando veo a compañeros de trabajo que escriben frases para combates gigantes o para hacks no obvios.
Las confirmaciones se realizan por una razón, y esa razón NO siempre está expresada claramente por su código y la línea de registro de confirmación que ingresó. Hay más que eso.
Cada línea de código tiene una historia y una historia . Los diferenciales pueden contar su historia, pero debes escribir su historia.
¿Por qué actualicé esta línea? -> Porque la interfaz cambió.
¿Por qué cambió la interfaz? -> Porque la biblioteca L1 que lo definió se actualizó.
¿Por qué se actualizó la biblioteca? -> Debido a que la biblioteca L2, que necesitamos para la función F, dependía de la biblioteca L1.
¿Y cuál es la característica X? -> Ver la tarea 3456 en el rastreador de problemas.
No es mi elección de SCM, y puede que tampoco sea la mejor para su laboratorio; pero Git
hace esto bien y trata de forzarlo a escribir buenos registros más que la mayoría de los otros sistemas SCM, usando short logs
y
long logs
. Enlace el ID de la tarea (sí, necesita uno) y deje un resumen genérico para el shortlog
, y expanda en el registro largo: escriba la historia del conjunto de cambios .
Es un registro: está aquí para realizar un seguimiento y registrar las actualizaciones.
Regla general: si estaba buscando algo sobre este cambio más tarde, ¿es probable que su registro responda su pregunta?
Proyectos, documentación y código están vivos
Manténgalos sincronizados, de lo contrario ya no forman esa entidad simbiótica. Funciona de maravilla cuando tienes:
- clear confirma los registros en su SCM, con enlaces a ID de tareas en su rastreador de problemas,
- donde los tickets de este rastreador se vinculan a los conjuntos de cambios en su SCM (y posiblemente a las compilaciones en su sistema de CI),
- y un sistema de documentación que vincula a todos estos.
El código y la documentación deben ser coherentes .
Rigidez en las pruebas
Reglas de juego:
- Cualquier código nuevo vendrá con (al menos) pruebas unitarias.
- Cualquier código heredado refactorizado vendrá con pruebas unitarias.
Por supuesto, estos necesitan:
- para probar realmente algo valioso (o son una pérdida de tiempo y energía),
- estar bien escrito y comentado (como cualquier otro código que ingreses).
También son documentación y ayudan a delinear el contrato de su código. Especialmente si usas TDD . Incluso si no lo hace, los necesita para su tranquilidad. Son su red de seguridad cuando incorpora un nuevo código (mantenimiento o función) y su torre de vigilancia para protegerse contra la descomposición del código y las fallas ambientales.
Por supuesto, debe ir más allá y tener pruebas de integración y
pruebas de regresión para cada error reproducible que arregle.
Rigidez en el uso de las herramientas
Está bien que el desarrollador / científico ocasional quiera probar un nuevo comprobador estático en la fuente, generar un gráfico o modelo con otro o implementar un nuevo módulo con un DSL. Pero es mejor si hay un conjunto canónico de herramientas que se espera que todos los miembros del equipo conozcan y usen.
Más allá de eso, deje que los miembros usen lo que quieran, siempre que sean TODOS:
- productiva ,
- NO requiere asistencia regularmente
- NO ajustarse regularmente a su infraestructura general ,
- NO interrumpir su infraestructura (modificando áreas comunes como código, sistema de compilación, documentación ...),
- NO afecta el trabajo de otros ,
- Capaz de realizar oportunamente cualquier tarea solicitada .
Si ese no es el caso, haga cumplir que recurran a los valores predeterminados.
Rigidez vs Versatilidad, Adaptabilidad, Prototipos y Emergencias
La flexibilidad puede ser buena. Dejar que alguien use ocasionalmente un truco, un enfoque rápido y sucio, o una herramienta favorita para mascotas para hacer el trabajo
está bien. NUNCA permita que se convierta en un hábito, y NUNCA permita que este código se convierta en la base de código real para soportar.
El espíritu de equipo importa
Desarrolle un sentido de orgullo en su base de código
- Desarrollar un sentido de orgullo en el código
Evita los juegos de culpa
- UTILICE juegos de Integración continua / Inspección continua: fomenta la competencia productiva y de buenos modales .
- HAGA un seguimiento de los defectos: es solo una buena limpieza.
- HAGA la identificación de las causas raíz : son solo procesos a prueba de futuro.
- PERO NO asigne la culpa : es contraproducente.
Se trata del código, no de los desarrolladores
Haga que los desarrolladores sean conscientes de la calidad de su código, PERO haga que vean el código como una entidad separada y no como una extensión de sí mismos, lo que no puede criticarse.
Es una paradoja: debe alentar la programación sin ego para un lugar de trabajo saludable pero confiar en el ego con fines motivadores.
De científico a programador
Las personas que no valoran y se enorgullecen del código no producen un buen código. Para que esta propiedad emerja, necesitan descubrir lo valioso y divertido que puede ser. La profesionalidad y el deseo de hacer el bien no son suficientes: necesita pasión. Por lo tanto, debe convertir a sus científicos en
programadores (en el sentido amplio).
Alguien argumentó en comentarios que después de 10 a 20 años en un proyecto y su código, cualquiera sentiría un apego. Tal vez me equivoque, pero supongo que están orgullosos de los resultados del código y del trabajo y su legado, no del código en sí o del acto de escribirlo.
Por experiencia, la mayoría de los investigadores consideran que la codificación es una necesidad o, en el mejor de los casos, una distracción divertida. Solo quieren que funcione. Los que ya están bastante versados y que tienen interés en la programación son mucho más fáciles de persuadir de adoptar las mejores prácticas y cambiar las tecnologías. Necesitas llevarlos hasta la mitad.
El mantenimiento del código es parte del trabajo de investigación
Nadie lee trabajos de investigación de mierda. Es por eso que son revisados por pares, revisados, refinados, reescritos y aprobados una y otra vez hasta que se consideran listos para su publicación. ¡Lo mismo se aplica a una tesis y una base de código!
Deje en claro que la refactorización y actualización constantes de una base de código evita la descomposición del código y reduce la deuda técnica, y facilita la futura reutilización y adaptación del trabajo para otros proyectos.
¡¿¿Por qué todo esto??!
¿Por qué nos molestamos con todo lo anterior? Por la calidad del código . ¿O es
un código de calidad ...?
Estas pautas tienen como objetivo conducir a su equipo hacia este objetivo. Algunos aspectos lo hacen simplemente mostrándoles el camino y dejándolos hacerlo (lo cual es mucho mejor) y otros los toman de la mano (pero así es como se educa a las personas y se desarrollan hábitos).
¿Cómo sabes cuando la meta está al alcance?
La calidad es medible
No siempre cuantitativamente, pero es medible . Como se mencionó, debe desarrollar un sentido de orgullo en su equipo, y mostrar progreso y buenos resultados es clave. Mida la calidad del código regularmente y muestre el progreso entre intervalos y cómo es importante. Haga retrospectivas para reflexionar sobre lo que se ha hecho y cómo mejoró o empeoró las cosas.
Existen excelentes herramientas para la inspección continua . La sonda es popular en el mundo Java, pero puede adaptarse a cualquier tecnología; y hay muchos otros Mantenga su código bajo el microscopio y busque estos molestos bichos y microbios molestos.
Pero, ¿qué pasa si mi código ya es una mierda?
Todo lo anterior es divertido y lindo como un viaje a Never Land, pero no es tan fácil de hacer cuando ya tienes (un montón de código de basura) y un equipo reacio a cambiar.
Aquí está el secreto: debes comenzar en alguna parte .
Anécdota personal: en un proyecto, trabajamos con una base de código que pesaba originalmente más de 650,000 Java LOC, más de 200,000 líneas de JSP, más de 40,000 JavaScript JavaScript y más de 400 MB de dependencias binarias.
Después de aproximadamente 18 meses, es 500,000 Java LOC (MÁS LIMPIO) , 150,000 líneas de JSPs y 38,000 JavaScript LOC, con dependencias de apenas 100MBs (¡y estos ya no están en nuestro SCM!).
¿Cómo lo hicimos? Acabamos de hacer todo lo anterior. O se esforzó mucho.
Es un esfuerzo de equipo, pero lentamente inyectamos en nuestras regulaciones y herramientas de proceso para monitorear la frecuencia cardíaca de nuestro producto, mientras recortamos rápidamente el "gordo": código basura, dependencias inútiles ... No detuvimos todo el desarrollo para haga esto: tenemos períodos ocasionales de relativa paz y tranquilidad en los que somos libres de volvernos locos en la base de código y desgarrarla, pero la mayoría de las veces lo hacemos todo por defecto al modo "revisar y refactorizar" cada vez que tenemos : durante las construcciones, durante el almuerzo, durante los sprints de corrección de errores, durante los viernes por la tarde ...
Hubo algunos grandes "trabajos" ... Cambiar nuestro sistema de compilación de una compilación Ant gigante de 8500+ XML LOC a una compilación Maven multimódulo fue una de ellas. Luego tuvimos:
- módulos claros (o al menos ya era mucho mejor, y todavía tenemos grandes planes para el futuro),
- gestión automática de dependencias (para facilitar el mantenimiento y las actualizaciones, y para eliminar deps inútiles),
- construcciones más rápidas, fáciles y reproducibles,
- informes diarios de calidad.
Otra fue la inyección de "cinturones de herramientas de utilidad", a pesar de que estábamos tratando de reducir las dependencias: Google Guava y Apache Commons reducen su código y reducen mucho la superficie de errores en su código.
También convencimos a nuestro departamento de TI de que tal vez usar nuestras nuevas herramientas (JIRA, Fisheye, Crucible, Confluence, Jenkins) era mejor que las existentes. Todavía necesitábamos lidiar con algunos que despreciamos (QC, Sharepoint y SupportWorks ...), pero fue una experiencia mejorada en general, con algo más de espacio.
Y todos los días, ahora hay una escasez de entre uno y docenas de compromisos que solo se ocupan de arreglar y refactorizar cosas. Ocasionalmente rompemos cosas (necesita pruebas unitarias, y es mejor que las escriba antes de refactorizar las cosas), pero en general el beneficio para nuestra moral Y para el producto ha sido enorme. Obtenemos una fracción de un porcentaje de calidad de código a la vez. ¡Y es divertido verlo aumentar!
Nota: Nuevamente, la rigidez debe ser sacudida para dejar espacio para cosas nuevas y mejores. En mi anécdota, nuestro departamento de TI está en parte en lo correcto al tratar de imponernos algunas cosas y en otras no. O tal vez solían tener razón . Las cosas cambian. Demuestre que son mejores formas de aumentar su productividad. Las pruebas y los prototipos están aquí para esto.
El ciclo de refactorización incremental súper secreto del código de espagueti para una calidad increíble
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
Una vez que tenga algunas herramientas de calidad en su cinturón de herramientas:
Analice su código con verificadores de calidad de código.
Linters, analizadores estáticos, o lo que sea que tengas.
Identifique sus puntos críticos y frutas bajas .
Las infracciones tienen niveles de gravedad, y las clases grandes con una gran cantidad de graves son una gran señal de alerta: como tales, aparecen como "puntos calientes" en los tipos de vistas de radiadores / mapas de calor.
Arregle los puntos calientes primero.
Maximiza su impacto en un corto período de tiempo ya que tienen el mayor valor comercial. Idealmente, las violaciones críticas deben tratarse tan pronto como aparezcan, ya que son posibles vulnerabilidades de seguridad o causas de bloqueo, y presentan un alto riesgo de inducir una responsabilidad (y en su caso, un mal desempeño para el laboratorio).
Limpie las infracciones de bajo nivel con barridos automáticos de la base de código .
Mejora la relación señal / ruido para que pueda ver violaciones importantes en su radar a medida que aparecen. A menudo hay un gran ejército de violaciones menores al principio si nunca se solucionaron y su base de código se dejó libre en la naturaleza. No presentan un "riesgo" real, pero perjudican la legibilidad y facilidad de mantenimiento del código. Arreglos ya sea cuando los encuentres mientras trabajas en una tarea, o mediante grandes búsquedas de limpieza con barridos de código automatizados si es posible. Tenga cuidado con los grandes barridos automáticos si no tiene un buen conjunto de pruebas y un sistema de integración. Asegúrese de acordar con los compañeros de trabajo el momento adecuado para ejecutarlos para minimizar la molestia.
Repita hasta que esté satisfecho.
Lo que, idealmente, nunca debería ser, si este sigue siendo un producto activo: seguirá evolucionando.
Consejos rápidos para una buena limpieza
Cuando está en modo de revisión , basado en una solicitud de atención al cliente:
- Por lo general, es una buena práctica NO solucionar otros problemas, ya que podría presentar otros nuevos de mala gana.
- Ve al estilo SEAL: entra, elimina el error, sal y envía tu parche. Es un golpe quirúrgico y táctico.
Pero para todos los demás casos , si abre un archivo, haga su deber:
- definitivamente: revíselo (tome notas, informe de problemas de archivos),
- tal vez: limpiarlo (limpiezas de estilo y violaciones menores),
- idealmente: refactorizarlo (reorganizar grandes secciones y sus vecinos).
Simplemente no se desvíe de pasar una semana de archivo en archivo y terminar con un conjunto de cambios masivo de miles de correcciones que abarcan múltiples funciones y módulos, lo que dificulta el seguimiento futuro. Un problema en el código = un ticket en su rastreador. A veces, un conjunto de cambios puede afectar múltiples tickets; pero si sucede con demasiada frecuencia, probablemente estés haciendo algo mal.
Anexo: Gestión de entornos de programación visual
Los jardines amurallados de los sistemas de programación a medida
Múltiples sistemas de programación, como el OP G2, son diferentes bestias ...
Sin fuente "Código"
A menudo, no le dan acceso a una representación textual de su "código" fuente: puede estar almacenado en un formato binario patentado, o tal vez almacena cosas en formato de texto pero las oculta. Los sistemas de programación gráfica a medida en realidad no son infrecuentes en los laboratorios de investigación, ya que simplifican la automatización de los flujos de trabajo de procesamiento de datos repetitivos.
Sin herramientas
Aparte de los suyos, eso es. A menudo está limitado por su entorno de programación, su propio depurador, su propio intérprete, sus propias herramientas y formatos de documentación. Son
jardines amurallados , excepto si finalmente captan el interés de alguien lo suficientemente motivado como para aplicar ingeniería inversa a sus formatos y construir herramientas externas, si la licencia lo permite.
Falta de documentación
Muy a menudo, estos son sistemas de programación de nicho, que se utilizan en entornos bastante cerrados. Las personas que los usan con frecuencia firman NDA y nunca hablan de lo que hacen. Programar comunidades para ellos es raro. Entonces los recursos son escasos. Estás atrapado con tu referencia oficial, y eso es todo.
La parte irónica (y a menudo frustrante) es que todas las cosas que hacen estos sistemas obviamente podrían lograrse mediante el uso de lenguajes de programación generales y de propósito general, y muy probablemente de manera más eficiente. Pero requiere un conocimiento más profundo de la programación, mientras que no puede esperar que su biólogo, químico o físico (por nombrar algunos) sepa lo suficiente sobre programación, y aún menos para tener el tiempo (y el deseo) de implementar (y mantener) sistemas complejos, que pueden o no ser de larga duración. Por la misma razón que usamos DSL, tenemos estos sistemas de programación a medida.
Anécdota personal 2:En realidad, trabajé en uno de estos yo mismo. No hice el enlace con la solicitud del OP, pero mi proyecto era un conjunto de grandes piezas interconectadas de software de procesamiento y almacenamiento de datos (principalmente para investigación bioinformática, atención médica y cosmética, pero también para negocios inteligencia o cualquier dominio que implique el seguimiento de grandes volúmenes de datos de investigación de cualquier tipo y la preparación de flujos de trabajo de procesamiento de datos y ETL). Una de estas aplicaciones era, simplemente, un IDE visual que usaba las campanas y silbidos habituales: interfaces de arrastrar y soltar, espacios de trabajo de proyectos versionados (usando archivos de texto y XML para el almacenamiento de metadatos), muchos controladores conectables a fuentes de datos heterogéneas y un visual lienzo para diseñar tuberías para procesar datos de N fuentes de datos y al final generar M salidas transformadas, y posibles visualizaciones brillantes e informes complejos (e interactivos) en línea. Su típico sistema de programación visual a medida, que sufre un poco de síndrome NIH con el pretexto de diseñar un sistema adaptado a las necesidades de los usuarios.
Y, como era de esperar, es un buen sistema, bastante flexible para sus necesidades, aunque a veces un poco exagerado, por lo que se pregunta "¿por qué no usar herramientas de línea de comandos en su lugar?", Y desafortunadamente siempre lidera en medianas equipos que trabajan en proyectos grandes para muchas personas diferentes que lo utilizan con diferentes "mejores" prácticas.
¡Genial, estamos condenados! - ¿Qué hacemos al respecto?
Bueno, al final, todo lo anterior aún se mantiene. Si no puede extraer la mayor parte de la programación de este sistema para usar más herramientas y lenguajes convencionales, "solo" necesita adaptarla a las restricciones de su sistema.
Acerca de las versiones y el almacenamiento
Al final, casi siempre puedes versionar cosas, incluso con el entorno más limitado y amurallado. La mayoría de las veces, estos sistemas todavía vienen con su propio control de versiones (que desafortunadamente es bastante básico, y solo ofrece volver a las versiones anteriores sin mucha visibilidad, solo guardando instantáneas anteriores). No se trata exactamente de usar conjuntos de cambios diferenciales como lo haría su SCM de elección, y probablemente no sea adecuado para que varios usuarios envíen cambios simultáneamente.
¡Pero aún así, si brindan dicha funcionalidad, tal vez su solución sea seguir nuestras amadas pautas estándar de la industria anteriores y transponerlas a este sistema de programación!
Si el sistema de almacenamiento es una base de datos, probablemente exponga las funcionalidades de exportación o se pueda realizar una copia de seguridad en el nivel del sistema de archivos. Si está utilizando un formato binario personalizado, tal vez simplemente pueda intentar versionarlo con un VCS que tenga un buen soporte para datos binarios. No tendrá un control detallado, pero al menos tendrá la espalda cubierta de catástrofes y tendrá un cierto grado de cumplimiento de recuperación ante desastres.
Sobre las pruebas
Implemente sus pruebas dentro de la plataforma y use herramientas externas y trabajos en segundo plano para configurar copias de seguridad periódicas. Probablemente, inicie estas pruebas de la misma manera que iniciaría los programas desarrollados con este sistema de programación.
Claro, es un trabajo de pirateo y definitivamente no está a la altura de lo que es común para la programación "normal", pero la idea es adaptarse al sistema mientras se intenta mantener una apariencia de proceso de desarrollo de software profesional.
El camino es largo y empinado ...
Como siempre con entornos de nicho y sistemas de programación a medida, y como lo expusimos anteriormente, se trata de formatos extraños, solo un conjunto limitado (o totalmente inexistente) de herramientas posiblemente torpes y un vacío en lugar de una comunidad.
La recomendación: Intente implementar las pautas anteriores fuera de su sistema de programación a medida, tanto como sea posible. Esto garantiza que puede confiar en herramientas "comunes", que cuentan con el soporte adecuado y el impulso de la comunidad.
La solución: cuando esto no sea una opción, intente adaptar este marco global a su "caja". La idea es superponer este modelo de mejores prácticas estándar de la industria sobre su sistema de programación y aprovecharlo al máximo. El consejo aún se aplica: definir la estructura y las mejores prácticas, alentar la conformidad.
Desafortunadamente, esto implica que es posible que deba sumergirse y hacer una gran cantidad de trabajo de piernas. Entonces...
Últimas palabras famosas y solicitudes humildes:
- Documenta todo lo que haces.
- Comparte tu experiencia.
- Open Source cualquier herramienta que escriba.
Al hacer todo esto, usted:
- no solo aumenta sus posibilidades de obtener apoyo de personas en situaciones similares,
- pero también brinda ayuda a otras personas y fomenta la discusión sobre su pila de tecnología.
Quién sabe, usted podría estar en el comienzo de una nueva comunidad vibrante de lenguaje oscuro X . Si no hay ninguno, ¡comience uno!
- Haga preguntas sobre Stack Overflow ,
- Tal vez incluso escriba una propuesta para un nuevo sitio StackExchange en el
Área 51 .
Tal vez sea hermoso por dentro , pero nadie tiene ni idea hasta ahora, ¡así que ayuda a derribar este feo muro y deja que otros echen un vistazo!