1
Reinicia-t
Empleabilidad juvenil
en el sector de las TIC
COLABORAN:
2
1. CONSIDERACIONES INICIALES
Nos dirigimos a los alumnos, desde el primer minuto del curso, como “miembros del equipo” o
“team members” apartándose claramente del modelo tradicional “alumno – formador”.
El “curso” en sí mismo es un “proyecto”, conformado por otros sub- proyectos (programas
informáticos en última instancia) que deben ser realizados, y para lo que se requiere de trabajo en
equipo y de una formación gradual tanto en aspectos TIC como en otras materias transversales
(trabajo en equipo, gestión de proyectos, control de código con GIT, entre otras).
Por ello, no usamos los términos “alumno / estudiante”, “profesor / formador” ni “curso” sino
“team member”, “project manager / team leader” y “projects”, no al respecto de este documento
sino en su aplicación práctica.
Se expone a los alumnos cuál es su “rol” en el proyecto (“team member”), y el porqué al formador
le “ha tocado” ser el “project manager y team leader” inicialmente. Este rol irá variándose durante
las prácticas en las que cada equipo requerirá de su propio líder, que también irá cambiando.
El objetivo es que los alumnos, desde el primer día, se sientan parte de un equipo en el que todos
deben participar activamente para alcanzar unas metas determinadas: proyectos en los que
deberán trabajar de forma conjunta y dejar de lado sus objetivos personales particulares, de cara a
modular -sin eliminar- la competencia natural que surge entre ellos.
Por su parte, el papel del formador será el de project manager y team leader, cosas que “como
Juniors” que son en el sector, se van a encontrar en el entorno laboral real.
2. OBJETIVOS CLAROS: HITOS DEL PROYECTO GLOBAL
El primer día, se expone a los alumnos que el objetivo final de curso será realizar un programa
informático usando Java y una base de datos.
Se detallan los siguientes proyectos:
• Programa despertador
Con una particularidad especial: se deberá conectar con un servicio en línea (webservice)
para consultar el estado meteorológico de la localidad de origen (y de destino) y, en
función de la previsión (día de lluvia, nieve, etc) adelantar/retrasar la alarma los minutos
que el usuario estime oportunos. En otras palabras, que “nos despierte antes si las
condiciones climáticas son adversas donde nos encontramos (y opcionalmente allí donde
vamos si planeamos un viaje)”. Este proyecto supone un reto a nivel de gestión de
“threads” así como la interpretación de JSON.
• Emulación del programa “Apple iTunes®”
Únicamente para implementar las funciones relacionadas con la reproducción de archivos
MP3. Este proyecto supone un reto a nivel de estructuración de datos.
3
Se expone su existencia y se indica a los alumnos que el objetivo final del curso será desarrollar uno
de estos programas. A pesar de ello, al inicio del curso no se permite todavía decidir cuál es el
proyecto que prefiere cada alumno, debido a que no disponen todavía de los conocimientos
necesarios para evaluarlos, y porque todavía no se han conformado los equipos; y la decisión debe
ser justamente por equipo.
Ambos programas se apoyan en una base de datos para el almacenamiento de música, géneros,
autores, etc y la configuración de las alarmas, según el proyecto seleccionado. Por lo tanto, son
perfectos para poner en práctica todo el material lectivo que se expone a lo largo del curso.
Se usará SQLite para permitir una mayor portabilidad de los programas y, al mismo tiempo,
introducir conceptos como el ORM (usando un micro-framework desarrollado ad-hoc por el
formador) que permitan independizar al programa de la base de datos subyacente.
3. FICHA TÉCNICA
• Fechas de realización: del 30 de noviembre al 5 de febrero (ver calendario Anexo)
• Horario grupo mañana: de 9 a 14 horas
• Número de horas totales: 180
• Horas transversales: 30
• Horas técnicas: 150
• Número de alumnos a incorporar:20
• 5 Módulos formativos:
− C1 – Introducción a la computación y a la programación: computación, lógica,
algorítmica, programación
− C2 – Introducción básica al entorno Java
− C3 – Bases de datos SQL con MySQL (DDL, DML, DCL, normalización)
− C4 – Programación con Java (+UI/UX, Agile/SCRUM, patrones de diseño)
− C5 – Internacionalización de aplicaciones Java. Bases de datos noSQL
4
4. INFRAESTRUCTURA, EQUIPO Y MATERIAL UTILIZADO
a. INFRAESTRUCTURA
• Local propiedad de Fundación APIP ACAM, situado en la calle Roger de Flor, 3 de Valencia,
muy bien ubicado para favorecer el acceso a los alumnos. El local cuenta con conectividad
a Internet
• Aula móvil de Fundación Esplai, con 20 ordenadores portátiles configurados para el uso
específico del curso.
b. RECURSOS DE APOYO
• Formulario en línea.
• Como apoyo a las sesiones presenciales y también al trabajo realizado en otros puntos
(Andalucía) se ha habilitado una plataforma con los contenidos
Ver: http://www.talentolab.es/fit4jobs/
c. EQUIPAMIENTO USADO POR EL FORMADOR
• Equipo informático con Mac OS X, i5, 8Gb de RAM, disco SSD
• Proyector con una resolución de 800x600 pixeles
• Tableta digitalizadora; de cara a evitar el uso de la pizarra estándar siempre que sea
posible
d. EQUIPO USADO POR LOS ALUMNOS
• 20 portátiles equipados con Windows 8.1
Se numeran las máquinas para que cada alumno pueda usar siempre la misma.
e. MÁQUINAS VIRTUALES WINDOWS 7 PARA LAS PRÁCTICAS
De cara a evitar el uso del Sistema Operativo del portátil para realizar las prácticas, y para permitir
también que dos grupos (mañana / tarde) pudieran realizar las mismas operaciones sin interferir
entre ellos (por ejemplo por encontrarse con un programa ya instalado), se opta por la creación de
una máquina virtuale Windows 7.
5
• Una máquina virtual (MV) para cada alumno: máquina virtual Windows 7 recién instalada
y actualizada a la última versión disponible (todos los parches aplicados). Actualizaciones
automáticas desconectadas.
• Ninguna versión de Java instalada
• Carpeta local que contiene todos los instaladores que van a ser usados a lo largo del curso
(para evitar su descarga por parte del alumno). No obstante se les mostrará la página a la
que deben dirigirse para descargarlo ellos.
f. CONEXIÓN A INTERNET
La conexión a Internet es imprescindible para que los alumnos puedan compartir el código fuente
Java desarrollado mediante GIT, para que puedan descargar documentación, conectar con
webservices, etc. Consecuentemente no se trata de algo opcional para la realización del curso sino
más bien algo imprescindible.
g. TRABAJO EN EQUIPO: WHATSAPP® Y GIT®
Se crean grupos de Whatsapp) y se invita a los alumnos a unirse a los mismos.
WhatsApp será el canal usado por el equipo para compartir experiencias y organizarse.
Se crean cuentas GIT para cada alumno dentro de un espacio compartido y gratuito en línea
(https://gitlab.com/) . Se alienta a que el alumno cree, además, su propio espacio GIT para
almacenar su código personal.
h. MATERIAL LECTIVO USADO POR EL FORMADOR
Todo el material usado por el formador será desarrollado “ad-hoc” para este curso, no habiendo
sido usado ningún material de terceros, excepto para realizar algunas citas que han sido
convenientemente referenciadas.
El formador prepara y hace uso de dos tipos de material:
• Tipo presentación
Para ser proyectado, con las pautas de la clase en desarrollo. El resto del material es
espontáneo y se construye a partir de la interacción con los alumnos. Por lo tanto, la
presentación es usada únicamente como guía básica.
Estas presentaciones son usadas en paralelo como material de soporte para el alumno. Por lo
tanto, contienen muchas diapositivas que no son realmente proyectadas por contener mucho
texto.
6
• Tipo manual / “tutorial”
Las clases deben sustentarse sobre una teoría, aunque esta tal vez no sea expuesta
totalmente a los alumnos. No obstante, el formador sí deberá disponer de toda la teoría
que sea requerida para una completa formación del alumno (si este quiere profundizar
posteriormente por su parte).
7
5. CONTENIDOS Y ORGANIZACIÓN EDUCATIVA
a. DESARROLLO DE LAS CLASES
El curso se desarrolla siguiendo una metodología muy enfocada al “learn by doing” a pesar de
resultar imposible durante las primeras sesiones, donde la teoría ocupa la mayor parte del tiempo.
En resumen, las clases son eminentemente prácticas y participativas.
Se fomenta la actitud crítica, el razonamiento y la lógica. El papel del formador es usar la
asertividad para indicar todo aquello que no está bien resuelto en pizarra e invitar al resto de
alumnos a que realicen sus comentarios también de esa forma.
b. MÓDULOS FORMATIVOS
El curso ha tenidos diversos apartados, con especial preponderancia de la parte técnica
FORMACIÓN TRANSVERSAL
A pesar de que existe el punto 2.1.1 del programa destinado a la administración del tiempo,
comunicación efectiva, trabajo en equipo, etc. el formador ha empleado estas técnicas de forma
natural y empírica desde la primera clase.
8
Gracias a esta metodología, el formador considera que el alumno adquirirá gradualmente estos
conocimientos de una forma mucho más efectiva, a pesar de que serán reforzados posteriormente
con las ponencias específicas sobre dichas materias.
El principal problema detectado por el formador es el hecho de que dichas ponencias han sido
programadas para la recta final del curso.
C1 - FUNDAMENTOS DE COMPUTACIÓN Y PROGRAMACIÓN
Evolución de la computación, estructura de computadores, álgebra de Boole, algoritmos,
resolución de problemas lógicos, POO Java, virtualización, entorno Java JVM.
OBJETIVOS:
• Conocimiento del entorno en el que se aplican y en el que van a desarrollar las
competencias digitales adquiridas: computadores físicos y virtuales (JVM)
• Conocimiento de la estructura interna de una computadora (memorias RAM y ROM, CPU -
UC/UAL-, BUS).
• Código máquina – código de alto nivel. Arquitecturas de 16, 32 y 64 bits
• Arquitecturas RISC y CISC
• Algoritmos y ejercicios de lógica: reducción de la complejidad de los problemas en piezas
menores
• Algoritmos de tipo autómata: aprender a “pensar” como una computadora.
• Planteamiento de problemas incompletos: detección de todo aquello que puede hacer
fallar nuestro algoritmo si no analizamos las situaciones más obvias en las que va a
encontrarse
• Separación de responsabilidades / sobre-especialización de los algoritmos. Es importante
que el alumno comprenda el objetivo principal de los algoritmos.
− Plantear el algoritmo que convierte un número a letras y preguntar ¿debe revisar si llega
un valor nulo para evitar que falle? De ser así, ¿qué ocurrirá con el rendimiento del
algoritmo si lo ejecutamos contra una tabla big data que contiene 2.000.000MM de
registros en los que sabemos que todos tienen un número? Explicar por lo tanto que es
mejor que exista un algoritmo numeroALetras() y otro numeroALetrasVerificando(), uno
que compruebe el posible valor nulo y, de ser correcto llame después al otro algoritmo
(que no realiza tal comprobación).
− Explicar entonces que la responsabilidad recae sobre el programador, pues será el que
actuará en función del contexto en el que se desarrolla su programa. Si por ejemplo
permite que a su algoritmo se le llame tras leer valores entrados por un usuario desde el
9
teclado, será él el responsable de asegurarse que se validan los datos puesto que conoce
que su origen es “humano”. Si, por el contrario, los valores que se envían a nuestro
algoritmo sabemos que están ya pre-validados por una regla de la base de datos, no
tiene sentido penalizar el rendimiento.
− Exponer la importancia de estas pequeñas “decisiones” que pueden afectar para bien o
para mal, según el contexto en el que se ejecute el algoritmo: por ejemplo aviónica para
el cálculo en tiempo real frente a una aplicación empresarial en el que el código
resultante de nuestro algoritmo puede afectar a que una operación finita en un sistema
pase a tardar 3 segundos frente a 2 segundos.
• Importancia de la independencia del lenguaje de programación a emplear cuando se
define un algoritmo: resolución de un problema vs implementación en un lenguaje.
• Máquina física vs Máquina virtual
• Introducción básica a la POO (Programación orientada a objetos): conceptos básicos de
clase, objeto, herencia, encapsulamiento y polimorfismo.
• “Command line”
Se hará alusión a todos estos términos y conocimientos durante TODAS las clases de la primera
semana, de cara a que el alumno los adquiera de forma gradual y mediante aplicación práctica
siempre que sea posible.
Por ejemplo, en la clase en la que el formador escenifica a un “autómata” que ordena números,
simula que es la UAL y la UC, a la vez que los datos van siendo almacenados en la memoria y la
comunicación se realiza a través del BUS.
C2 - INICIACIÓN AL MUNDO JAVA
• Qué es la JVM: funcionamiento general, ventajas e inconvenientes
• Diferencias entre Java JRE y JDK. Overview sobre las distintas ediciones de Java (SE, MM,
ME, TV, ...)
• Instalación de Java JDK y resolución de los primeros problemas con este: variables de
entorno no definidas.
• Primeras prácticas de programación usando el JDK y el bloc de notas.
• Instalación de las herramientas de desarrollo NetBeans y Eclipse, programa SquirrelSQL y
preparación entorno para facilitar acceso a los archivos .jar de JDBC para MySQL.
• Instalación de MySQL.
• Repetición de la práctica realizada con el bloc de notas, pero esta vez creando un proyecto
con Eclipse y otro con NetBeans.
10
• Introducción a los tipos de datos básicos (primitivos), Objetos propios del lenguaje Java
(p.Ej. diferencia entre boolean y Boolean), estructuras complejas, vectores/listas, etc.
• Java y el Garbage Collector
C3 - INICIACIÓN A LAS BASES DE DATOS
OBJETIVOS:
Comprender los conceptos de base de datos relacional: tablas (filas y columnas: registros y campos)
y relaciones. Ser capaz de diseñar una base de datos desde cero usando MySQL desde línea de
comandos y el bloc de notas.
En una segunda fase, una vez el alumno es capaz de comprender los conceptos y lidiar con los
errores que se producen al usar DDL escrito de forma manual, se hace uso de herramientas visuales
como MySQL Workbench y SquirrelSQL.
CONTENIDOS:
• Conceptos claros: servidor de base de datos, base de datos, tabla y relación, registros y
campos.
− Se usa Excel, el cual conocen todos los alumnos, como modelo comparativo: libro = base
de datos, hoja = tabla, columna = campo, fila = registro.
• SQL, qué es
• MySQL, qué es
• Instalación de MySQL
• Configuración y acceso al servidor MySQL
• El usuario root
• ¿Por qué no debe usarse root en un entorno de producción?
• Base de datos relacional vs base de datos no relacional (noSQL)
• Concepto de normalización. Uso mínimo de la 3FN
• Aplicación práctica (conceptual) de SQL básico: primeras nociones y reiteración en la
comparación con Excel
• Claves primarias auto-incrementales y UUID. Pros y contras de cada tipo.
• Claves simples y compuestas. Pros y contras de cada tipo.
• Relaciones (1-1, 1-N, N-M)
• Claves foráneas
11
• DDL completo
• Manipulación de datos (DML)
• Usuarios: seguridad (DCL)
• Triggers y eventos “CASCADE”
EJERCICIOS:
• Base de datos para gestionar el proyecto “iTunes” (artistas, canciones, grupos, listas de
reproducción, ...)
• Base de datos para gestionar finanzas personales. Se plantea el problema a resolver y se
permite a los alumnos trabajar en grupos de 4 para definir la BDD.
• Examen práctico
El examen ha sido realmente duro y ha representado un toque de atención para que los alumnos
no se relajaran creyendo que lo que estaban aprendiendo era “extremadamente fácil”.
Hubiera sido conveniente profundizar más en Bases de datos pero la falta de horas lectivas no lo ha
permitido. Se abordan conceptos de BDD al realizar las prácticas al final del curso.
C4 – PROGRAMACIÓN PROFESIONAL USADO JAVA
OBJETIVOS:
Aplicación práctica de todos los conocimientos adquiridos a nivel teórico en los módulos C1, C2 y
C3.
Se induce al alumno a usar, de forma natural desde el inicio, las buenas prácticas a la hora de
programar, siguiendo las convenciones internacionalmente establecidas (camel Case tanto upper
como lower), formateo del código, etc. Se insiste en estos conceptos durante las primeras 7 clases.
A parte de formar al alumno en las competencias del lenguaje Java, se exponen los patrones de
diseño de software más comunes, así como la búsqueda de la “excelencia” en el diseño (gráfico y
uso: UI/UX).
CONTENIDOS:
• Sintaxis básica del lenguaje: palabras reservadas. Aprender el lenguaje en sí mismo implica
memorizar únicamente 48 palabras, muchas de ellas verbos o sustantivos ingleses.
• Buenas prácticas al dar formato y escribir código
• Aplicación de los fundamentos de POO en Java
12
• Uso de los patrones de diseño de software más extendidos: MVC, Singleton, Factory,
Observer, Listener. Sólo mostrado SINGLETON y LISTENER.
• Con independencia de MVC: separación clara de responsabilidades (patrón Facade).
Expuesto pero no aplicado en la práctica.
• UX / UI – Buenas prácticas
• Metodología de desarrollo Agile / SCRUM. Comparación con otras metodologías comunes
como XP (eXtreme Programming).
• Uso de GIT para control de código, trabajo en equipo y publicación de aplicaciones Open
Source
• ASANA (Opcional – Según tiempo disponible)
• Clases abstractas
• Uso de interfaces
• Prácticas continuas
• Proyectos objetivo para la finalización del curso
C5 – AMPLIACIÓN BASES DE DATOS / I18N
• Internacionalización de aplicaciones. NO EJECUTADO.
• SQLLite
• noSQL. NO EJECUTADO.
• PL/SQL avanzado. NO EJECUTADO.
c. PARTICIPACIÓN Y ASISTENCIA
Existe un criterio de asistencia obligatoria, establecido en como mínimo el 80% de las sesiones.
13
d. CONTENIDOS FORMATIVOS TECNOLÓGICOS
En el apartado introductorio se exponían las unidades formativas que, inicialmente, debían
conformar el temario completo de este curso piloto. No obstante, y de forma consensuada con la
institución organizadora del curso, se adaptaron los contenidos a las posibilidades de los alumnos y
al tiempo disponible, dando lugar a las siguientes unidades que son las que se han impartido:
Ud Descripción Horas
C1 Fundamentos de computación y programación (computación, álgebra de
Boole, lógica, algoritmos y estructuras de datos, POO)
15
C2 Iniciación al entorno Java y a la POO (JRE, JDK, JVM, JDBC, …) 5
C3 Introducción a las bases de datos. MySQL (BDD, tablas, claves primarias-
únicas, relaciones 1-1, 1-N, N-M, normalización 3-4FN)
35
C4 Programación profesional con Java, UI/UX, patrones de diseño, control
de versiones con GIT, introducción a SQLite
95
TOTAL 150
Es importante señalar que durante el desarrollo de las unidades formativas indicadas, el formador
introduce material transversal como el trabajo en equipo (metodología Agile / SCRUM), uso de GIT
para control de código fuente, UI/UX, así como otras competencias no asociadas directamente con
el contenido troncal del curso, indispensable o bien para una correcta asimilación de los
contenidos, o bien para potenciar a los alumnos en competencias necesarias para su desarrollo
profesional.
e. CONTENIDOS FORMATIVOS TRANSVERSALES
Tema Horas
Orientación a resultados y a la calidad :: administración del tiempo :: comunicación efectiva y asertiva :: trabajo en equipo
5
Como hacer un buen CV :: preparación entrevista de trabajo :: redes sociales profesionales :: búsqueda de empleo en internet :: marca personal
5
14
ANEXO 1: CONTENIDOS DESARROLLADOS PARA EL CURSO.
Todos estos contenidos están disponibles en la plataforma e-learning:
http://www.talentolab.es/fit4jobs/
DOCUMENTOS GENERALES Y DE PRESENTACIÓN
• Consideraciones iniciales
• Objetivos claros: hitos del proyecto
global
• Equipo básico y máquinas virtuales
• Trabajo en equipo: whatsapp, GIT y
ASANA
• Metodología de trabajo
• Presentación del curso
• Calendario del curso de Barcelona
UNIDADES
• Historia y propósito de la computación.
400 años de historia
• La ventana de Johari
• Fundamentos básicos de computación
• Iniciación a la programación. Algoritmos
y estructuras de datos. lenguajes
• Ejercicios y tareas de la unidad 1/1
• Ejercicios y tareas de la unidad 1/2
• Examen de la unidad 1/1
• Examen de la unidad 1/2
• Enlaces para aprender más
• Instalación del entorno de programación
• Bases de datos 1
• Bases de datos 2
• Bases de datos 3
• Bases de datos 4
• Bases de datos 5
• Bases de datos 6
• Bases de datos 7
• Bases de datos 8
• Examen Bases de Datos
• Ficheros complementarios
• El modelo relacional. Fundamentos de
las bases de datos
• Control del código fuente: control de
versiones con GIT
• Diseño de software: UI / UX
• Metodologías de programación: AGILE >
SCRUM
• Java 1
• Java 2
• Java 3
• Java 4
• Java 5
• Java 6
• Java 7
• Java 8
• Java 9
• Glosario de términos
• Ficheros de recursos para las tareas Java
• Librerias Java
• SQlit
ANEXO 2: CALENDARIO DEL CURSO
L M X J V L M X J V L M X J V L M X J V L M X J
NOV/DIC 30 1 2 3 4 7 8 9 10 11 14 15 16 17 18 21 22 23 24 25 28 29 30 31
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
C1 C1 C1 C2 C3 C3 C3 C3 C3 C3 C3 C4 C4 C4 C4 C4
EX BS EX
V L M X J V L M X J V L M X J V L M X J V
ENE 1 4 5 6 7 8 11 12 13 14 15 18 19 20 21 22 25 26 27 28 29
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
A B C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4
BS PR PR PR PR PR PR PR PR PR
L M X J V
FEB 1 2 3 4 5
5 5 5
D D D
EV EV EV CLAUSURA
A Orientación a resultados y a la calidad :: administración del tiempo :: comunicación efectiva y asertiva :: trabajo en equipo
B Como hacer un buen CV :: preparación entrevista de trabajo :: redes sociales profesionales :: búsqueda de empleo en internet :: marca personal / identidad digital
C Competencias digitales
C1 Fundamentos de computación y programación (computación, álgebra de boole, lógica, algoritmos y estructuras de datos, POO)
C2 Iniciación al entorno Java (JRE, JDK, JVM, JDBC, …)
C3 Introducción a las bases de datos. MySQL (bdd, tablas, claves primarias-únicas, relaciones 1-1, 1-N, N-M, normalización 3-4FN)
C4 Programación profesional con Java, UI/UX, patrones de diseño, control de versiones con GIT, introducción a SQLite
D Piensa, diseña, presenta!
EX Examen (previo resumen / tutoría)