Capacitando a los programadores de Timran Fortran para mejorar el diseño de código. consejos? [cerrado]

7

Necesito capacitar rápidamente a los desarrolladores de Fortran 90 en diseño orientado a objetos, buena codificación y prácticas generales de codificación para hacer que el mantenimiento del código sea más fácil y accesible para todos. Su estilo actual es el habitual:

  • rutinas largas que hacen demasiado
  • los módulos se agregan en "modo familiar" (las rutinas que tienen algo que ver con diferentes tipos de objetos que comparten un uso común están en un solo módulo, en lugar de tener diferentes módulos para diferentes tipos)
  • módulo global enorme con cientos de variables
  • no-greppability general de identificadores

Esto está fuera de mi cabeza. Hice un curso para uno de ellos explicando OO y modularización en términos de una pluma (con métodos como uncap () y miembros como inkLevel) y tuve mucho éxito en desviar su punto de vista. También le di el ejercicio para codificar en estilo OO una aventura textual muy simple, donde el jugador puede moverse por las habitaciones. También introduje el concepto de patrones y antipatrones.

Me gustaría saber algunos consejos y sugerencias sobre cómo realizar esta tarea en el mejor de los casos.

Gracias

    
pregunta Stefano Borini 18.11.2010 - 09:40

5 respuestas

7

los programadores de procedimientos experimentados, si son buenos en eso, han internalizado modelos de construcción de código que tienden hacia la orientación a objetos, pero no se dan cuenta . De la misma manera, los buenos diseñadores de bases de datos tienden a crear tablas en la tercera forma normal, incluso si nunca han oído hablar de la normalización de la base de datos.

es probable que las grandes y feas bolas de barro que están viendo sean artefactos antiguos , cargadas de décadas de deuda técnica y cambios de emergencia.

al enseñar OOP a programadores de procedimientos (advertencia: hace muchos años) descubrí que comenzar con lo que saben y lo que piensan que es bueno y acumular a partir de allí en objetos y clases hace que el "clic" sea mucho más rápido que dar una conferencia en abstracto Conceptos y codificación de los animales que hablan.

ejemplo: una buena función utiliza todos sus parámetros, y solo sus parámetros. una buena estructura de datos contiene solo elementos que están lógicamente relacionados con la 'clave'. un buen módulo generalmente se centra en una estructura de datos (o un agregado) y contiene las funciones que producen, usan y consumen la estructura de datos.

recuerde que los hábitos que estos programadores han desarrollado les han servido bien (¡hasta donde saben!) durante mucho tiempo; no les diga que tienen que "olvidarse de todo eso y comenzar de nuevo", eso solo genera resentimiento. Dígales que todo lo que ya saben sigue siendo correcto, simplemente se reorganizó . Luego muéstreles cómo reorganizarlo, luego muéstreles los beneficios de la reorganización.

un ejercicio útil podría ser hacer que codifiquen algo simple pero útil "a la manera antigua", luego caminar a través de la refactorización que haría que funcione "la nueva forma". El método socrático (hacer preguntas en lugar de mostrarlas directamente) es totalmente apropiado para este tipo de ejercicio.

buena suerte!

    
respondido por el Steven A. Lowe 19.11.2010 - 05:23
3

Como usted bien sabe, esto es muy diferente a enseñar a los estudiantes universitarios los conceptos básicos de OO. Está hablando con personas que han escrito el código de trabajo, implementado muy bien con estas estrategias, posiblemente durante bastante tiempo.

En lugar de centrarme en el qué , me centraría en el por qué . Creo que la mejor manera de demostrar el por qué es comenzar con una pieza de código OO bien escrito al que se debe agregar una característica. A medida que amplía la funcionalidad del código, puede demostrar dónde es fácil agregar los enlaces necesarios para la nueva funcionalidad.

En mi experiencia, leer código OO es la mejor forma de entenderlo.

    
respondido por el justkt 18.11.2010 - 16:57
2

Esta es una respuesta de un fondo de Java, pero estoy seguro de que hay opciones equivalentes en otros lugares. Haría que tus muchachos usaran JUnit o un kit de prueba de unidad automatizado similar.

1) He encontrado un número de personas 'procesales' que luchan con la transición completa a OO simplemente por no entender dónde 'comienza' todo el asunto. Un marco de prueba de unidad puede proporcionar una curva de aprendizaje más sencilla en lugar de tener que preocuparse por cómo funcionan los servidores de aplicaciones.

2) Escribir buenos JUnits lo empuja a escribir accidentalmente un buen código OO ... y una vez que tenga el error, se encontrará produciendo bits útiles de código reciclable a la izquierda y al centro ... Este tipo de cosas puede que ayuda con la motivación para cambiar de oldskool a newskool ...

Además, una vez que haya personas en el surco un poco, puede obtener buenos complementos de "estilo de comprobación" automatizados para su IDE que resaltarán elementos como longitud de archivo excesiva, longitudes de métodos, variables globales, etc. . Así que si JUnit o similar puede superar el abismo de querer desarrollarse de manera OO, algunas herramientas automatizadas pueden resaltar las áreas que desean volver a trabajar con su nueva comprensión.

    
respondido por el DanW 18.11.2010 - 16:21
0

Me resultó útil usar un marco que usaba OO. Me vi obligado a pensar en cómo usarlo y me pregunté por qué se hicieron las cosas de cierta manera. Sé que no es la solución completa, pero me ayudó en ese momento.

El marco que usé fue la biblioteca Open Class para OS / 2. Un montón de cosas de GUI, pero también colecciones, manejo de cadenas, etc. ¿Qué hay de hacer que tus chicos usen .Net y Forms? Se ocuparán de objetos como Window y Control, llamarán a los métodos y tal vez notarán la jerarquía de herencia.

Sólo una idea ...

    
respondido por el paul 18.11.2010 - 10:15
0

Haz un ejemplo simple de Animal, Gato, Perro que demuestre la herencia sin escribir una sola línea de código al principio. Asegúrese de que entiendan el concepto de Programación Orientada a Objetos antes de comenzar la sintaxis.

Es fácil tratar de relacionar los conceptos antiguos con conceptos nuevos si intentas que comprendan por sí mismos, así que evitaría eso hasta que creas que comprenden por qué lo hacen de esa manera en particular. Si se lo explicas en términos en los que puedan ver las ventajas de hacerlo de esa manera, tendrían una razón para no usar su antiguo patrón de Fortran.

En cuanto a la longitud de los métodos, tome un método largo como ejemplo y luego reemplace las piezas con métodos de tamaño de mordida con las convenciones de denominación adecuadas para que ambos puedan demostrar que los métodos largos son feos y cómo pueden mejorar la situación.

    
respondido por el Neil 18.11.2010 - 14:28

Lea otras preguntas en las etiquetas