Cursos disponibles

El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerí­as de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y haber adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así­ mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas fí­sicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​


La masificación del uso de los computadores y su interconexión en redes constituye la base de la tecnología actual en la cual son explotables las aplicaciones distribuidas. De allí que los conocimientos que permitan desarrollar de manera eficiente aplicaciones distribuidas constituye un pilar esencial en la formación. El propósito de esta asignatura familiarizar al estudiante con conocimientos generales sobre sistemas distribuidos, herramientas y soluciones específicos en el área y con problemas conocidos relacionados con los sistemas distribuidos. 

Al finalizar el curso el estudiante estará en capacidad de:

  • Manejar conceptos básicos relacionados con sistemas distribuidos.

  • Comprender propiedades de los algoritmos distribuidos y establecer comparaciones entre algoritmos distribuidos.

  • Identificar problemas claves en sistemas distribuidos y comprender algoritmos clásicos definidos para resolverlos.

  • Desarrollar algoritmos distribuidos.


El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerías de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y habrá adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​


El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerías de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y habrá adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​

Las aplicaciones web desempeñan un papel vital en todas las organizaciones modernas. Pero, si una organización no prueba y asegura adecuadamente sus aplicaciones web, los adversarios pueden comprometer estas aplicaciones, dañar la funcionalidad de la empresa y robar datos. Las aplicaciones web son actualmente la fuente predominante de vulnerabilidades de software explotadas en ataques en línea en todo el mundo. La mayoría de estos ataques explotan clases simples y fácilmente reparables de vulnerabilidades de seguridad. Desafortunadamente, muchas organizaciones operan bajo la impresión errónea de que un escáner de seguridad de aplicaciones web descubrirá de manera confiable fallas en sus sistemas. Existe una necesidad clara y muy insatisfecha de que todos los programadores web tengan conocimientos de seguridad. También hay una gran escasez mundial de profesionales de la seguridad capaces de evaluar la seguridad de las aplicaciones web.

Este curso proporciona una introducción a la rama de la seguridad de la información denominada Seguridad de Aplicaciones Web que trata específicamente con la seguridad de los sitios web, las aplicaciones web y los servicios web. Se cubren los principales tipos de vulnerabilidades en las aplicaciones web y se introducen las mejores prácticas profesionales actuales en codificación y testing, proporcionando el conocimiento y habilidades primordiales necesarias para desarrollar y evaluar aplicaciones web de manera satisfactoria.

El abordaje de este tema se hace principalmente a través del conocimiento de las principales técnicas que emplean los atacantes para vulnerar los sistemas de las organizaciones. Parte del principio de que para poder realizar una buena defensa, es necesario conocer las amenazas. Este enfoque permite que los estudiantes puedan adentrarse en este campo, y que además de emplear soluciones de escaneo de vulnerabilidades, puedan realizar penetration testing de aplicaciones web.


     La ciencia de la computación es una disciplina que se basa en un elemento tecnológico: el computador. Existe una relación fundamental entre el hardware y diversos aspectos de programación, por ende, para poder escribir software de forma adecuada es muy importante comprender el sistema de computación como un todo. Debido a esto se requiere un dominio de los aspectos teóricos y de los fundamentos tecnológicos involucrados en todo sistema de cómputo. El curso es de carácter teórico-práctico, involucrando a su vez el desarrollo de proyectos y laboratorios que permiten poner en práctica los conocimientos impartidos.

La computación en la nube ayuda a las organizaciones a obtener ahorros de costos y eficiencias sin gastar recursos de capital por adelantado, al tiempo que moderniza y expande sus capacidades de TI. La infraestructura basada en la nube es rápidamente escalable, segura y accesible a través de Internet: se paga solo por lo que usa. Por lo tanto, las empresas de todo el mundo, grandes y pequeñas, se están moviendo hacia soluciones de computación en la nube para satisfacer sus necesidades computacionales, incluido el uso de Infraestructura como servicio (IaaS) y Plataforma como servicio (PaaS). También se ha observado un cambio fundamental del software distribuido de forma masiva para su instalación, al software como servicio (SaaS) en los centros de datos de todo el mundo. Además, proveedores como Amazon, Google y Microsoft han abierto sus centros de datos a terceros al proporcionar servicios de bajo nivel como almacenamiento, computación y ancho de banda. Esta tendencia está creando la necesidad de un nuevo tipo profesional que pueda ser arquitecto empresarial, desarrollador, realizar control de calidad y a la vez ser operativo, alguien que comprenda y pueda utilizar de manera efectiva las tecnologías y soluciones de computación en la nube.

