El idioma después de Java: Reflexiones sobre mi primera JavaOne

Mis pensamientos alrededor de mi primera conferencia JavaOne centran alrededor, «¿Cuál es la próxima gran cosa iba a ser?» «¿Qué tengo que aprender para estar al día» en el sentido de que definitivamente volví con una lista corta de muy prometedor, pero en la actualidad las tecnologías del oprimido:

  • JUnit (o de pruebas unitarias en general) es fácil e importante como para ser parte de cada proyecto. Incluso me pregunto si las buenas pruebas de unidad son más fáciles y más beneficiosa que la seguridad de tipos en su lenguaje de programación!
  • Scala (sucesor de Java)
  • Git (sucesor de Subversion)
  • Maven (sucesor de Ant)
  • Programación Funcional (está finalmente listo para el prime-time)
  • Algoritmos (más de Estructuras de datos)

He visto el surgimiento de estructuras de datos , a continuación, Programación Orientada a Objetos y Programación ahora Funcional y Algoritmos. Programación Funcional era realmente un caballo negro, desde mi perspectiva, porque Lisp es el segundo más antiguo lenguaje de programación, sin embargo FP no logró convertirse en la corriente principal hasta hace muy poco.

Mi experiencia funcional antes de Scala se limitó a enviar un ceceo y XSLT, ninguno de los cuales hacen particularmente un buen lenguaje de programación de propósito general. La reciente muerte de la Ley de Moore y el triunfo de procesamiento concurrente en servicios en la nube como AWS han dado programación funcional mejores características de rendimiento y el código de comprensión que la programación imperativa. Definitivamente no me lo esperaba.

A veces el director Don Quijote toma malas ideas populares éxito – si suficientes personas creen en algo que se convierte en realidad. Me pregunté sobre eso y programación funcional. «Informática» ha vivido en el departamento de matemáticas de la mayoría de las universidades. Si usted consigue bastantes frikis de la matemáticas que hacen la programación, por supuesto, van a empezar a favorecer un estilo que se ve y se comporta como funciones desde el campo de las matemáticas. Entonces, ¿qué, pensé, si la programación funcional se basa en Lambda Calculus – es práctico para la resolución de problemas de negocios

Pero esto no era la pregunta correcta?. Las personas que preguntan: «¿Qué puede posiblemente hacer un programa» y «¿Cuál es la mejor manera de hacerlo X ?» son los que están creando las innovaciones tecnológicas que en última instancia conducen el resto de la industria. Las limitaciones de los programas que se pueden hacer (y qué tan eficientemente esas tareas se pueden realizar) constituyen una buena parte del estudio de algoritmos y la inspiración para nuevos idiomas. Claro, usted puede hacer la mayoría de cosas en la mayoría de lenguajes de propósito general, pero como dijo James Roper y estrago Pennington citó en su reciente charla (diapositivas disponibles aquí), sólo porque usted puede de hacer algo en un idioma doesn ‘t significa que usted será . Algunas cosas son simplemente demasiado difícil en algunos idiomas. Esta es la razón por saber ambos estilos imperativa y funcional es muy útil además de estudiar algoritmos

Los problemas fáciles, podrán seguir siendo resuelto en los lenguajes imperativos, sin mucho pensar en algoritmos para nada:. Transformen un tipo de texto a otra, entregar los datos correctos para una solicitud determinada, o generar un informe a partir de una base de datos. Pero los problemas difíciles van cada vez más a requerir procesamiento concurrente con los algoritmos más eficaces. Claro, es más fácil hacer algunas cosas en un lenguaje funcional, pero un gran algoritmo en un lenguaje limitado es mejor que un algoritmo de mala muerte en un lenguaje conciso y hermoso en cualquier momento.

Java es un gran lenguaje, pero está mostrando su edad:

  • Primitivas y clases de la API (como List y Map) están diseñados para ser mutable. Programación concurrente con esta inseguridad inherente es un oso real. Incluso sin la concurrencia, es simplemente más fácil de razonar sobre las cosas que no cambian. Sólo el uso de colecciones de Java adecuada requiere inmutabilidad!
  • Colecciones son gestionados a través de la iteración que pone la carga de la programación concurrente en el usuario de esas colecciones. Este problema se solucionará por Lambda en Java 8.

!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *