Programación profesional desde cero
Todo lo que un programador moderno debería saber y dominar
Description
Este curso es un curso de Programación desde cero, y resaltamos la palabra programación porque no es un curso de un lenguaje concreto, sino que es un entrenamiento diseñado para forjar a un programador profesional desde la nada absoluta hasta la maestría.
Pasarás de forma progresiva por los distintos paradigmas de programación, aprendiendo:
Programación estructurada
Programación modular
Memoria dinámica
Programación Orientada a Objetos
Programación de Interfaces Gráficas de Usuario
Bases de Datos SQL
A través de este curso el estudiante desarrollará varios proyectos, diseñará sus propios programas, resolverá problemas complejos con pocas herramientas, aprenderá a pensar y a dividir grandes retos en pequeñas partes. Aprenderá también la teoría profunda que todo programador necesita hoy día y la pondrá en práctica inmediatamente a través de los ejercicios y proyectos planteados.
El curso se divide en 5 módulos extremadamente poderosos, cada uno de los cuales extiende y amplifica al módulo anterior. En concreto:
=== Módulo 1: Programación estructurada ===
Un curso de programación en sí mismo, ya que en él el estudiante conocerá todas las herramientas esenciales para crear programas en cualquier lenguaje. Los conceptos son dados de tal forma que el estudiante podrá aplicarlos en cualquier lenguaje moderno a su elección. Los temas que se darán son:
Salida estándar de datos
Entrada estándar
Definición de variables
Tipos primitivos de datos
Tipos estructurados de datos
Diagramas de flujo
Secuencia y selección (IF)
Repetición iterativa (FOR)
Repetición condicional (WHLE y REPEAT - DO...WHILE)
Subrangos
Arreglos lineales estáticos
Arreglos lineales dinámicos
Arreglos bidimensionales
Depurador y ejecución paso a paso
Enumerados y registros
Procedimientos y funciones
Alcance de identificadores (locales y globales)
Pasaje de parámetros por valor (copia) y por referencia (alias)
Archivos de texto y archivos tipados
Proyectos finales
=== Módulo 2: Memoria dinámica y Tipos Abstractos de datos===
Aquí el curso comienza a profundizar en conceptos que muchos programadores desconocen o no dominan (como quienes aprenden Java como primer lenguaje): los punteros. A través de esta herramienta el programador podrá comenzar a crear programas que gestionen la memoria RAM, enfrentándose a los problemas y complejidades que ésto conlleva.
Los Tipos Abstractos de Datos (TADs) introducen todo un concepto nuevo de programación: dividir el programa en módulos individuales y trabajar por separado con cada uno. De este modo el estudiante aprenderá a abstraer datos y a modularizar sus programas, todo lo cual es la base fundamental de la Programación Orientada a Objetos que posteriormente será tratada en profundidad.
El tipo puntero
Solicitud de memoria
Liberación de memoria
Alias
Reprogramación de proyectos a memoria dinámica
Modularización de programas
Creación de unidades
Definición de tipos abstractos
Implementación de operaciones
Uso de TADs en diferentes sistemas
Linkedición
Listas encadenadas simples
Listas doblemente encadenadas
Listas circulares
Colas
Pilas
TADs personalizados
Reprogramación de proyectos usando TADs
=== Módulo 3: Recursividad y el TAD Árbol binario===
Una herramienta muy poderosa y a la vez delicada. El estudiante aprenderá a utilizarla, conocerá sus ventajas y desventajas, entenderá su diferencia con la repetición iterativa, y comprenderá cómo resolver problemas complejos con ella.
El estudiante además conocerá cómo crear una estructura arborescente a través del uso de punteros, y cómo esta estructura resulta útil para ciertos casos. Es una herramienta muy poderosa que no todo programador domina. Siendo una estructura recursiva, se une perfectamente con la recursividad.
Qué es la recursividad
Diferencia entre recursividad e iteración
Recursividad en listas lineales
Recursividad en matrices
Reprogramación de proyectos usando recursividad
Árbol binario de búsqueda
Árbol general
Estructuras arborescentes
Caso de estudio
Proyecto
=== Módulo 4: Programación Orientada a Objetos ===
El estudiante aplicará ahora todos sus conocimientos para aprender este nuevo paradigma y comenzar a ver las estructuras de los programas como objetos. De este modo logrará modularizar aún más su código y comenzar a diseñar programas de forma más rápida y eficiente.
Teoría de objetos
Clases
Creación y destrucción de objetos
Herencia
Polimorfismo
Casteo
Clases abstractas e interfaces
Bloques try y lanzamiento de excepciones
Beans
Diseño básico de software
Bases de UML
Proyectos finales
=== Módulo 5: Interfaces gráficas de usuario ===
Todo lo aprendido en el curso le permitirá al estudiante comprender cómo crear interfaces gráficas de usuario y utilizarlas de forma inteligente, ya que éstas, en cualquier lenguaje moderno, están diseñadas con Objetos (POO). De esta manera el estudiante aprenderá a utilizar la librería LCL de Lazarus, que le permitirá aprender las bases de la creación de interfaces gráficas, manejo de eventos y control de errores.
Creación manual de interfaces y componentes
Creación gráfica mediante el entorno de desarrollo
Ejemplos y aplicaciones
Reprogramación de proyectos para crear interfaces gráficas
Proyecto final
=== Módulo 6: Bases de datos MySQL y SQLite ===
Pasaremos a un punto bien distinto de la programación, ya que el estudiante ahora aprenderá a usar dos herramientas concretas de bases de datos, que es algo que va más allá de la programación en sí pero que a la vez es super necesario.
Conexión de bases de datos a un programa
Análisis y diseño de persistencia
Comandos SQL por consola
Herramientas gráficas MySQL Workbench y SQLite Studio
De tablas a objetos: mapeo de datos
Mantenimiento de bases de datos
What You Will Learn!
- Programación de proyectos complejos: A lo largo del curso tendrás que implementar y desarrollar diferentes proyectos, que te permitirán entrenar lo aprendido.
- Entorno de Desarrollo Integrado: Cómo utilizar un IDE moderno para comenzar a desempeñarte en cualquier tecnología de desarrollo de software.
- Entrada y salida de datos: Aprenderás a mostrar información en pantalla, primero en consola y luego en ventanas, así como a capturarla y procesarla.
- Variables y tipos de datos: Conocerás qué son las variables y cómo se vinculan con los tipos de datos, tanto los primitivos como los definidos manualmente..
- Constantes: Aprenderás a definir valores que no cambiarán a lo largo de la ejecución de tu programa, siendo éstas muy útiles para sistematizar tareas.
- Toma de decisiones: El uso de sentencias IF te permitirá lograr que tus programas tomen distintos caminos según lo que va ocurriendo.
- Condiciones booleanas: Definir las formas en que tu programa evalúa cada situación es una tarea compleja e importante. Aprenderás a hacerlo de forma correcta.
- Iteración FOR: Conocerás la sentencia FOR y su uso para repetir tareas dentro de un bloque de código, un número de veces específico.
- Iteración condicional: Sabrás definir bloques de código que deben repetirse un número de veces indefinido, dependiendo esto de lo que va ocurriendo.
- Funciones y procedimientos: Aprenderás a dividir tus programas en bloques de código que luego podrás invocar, dividiendo problemas en tareas más pequeñas.
- Alcance de identificadores: Comprenderás cómo los nombres que usas tienen diferentes alcances según donde los defines, y cómo esto afecta a tu código.
- Estructuras de datos lineales: Aprenderás a usar diferentes estructuras para solucionar tus problemas y crear proyectos.
- Modularización: Aprenderás a dividir grandes programas en módulos independientes que luego encajarán en el lienzo final creando algo único.
- Creación de librerías: Comprenderás cómo reutilizar código ya creado para no tener que reescribir cada cosa, creando tus propias librerías.
- Archivos: Podrás hacer que tus programas creen archivos de texto plano (TXT), así como también definir tu propio tipo de archivos.
- Punteros: Aprenderás a dominar el uso de la memoria, crear nuevos datos dinámicamente y liberarlos cuando ya no los necesitas.
- Tipos Abstractos de Datos: Comprenderás que son los TADs, aprenderás a definir y crear los tuyos y te diferenciarás del resto de programadores.
- Listas Enlazadas: Trabajarás con la estructura dinámica LinkedList, extremadamente habitual en todo lenguaje.
- Colas y Pilas: Aprenderás a crear estructuras dinámicas utilizando el modelo de Cola (Queue) y Pila (Stack).
- Árboles binarios de búsqueda y generales: Conocerás como crear estructuras arborescentes dinámicamente y usarlas para hacer que tus programas sean eficientes.
- Definición y creación de Objetos: Aprenderás a definir clases (class) de objetos e instanciarlos, dando un salto cuántico en tu forma de programar.
- Herencia y Polimorfismo: Conocerás cómo utilizar estas cualidades de la POO a tu favor para agilizar tu desarrollo y reutilizar mucho mejor tu código.
- Casteo: Sabrás cambiar el tipo de datos de tus objetos de forma dinámica durante la ejecución de tu software.
- Interfaces Gráficas de Usuario: Será en este punto en el que aprenderás a crear las tuyas propias y hacerlas funcionar.
- Diseño de Software: Conocerás las bases para diseñar un software de porte pequeño o mediano (más de 10000 líneas), incluso grande, desde cero.
- Bases de datos SQL: Aprenderás a usar, crear y gestionar bases de datos relacionales basadas en el lenguaje SQL. Nos basaremos en MySQL y SQLite.
- Patrones de Diseño: Aprenderás, por ejemplo el patrón SINGLETON, MVC, Capas, entre otros.
- Codificarás como si no hubiera un mañana: Tendrás que hacer funcionar muchos proyectos completos y entregar tu trabajo.
- El doble de horas: La práctica del curso será intensiva, implicando horas y horas de trabajo y desarrollo de software, como debe ser.
Who Should Attend!
- Quién no tenga conocimientos de programación y quiera aprender sin inconvenientes.
- Toda persona que quiera aprender a programar profesionalmente empezando desde cero.
- Quién ya tenga conocimientos de programación pero quiera profundizar y forjar bases sólidas.
- Cualquier persona que desee expandir sus conocimientos previos sobre programación.
- Todo programador que desee convertirse en profesional.