miércoles, 22 de junio de 2022

La beca COBOL (agilecobol)

 La famosa beca COBOL.

¿Qué cobolero no la ha vivido? Alguno hay, pero seguro que a muchos os suena esa famosa formación inicial de semanas o meses, antes de sumergirte en el mundo de la programación cobol.

El año pasado tuve mi primer contacto como formadora en una beca cobol. Me tocó la "parte 2" con COBOL y DB2.

Era mi primera vez y como el covid aún andaba por ahí me tocó dar toda la formación en remoto, sin más herramientas que una reunión de Teams.

Al segundo día supe que aquello no marchaba bien. En una llamada con 8 personas, los alumnos perdían el "preguntarle al compañero". Perdían el ayudarse entre ellos. Y tenían que escuchar cómo yo iba resolviendo los problemas de cada uno. Era un caos.

Pero no hay nada mejor que la necesidad. Si los que llevan tiempo en esto no hacían más que decir que lo mejor para aprender a programar era hacer Pair Programming, pues había que intentarlo.
Preparé una pequeña presentación para explicar en qué consistía y elegí las parejas (fuimos haciendo cambios de pareja a lo largo de la semana).

Et voilà! El ánimo subió, los ejercicios salían más rápido, yo seguía pasándome por sus reuniones a dos cuando me necesitaban y todo el mundo le pilló el punto en un instante.
Formación salvada.

Este año he tenido otra oportunidad de participar como formadora en una beca cobol, pero esta vez en presencial.
Qué diferencia. Echaba taaaanto de menos la pizarra y los rotuladores... xd Y ver la cara a la gente. No hay nada como verle la cara a alguien para saber si está en dificultades sin que diga nada.

En la anterior beca había aprovechado para hacer una retrospectiva sobre la formación y así detectar puntos de mejora para la siguiente. Y en ésta me apliqué el cuento. Por ejemplo "mucha teoría seguida sin ver nada de práctica al principio", pues nos hacemos un "Hola mundo" el primer día y desde ahí avanzamos.

Esta vez no hubo pair programming así que pude comparar las dos situaciones y sacar conclusiones:

1. Enseñar en presencial gana de calle a enseñar en remoto.
Poder pintar en la pizarra, poder señalar con el dedo (en la pizarra o en el proyector), poder ver la cara de la gente que no consigue que su programa compile... Podría dar 1000 razones.

2. Se puede enseñar sin Pair Programming (obvio), pero.
- Trabajando por pares consigues que todo el grupo avance a la vez (o casi xd). El que lo pilla más rápido arrastra al que lo pilla más despacio, y al revés, se frena a los "demasiado rápidos" para mantener un ritmo sostenible.
- Trabajando de manera individual, tienes al que va al doble de velocidad que el otro. Y lo tienes que entretener con otra cosa mientras los que van más despacio terminan.
- Aunque siempre se preguntan entre ellos, no aprenden tanto unos de otros.
- Los que terminan rápido se ponen a hacer "otras cosas" y dejan de estar centrados en la formación.

3. Hay que adaptar las formaciones a los tiempos que corren.
Lo que aprendí en la primera beca me sirvió para esta última. Mucha práctica, teoría después de la práctica y no antes, deja que fallen y corrige después...

¿Qué os hubiese gustado encontraros en vuestra beca COBOL? ¡Os leo en comentarios!

#thisistheway

martes, 4 de mayo de 2021

Utilidades REXX V: modificar todos los miembros de una librería.

 Pues mira tú por dónde que una piensa que ya nadie necesita de sus conocimientos técnicos y de repente surge la oportunidad de hacer algo interesante :-)

La necesidad es lo que tiene.

Hoy os traigo un programa rexx que se recorre todos los miembros de una librería y le añade unas líneas de código. En mi caso una cabecera con comentarios, pero puedes usarlo para lo que necesites, o para hacer reemplazos de código modificándolo un poco.

Vamos al lío:

