Bienvenidos a este nuevo capítulo de este Curso Gratis de Programación #3 Paradigmas de Programación. Un Paradigma de programación es una Teoría o conjunto de teorías cuyo núcleo central se acepta sin cuestionar y que suministra la base y modelo para resolver problemas y avanzar en el conocimiento.

Índice

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Paradigma de programación

Define un modelo o patrón con reglas y pautas que todo desarrollador debe seguir para resolver una situación problemática. La palabra Paradigma no tiene una relación directa con la programación. Existen numerosos paradigmas de programación: modular, procedimental, estructurado, orientado a eventos, a objetos, etcétera. Son más de 800 paradigmas de programación. Los paradigmas de programación son modelos para resolver problemas comunes con nuestro código. Son caminos, guías, reglas, teorías y fundamentos que agilizan nuestro desarrollo y evitan que reinventemos la rueda. Para tener un paradigma, debemos tener un problema.

El problema de venir a la universidad. Unos vendrán caminando, otros en auto y alguno a caballo. No todos toman el mismo camino. Lo mismo es aplicable para bañarse o para servir un vaso de agua. Las formas son los paradigmas, Cada forma de resolver un problema es un paradigma. Si la forma de solucionar algo facilita las cosas, se pule, se detalla y documenta para que sea conocido como un paradigma. Así se puede publicar así si a otras personas se le presenta ese problema sepan que lo pueden resolver aplicando estas técnicas, procedimientos, tecnologías filosofía y metodologías.

Algo muy común en los paradigmas es que tienen problemas similares, así que no sabes cómo resolver un problema, puedes buscar un problema similar al tuyo y ver que sirve de ese planteamiento de solución y en base a eso se puede modificar algo y crear un paradigma similar. No todos los lenguajes te permiten programar con cualquier paradigma. Algunos lenguajes no soportan los paradigmas más nuevos. Pero también hay lenguajes modernos que soportan varios paradigmas simultáneamente. Esto abre un mundo gigante de posibilidades para aprovechar lo mejor de cada mundo. De acuerdo con el estilo de programación, podemos clasificar los lenguajes en las siguientes categorías:

¿Qué es un paradigma de programación?

Es un conjunto de métodos sistemáticos aplicables en el diseños de programas para resolver problemas. Las principales finalidades son:

  • Formular programas
  • Estructurar programas
  • Paradigmas de programación
  • Clasificación de lenguajes Basado en sus características y existen lenguajes multiparadigma.
  • Estilo de programación Por su forma de abordar un problema o herramientas utilizadas.

¿Qué significa tener un  paradigma?

  • Prohibir o limitar  ciertas acciones:
  • Efectos colaterales.
  • Uso de goto.

Imperativo: (Se almacena en memoria principal)

Conjunto de instrucciones que la computadora debe ejecutar. Estas le indican a la computadora cómo debe realizarse una tarea mediante un algoritmo. se hace énfasis en cómo debe hacerse dicha tarea y no en el porqué de su realización.

Es aquella que nos dice lo que vamos a hacer paso por paso, como si siguiéramos la receta para preparar nuestra comida favorita. Es decir en el código vas describiendo paso por paso todo lo que hará tu programa. Quieres sumar 2 números. Tomas una variable a y b, las sumas y las guardas en otra variable. Es común definir las entradas, salidas u pasos a seguir. Le damos el guion completo.

Son aquellos lenguajes, que basan su funcionamiento en un conjunto de instrucciones secuenciales, las cuales, al ejecutarse, van alterando las regiones de memoria donde residen todos los valores de las variables involucradas en el problema que se plantea resolver. Es decir, se cambia progresivamente el estado del sistema, hasta alcanzar la solución del problema. Como escribirías un problema que te diga si 2 personas son primos? Seria complejo.

Programación Estructurada:

(secuencial) las instrucciones van de arriba hacia abajo, no tenemos que abstraer cosas complejas, simplemente damos ordenes una tras otra.

Procedimental:

orientado a objetos: trabaja con unidades lógicas, denominadas objetos, que se interrelacionan entre sí. Estos objetos contienen información y son los responsables de ejecutar las funciones necesarias para resolver los problemas. Pasamos de tener un código de arriba hacia abajo en el que las funcionalidades están mezcladas y son difíciles de separar o escalar, a una programación en la que tenemos los elementos (Objetos) que tienen características y funciones.

La programación imperativa 

consiste en explicar muy bien cómo funciona nuestro código. Las instrucciones de nuestro programa deben ser bastante explícitas. El “cómo” realizamos cada paso del algoritmo debe ser muy claro. si queremos crear imperativamente una lista de números del 1 al 10, podemos crear una lista vacía, una variable contadora y agregar un elemento a la lista en cada iteración de un ciclo while.

list = []
count = 1

while i < 10:
    list.append(i)

Características del Paradigma Imperativo

  • Los programas dan solución al problema por medio de instrucciones
  • Se define por el cambio de las variables al ejecutar las intrucciones
  • Se basa en una secuencia finita de comandos una tras otra.
  • Contienen instrucciones que indican al computador cómo realizar una tarea.
  • Su referencia es con variables
  • Los datos utilizados se almacenan en la memoria principal
  • Podemos subdividir la Programación Imperativa en:

Estructurado: 

Consiste en el uso de estructuras jerárquicas de flujo con el fin de  mejorar la claridad de los programas y reducir el tiempo de  desarrollo.

En la programación estructurada se utilizan únicamente tres tipos de estructuras:

  • Secuencial
  • Selección
  • Iteración

Modular:

Un módulo es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y algunos necesitan de otros para poder operar.

  • Entrada-Prcceso-Salida
  • Divide y vencerás (top-down): Técnica de refinamiento sucesivo o análisis descendente.
  • Procedimientos y funciones: Son subprogramas (submódulos)
  • Por procedimientos
  • Orientado a objetos
  • Resumen del Paradigma imperativo
  • Órdenes directas de qué hacer.
  • Enfocado al “cómo”.
  • Instrucciones paso a paso.

Características del lenguaje imperativo

  • Estructuras de control
  • Entradas/Salidas
  • Manejo de errores y excepciones
  • Abstracción de procedimientos
  • Expresiones y asignación
  • Soporte para estructuras de datos

Ejemplo de código:

READ(x);

fac := 1 ;

for i = 1 to x

{

fac := fac * i ;

}

WRITELN(fac);

Ejemplo donde se utiliza:

  • Ada
  • Cobol
  • c
  • c++
  • c#
  • java
  • Modula-2
  • Fortran
  • Pascal
  • basic

Declarativo:

le dices al programa lo que tiene que hacer, no sabes cómo funciona pero el programa lo hace. cuando haces la consulta de ventas en SQL, no sabes que hizo el programador porque por debajo ya existen métodos y funciones que lo hacen.

Cómo saber si 2 personas son primos? Tendríamos que saber si uno de sus padres son hermanos. Creamos una base de conocimiento. le damos información. No escribimos el algoritmo que dicte el camino a seguir, le pasamos instrucciones.

En este paradigma, más que el ¿cómo? desarrollar paso a paso un proceso, nos interesa el ¿qué? deseamos obtener a través del programa.

SQL:

sólo en los resultados que van a ser obtenidos, dejándole al traductor la tarea de cómo llegar a ellos y presentárnoslos.[SANDERS-PRICE 02]

SELECT * FROM alumnos WHERE sexo = “M” ORDER BY edad

Dentro de este paradigma, se encuentran dos estilos distintos de programación, cada uno de los cuales posee su propia lógica.

Contrario al paradigma imperativo, la programación declarativa, prioriza la claridad del resultado por encima que la claridad del paso a paso.

Siguiendo el ejemplo anterior, para crear una lista del 1 al 10, no definiríamos explícitamente el paso a paso de agregar un número a la lista en cada iteración de algún ciclo. Más bien, podemos utilizar una función range que agregue la cantidad de números que necesitemos.

list(range(1, 10))

Ninguno de los dos bloques de código es mejor que el anterior. Simplemente llegan a la misma solución siguiendo diferentes paradigmas.

  • Funcional
  • Lógico
  • Matemático
  • Reactivo
  • Resumen del Paradigma declarativo
  • Se enfoca en el resultado.
  • Reduce o elimina efectos colaterales.

Ejemplo donde se utiliza:

Prolog, LISP, Haskell, SQL, Elixir, XPath, Regex, etc.

Funcional:

Se basa en la aplicación de funciones matemáticas y la composición entre ellas, a diferencia de los cambios de estado que define el lenguaje imperativo.

También divide al sistema en varios pedazos, cada pedazo (función) hace una sola cosa como multiplicar un número, solicitar un dato, etc.

Las bases vienen del cálculo lambda, Fuerte base matemática.

Las variables no tienen estados. Son inmutables. Los programas se estructuran componiendo expresiones que serán evaluadas como funciones.

Se programas sin ciclos. Sin for, while, do while. Los principios son similares al cálculo lambda:  la conversión y la reducción. No es fácil de ver desde el punto de vista matemático.

El ambiente de ejecución asocia valores con nombres.  El valor de una expresión depende del valor de sus sub expresiones si las tiene. La semántica limpia es una característica clave.

Las operaciones usan memoria en el momento necesario y cuando se vuelve inaccesible o no referencia se libera de forma automática. Las funciones son valores de primera clase, tienen la misma jerarquía que cualquier otro valor. Las funciones puede ser el valor de una expresión y se puede pasar como una estructura de datos o como un argumento. 

Son lenguajes basados en funciones, las cuales se representan mediante expresiones, que nos permiten obtener ciertos resultados a partir de una serie de argumentos

De hecho las expresiones están formadas por un conjunto de términos, que a su vez pueden encapsular otras expresiones, para con la evaluación de todas ellas, llegar a la solución deseada.

Para describir la idea, retomaremos el ejemplo del factorial escrito en el lenguaje funcional Haskell.

fac :: Integer -> Integer

fac 0 = 1

fac x = x * fac (x-1)

Lenguajes y ejemplos

  • LISP
  • Scheme
  • Clojure
  • Racket
  • Erlang
  • Haskell
  • ERLANG

Este Paradigma utiliza funciones como “ciudadanas  de primera clase”. Puede crear funciones de orden  superior.  Prioriza el uso de recursividad y HOF para resolver  problemas. Una función puede recibir y dar salidas a otros  datos como resultado, incluyendo a otras funciones.  Se busca eliminar o reducir los efectos secundarios. Origen: Durante los 30 Alonzo Church desarrolla el cálculo lambda.  Alan Turing demuestra que este es equivalente a las máquinas de Turing.  A finales de los 50 se desarrolla LISP, implementando la notación lambda de Church.

Funciones: Relación entre dos conjuntos  que asigna a cada elemento  del primero un elemento  del segundo o ninguno.

¿Qué es una función?  Un tipo de dato u objeto que toma un valor “X” y genera un valor “Y”.  Puede o no devolver un resultado.

  • f(x) = X + 3
  • f(x) = X^2 + 3

Ciudadanas de primera clase: Son reconocidas por el  lenguaje para utilizarse  cómo un tipo de dato y  en cualquier parte del  programa.

Funciones de orden superior

  • Función que puede:
  • Tomar una o más  funciones como parámetro o;
  • Retorna un función cómo salida.

Las Funciones puras

  • Son determinísticas.
  • Un valor de entrada da un solo valor de salida.
  • No genera efectos secundarios.
  • No incluye funciones impuras.

Funciones lambda

  • Función anónima.
  • Comportamiento de uso único.
  • Contexto específico o corto tiempo.
  • Simplicidad.

Efectos secundarios (side effects)

Forma en que alguien  o algo se comporta ante  un determinado estímulo.

  • Cambios observables
  • Estado de la aplicación.
  • Valores en datos.
  • Modificación de archivos.
  • Etc.

Las funciones son ciudadanas de primera clase y busca reducir los efectos colaterales. La recursividad y funciones de alto orden son prioridad para resolver problemas.

  • Lisp
  • Scheme
  • Clojure
  • Erlang
  • Haskell
  • F#

Programación Lógica

