Posted: April 28th, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming | Tags: java, Programming, Ruby | No Comments »
“
Why would any self-respecting Java developer care about Ruby? Ruby is a general-purpose scripting language created 10 years ago in Japan. Contrary to popular belief, it is a pure object-oriented language. Unlike Java technology, Ruby has no scalars, so everything, including integers, are first-class objects. Ruby’s syntax borrows heavily from Smalltalk, Python, and Ada. Like the Java programming language, Ruby is a single inheritance language, but it offers some advanced features that Java technology does not, such as closures (think anonymous inner classes on steroids) and mix-ins (similar to interfaces, but less tightly bound to the class). Ruby is also highly portable, running on all major operating systems.
Ruby is also red-hot right now. People are starting to use it for the types of applications where it excels. Because it is interpreted and uses dynamic typing, you can do all sorts of magic tricks at run time that are very difficult in Java. One of the surprising capabilities enabled by dynamic typing and expressive syntax is the ability to create domain-specific languages in Ruby that allow you to work at a higher level of abstraction, away from the ‘raw’ syntax of the language. Ruby on Rails is a framework for creating Web applications backed by databases that shows this elegance. Rake, Ruby’s version of Make and Ant rolled into one, is another example of this powerful use of the language.
The other reason to start playing with Ruby is that all the cool kids are doing it. Many of the people who recognized that Java technology was going to be important back in 1996 (like Glenn Vanderburg, Bruce Tate, and Martin Fowler) are heavily involved in Ruby now. Even if you aren’t going to change all your development efforts to Ruby, maybe it’s time you took a look at this language.
One of the main limiting factors to widespread development in Ruby is a good development environment (for those who don’t want to learn Emacs). The RDT changes that. What better way to experiment with Ruby than in your favorite IDE, Eclipse?
My favorite IDE is EMACS and you ?
Tinix./
“
(Via TinixTech’s Weblog.) Original Link: Why Ruby…??? My Reasonable Question
Posted: April 1st, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming | Tags: java, Open Source, Programming | No Comments »
Utilizo mucho estos 2 lenguajes, principalmente Java. Por ello, voy a tratar de describir sus diferencias, similitudes, ventajas y desventajas. Hago esto para que los que quieran adentrarse en estos lenguajes, puedan tener una referencia.
En principio, me gustaría señalar que la principal ventaja que tiene Ruby frente a Java, es lo compacto y simple que es el lenguaje. Esta diseñado para que no tengamos que escribir largos bloques de código y además, para que la lectura del código se asemeje un poco mas al lenguaje humano que al computacional.
Para ejemplificar lo que les digo, vamos a programar un simple algoritmo que escribe 3 veces una cadena por la pantalla.
En Java:
for(int i=0;i<3;i++) { System.out.print("cadena de texto");}
En Ruby:
3.times do print "cadena de texto"end
Como pueden ver, el código en Ruby es más compacto y es más directa su lectura.
Para los que son adeptos a la sintaxis más “computacional”, Ruby nos permite escribir el algoritmo anterior, de la siguiente manera:
3.times { print("cadena de texto");}
Podemos ver que la sintaxis anterior, es muy similar a la usada en Java. Puntualmente podemos ver las siguientes similitudes:
- Las líneas de código con el “punto y coma” final
- Los bloques de código delimitados por los símbolos { y }
- Los parámetros pasados a un método, entre paréntesis.
Definitivamente, Ruby es muy flexible con respecto a la sintaxis que usamos para programar. Muchos pueden argumentar en este punto, que la sintaxis de Java es mucho más potente que la de Ruby, ya que en este último no se puede acceder al índice y tampoco es posible especificar los valores inicial, final y de paso, del índice de iteración (La variable i en el código de Java).
En respuesta a lo anterior, Ruby nos permite hacer lo siguiente:
0.step(2,1) do |i| print "cadena de texto - Iteracion ${i}"end
Este método, ejecutará el bloque de código variando el índice i, desde el valor inicial 0, hasta el valor final 2, sumándole 1 en cada paso. Como ven, Ruby se adapta bastante a nuestros gustos.
Si bien esta flexibilidad tiene muchas ventajas, también puede traer problemas. El principal (según mi punto de vista) es que cuando en un proyecto participan muchos programadores, si no se establece una convención de sintaxis, podemos terminar con una gran mezcla de código de sintaxis muy variada, y esto puede traer mucha confusión en la lectura y manutención del mismo.
Otras de las grandes desventajas de Ruby, es que es un lenguaje totalmente interpretado, lo cual trae problemas de rendimiento y escalabilidad. Prueba de esto, es que Twitter está mudando su plataforma de Ruby on Rails, a Scala.
Otras de las fuertes debilidades que le veo a Ruby, es que es un lenguaje de tipos débiles. Esto quiere decir que las variables que usamos no tienen un tipo fijo, y que tampoco es necesario declararlas para uso.
En mis experiencias (laborales y académicas) utilizando lenguajes de tipos débiles, he llegado a la conclusión de que es algo útil en algoritmos y programas de poco tamaño. Pero cuando la cantidad de código comienza a crecer (proporcionalmente con la cantidad y complejidad de las capas y módulos de nuestra aplicación), esto se vuelve una gran desventaja.
Piensen en que si una variable no tiene tipo fijo, entonces tenemos que suponer que tipo tiene al momento de usarla y esto genera errores, que en algunos casos son casi imposibles de detectar, sobre todo en aplicaciones donde los datos se mueven a través de los distintos módulos de la aplicación, atravesando a su vez, las distintas capas de la misma.
Como señalé anteriormente, en Ruby tampoco es necesario declarar una variable para usarla. Esta es otra fuente de muchos problemas. Varias veces perdí muchas horas tratando de resolver un bug, para darme cuenta que el problema era que una variable estaba mal escrita (al no tener que declararla, el intérprete la toma como una nueva variable). Aunque tengo que reconocer que el uso de IDE’s con autocompletado (como Netbeans o Eclipse) han minimizado mucho estos problemas.
Para finalizar, les dejo una lista de similitudes y diferencias que existen entre estos 2 lenguajes.
Similitudes:
- En ambos lenguajes contamos con manejo automático de memoria, a través de un recolector de basura.
- Los objetos son de tipos fuertes (Las variables son de tipos débiles en Ruby, pero los objetos no).
- Ambos soportan casi la totalidad del modelo orientado a objetos.
- Los 2 cuentan con herramientas de documentación embebidas. (Javadoc en Java y Rdoc en Ruby).
- Tanto Ruby como Java, son lenguajes totalmente libres (licencia GPL).
Diferencias:
- Ruby es interpretado, Java es compilado y luego interpretado.
- En Ruby se pueden usar como separadores de bloques las palabras claves do y end, o los símbolos { y }. En Java sólo es posible usar { y }
- En Ruby, todos los atributos de una clase son privados, en Java pueden ser privados, públicos o protegidos.
- En Ruby, la lista de parámetros pasados a un método, puede o no estar delimitada por paréntesis. En Java, los paréntesis son obligatorios.
- En Ruby, absolutamente todo es un objeto. En Java existen tipos de datos que no son objetos.
- En Java existe el chequeo de tipos. En Ruby no, ya que es interpretado.
- En Java, las variables son de tipo fuerte. En Ruby las variables son de tipos débiles.
- En Ruby tenemos los mixin’s, en contrapartida de las interfaces de Java.
Me gustaría destacar una de las grandes ventajas de Java frente a Ruby. Esta ventaja, es la gran cantidad de bibliotecas y frameworks disponibles directamente para su uso. Lo anterior, sumado a una inmensa comunidad de usuarios, hacen que Java sea uno de los lenguajes mas usados.
En el poco tiempo que llevo desarrollando en Ruby, he encontrado una gran comunidad de usuarios y bibliotecas disponibles, pero si tenemos que comparar en cantidad, se queda muy corto comparado con Java.
Si bien Java es un lenguaje muy potente, no hay que pensar que es lo mejor para todo. Todas las herramientas tiene sus puntos fuertes y débiles y hay que saber cuando utilizar una u otra. En mi caso, he encontrado que Ruby es excelente para hacer proyectos de pequeño y también es bastante aplicable en proyectos de mediana envergadura. En proyectos grandes, definitivamente Java es una de las mejores opciones, sobre todo en términos de rendimiento en ámbitos de mucha concurrencia, y en escalabilidad de los sistemas.
Espero que les sea de utilidad. Nos vemos en la próxima.
(Via Entre tazas, joyas y pingüinos.) Original Link: Java vs Ruby