Mostrando entradas con la etiqueta haskell. Mostrar todas las entradas
Mostrando entradas con la etiqueta haskell. Mostrar todas las entradas

sábado, 25 de julio de 2026

Pattern Matching en sencillas palabras (o no tanto)

El pattern matching es una técnica para comparar estructuras de datos contra un patrón y, si coincide, extraer valores o ejecutar lógica específica. Es más expresivo que simples condicionales (if/else o switch) porque permite desestructurar objetos, listas, tuplas, enums, etc., directamente en la condición.

Digamos que es como un switch evolucionado que no solo compara valores, sino que entiende la forma y contenido de los datos.

¿Para qué sirve?

  • Simplificar código: menos if anidados y menos boilerplate. 
  • Mayor expresividad: describe qué esperas de los datos, no cómo acceder a ellos. 
  • Seguridad en tiempo de compilación: muchos lenguajes obligan a cubrir todos los casos (ej. sealed classes en Kotlin, enum en Rust). 
  • Desestructuración directa: extraer valores sin escribir getters o índices.

En teoría el pattern matching nos obligará a escribir un código más limpio y fácil de leer, evitar errores y extraer datos directamente.

Usando otras palabras, el pattern matching (coincidencia de patrones) es como una súper versión del famoso if / else o del switch que usan muchos lenguajes de programación, pero con "esteroides".

En lugar de solo preguntar ¿Esta variable es igual a 5?, el Pattern Matching te permite preguntar:

"¿Esta información tiene la estructura o la forma que estoy buscando? Y si es así, extrae los datos que me interesan de una vez."


Pattern Matching

Observemos un ejemplo:

// Using Pattern Matching:

switch(response) {
case Success(data):
display("Todo salió bien, los datos son: " + data)

case Error(code, message):
display("Error con el código " + code+ ": " + message)

case Loading:
display("Espere por favor...")
}

Originalmente nació dentro del paradigma de programación funcional.

Actualmente está técnica se puede usar en lenguaje de programación modernos como Go, Rust, Scala, Java, Kotlin, y C#.

En Java:

switch (obj) {
case String s -> System.out.println("Texto: " + s);
case Integer i -> System.out.println("Número: " + i);
default -> System.out.println("Otro tipo");
}

En C#:

object o = 42;
if (o is int x) Console.WriteLine(x);
switch (o) {
case string s: Console.WriteLine($"Texto {s}"); break;
case int i when i > 0: Console.WriteLine($"Positivo {i}"); break;
}

En Kotlin:

sealed class Expr class Num(val value: Int): Expr()

class Sum(val left: Expr, val right: Expr): Expr()

fun eval(e: Expr): Int = when(e) { is Num -> e.value is Sum -> eval(e.left) + eval(e.right)}

En Go:

switch v := anyVal.(type) {
case string:
fmt.Println("Texto", v)
case int: fmt.Println("Número", v)
}

Un ejemplo sencillo de entender

Tomemos este pseudo código que verifica si la edad de una persona es igual 18. Si lo es, puede votar. Si no es el caso, no puede votar.

var edad: int = 45

if edad -equals 18 then
  display 'Puedes votar'.
else 
  display 'No puedes votar'.
end if

Aplicando la lógica del patter matching tenemos este código en Haskell, un lenguaje puramente funcional.

votar.hs

edad :: Int
edad = 45

mensaje :: String
mensaje = case edad of
    18 -> "Puedes votar"
    _  -> "No puedes votar"

main :: IO ()
main = putStrLn mensaje

Si lo ejecutamos:

$ runghc votar.hs

La salida será:

No puedes votar

¿Acaso es un error de código? No y sí. No porque el código está haciendo lo correcto, si la edad no es 18 el usuario no podrá votar. Sí es error en cuanto a que el valor es 45 y es obvio que es mayor a 18. Debería poder votar. Modifiquemos el programa.

votar.hs