Paradigma declarativo que expresa los  objetivos como una colección de afirmaciones o  reglas acerca de los resultados y restricciones  en lógica matemática. aplica reglas lógicas para que se pueda llegar a ciertas conclusiones luego de utilizar razonamiento formal. Los objetos son hechos. Se intenta llegar a la solución de un problema mediante la comprobación de la veracidad o falsedad de un conjunto de expresiones.

  • Subconjunto de cálculos de predicados
  • Relación de elementos
  • Trata de resolver problemas de lógica.
  • Uso de hechos y relaciones para representar información
  • Las consultas son claves
  • Programador: proporcionar reglas y hechos
  • El lenguaje solo se encarga de hacer las deducciones
  • El predicado especifica la relación que existe entre los argumentos del mismo.

Paridad: número de argumentos a los que se aplica el predicado. Sirve para representar cualquier cosa que sucede en el mundo real o una regla que nos permites deducir los hechos que sucede.

Lógica: son hechos y reglas para representar el conocimiento

Control: deducción lógica para dar respuestas

Regla inferencia lógica que deduce nuevo conocimiento. Todos los seres humanos mueren

Hecho: clausula o proposición cierta o falsa. José es un ser humano

Consulta: se especifica el problema. José va a morir?

Características:

  • Visión lógica
  • Recursión
  • Unificación de términos
  • Mecanismos de inferencias automáticos

Campos en los que se aplica:

  • Reconocimiento de lenguaje
  • Demostración de teoremas
  • Inteligencia artificial
  • Sistemas de información
  • Sistemas expertos

Este tipo de lenguajes se basan en el cálculo de predicados, la cual es una teoría matemática que permite entre otras cosas, lograr que un ordenador basándose en un conjunto de hechos y de reglas lógicas, pueda derivar en soluciones inteligentes. El mismo ejemplo del factorial, se vería de la siguiente manera, escrito en PROLOG.

factorial (0, 1)

factorial (X, Fac) :- Y is X-1, fac(Y, F2), Fac is F2 * X .

Áreas de aplicación

  • NLP
  • Recuperación de información en BBDD
  • Aplicaciones matemáticas
  • Cláusula de Horn
  • Preposiciones definidas por predicados.

h = Hecho/Head of the rule

p = Predicado/Body

Ejemplo de cláusula de Horn

nevando(C) lluvia(C), frío(C)

Es verdadero que está nevando en la ciudad “C” si es cierto que llueve y hace frío simultáneamente.

Origen : Cordell Green propuso el uso de cláusulas en programas a finales de los 60.  Prolog impulsó este paradigma.

Lenguajes y ejemplos

  • Prolog
  • ALF
  • Fril
  • Mercury
  • Oz
  • Visual Prolog
  • XSB

Programación Reactiva: observamos cambios en un flujo de datos, como en un chat en vivo que recibe cientos de comentarios por segundo. lo que hace es observar estos flujos de datos y cuando estos cambian hacemos algo.

Paradigma WEB: tan usado como el POO tiene que ver con el navegador e internet. Es de los mas complejos que existen. Tiene un crecimiento muy rápido y muy cambiante. Tiene el lado del cliente y del lado del servidor. Es mejor ser especialistas que todólogo.

Tecnologías

Del lado del cliente – Front end:

  • HTML 5
  • CSS 3
  • Js
  • JQuery
  • Angular
  • React
  • Ember
  • Backbone

Del lado del Servidor – Back end:

  • PHP
  • Yii
  • Cake
  • Laravel
  • Symphony
  • Zend
  • Java
  • Spring
  • Ruby
  • Ruby on Rails
  • Python
  • Django
  • Los framework. Siempre utilizan el paradigma OO pero orientado al Paradigma WEB
  • Las bases de datos
  • SQL
  • NoSQL
  • ORACLE

Paradigma Cliente -Servidor:

Del lado del cliente: Están en el navegador. HTML. CSS, Js
Del lado del Servidor: Están en el servidor. Bases de datos, Java, PHP, Python

un proyecto web utiliza de 3 a 5 paradigmas de programación solo para realizar un proyecto. Se combinan dependiendo las necesidades.

