El software de referencia Nxt (NRS) está escrito en Java. La plataforma Nxt es la primera en ofrecer tanto a usuarios como desarrolladores los beneficios de usar este lenguaje de programación. El objetivo de este artículo es hacer una breve presentación sobre Java para desmoronar falsos prejuicios y evidenciar que su uso es ventajoso.
Riker, desarrollador del núcleo de Nxt:
Las principales ventajas de Java – seguridad, portabilidad y escalabilidad – son importantes para las aplicaciones distribuidas como NXT. El hecho de que no sea necesario volver a compilar en cada plataforma ahorra mucho tiempo y el no tener que preocuparse de la gestión de la memoria, es una gran ventaja en comparación con C / C ++.
El objetivo de Java (y principal motivo de su aparición en 1995) fue siempre crear un lenguaje común que pudiese correr en cualquier plataforma, sin necesidad de tener que ser recompilado en cada una de ellas, apoyándose para ello de una Java Virtual Machine (JVM). Sun Microsystems relanzó en 2006 la plataforma Java con licencia GPL de GNU.
Java se ha consolidado como una interfaz universal para bases de datos de la empresa. Su rápida ascensión y amplia aceptación se justifican por sus características de diseño y programación, sobre todo por su leitmotiv de que se puede escribir un programa una vez, y ser ejecutado en cualquier lugar (conocido en inglés como WORA, o “write once, run anywhere”).
Riker, desarrollador de Nxt:
“El componente principal de la lógica empresarial de Nxt no tiene vínculos específicos con Java. Podría haberse desarrollado en cualquier otro idioma. Pero creo que la idea a enfatizar es que Java es el lenguaje de desarrollo más común para los desarrolladores corporativos y esto asegura un suministro constante de desarrolladores, un apoyo garantizado y actualizaciones a largo plazo. También hace a Nxt más amigable con las corporaciones, cómoda en comparación con el C ++ basado en Bitcoin y sus clones, y Ethereum. “
A continuación vamos a enumerar las ventajas que supone programar en Java:
- Java es fácil de aprender. Java fue diseñado para ser fácil de usar y por lo tanto es fácil de escribir, compilar, depurar, y aprender.
- Java está orientado a objetos. Esto le permite crear programas modulares y código reutilizable, siendo independiente de la plataforma. Una de las ventajas más significativas de Java es su capacidad para moverse fácilmente de un sistema informático a otro. La capacidad de ejecutar el mismo programa en muchos sistemas diferentes es crucial para el software de la World Wide Web, dónde Java ha triunfado por ser independiente de la plataforma en el origen y en los niveles binarios.
- Java se distribuye. Está diseñado para hacer de computación distribuida fácil con la capacidad de red que se integra inherentemente en ella. Escribir programas en Java en la red es como enviar y recibir datos desde y hacia un archivo.
- Java es seguro. Java considera la seguridad como parte de su diseño. El lenguaje Java, compilador, intérprete y el entorno de ejecución se desarrollan pensando en la seguridad.
- Java es robusto. Robustez significa fiabilidad. Java pone mucha atención a la comprobación temprana de los posibles errores.
- Java es flexible. Por otra parte, el desarrollo continuo de la máquina virtual de Java (JVM) significa que nuestros productos a menudo pueden aprovechar las nuevas mejoras en el rendimiento de Java sin cambiar nada en nuestro código, sin ni siquiera volver a compilarlo, simplemente implementarlos usando una nueva JVM.
- Java es multiproceso. Multiproceso es la capacidad de un programa para realizar varias tareas al mismo tiempo dentro de un programa. En Java, la programación multihilo, se ha integrado sin problemas en ella. Debido a la robustez, facilidad de uso, capacidades de cross-platform y a sus características de seguridad, Java, se ha convertido en un lenguaje de elección para el suministro de soluciones en todo el mundo de Internet.
- Grandes sistemas. Java es especialmente adecuado para sistemas grandes con largos ciclos de vida. Java fomenta un estilo de programación lúcido que hace que los programas Java sean fácil de mantener y apoyar con un bajo coste total de propiedad.
- Es gratuito.
- Una comunidad mundial está detrás de Java. El Proceso de la Comunidad Java, o Java Community Process, establecido en 1998, es un proceso formalizado el cual permite a las partes interesadas a involucrarse en la definición de futuras versiones y características de la plataforma Java. Son documentos formales que describen las especificaciones y tecnologías propuestas para que sean añadidas a la plataforma Java.
El gran salto cualitativo se produjo a partir de la versión Java 8, lanzada el 25 de marzo de 2014, la versión más importante de su modelo de programación, añadiendo numerosas ventajas a las versiones anteriores:
- Java permite el IOT (Internet Of Things o El Internet de las Cosas): La comunidad de Java 8 ayudará a los negocios a formar parte del mundo de los dispositivos conectados (sensores médicos, vehículos, controladores industriales…). Proporciona una plataforma segura, flexible y escalable para el IOT.
- Menos código significa más productividad: Java 8 facilita una mayor productividad de los desarrolladores a través de reducir código repetitivo.
- La tecnología Embedded es un gran beneficio. Diseñado para realizar una o algunas pocas funciones dedicadas, frecuentemente en un sistema de computación en tiempo real.
- Creación de gráficos llamativos. JavaFX 8 es un conjunto de herramientas gráficas incluidas en el JDK 8 que permite a los desarrolladores crear aplicaciones de cliente enriquecido utilizando herramientas de desarrollo Java estándar.
- Java está integrado con JavaScript. Java y JavaScript no son lo mismo. Cuando los desarrolladores quieren usar Java y JavaScript, Nashorn puede ofrecer mejoras significativas en el rendimiento y la interoperabilidad entre Java y el código JavaScript.
Entornos de funcionamiento
El diseño de Java y sus características intrínsecas, amplian las posibilidades de aplicación:
- En sistemas de servidor. En la parte del servidor, Java es más popular que nunca, desde la aparición de la especificación de Servlets y JSP (Java Server Pages).
- Navegador Web. Desde la primera versión de Java existe la posibilidad de desarrollar pequeñas aplicaciones (Applets) en Java que luego pueden ser incrustadas en una página HTML para que sean descargadas y ejecutadas por el navegador web. Estas mini aplicaciones se ejecutan en una JVM que el navegador tiene configurada como extensión (plug-in) en un contexto de seguridad restringido configurable para impedir la ejecución local de código potencialmente malicioso.
- En dispositivos móviles. Desde la creación de la especificación J2ME (Java 2 Platform, Micro Edition), una versión del entorno de ejecución Java reducida y altamente optimizada, especialmente desarrollada para el mercado de dispositivos electrónicos de consumo ha producido toda una revolución en lo que a la extensión de Java se refiere.
- La API de programación es muy sencilla, flexible y extensible.
- Los servlets no son procesos independientes (como los CGI) y por tanto se ejecutan dentro del mismo proceso que la JVM mejorando notablemente el rendimiento y reduciendo la carga computacional y de memoria requeridas.
- Las JSP son páginas que se compilan dinámicamente (o se pre-compilan previamente a su distribución) de modo que el código que se consigue supone una ventaja en rendimiento substancial frente a muchos lenguajes interpretados.
- En aplicaciones de escritorio (como el NRS de Nxt). Hoy en día existen multitud de aplicaciones gráficas de usuario basadas en Java. El entorno de ejecución Java (JRE) se ha convertido en un componente habitual en los PC de usuario de los sistemas operativos más usados en el mundo. Además, muchas aplicaciones Java lo incluyen dentro del propio paquete de la aplicación de modo que se ejecuten en cualquier PC.
Son innumerables las compañías que desarrollan aplicaciones para Java y/o están volcadas con esta tecnología:
- La industria de la telefonía móvil está fuertemente influenciada por la tecnología Java.
- Los entornos de desarrollo Netbeans y Eclipse ha tomado un lugar importante entre la comunidad de desarrolladores Java.
- La fundación Apache tiene también una presencia importante en el desarrollo de bibliotecas y componentes de servidor basados en Java.
- IBM, BEA, IONA, Oracle,… son empresas con grandes intereses y productos creados en y para Java.
Java en código abierto
Java se ha convertido en un lenguaje con una implantación masiva en todos los entornos (personales y empresariales). El control que mantiene Sun sobre éste históricamente ha generado reticencias en la comunidad de empresas con fuertes intereses en Java (IBM, Oracle) y, obviamente, en la comunidad de desarrolladores de software libre.
La evolución basada en un comité en el que participen todos los implicados no es suficiente y la comunidad demandó por mucho tiempo la liberación de las APIs y bibliotecas básicas de la JDK.
OpenJDK es la versión libre de la plataforma de desarrollo Java para este lenguaje orientado a objetos. Esta implementación se encuentra catalogada dentro de la licencia GPL de GNU con una excepción de enlaces, por lo que algunos de los componentes de las carpetas de clases y sitios web de Java se excluyen de los términos de la licencia para poder ser considerados dentro de la versión estipulada como GNU.
Jean-Luc, desarrollador principal de Nxt:
La tecnología Blockchain es nueva, aún no existe un conjunto de bibliotecas java específicas para ello, que debieras utilizar si quisieses desarrollar una blockchain. Al final todo se reduce a preferencias personales y estilísticas.
La blockchain puede considerarse como una base de datos versionados, donde el procesamiento de cada nuevo bloque ejecuta una operación en la base de datos para modificar el estado de la base de datos (tal como los saldos de cuenta) a uno nuevo, pero como este bloque (y no sólo este último, algún otro) podría ser desprendido, el estado anterior también debe de conservarse y tiene que haber una manera de volver a él. Esto es algo específico de las aplicaciones blockchain. En nuestro caso, hemos implementado nuestra propia versión utilizando una capa propia de mapeo objeto-relacional.
Pasadas 720 confirmaciones las transacciones son irreversibles, es decir, un bloque de más antigüedad ya no se puede desprender. Esto significa que no necesita que se mantenga el estado de base a los datos pasados 720 bloques y, como optimización (un tema muy importante) debe ser recortado. Esta es otra de las características específicas de nuestra capa versionada de la base de datos.
Otra cosa: esto es una aplicación p2p, pero no puedes confiar ciegamente en ninguno de las peers, debes validar todas las entradas y atender a los casos especiales. No puedes permitirte el lujo de cometer errores…
Con todos los datos previamente expuestos, resulta evidente que Java era la opción más lógica para el desarrollo de Nxt y conseguir, de este modo, hacerlo competitivo dentro del mundo de las finanzas. Después de todo no es de extrañar que BCNext, el misterioso creador de la cripto-plataforma Nxt, decidiera idearla en Java.
Fuentes:
http://www.streetdirectory.com/travel_guide/114362/programming/most_significant_advantages_of_java_language.html
http://www.java-success.com/
http://www.tiobe.com/tiobe_index
http://stackoverflow.com/questions/242225/what-are-the-benefits-of-java
http://www.cinnober.com/sites/cinnober.com/files/news/The-benefits-of-Java-white-paper-1.pdf
https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)
https://en.wikipedia.org/wiki/Free_Java_implementations
http://www.forbes.com/sites/oracle/2014/03/26/8-reasons-to-love-java-8/#781c79d156d5
http://www.ibm.com/developerworks/java/tutorials/j-sec1/j-sec1.html
https://es.wikipedia.org/wiki/OpenJDK
https://es.wikipedia.org/wiki/Java_Community_Process