puedeVotar :: Int -> String
puedeVotar edad
    | edad >= 18 = "Puedes votar"
    | otherwise  = "No puedes votar"

main :: IO ()
main = putStrLn (puedeVotar 45)

Si lo volvemos a ejecutar:

$ runghc votar.hs

La salida será:

 Puedes votar

Podríamos continuar con más ejemplo, pero creo que es mejor detenernos.

El pattern matching se ha popularizado así como la programación funcional. Lenguajes como Java y C# lo implementan en sus versiones más actuales.

Es una forma que nos obliga a escribir mejor código y olvidarnos de los if anidados y complejos switch.

Enlaces:

https://en.wikipedia.org/wiki/Pattern_matching
https://emanuelpeg.blogspot.com/search?q=pattern+matching



domingo, 20 de octubre de 2024

Un vistazo a la programación funcional

La Programación Funcional (Functional Programming)es un paradigma de programación declarativa (decir qué queremos, pero no cómo hacerlo) basado en el uso de funciones matemáticas donde:

  • Estaremos trabajando principalmente con funciones (el elemento principal para construir programas), evitaremos los datos mutables, así como el hecho de compartir estados entre funciones.
  • Y donde el valor generado por una función depende exclusivamente de los argumentos alimentados a la función.
  • Las funciones serán tratadas como ciudadanos de primera clase y podrán ser asignadas a variables además podrán ser utilizadas como entrada y salida de otras funciones.
  • Además, evitamos a toda costa los efectos secundarios que alteren el estado del programa u otros programas.
  • Ejemplos de lenguajes que soportan este paradigma son Haskell, Elixir, Erlang , Scala, y Clojure.

Características principales:

  1. Funciones puras: Las funciones siempre producen el mismo resultado para los mismos argumentos y no tienen efectos colaterales (no modifican variables globales ni realizan I/O directamente). 
  2.  Inmutabilidad: Los datos no se pueden modificar una vez creados. En lugar de cambiar valores, se crean nuevos valores. 
  3.  Funciones de orden superior: Las funciones pueden aceptar otras funciones como argumentos o devolver funciones. 
  4.  Composición de funciones: Las funciones se pueden combinar para crear otras más complejas, facilitando la reutilización de código. 
  5.  Evaluación perezosa: Las expresiones no se evalúan hasta que su resultado es necesario, optimizando el rendimiento en muchos casos.

Ventajas:

  1. Código más predecible y fácil de razonar gracias a la ausencia de efectos colaterales. 
  2. Facilidad para la concurrencia y el paralelismo, ya que no hay variables mutables que puedan causar conflictos.

Algunos conceptos clave de la Programación Funcional

  1. Funciones puras: Funciones que siempre producen el mismo resultado para los mismos argumentos. 
  2. Inmutabilidad: Los valores no pueden ser modificados una vez creados.
  3. Currificación: Funciones que pueden ser llamadas con menos argumentos de los que requieren originalmente.
  4. Composición de funciones: Encadenar funciones mediante el operador (.).
  5. Pattern matching: Hacer coincidir patrones en listas, tuplas, y otros datos estructurados.
  6. Guards y condicionales: Usar guards para control de flujo condicional.
  7. Recursión: La forma principal de control de iteraciones.

Ejemplo 1. Crear una función pura que nos sume dos números enteros. Este ejemplo lo haremos en Haskell.

suma.hs

suma :: Int -> Int -> Int
suma x y = x + y

main :: IO()
main = print (suma 8 3)

Como se puede ver, iniciamos con la delaración de tipos (Int). Definimos la función (suma) y en la d¿función principal (main) asignamos dos valores por default (8 y 3), lo cual nos dará como resultado 11.

Si solo queremos ejecutar el programa, abrimos una terminal y tecleamos lo siguiente:

runghc suma.hs

Si queremos compilar y crear un ejecutable, entonces:

ghc -o suma.exe suma.hs

Como la definición de una Función Pura indica, el resultado será el mismo cuando los argumentos son los mismos. Si invertimos el lugar del los valores (8, 3 por 3,8) el resultado seguirá siendo el mismo.

Aprender programación funcional se ha vuelto una "moda" que ya no solo implica el ámbito académico. Puesto que ya son muchos proyectos como la I.A. o Aprendizaje Automático que cada vez más requieren desarrolladores que dominen los principios de la matemática y, por ende, la programación funcional.

Enlaces:

https://codemonkeyjunior.blogspot.com/search?q=erlang
https://codemonkeyjunior.blogspot.com/search?q=elixir
https://emanuelpeg.blogspot.com/search?q=haskell

lunes, 1 de enero de 2024

Erlang: funciones y otras cosas más

Como vimos en un post anterior de Erlang vimos cómo emplear algunas funciones. En este post vamos a ver como emplear funciones propias de Erlang y a crear las nuestras.

Pero antes vamos a repasar algunas cosas sobre módulos en Erlang:

fundamentos.erl

%% @doc Fundamentos en Erlang.
%% @copyright Codemonkey Junior 2023.

%% Nombre de nuestro módulo.
-module(fundamentos).

%% autor del módulo
-author("Codemonkey Junior").

%% versión del módulo
-version("1.0.0").

%% Exportamos las funciones que vamos a usar.
-export([start/0]).

%% Para importar funciones.
-import(io, [fwrite/1]).

%% Para exportar todas las funciones.
-compile(export_all). 

%% Para exportar todas las funciones sin warnings.
-compile(nowarn_export_all).

Como buena práctica podemos documentar el código usando las etiquetas @doc. También escribir comentarios de lo que hace cada función. En este caso exponemos como importar y exportar funciones en nuesto módulo. Para obtener información de nuestro módulo podemos hacer algo como esto:

$ erl
> c(fundamentos).
> fundamentos:module_info().

La función module_info() mostrará la información del módulo. 

Como vimos en un post anterior. Podemos crear funciones para realizar alguna acción. En el caso de abajo, se trata de una función para convertir números binario, octal y hexadecimal a decimal.

-module(fundamentos).
-author("Codemonkey Junior").
-version("1.0").
-export([start/0,convierte/0]).


println(Cosa) -> io:format("~p~n", [Cosa]).


start()->
    println(" ==== Erlang ===="),
    Funcion = fun(X)-> X*2 end,
    println(Funcion(45)),
    println(self()),
    convierte().

convierte()->
    X = 2#101,
    Y = 8#0677,
    Z = 16#AE,
    io:format("De binario a decimal: ~p~n",[X]),
    io:format("De octal a decimal: ~p~n",[Y]),
    io:format("De hexadecimal a decimal: ~p~n",[Z]).

% erl
% c(fundamentos).
% fundamentos:start().

Entramos al REPL o Shell de Erlang, cargamos el programa e invocamos la función.

Erlang al igual que otros lenguajes de programación funcionales plantean una nueva forma de pensar para los programadores que usan Java, C#, C, C++ o Python. Mientras que los programadores Java requieren crear clases y clases, módulos y módulos para resolver un problema planteado con Erlang (Haskell, etc.) bastarán algunos bloques de código para hacer lo mismo. Aunque el código, en un principio, parezca incomprensible.


sábado, 30 de abril de 2022

Katas de programación en Erlang

Katas propuestas

1. Crear un programa que convierta pulgadas a centímetros y viceversa.

2. Crear un programa que convierta grados celsius a fahrenheit y viceversa.

3. Crear un programa que sume únicamente los números pares de una lista cualquiera.

4. Si enumeramos todos los números naturales debajo de 10 que son múltiplos de 3 o 5, obtenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23. Encuentra la suma de todos los múltiplos de 3 o 5 por debajo de 1000.

Nota: Este último ejemplo viene de la página de Project Euler

 

Recordando...

Los tipos de programación se pueden dividir en:

1. Programación Imperativa: Donde se describen, paso a paso, las instrucciones necesarias para resolver el problema.
2. Programación Declarativa: Donde se describe el problema que tenemos que solucionar pero no el cómo hacerlo.

En este último entran lenguajes como Haskell, Erlang y/o Elixir. Lenguajes de paradigma funcional. Donde se definen funciones similares a las funciones matemáticas.

 

 

Código en Erlang

conversiones.erl

%% Operaciones con Erlang
-module(conversiones).
-author("Codemonkey Junior").
-export([cent/1,pulg/1]).
-compile(nowarn_export_all).

pulg(N)-> N/2.54.
cent(N)-> N*2.54.

Salida:

$ erl
> conversiones:pulg(4).
1.574803149606299
> conversiones:cent(1.574803149606299).
3.9999999999999996

conversion_grados.erl

%% Operaciones con Erlang
-module(conversion_grados).
-author("Codemonkey Junior").
-export([fahr/1,cels/1]).
-compile(nowarn_export_all).


% De Celsius a Fahrenheit
fahr(N)-> (1.8*N)+32.

% De Fahrenheit a Celsius
cels(N)-> (N-32)/1.8.

Salida:

$ erl
 > c(conversion_grados).
 > conversion_grados:fahr(34.8).
   94.64
 > conversion_grados:cels(94.64).
   34.8

Tip: Para obtener más información de un módulo podemos teclear:

$ erl
> c(programa).
> programa:module_info().

Donde la función module_info() nos lista la información del programa o módulo.

$ erl
> c(programa).
> programa:module_info().
[{module,programa},
 {exports,[{start,0},
           {suma,2},
           {resta,2},
           {fahr,1},
           {cels,1},
           {factorial,1},
           {combinatorio,2},
           {pulg,1},
           {cent,1},
           {mcd,2},
           {module_info,0},
           {module_info,1}]},
 {attributes,[{vsn,[276758998827383991874529587796040092315]},
              {author,"Codemonkey Junior"}]},
 {compile,[{version,"8.1"},
           {options,[]},
           {source,"/home/codemonkey/Documentos/pruebasErlang/programa.erl"}]},
 {md5,<<208,53,216,37,125,14,40,139,135,22,83,244,140,34,
        10,155>>}]

suma_multiplos.erl

Este programa se verá en el siguiente post.


 Au revoir!!

Enlaces:

https://projecteuler.net/archives
https://erlangbyexample.org
https://learnyousomeerlang.com

 

sábado, 8 de mayo de 2021

Elixir: variables

 Elixir al igual que muchos otros lenguajes funcionales como Erlang y/o Haskell permiten ejecutar un shell para interactuar. Abrimos una terminal y tecleamos:

$ iex
Erlang/OTP 23 [erts-11.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Interactive Elixir (1.11.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> entero = 23
23
iex(2)> str = "ABC"
"ABC"
iex(3)> real = 3.45
3.45
iex(4)> true
true
iex(5)> not false
true
iex(6)> true or false
true
iex(7)> false or true
true
iex(8)> true and true
true
iex(9)> true and false
false
iex(10)> rem(220,200)
20
iex(11)> div(23,10)
2
iex(12)> 23 + 65
88
iex(13)> 12 / 6
2.0
iex(14)> 

Para salir del shell(repl) debemos teclear  Ctrl + C. 

Los tipos de datos en Elixir son: Int, String, Double, Booleans...

Contrario a Erlang, no es necesario que las variables comiencen en mayúscula. Tampoco que las sentencias acaben con un punto.

variables.exs
# Variables en Elixir
entero = 45
IO.puts "Entero: #{entero}"
str = "Elixir es parecido a Ruby"
IO.puts "Str: #{str}"
mayuscula = String.upcase(str)
IO.puts "Str en mayuscula: #{mayuscula}"
verdadero = 12>5 # true
if verdadero do
  IO.puts "Esto es verdadero"   
end

Ejecutamos:
$ elixir variables.exs

Enlaces:
https://elixirschool.com/en/
https://emanuelpeg.blogspot.com/search?q=elixir

jueves, 6 de mayo de 2021

Erlang: módulos

Un módulo es, básicamente, una parte autónoma de un programa. Se puede sonsiderar un miniprograma que puede puede ser llamado por otro programa y/o programas.
Ejemplo 1. Crear un módulo que calcule el triple de un número.
mi_modulo.erl
% Módulo para obtener el triple de un número
-module(mi_modulo).
-export([triple/1]).

triple(X) ->
    3 * X.

% Abrimos la terminal y escribimos:
% erl
% c(mi_modulo).
% mi_modulo:triple(3). % 9
% Triple = mi_modulo:triple(9). % 27

Donde:
-module(mi_modulo).

Nos sirve para definir el módulo(programa) que será cargado.
-export([triple/1]).

Nos sirve para exportar la función. Es importante definir el número de parámetros. En este caso la función solo emplea uno:
> mi_modulo:triple(3). % 9

Ejemplo 2. Crear dos funciones para sumar y restar dos números.
-module(modulos).
-export([suma/2, resta/2]).

suma(X, Y)->
    X + Y.

resta(X, Y)->
    X - Y.

% erl
% > c(modulos).
% > modulos:suma(3,4). % 7
% > modulos:resta(7,4). % 3

Observando el código, podemos exportar más de una función.
-export([suma/2, resta/2]).


Enlaces:
https://blog.guille.dev/2019/08/aprendiendo-un-nuevo-lenguaje-erlang.html
https://www.histel.com/z_histel/biografias.php?id_nombre=46

miércoles, 5 de mayo de 2021

Erlang: BEAM

En post pasados ya hemos hablado sobre Erlang, pero en esta ocasión trataremos de la máquina virtual de Erlang.

BEAM es la máquina virtual en el núcleo de Erlang Open Telecom Platform (OTP). BEAM es parte del Erlang Run-Time System (ERTS), que compila el código fuente de Erlang y Elixir en código de bytes, que luego se ejecuta en el BEAM. Los archivos de código de bytes BEAM tienen la extensión de archivo .beam. Para los programadores Java, es el equivalente de la JVM.

En Stackoverflow hay una respuesta que nos puede servir para entender qué es BEAM:

La máquina virtual Erlang se ejecuta como un proceso de sistema operativo. De forma predeterminada, ejecuta un subproceso del sistema operativo por núcleo para lograr la máxima utilización de la máquina. La cantidad de subprocesos y en qué núcleos se ejecutan se puede establecer cuando se inicia la máquina virtual. Los procesos de Erlang son implementados en su totalidad por Erlang VM y no tienen conexión ni con los procesos ni con los subprocesos del sistema operativo. Entonces, incluso si está ejecutando un sistema Erlang de más de un millón de procesos, todavía es solo un proceso de SO y un hilo por núcleo. Entonces, en este sentido, Erlang VM es una "máquina virtual de proceso", mientras que el propio sistema Erlang se comporta como un SO y los procesos Erlang tienen propiedades muy similares a los procesos del SO, por ejemplo, el aislamiento. En realidad, hay una máquina virtual Erlang, basada en BEAM, que se ejecuta en bare metal y, de hecho, es un sistema operativo por derecho propio, consulte Erlang en Xen. Por cierto, es perfectamente posible tener sistemas que ejecuten millones de procesos Erlang y de hecho se hace en algunos productos, por ejemplo WhatsApp. Definitivamente estábamos pensando mucho en los sistemas operativos cuando diseñamos el entorno básico de Erlang.


El concepto de Máquina Virtual nos puede aclarar más las cosas:

...una máquina virtual es un software que simula un sistema de computación y puede ejecutar programas como si fuese una computadora real. Este software en un principio fue definido como "un duplicado eficiente y aislado de una máquina física". La acepción del término actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa con ningún hardware real. Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de esta "computadora virtual".

En próximos posts hablaremos más de esto.


Enlaces:
https://blog.erlang.org/a-brief-BEAM-primer/
https://stackoverflow.com/questions/16779162/what-kind-of-virtual-machine-is-beam-the-erlang-vm
https://github.com/AlexanderKaraberov/Erlang-BEAM-Links


Erlang: conociendo el shell

Erlang es un lenguaje de programación funcional que posee ciertas características especiales (como cualquier otro lenguaje se digne de serlo). Fue desarrollado pensando en la concurrencia y ser tolerante a fallos. Permitir ser actualizado "en caliente", lo cual  muchos otros lenguajes no pueden presumir. Además esta pensado en trabajar a la par con otros programas, no importando si están en otras máquinas o servidores. 

Para entrar al shell (o repl) de Erlang debes abrir una terminal y teclear la palabra erl.

$ erl

Con esto abrirás el shell de Erlang. Y comenzamos a probar...
> "Esto es una cadena". 
> true.
> false.
> 34 + 65.
> 22 > 11.
> X = 10.
> Str = "Hola, mundo".


Como se puede ver

  • Al final de una sentencia debes poner un punto.
  • Las variables deben comenzar con una mayúscula.

Hay dos maneras de ejecutar un programa en Erlang:

1era forma
holamundo.erl

-module(saludar).
-author("Codemonkey Junior").
-version("1.0.0").
-export([start/0]).

start() ->
    io:fwrite("Hola, mundo en Erlang\n").


% erlc holamundo.erl
% erl -noshell -s holamundo start -s init stop

Desde la terminal ejecutamos estos comandos:
$ erlc holamundo.erl
$ erl -noshell -s holamundo start -s init stop

2da forma
Desde el shell (repl) de Erlang:
$ erl
> c(holamundo).
> holamundo:start().

Para salir del shell debes escribir el comando q().

Conociendo el esqueleto de un programa en Erlang.

%% Esto es un comentario

% Se específica el programa
-module(programa).

% Se exporta la función del programa y el no. de parámetros
-export([start/0]).

% Esto sirve para dar crédito al autor del programa
-author("Codemonkey Junior").

% La versión del programa
-version("1.0.0").

% Nos sirve para exporta más funciones, sin tener que usar -export por c/u de estas
-compile(export_all).

% Para exportar todas las funciones sin warnings 
-compile(nowarn_export_all). 

% Importar una función y el no. de parámetros que necesita
-import(io, [fwrite/1]). 
% Para la documentación del programa
-spec start() -> any().
start()->
   fwrite("\t [ ***** Fundamentos en Erlang *** ]").

 

Enlaces:
https://es.wikipedia.org/wiki/Erlang
http://jungerl.sourceforge.net/
https://www.erlang-solutions.com/
https://emanuelpeg.blogspot.com/search?q=erlang

domingo, 2 de mayo de 2021

Erlang: compilar y ejecutar programa


En el anterior post sobre Erlang y la instalación de una imagen con Docker. Esta vez veremos cómo instalar Erlang en Ubuntu.

Pero, ¿qué es Erlang?

Erlang es un lenguaje de programación que se utiliza para construir sistemas de software en tiempo real escalables de forma masiva con requisitos de alta disponibilidad.

Algunos de sus usos se encuentran en telecomunicaciones, banca, comercio electrónico, telefonía informática y mensajería instantánea. El sistema de tiempo de ejecución de Erlang tiene soporte integrado para concurrencia, distribución y tolerancia a fallas.

¿Qué es la OTP?

OTP es un conjunto de bibliotecas de Erlang y principios de diseño que proporcionan middleware para desarrollar estos sistemas. Incluye su propia base de datos distribuida, aplicaciones para interactuar con otros lenguajes, herramientas de depuración y manejo de versiones.

Instalando Erlang.
$ echo "deb https://packages.erlang-solutions.com/ubuntu focal contrib" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
$ sudo apt update
$ sudo apt install erlang
$ erl

Notas sobre Erlang:
  • Erlang esta diseñado para programas distribuidos y de alto rendimiento
  • Un programa en Erlang tiene la extensión *.erl
  • Las variables deben estar en mayúscula
  • No puedes reasignar valor a una variale declarada
  • Etc.

saludar.erl
-module(saludar).
-author("CodeMonkey Junior").
-version("1.0.0").
-export([start/0]).

start() ->
    io:fwrite("Saludos desde México!!\n").


% erlc saludar.erl
% erl -noshell -s saludar start -s init stop

Si queremos ejecutar desde el REPL de Erlang
$ erl
> c(saludar).
> saludar:start().

Enlaces:
http://www.methodsandtools.com/archive/erlang.html
https://issuu.com/angelfelipegonzalez/docs/erlang-i
https://www.thegeekstuff.com/2010/05/erlang-hello-world-example/

sábado, 13 de abril de 2019

Lenguajes que deberíamos aprender


No todo en la vida es C, C++, C#, Java o Python. Existen también otros lenguajes que deberíamos aprender. Por ejemplo, lenguajes como Rust, Crystal, Haxe, Elixir y/o Go pueden sorprender a más de uno. Crear servicior REST en cuestión de sólo unos minutos comparado con lenguajes como Java, PHP y/o C#.

Definir clases:
#Clase en Ruby
class Modelo
  #
end

#Clase en Python
class Modelo:
  pass

#Clase en Crystal, noten lo parecido a Ruby
class Modelo

end

Instancias:

#Ruby
modeloRuby = Modelo.new 

#Python
modeloPython = Modelo()

#Crystal
modeloCrystal = Modelo.new

Links:
https://crystal-lang.org/

sábado, 13 de julio de 2013

Otros lenguajes de programación

No todo es Java, ni C, ni C++ ni mucho menos .Net.

Existen muchas otras alternativas como:

  • Ceylon
  • Clojure
  • Erlang
  • Go
  • Haskell
  • Kotlin
  • R
  • Entre otros más
¿Por qué usar un nuevo lenguaje de programación?
Todo cambia (no es bueno confiarse), antes se usaba lenguajes como COBOL, Fortran y hasta Pascal  para realizar  cálculos matemáticos, científicos, en las empresas, etc.  Sin embargo, surgían nuevos lenguajes que facilitaban el aprendizaje y enseñanza de la programación.

  • Los programadores buscaban (buscan) algo más fácil de aprender y usar (si todo fuera tan fácil ...)
  • Evitar depender de un solo sistema operativo o plataforma (ups .Net)
  •  Hacer más rápido el trabajo (...)
  • cientos de cosas más (jeje)
Cuando te pidan cambiar de lenguaje de programación es bueno estar siempre preparado. 

No vaya ser que dejen de usar Java donde trabajas y te pidan usar Python.

--Editado
Hay muchas razones más para usar otros lenguajes a parte de Java, C, C++ y .Net, no solo porque hay más:

  • El cliente elije la plataforma de desarrollo, a veces aunque no exista un análisis previo del por que lo hacen
  • Los sistemas se migran a la tecnología más actual
  • El framework que se usaba dejo de tener soporte
  • etc.


"Si los constructores construyeran edificios como los programadores programan aplicaciones, un pájaro carpintero podría destruir toda la civilización." ::Gerald Weinberg::


¿Cuál es el propósito?
Conocer cual es el propósito de tu aplicación, ¿se trata de una aplicación web?, ¿una aplicación móvil?, etc. 



  • R: Si necesitas realizar cálculos estadísticos
  • Python: Aplicaciones clásicas(por terminal), GUI, y hasta aplicaciones web
  • Processing: Aplicaciones multimedia
  • Entre otros más
¿Cuánto tiempo me va llevar aprenderlo?
El tiempo necesario, esto es relativo depende de cada persona y el tiempo invertido. Hay personas que en poco tiempo ya son capaces de crear sus propias aplicaciones y otras a quienes les lleva mucho más tiempo.

La práctica constante da resultados.

Links

Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog