Translate
viernes, 8 de noviembre de 2019
martes, 5 de noviembre de 2019
Machine Learning (aprendizaje automático) con Python: una introducción práctica
Me llego un mail de edX sobre machine learning en python en castellano. Toma tu torta!
A anotarse y estudiar!!!
A anotarse y estudiar!!!
|
lunes, 4 de noviembre de 2019
Cuáles era sus lenguajes de programación favoritos, odiados o recomendarían para aprender a programar...
Unas 15K personas de todo el mundo han contestado el meme en Twitter de cuáles era sus lenguajes de programación favoritos, odiados o recomendarían para aprender a programar... Los he recopilado y analizado con @graphext y aquí un hilo con los principales insights que encontré 👇
Este es un tweet muy interesante Victoriano Izquierdo :
Este es un tweet muy interesante Victoriano Izquierdo :
Unas 15K personas de todo el mundo han contestado el meme en Twitter de cuáles era sus lenguajes de programación favoritos, odiados o recomendarían para aprender a programar... Los he recopilado y analizado con @graphext y aquí un hilo con los principales insights que encontré 👇 pic.twitter.com/lqWAh6PzLe— Victoriano Izquierdo (@victorianoi) October 8, 2019
domingo, 3 de noviembre de 2019
Prolog
PROLOG es un lenguaje de programación declarativo. Los lenguajes declarativos se diferencian de los lenguajes imperativos o procedurales en que están basados en formalismos abstractos (PROLOG está basado en la lógica de predicados de primer orden y LISP, otro lenguaje de programación declarativa, en lambda calculo), y por tanto su semántica no depende de la máquina en la que se ejecutan. Las sentencias en estos lenguajes se entienden sin necesidad de hacer referencia al nivel máquina para explicar los efectos colaterales.
PROLOG es un lenguaje de programación muy útil para resolver problemas que implican objetos y relaciones entre objetos. Está basado en los siguientes mecanismos básicos, que se irán explicando :
- Unificación
- Estructuras de datos basadas en árboles
- Backtracking automático
La sintaxis del lenguaje consiste en lo siguiente:
- Declarar hechos sobre objetos y sus relaciones
- Hacer preguntas sobre objetos y sus relaciones
- Definir reglas sobre objetos y sus relaciones
Vamos utilizar SWI-prolog : https://swish.swi-prolog.org/
Las cláusulas PROLOG son de tres tipos: hechos, reglas y preguntas. Las cláusulas PROLOG consisten en una cabeza y un cuerpo. Los hechos son cláusulas que tienen cabeza pero no tienen cuerpo. Las preguntas sólo tienen cuerpo. Las reglas tienen siempre cabeza y cuerpo. Los hechos son siempre ciertos. Las reglas declaran cosas que son ciertas dependiendo de una condición. El programa PROLOG (o base de datos PROLOG) está formado por hechos y reglas y para PROLOG no hay ninguna distinción entre ambas. Las preguntas se le hacen al programa para determinar qué cosas son ciertas.
Las cláusulas PROLOG son de tres tipos: hechos, reglas y preguntas. Las cláusulas PROLOG consisten en una cabeza y un cuerpo. Los hechos son cláusulas que tienen cabeza pero no tienen cuerpo. Las preguntas sólo tienen cuerpo. Las reglas tienen siempre cabeza y cuerpo. Los hechos son siempre ciertos. Las reglas declaran cosas que son ciertas dependiendo de una condición. El programa PROLOG (o base de datos PROLOG) está formado por hechos y reglas y para PROLOG no hay ninguna distinción entre ambas. Las preguntas se le hacen al programa para determinar qué cosas son ciertas.
Los hechos PROLOG :
En consola:
assert(progenitor(laura, damian)).
En un archivo:
progenitor(laura, damian).
“progenitor” es el nombre de la relación o nombre de predicado y “laura” y “damian” son los argumentos. Los hechos acaban siempre con punto.
assert(progenitor(laura, damian)).
En un archivo:
progenitor(laura, damian).
“progenitor” es el nombre de la relación o nombre de predicado y “laura” y “damian” son los argumentos. Los hechos acaban siempre con punto.
Las reglas en PROLOG:
Existe en PROLOG la posibilidad de definir la relación “abuelo(X,Y)” o la relación “tio(X,Y)” como reglas, además de poderlo hacer como hechos o como conjunción de objetivos.
[user].
abuelo(X,Y):-
progenitor(X,Z), progenitor(Z,Y).
tio(X,Y):-
progenitor(Z,Y), progenitor(V,Z), progenitor(V,X).
<EOF>
También podemos crear reglas recursivas :
[user].
predecesor(X,Y):-progenitor(X,Y).
predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y).
La definición de varias reglas con el mismo nombre de relación equivale en PROLOG a la “O” lógica o disyunción.
Las preguntas PROLOG
Sobre un conjunto de hechos se pueden realizar una serie de preguntas en la consola. Por ejemplo:
?- progenitor(laura, damian).
true.
?- progenitor(juan, damian).
false.
PROLOG busca automáticamente en la base de datos si existe un hecho que se puede unificar.
También se puede consultar por medio de variables. Por ejemplo:
?- progenitor(jose,X).
X = ana ;
X = patricia.
Debemos consultar más de un resultado por medio de la tecla “Tab”
Sintaxis en Prolog : Los objetos o términos PROLOG pueden ser objetos simples o estructuras. Los objetos simples pueden ser constantes o variables. Las constantes serán átomos o números. Los átomos empiezan con letra minúscula (nunca con números), pueden contener caracteres especiales y pueden ser nombres entre comillas simples. Los números serán enteros o reales, sin una definición explícita de tipos. PROLOG se utiliza para una programación simbólica, no numérica, por eso los enteros se utilizarán por ejemplo para contar el número de elementos de una lista, pero los reales son poco utilizados. Las variables empiezan con mayúscula o con subrayado. Las variables anónimas son aquellas cuyo nombre es sólo el carácter subrayado (_). Se usan cuando no es importante el nombre de la variable o cuando la variable no puede unificar con otra, dentro de la misma cláusula.
Términos. Constantes: Números. Este tipo de constantes se utilizan para representar tanto números enteros como números reales y poder realizar con ellos operaciones aritméticas.
Átomos. Los átomos se utilizan para dar nombre a objetos específicos, es decir, representan individuos concretos. Existen tres clases principales de átomos:
Cadenas formadas por letras, dígitos y el símbolo de subrayado, que deben empezar necesariamente por una letra minúscula.
Cualquier cadena de caracteres encerrada entre comillas simples.
Términos. Variables
Las variables en Prolog se representan mediante cadenas formadas por letras, dígitos y el símbolos de subrayado, pero deben necesariamente empezar por una letra mayúscula o por un símbolo de subrayado.
Ejemplos: X, Resultado_1, Entrada, _total3, _3bis
Las variables que empiezan con un símbolo de subrayado, se denominan variables anónimas, y se usan cuando se necesita trabajar con variables cuyos posibles valores no interesan.
Términos compuestos. Listas : Uno de los términos compuestos mas importantes y útiles que ofrece Prolog son las listas, secuencias ordenadas de cero o mas elementos, donde los elementos pueden ser cualquier tipo de termino. La lista vacía se representa mediante el átomo [] , toda lista no vacía tiene una cabeza y un resto (que será una lista), y se representa mediante un termino compuesto de paridad 2, cuyos argumentos son, respectivamente, la cabeza y el resto de la lista.
La notación consiste en enumerar entre corchetes todos los elementos de la lista, separados por comas.
Ejemplos, [a, []] o [a] y [a, b, c, []] o [a,b,c]
Prolog también dispone de otra notación para las listas, que consiste en representar la lista con cabeza X y resto Y mediante el termino [X|Y]. Esta ultima notación es fundamental para poder separar la cabeza del resto de una lista.
Y vamos a continuar...
Programación lógica
La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. La programación lógica gira en torno al concepto de predicado, o relación entre elementos.
La lógica matemática es la manera más sencilla, para el intelecto humano, de expresar formalmente problemas complejos y de resolverlos mediante la aplicación de reglas, hipótesis y teoremas. De ahí que el concepto de "programación lógica" resulte atractivo en diversos campos donde la programación tradicional es un fracaso.
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas:
La mayoría de los lenguajes de programación lógica se basan en la teoría lógica de primer orden, aunque también incorporan algunos comportamientos de orden superior como la lógica difusa. En este sentido, destacan los lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es demostradamente computable (hasta el momento).
La lógica matemática es la manera más sencilla, para el intelecto humano, de expresar formalmente problemas complejos y de resolverlos mediante la aplicación de reglas, hipótesis y teoremas. De ahí que el concepto de "programación lógica" resulte atractivo en diversos campos donde la programación tradicional es un fracaso.
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas:
- Sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.
- Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente.
- Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.
La mayoría de los lenguajes de programación lógica se basan en la teoría lógica de primer orden, aunque también incorporan algunos comportamientos de orden superior como la lógica difusa. En este sentido, destacan los lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es demostradamente computable (hasta el momento).
Un concepto importante de programación lógica es la descomposición de programas en sus componentes lógicos y sus componentes de control. Con lenguajes de programación lógica de bajo nivel, estos componentes determinan la solución del problema, por eso los componentes de control pueden variar para proporcionar alternancia de ejecución de un programa lógico. Estos conceptos son capturados con el eslogan
Algoritmo= lógica + control
donde "lógica" representa un programa lógico y "control" diferentes estrategias de demostración del teorema.
Esto no se queda así, seguimos con prolog!!
sábado, 2 de noviembre de 2019
Resultados de la encuesta de Stackoverflow 2019
Stackoverflow publico los resultados de su encuesta 2019, la verdad todo normal nada que me llame la atención excepto:
- Lenguaje más amado Rust, ya me tengo que poner a estudiar este lenguaje.
- Lenguajes mejor pagos, del top 5, 4 son funcionales. Así que es buena idea aprender programación funcional.
Dejo link : https://insights.stackoverflow.com/survey/2019
viernes, 1 de noviembre de 2019
Cual es el lenguaje más utilizado y el más moderno?
Es muy interesante saber cual es el lenguaje que más se usa hoy día, para poder aprenderlo si no lo sé y para saber por dónde anda el mercado.
Por eso dejo estas 2 imagenes que son por demás interesantes:
Por eso dejo estas 2 imagenes que son por demás interesantes:
Otra cuestión es saber cual es el lenguaje más moderno de los más utilizados, porque es licito pensar que este tendrá mayor futuro :
Map, Reduce y Filter
Los métodos fold están muy relacionados a métodos que apliquen una función a una lista. Esto en muchos lenguajes se traducen en 2 métodos : Map y Reduce.
Map: Aplica una función a una lista, retornando otra lista que puede ser de diferente tipo. Transforma la lista.
Reduce: Aplica una función a una lista, acumulando o resolviendo un problema determinado, y retorna un valor.
Debemos recordar que una de las bases de la programación funcional donde provienen estos métodos es la inmutabilidad. Por lo tanto estos métodos retornan nuevas listas, sin modificar la existente.
En javascript :
const obtenerNombreDeCiudades = array => array.map(({ nombre }) => nombre);
const nombreDeCiudades = obtenerNombreDeCiudades (ciudadesPobladas);
const obtenerHabitantes = array => array.reduce((acumulador, { habitantes }) => acumulador + habitantes, 0)
const habitantesTotales = obtenerHabitantes(ciudades);
En java 8 :
En java podemos utilizar funciones map/reduce con Streams, veamos unos ejemplos:
String[] myArray = new String[]{"bob", "alice", "paul", "ellie"};
Stream<String> myStream = Arrays.stream(myArray);
Stream<String> myNewStream = myStream.map(s -> s.toUpperCase());
String[] myNewArray = myNewStream.toArray(String[]::new);
int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
String[] myArray = { "this", "is", "a", "sentence" };
String result = Arrays.stream(myArray).reduce("", (a,b) -> a + b);
En C# :
.NET implementa la operación de map/reduce con la extensión LINQ. Veamos un ejemplo:
map:
var result = numbers.Select(x => x + 3);
reduce:
var sum = number.Aggregate((x, y) => x + y);
Otra función muy importante es filter, filter permite filtrar listas, y claro :
En Javascript :
var rebels = pilots.filter(function (pilot) {
return pilot.faction === "Rebels";
});
var empire = pilots.filter(function (pilot) {
return pilot.faction === "Empire";
});
//con labmda
const rebels = pilots.filter(pilot => pilot.faction === "Rebels");
const empire = pilots.filter(pilot => pilot.faction === "Empire");
En Java :
Arrays.stream(myArray)
.filter(s -> s.length() > 4)
.toArray(String[]::new);
En C#:
List<Employee> e = employees.Where(
x => x.SickDays >= n).ToList();
¿Cuál es el mejor y más nuevo lenguaje de programación?
Encontré dicha pregunta en quora, y la respuesta :
- Julia (Influenciado por: Fortran, Lisp, Lua, Python, Perl, Ruby y MATLAB)
- Kotlin (Influenciado por: JavaScript, Java, C# y Scala)
- Elm (Influenciado por: Standard ML, F#, Haskell y OCaml)
- Elixir (Influenciado por: LFE, Clojure, Erlang and Ruby)
- Rust (Influenciado por: C#, Ruby, C++, Alef, Haskell, NIL, Cyclone, Limbo y Erlang)
- Crystal (Influenciado por: C, Ruby, C# and Python)
- Groovy (Influenciado por: Python, Java, Smalltalk, Objective-C y Perl)
- R (Influenciado por: S, XLispStat, Common Lisp y Scheme)
- Hack (por Facebook)
- Go (Influenciado por: C, Python, Smalltalk, Alef, CSP, Modula, Pascal, Limbo y BCPL)
- Dart (por Google)
- Bosque (Nuevo lenguaje de programación de Microsoft)
- Ballerina (Basado en Java, Javascript, Go, Rust, C#)
- V (Basado en Go y Rust)
La verdad no conocía a Bosque, Ballerina y V.
Más allá de dicha respuesta, a mi entender, todo depende de a que te vas a dedicar, por ejemplo:
Si vas a hacer una aplicación base, base de datos, sistema operativos, aplicaciones de escritorio:
- V
- Go
- Rust
Si te queres dedicar a ciencia de datos :
- Julia
- R
Si queres hacer back-end de aplicaciones :
- Kotlin
- Groovy
- Bosque
- Ballerina
- Hack
- Elixir
Aplicaciones front-end :
- Elm
- Dart
Me puedo equivocar, pero es mi opinión.
Otra cosa, faltan lenguajes que siempre nuevos, como Scala, Idris, Swift o tantos otros...
Opinen!
Dejo link: https://es.quora.com/Cu%C3%A1l-es-el-mejor-y-m%C3%A1s-nuevo-lenguaje-de-programaci%C3%B3n
Suscribirse a:
Entradas (Atom)