/* REXX** PGM POUR AJOUTER UNE ENTETE A TOUS LES MEMBRES D'UN PDS*/            
ADDRESS "ISPEXEC"                                       
/*INDIQUER LE PDS D'ORIGIN:*/
PDSORI="NOM.DU.PDS"
/*INDIQUER LE PDS DESTINATEUR:*/
PDSDES="NOM.DU.PDS"
"LMINIT DATAID(LMID) DATASET('"PDSORI"')"
"LMOPEN DATAID("LMID")"  
/*BOUCLE POUR TRATIER TOUS LES MEMBRES DU PDS ORI*/
DO FOREVER = 1                                       
    ADDRESS "ISPEXEC"
    "LMMLIST DATAID("LMID") MEMBER(LMMEM) STATS(YES)"   
    
    IF RC > 0 THEN LEAVE       
    
    /*NOM DU PGM A TRAITER:*/
    SAY "MEMBRE=" LMMEM
    
    FICHIERIN=PDSORI'('LMMEM')'
    ADDRESS TSO
    /*ALOCATION FICHIER ORIGIN*/
    "ALLOC FI(INDD) DA('"FICHIERIN"')"
    /*LECTURE DU FICHIER COMPLET*/
    "EXECIO * DISKR INDD (STEM INDD. FINIS"  
    "FREE FI(INDD)"
    
    FICHIEROUT=PDSDES'('LMMEM')'
    ADDRES TSO 
    "ALLOC FI(OUTDD) DA('"FICHIEROUT"') SHR REUSE"
    
    /*PREPARATION DE L'ENTETE*/
/*AQUI PONED TANTOS OUTDD. COMO OS HAGAN FALTA*/
    OUTDD.=''
    OUTDD.1 = "***************"
    OUTDD.2 = "*CABECERA*"
    OUTDD.3 = "***************"
    
/*AQUI CAMBIAD EL 4 POR EL SIGUIENTE NUMERO AL ULTIMO OUTDD. ANTERIOR*/
    J=4
    DO I=1 TO INDD.0
       OUTDD.J = INDD.I
       J=J+1
    END
    
    /*ECRITURE DU PGM AVEC L'ENTETE*/
    "EXECIO * DISKW OUTDD (STEM OUTDD. FINIS"  
    "FREE FI(OUTDD)"
END                                                     
"LMFREE DATAID("LMID")" 

Disculpad el francés pero es que creé este código para usarlo en el curro, y trabajo en francés xd Pero creo que se entiende bien.

Lo primero que hacemos lo tenéis también en el artículo Utilidades Rexx IV: listar miembros que es precisamente eso, recuperar la lista de miembros que hay en una librería.

El nombre de la librería podríamos pasarla como un parámetro desde el job, pero me dio pereza. Se trata de recorrerse la librería origen, y crear en la librería destino una copia de cada miembro con el código modificado. Lo he hecho así porque no quería "cargarme" el código original pero lo podéis personalizar al gusto.

El JCL para ejecutarlo:

//REXXJCL  JOB (OPC0,001),'CONSU',REGION=0M,NOTIFY=&SYSUID,
//            CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),COND=(4,LT)
//REXXPGM  EXEC PGM=IKJEFT01                              
//SYSEXEC   DD DSN=librería donde tengo el programa rexx,DISP=SHR               
//ISPPROF   DD DSN=&&PROF,UNIT=SYSDA,SPACE=(TRK,(5,5,5)), 
//             RECFM=FB,LRECL=80                          
//ISPSLIB   DD DISP=SHR,DSN=ISP.SISPSLIB                  
//ISPPLIB   DD DISP=SHR,DSN=ISP.SISPPENU                  
//ISPMLIB   DD DISP=SHR,DSN=ISP.SISPMENU                  
//ISPTLIB   DD DISP=SHR,DSN=ISP.SISPTENU                  
//ISPLOG    DD SYSOUT=*,DCB=(LRECL=125,RECFM=VBA)         
//SYSTSPRT DD  SYSOUT=*,DCB=LRECL=125                     
//SYSPRINT DD  SYSOUT=*                                   
//SYSTSIN  DD  *                                          
  ISPSTART CMD(REXXENT)                                   
/*                               

Espero que os sea útil. Cualquier duda, os leo comentarios :-)

lunes, 26 de abril de 2021

El daily "del revés" (agilecobol)

Hola amigas y amigos del Consultorio Cobol.

En año nuevo tuve una revelación. Esta me sobrevino cuando intenté clasificar su especie... digo...

Bueno, digamos más bien el 2 de enero, porque el 1 no estaba yo en condiciones de revelar nada xd

Estaba preparando una presentación sobre los daily meetings para mis equipos, porque estamos en época de cambios y las dailys no se estaban haciendo bien. Y hacía tiempo que lo sabía pero para cambiar el formato no me valía con decir "ahora lo vamos a hacer así porque lo digo yo". Que es muy de manager viejuno pero ya sabéis que yo soy una moderna.

Así que preparé una especie de taller sobre el daily meeting (porque no somos ágiles, pero hacemos daily desde hace mucho) para compartir mis reflexiones con el equipo y también para que ellas y ellos reflexionasen sobre el tema.

Primero, para desmentir algunos mitos, preparé un kahoot con preguntas sobre el daily meeting, a ver cuánto sabía realmente el equipo sobre lo que era y para qué servía. Si os interesa os lo paso.

Luego preparé una ppt de apoyo para soltar la chapa sobre la daily. 

Y estaba yo en esas cuando iba a empezar a explicar que ya no vamos a ir uno por uno soltando el rollo de las 3 preguntas (que ni Jeff Sutherland lo entiende) sino a hablar de los objetivos de la semana y de las tareas en curso, cuando lo supe: íbamos a hacer el daily "del revés".

A lo Stranger Things. 

Con esto lo iba a petar seguro.


#thisistheway

domingo, 25 de abril de 2021

Curiosidades COBOL

[ACTUALIZADO] Últimas entradas añadidas!

Hola Consultorio COBOL

agradeciendo la enorme generosidad de Tania los invito a la lectura de los articulos de la serie Curiosidades COBOL que desarrollo en LinledIn.

Les comparto sus titulos y links

Saludos

Leonardo

18. Migrando a COBOL 6: Nuevas sentencias, clausulas, limites y posibilidades.

17. Migrando a COBOL 5 y 6: Siguen los EXITos

16. CobSolver II Cálculos de Prestamos

15. CobSolver Motor de Cálculo de Formulas

14. Mix de Curiosidades

13. Chau FILLER Chau Bienvenido cualquier nombre de relleno

12. Programas anidados II Niveles, programas comunes y variables globales

11.Programas anidados Una poderosa feature de COBOL poco conocida

10. Extract and Load: De la góndola de un supermercado a los yacimientos de datos
https://bit.ly/3oSJAcL
Video: https://bit.ly/34b0n2z .

9. Herramientas de Automatización II: De un lector de reportes a un test automatizado
https://bit.ly/36lhq3w
Video: https://bit.ly/39qdT5X

8. Había una vez un Banco que cambio su Core Banking...
https://bit.ly/36DjqDg
Video: https://bit.ly/3qCSblf

7. Optimizando el código: Opciones de compilación
https://bit.ly/3mIHACO

6. Optimizando el código
https://bit.ly/3j8OU8r

5. Ambigüedad, cruel ambigüedad
https://bit.ly/3d3ZSur

4. QuaCOBOL, una herramienta de control de calidad
https://bit.ly/35VDEcH
    4.1 QuaCOBOL, video1
    https://bit.ly/3clE3Gp
    4.2 QuaCOBOL, video2
    https://bit.ly/2FSwScF

3. Control de calidad de código COBOL-CICS-DB2
https://bit.ly/3ho1ShK

2. El más pequeño de los programas es el más charlatán
https://bit.ly/2IOFvqJ

1. Un curioso caso de no cancelación de programas 
https://bit.ly/36VO76T

lunes, 15 de febrero de 2021

Resultados de la encuesta: formación técnica

Hola amigas y amigos del Consultorio Cobol.

Parece que no iba yo tan desencaminada y sí que hay una falta de formación en el mundo cobolero.

Estos son los resultados de la encuesta:

A la pregunta ¿Alguna vez tuviste formación técnica (cobol, jcl, db2, cics...) fuera de la "beca" inicial de cobol?




A la pregunta ¿la formación recibida fue "de calidad"?



A la pregunta ¿te habría ayudado recibir formaciones técnicas?




Teniendo en cuenta que en el mundo COBOL la mayoría no somos informáticos (no tenemos una formación base en programación), parece aún más necesario que haya una continuidad en la formación técnica.

Claro que esto es sólo mi opinión. Me encantaría leer la vuestra en comentarios :-)