Hay lenguajes de programación multiparadigma como Python que soporta POO, Estructurado y funciona, y si se usa con Django también sirve para web

Facebook es una de los mayores sistemas multiparadigmas

Orientados a Eventos:

  • Sucesos
  • Administrador de eventos
  • usuario

Programación dirigida por eventos (event-driven)

No controla la secuencia de ejecuciones,  reacciona a los sucesos ocurridos.  Generalmente los programas corren  indefinidamente integrando manejadores de  eventos (event handlers).

  • Java
  • JavaScript
  • C#
  • Python
  • Eventos
  • Clicks
  • Teclas
  • Sensores
  • Mensajes
  • Triggers

Casos de aplicación

  • GUIs
  • Aplicaciones web
  • Sistemas de booking
  • Sistemas de alarmas
  • Robótica
  • Videojuegos

Lenguajes y ejemplos

  • Java
  • JavaScript
  • Librerías/frameworks de GUI
  • JavaFX
  • React.js
  • PyQT

Prácticamente cualquier lenguaje orientado a objetos

Programación concurrente

Coincidencia, concurso simultáneo de varias  circunstancias.  ¿Qué es la concurrencia?  La capacidad de un programa, algoritmo o problema para tener dos o más contextos de ejecución divididos, ya sea en procesadores o hilos.

Estados de un hilo

  • Creado: no está listo para correr.
  • Ejecutable/listo: espera para ejecutarse.
  • Ejecutando: se ejecuta en el procesador.
  • Bloqueado: espera a entrar al código que requiere acceso al recurso compartido o abandona el procesador.
  • Terminado: se ha detenido y no puede reiniciarse.
  • Sección crítica del hilo: Sección de código que requiere acceso exclusivo a una variable compartida.

Comunicación entre hilos

  • Acceso exclusivo  a un recurso  compartido.
  • Intercambiar  información  con otro hilo

Problemas de concurrencia

Carreras (critical races): Sucede cuando dos o más hilos desean acceder a un recurso lo más pronto posible. Podemos ver este ejemplo, tenemos una variable C, inicializamos en 0, pero después en alguna parte del código a C, le asignamos el valor de C + 1, entonces un hilo llegará primero y al ver que vale 0, le agregará el valor de 1, almacena ese dato y ahora C vale 1.

Pero sí otro hilo llega después, pensará que C vale 1, entonces añadirá otro 1, almacenará ese dato y entonces C vale 2. Esto puede ser un problema en un sistema automatizado de dosificación de medicamentos. Sí el sistema es concurrente, ¿Entonces que hará? ¿Le dará una dosis o dos dosis? ¿Cómo se resuelve?.

C = C+1

1 Carga: c

2 Agrega: 1

3 Almacena: c

4 c=1II2

Puntos muertos (deadlock)

Ocurre cuando un hilo espera por un evento que nunca sucederá.

Estrategias para evitar puntos muertos

  • Los hilos deben tener derechos exclusivos a los recursos.
  • Los hilos deben contener algunos recursos mientras esperan otros.
  • Los recursos no se pueden eliminar de los hilos en espera.
  • Existe una cadena circular de hilos en las que cada uno contiene uno o más recursos del siguiente hilo.

El problema plantea que hay una mesa redonda donde hay 5filósofos que están conversando, frente a ellos hay un plato de comida, a su derecha y a su izquierda, hay otros filósofos y hay un palillo chino a la derecha y otro a la izquierda, para comer se necesitan ambos palillos chinos, eso significa que habrá una persona que no comerá. Hay muchas formas de abordar el problema, pero esas soluciones pueden dar otros problemas, podría ser un sistema de turnos, pero entonces algunos se quedarían esperando hasta que la comida esté fría o tenga mucha hambre.

Podríamos hacer que se alternen los turnos de comida. Son 5 filósofos son 5 palillos y se sabe que se comen con 2 palillos por persona así que llegamos a la conclusión que 2.5 palillos van a ser utilizado(para efectos prácticos me voy a limitar a usar numero naturales) y sabiendo que 0.5 = 1 palillo, lo descartamos ya que no se puede comer con un palillo además, a cada filosofo le vamos a asignar un nombre al filosofo 1 ” f1 ” al filosofo 2 ” f2 ” y así sucesivamente hasta llegar a 5.

