El documento presenta el desafío personal del autor de resolver 9 problemas de programación en 9 lenguajes de programación diferentes. Explica brevemente cada uno de los lenguajes seleccionados, los cuales incluyen Clojure, Erlang, F#, Go, Haskell, Kotlin, Rust, Scala y Swift. También indica que hasta el momento ha completado 3 desafíos, los cuales involucraron juegos interactivos, pronósticos del clima y procesamiento de vectores, usando diferentes características de cada lenguaje. El objetivo final es comparar
3. ¿Por qué?
“Y si trabajas al pedo
y estás haciendo algo nuevo,
adelante!”
“For many developers, the one-
language notion is a sign of lack of
professionalism […] The point here
is that programming languages do
affect the way you think about
programming, and learning new
languages can do a lot to help you
think about solving problems in
different ways” — Martin Fowler
4.
5. “Temo al hombre
de un sólo
lenguaje de
programación”
Santo Tomás de Aquino
1252 DC
15. ZX-81 Basic 1981
10 PRINT “INGRESE TEMPERATURA EN CELSIUS:”
20 INPUT C
30 LET F = (C * 9.0/5.0) + 32
40 PRINT “LA TEMPERATURA EN FARENHEIT ES:"+F
KRUN
26. How to solve it
“In order to translate a sentence from
English into French two things are
necessary. First, we must understand
thoroughly the English sentence. Second,
we must be familiar with the forms of
expression peculiar to the French language.
The situation is very similar when we
attempt to express in mathematical
symbols a condition proposed in words.
First, we must understand thoroughly the
condition. Second, we must be familiar with
the forms of mathematical expression.”
— G. Polya
28. Project Euler
Matemáticas y Programación
"Project Euler exists to
encourage, challenge, and
develop the skills and
enjoyment of anyone with an
interest in the fascinating world
of mathematics."
https://projecteuler.net
29. Problemas Project Euler
Multiplos de 3 y 5: Encontrar la suma de todos los
múltiplos de 3 y 5 menores a 1.000
Encuentre la suma de los números de Fibonacci pares
que no excedan los 4.000.000
¿Cuál es el número primo 10.001?
31. Mi Desafío Personal
«Estos son los mejores tiempos para ser desarrollador,
pero también son los peores tiempos para ser
desarrollador. Como dice Jano González, parece que
tenemos un nuevo paradigma: "Hacker News Driven
Development".
Todas las semanas, o quizás todos los días aparecen
nuevos Frameworks, Lenguajes de Programación,
Tecnologías en Hacker News y las nuevas generaciones
de desarrolladores, afectadas por el síndrome de déficit
atencional corren a re implementar su último proyecto
con la herramienta que tenga más likes.»
32. Mi Desafío Personal
«Pero, como dice Charly:
ya no quiero criticar,
sólo quiero ser un enfermero
Así que me propongo aliviar un poco esa angustia de
algunos desarrolladores que nos saben si vale la pena
aprender alguno de esos nuevos lenguajes que están
apareciendo o re apareciendo por todos lados.
Voy a asumir el siguiente desafío, voy a resolver 9 desafíos
de programación en 9 lenguajes de programación.»
33. Los 9 (+1) Lenguajes
CLOJURE
ERLANG
(ELIXIR)
F#
GO
HASKELL
KOTLIN
RUST
SCALA
SWIFT
34. Motivaciones
Programación de Sistemas: Go y Rust
La JVM: Scala, Clojure y Kotlin
Programación funcional: F# y Haskell
Apple Fanboy: Swift
Actores y Whatsapp: Erlang (y Elixir)
46. Mi Desafío Personal
«La idea es crear desafíos que
permitan destacar las bondades
de algunos lenguajes y que sean
prácticos, que muestren
situaciones similares a
problemas que uno enfrenta en el
"mundo real”.»
48. 3 Desafíos completados
Repositorio GitHub: https://github.com/lnds/9d9l
2.600 lineas de código aproximadamente
108 Horas en 12 meses
Desafío 1: 24 horas
Desafío 2: 32 horas
Desafío 3: 52 horas
49. 3 Desafíos completados
Desafío 1: Toque y Fama
Un juego interactivo usando la consola
Desafío 2: Weather Report
Reporte de tiempo usando paralelismo simple, invocando API Web
XML
Desafío 3: Vectores
Procesar un archivo de 1 millón de vectores numeréicos
ordenando y clasificando en el menor tiempo posible
60. Go
Robert Griesemer, Rob Pike, Ken Thompson
2009
12 años
Versión Estable: 1.7.4
Estático, Strong Typing, Inferred, Structural, Native Code
BSD Style
61. Go
sum := 0
for i := 0; i < 1000; i++ {
if i % 3 == 0 || i % 5 == 0 { sum += i }
}