En este curso, los estudiantes estarán expuestos a temas críticos y prácticas actuales de la computación en nube, como los modelos de servicio en la nube (IaaS, PaaS, SaaS); virtualización y cómo se relaciona con la nube; computación elástica; almacenamiento en la nube; redes en la nube; bases de datos en la nube; seguridad en la nube; y arquitectura, desarrollo e implementación de aplicaciones en la nube, factores motivadores, beneficios y desafíos de la nube, problemas de rendimiento y a nivel de sistema, recuperación ante desastres, nubes federadas. El formato de este curso será una mezcla de clases teóricas y demostraciones prácticas, tareas, presentaciones y proyectos que proporcionarán al estudiante una exposición a los principales servicios en la nube, como Amazon Web Services (AWS), Microsoft Azure o Google Compute Engine (GCE). Al completar este curso, los estudiantes tendrán una comprensión más profunda de lo que es la computación en la nube y las diversas tecnologías que la componen, junto con la experiencia práctica de trabajar con al menos un importante proveedor de la nube. Los talleres se harán sobre alguna de las principales infraestructuras de Nube, aprovechando los licenciamientos y acuerdos académicos existentes entre la UCV y proveedores de servicios en la nube.

El objetivo de este curso es ayudar a los estudiantes a comprender esta profunda transformación que está causando Cloud Computing y tecnologías emergentes relacionadas, como la Inteligencia Artificial. Este curso revisará las tecnologías de Cloud Computing que darán forma a nuestro futuro cercano, así como también intentará visualizar en qué dirección nos llevará esta tecnología.

El conocimiento de la algorítmica y la programación es una base fundamental en el estudio de la computación. En este curso se estudian los conceptos fundamentales de la programación así como técnicas para el diseño de algoritmos y su implementación en lenguajes de programación. Se estudian los conceptos fundamentales de algorítmica, tipos de datos, estructuras de control, clases y métodos. El curso es teórico-práctico: junto al conocimiento teórico impartido el estudiante debe demostrar habilidades para la construcción de programas, utilizando un lenguaje de programación real orientados a objetos


Hoy en día  el cambio  tecnológico se han convertido en uno de los elementos claves en el desarrollo económico y social del mundo globalizado, lo cual nos lleva a nuevas formas de organización y de procesamiento de conocimientos, así como la emergencia de nuevos valores en las estructuras, es por ello que a partir de las informática desarrollamos los conceptos de economía digital y tecnología blockchain.


El conocimiento de la algorítmica y la programación es una base fundamental en el estudio de la computación. En este curso se estudian los conceptos fundamentales de la programación así como técnicas para el diseño de algoritmos y su implementación en lenguajes de programación. Se estudian los conceptos fundamentales de algorítmica, tipos de datos, estructuras de control, clases y métodos. El curso es teórico-práctico: junto al conocimiento teórico impartido el estudiante debe demostrar habilidades para la construcción de programas, utilizando un lenguaje de programación real orientados a objetos


Los seres humanos estamos creando y almacenando datos constantemente en cantidades astronómicas (estructurados, no estructurados y semi-estructurados) que tomarían demasiado tiempo y sería muy costoso cargarlos a una base de datos relacional para su análisis. Tampoco pueden ser procesados y analizados utilizando procesos o herramientas tradicionales. Esta explosión de "Grandes Volúmenes de Datos" está transformando la manera en que se conduce una investigación, dado que plantea una nueva forma de abordarlos mediante el uso de técnicas, habilidades y recursos adecuados para su procesamiento, esto debido a la complejidad e intensidad del cómputo necesario.

En este contexto, la Ciencia de Datos es un área interdisciplinaria y tecnológica que utiliza herramientas, métodos y técnicas de solución y optimización, tanto en hardware como en software, que permiten el manejo y procesamiento de Grandes Volúmenes de Datos. Esto se lleva a cabo mediante cómputo intensivo (algoritmos y programas), y manipulando los datos de forma distribuida en nodos de un clúster logrando así un alto paralelismo en el procesamiento. Como consecuencia se obtienen drásticas reducciones de los tiempos de solución sin sacrificar la confiabilidad, integridad y seguridad de los datos.

Python es uno de los lenguajes más populares en el área de Ciencia de Datos. Provee herramientas robustas que dan soporte a todo el pipeline de la Ciencia de Datos. En este curso, el participante debe demostrar habilidades para el uso de librerías en Python usadas para la manipulación y visualización de datos, tales como numpy, pandas, matplotlib y conocimiento de herramientas de machine learning como TensorFlow.