Teniendo esto como base pasemos a darle forma

Primero f1 y f2 van a ser los primeros en comer, ya que seria injusto dejar a f3 y a f4 esperando mucho tiempo vamos a asignarle que f1 y f2 van de dos a tres mordidas siempre y cuando las mordida vayan a dar sean de la mis cantidad o sea, si f1 muerde 2 veces f2 morderá 2 veces, si f2 muerde 3 veces f1 morderá tres veces.

Ahora supongamos que le dieron ” x ” mordidas (3 >= x >=2 ) entonces ahora le toca a f3 y a f4 los cuales van a heredar las mismas funciones de f1 y f2 y solo falta f5, Aquí tenemos un problema ya que para que sea todo parejo necesito que f3 o f4 sedan sus palillos pero f5 solo puede tener 1par por ende quedaría 1par no hay problema pero no el lo mas optimo por eso f4 va a dar sus palillos a f5 y 3 va dar sus palillos a f1 o f2 para efectos prácticos digamos que a f1 entonces ya no quedan palillos desperdiciados.

Ahora vamos a hacer un ciclo

ya que f1 y f5 ya comieron solo quedan f2 ,f3 y f4 dándole prioridad a f2 ya que es el que a pasado mas tiempo sin comer por ende f5 da su palillos a f2 y f1 le devuelve el favor y le da sus palillos a f3 ahora a que f2 y f3 ya comieron faltan f1 f4 y f5 dándole prioridad a f4 porque es el que a pasado mas tiempo sin comer y ya que f2 quiere devolverle el favor a f5 se los da a el y así sucesivamente dándole siempre prioridad al que a estado mas tiempo sin comer y devolviendo el favor hasta que todos hayan terminado quizá no al mismo tiempo pero si de la manera mas justa y optima en mi opinión.

Mi solución

Mi solución para el problema de los filósofos es tomar un palillo, partirlo en 2 y usarlo.

Ya que el profesor no puso tantas limitantes… Ir a comprar más

Preguntar por más palillos, pudo ser un error del que organizó todo en la mesa.

Lo más apegado a la analogía es que coman en el orden que llegaron, quizá tener un tipo de prioridad para los más de mayor edad

Estrategias

Evitar que se cumpla alguna de las condiciones:

Semáforos. Variable de tipo  entero asociado a  un mecanismo de  cola de hilos. Si el semáforo toma  valores de “0” y ” 1″,  es binario.  En caso contrario es un  semáforo contador”. Funcionarían como una variable de tipo entero, asociado a un mecanismo de cola de hilos.

Monitores. Estructuras de datos  abstractas basados en  los monitores o kernel  de los S.O.

Componentes del monitor

Inicialización: contiene código a ser ejecutado.

Datos privados: procedimientos que se utilizan  desde dentro del monitor.

Métodos del monitor: procedimientos que se pueden  llamar desde fuera.

Cola de entrada: hilos que llaman a algún método del monitor pero no tienen permiso para ejecutarse aún.

Concurrencia y paralelismo: cómo Sengrid usa Go

Siempre trato de usar analogías para entender toda clase de conceptos, pues a partir de algo sencillo es fácil extrapolar a problemas de mayor complejidad, misma lógica. Por eso abordaré el concepto de concurrencia y en qué se diferencia con paralelismo o procesos en paralelo.

Al final hablaré cómo Sendgrid, una compañía de servicios de marketing por email, utiliza Go como lenguaje primario para el desarrollo de sus aplicaciones.

¿Qué es concurrencia y paralelismo? Cuando tienes varias tareas que ejecutar y las haces al mismo tiempo necesitas una concurrencia. Imagina que tienes dos tareas en el día: llegar de la casa al trabajo (Tarea 1) y hacer una presentación (Tarea 2).

  • Para llegar del trabajo a la casa tienes que tomar tres trenes: A B y C y esto toma 2 horas.
  • Para hacer la presentación toma de tu tiempo 4 horas.

