¿Cómo elegir el lenguaje de programación y el framework de tu
próxima aplicación web? Antonio Ognio
h"p://www.bitzeppelin.com
¿Qué tipo de aplicación web?
¿Qué tipo de aplicación web?
• Concepto nuevo / innovador
• Expectativa de vida de varios años
• Exploración / cambio de características
• Reto técnico / incertidumbre
ejemplo típico…
…aplicación web que es producto principal de una
startup
si quieres un blog típico listo mañana...
¿Cuáles son los criterios de selección para un lenguaje de
programación?
Criterios para elegir el lenguaje
• Expresividad
• Rendimiento
• Soporte para hacer metaprogramación
• Calidad de librerías disponibles
• Nivel de la comunidad
¿Cuáles son los criterios de selección para un framework
web?
Criterios para elegir el framework
• Expresividad
• Rendimiento
• Nivel de uso de metaprogramación
• Calidad de componentes disponibles
• Nivel de la comunidad
Expresividad
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } }
Hello World en Java
puts "Hello, World”
Hello World en Ruby
package test; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class HelloServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); out.println("Hello, world!"); out.close(); } }
Hello World usando un Servlet
require 'sinatra' get '/hi' do "Hello World!" end
Hello World usando Sinatra
require 'sinatra' get '/hi' do "Hello World!" end
Hello World usando Sinatra
¿Todos los lenguajes de programación son
comparables y equivalentes?
¿Porqué existen tantos lenguajes de programación?
¿Porqué se siguen creando nuevos lenguajes?
http://oreilly.com/news/graphics/prog_lang_poster.pdf
LISP (1958)
Smalltalk (1971)
C (1972)
John McCarthy (MIT / Stanford)
Inteligencia artificial
Kernighan & Ritchie (Bell Labs)
Sistema operativo simple y eficiente
Alan Kay (XEROX PARC)
Escritorio moderno
Ingeniería de software
Computación personal
LISP (LISt Procesor)
• Bases matemáticas (Cálculo de Lambda)
• Extensible (se va construyendo a si mismo)
• Programación funcional
• Late binding / Metaprogramación
• Gestión automática de la memoria
Lenguage C
• Imperativo y estructurado
• Bajo nivel (cerca del hardware)
• Gestión manual de la memoria
• Orientado a maximizar el rendimiento
Smalltalk
• Orientado a objetos (bases en biología)
• Altamente reflexivo (todo es un objeto)
• Gestión automática de la memoria
• Orientado a maximizar productividad
AWK
C SH UNIX
commands
Perl
C SH AWK
C++
C Smalltalk
Objective-C
C Smalltalk
Java
C++ Smalltalk
C#
Java C++ Object Pascal
PHP
C Perl Java
Python
Smalltalk ABC LISP
HOW TO RETURN words document: PUT {} IN collection FOR line IN document: FOR word IN split line: IF word not.in collection: INSERT word IN collection RETURN collection
Ejemplo de código de “ABC” (Holandés)
Ruby
Smalltalk Perl LISP
1 to: 10 do: [:n | n isOdd ifTrue: [n toStdout] ifFalse: [n toStderr] ]
Ejemplo de código de Smalltalk
Javascript
Scheme (LISP)
Self (Smalltalk) Java
Erlang
Prolog LISP
ERICSSON AXD 301 MULTI SERVICE ATM SWITCH
ERICSSON AXD 301 MULTI SERVICE ATM SWITCH
99.9999999% de uptime
Clojure
LISP Java Erlang
Scala
Java LISP Erlang
Si insisten en usar PHP…
Conclusiones
• Conviene usar un lenguaje moderno que se actualice frecuentemente
• Lenguaje dinámico o estático pero con sintaxis flexible y expresiva
• Soporte multiparadigma: OOP y funcional • Comunidad muy activa / opensource • Orientación a la concurrencia (modelo de
actor)
¿Cómo elegir el lenguaje de programación y el framework de tu
próxima aplicación web? Antonio Ognio
h"p://www.bitzeppelin.com