Puedes ejecutar las tareas de tres maneras:

Ejecución secuencial: Puedes ir al trabajo y a la llegada empezar a hacer la presentación. Así entonces, el total de tiempo para ejecutar las dos tareas en este caso, sería de 6 horas.

Ejecución concurrente: te das cuenta que puedes emplear el tiempo en el que permaneces sentado en el tren para sacar tu laptop y adelantar la presentación, mientras llegas el trabajo. Los procesos son interrumpidos, pues no puedes trabajar en tu presentación mientras haces la fila para cada tren y es importante notar, que ambas tareas son ejecutadas por una misma persona.

Ejecución paralela: En este caso, tienes un compañero de equipo al cual le pides que trabaje contigo en la presentación. Al final llegas al trabajo y tienes la presentación lista. En este caso, nota que el trabajo de presentación fue ejecutado por dos personas

Para resumir:

  • En concurrencia trabajas en tareas que son ejecutadas al mismo tiempo y de forma independiente.
  • En paralelismo, divides el trabajo en sub-tareas para que pueda ser finalizado por más ejecutores.

Es especialmente en procesos concurrentes donde Go es fuerte gracias a Goroutines.

package main

import “fmt”

func f(n int) {
  for i := 0; i < 10; i++ {
    fmt.Println(n, “:”, i)
  }
}

func main() {
  go f(0)
  var input string
  fmt.Scanln(&input)
}

Este programa consiste en dos Goroutines:

La primera, es la función implícita (main function)

La segunda es cuand se llama go f(0).

En goroutines se ejecuta la siguiente función sin necesidad de que la anterior esté finalizada y con la ayuda de Scaln el programa no termina sin haber dado la oportunidad de imprimir todos los números.

Esta gran cantidad de lenguajes, señala de manera clara que existe un esfuerzo continuo en la creación, y mejora de los lenguajes de programación, en aras, de hacer más fácil la tarea del programador y/o hacer un uso más eficiente de los recursos computacionales. La búsqueda de los objetivos antes mencionados, así como la guerra mercantil de las compañías dedicadas a la producción de herramientas de software, han diversificado las opciones que los programadores pueden elegir. no existe ningún lenguaje que destaque en la totalidad de las aplicaciones informáticas que se desarrollan actualmente, ya que cada uno, tiene cualidades que lo hacen más convenientes para algunos propósitos, pero al mismo tiempo, cuentan con inconvenientes para otros. https://www.tiobe.com/tiobe-index/

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Python Practicando. Desde 0 hasta Desarrollador en Python

Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!

Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 Estudiantes Español.

Lo que aprenderás

  • Ejercitar la lógica de programación
  • Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
  • Aprender programación desde cero
  • Usar Visual Studio Code como Editor de Código
  • Conocer y aprender el lenguaje de programación Python
  • Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
  • Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
  • Preparar un entorno dónde programar en Python
  • Operaciones aritméticas y jerarquía de Python
  • Manejo de cadenas en Python
  • Digitar datos por teclado con Python
  • Mostrar Datos por Pantalla al usuario en Python
  • Operadores Relacionales de Python
  • Operadores Lógicos de Python
  • Condicionales en Python
  • Estructuras de Datos: Listas, Tuplas y Diccionarios
  • Iteraciones y bucles repetitivos de Python
  • Segmentar Código y hacerlo más eficaz con las Funciones en Python
  • Gestionar posibles errores que puedan dar tus programas
  • Programación Orientada a Objetos
  • HTML y CSS
  • Selenium Web Driver con Python
  • Ejercitar todo lo Aprendido con Ejercicios

Este curso incluye:

  • 25,5 horas de vídeo bajo demanda
  • 21 artículos
  • 148 recursos descargables
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Python es Hoy uno de los lenguajes más utilizados por Excelencia.

Esto se debe por su simpleza al momento de Desarrollar aplicaciones.

Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.

Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.

Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.

Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.

Python se utiliza para muchisimas cosas como:

  • Machine Learning
  • Data Science
  • Inteligencia Artificial.
  • Y mucho más!

En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.

Te invito que me acompañes a conocer este Gran Lenguaje!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools