Archive for the ‘Java’ Category

Ejecutar Java en JavaScript

Monday, April 28th, 2008

¡OMG! Esa fue mi reacción inicial.

Parece que un grupo de japoneses están desarrollando una JVM de Java en JavaScript. También conocido como ECMA-262, JavaScript es el lenguaje de Scripting utilizado en las páginas Web para usar DHTML, Ajax y como combustible ecológico y de alto octanaje para la Web >= 2.0.

Leo en Slashdot, vía John Resig:

Se llama Orto y es una implementación de la Máquina Virtual de Java (JVM) en JavaScript. Esto significa que, dado un programa Java ya existente, se lo puede compilar a bytecode java, hacerlo pasar por Orto (quien produce el JavaScript), y empotrarlo en una página Web. Si bien no provee todas las posibilidades de todo código Java, ofrece lo suficiente para realizar algunas demostraciones interesantes.

La demo: un tetris en JavaScript.

Parece que, una vez más, Joel Spolsky estuvo en lo cierto.

Java Auto Boxing?

Wednesday, January 30th, 2008

java auto boxing?

Crash, Boom, Bang!

Tuesday, October 30th, 2007

javawerror.PNG

(Gracias, Franco!)

Try, Catch, Finally: Qué imprime?

Tuesday, October 23rd, 2007

try-catch-finally

Muejeje

Friday, October 19th, 2007

muejeje

Cual elijo?

Thursday, September 20th, 2007

new java math bigdecimal ?

¿Cómo aprendo a programar en Java?

Tuesday, June 12th, 2007

Trabajo programando en Java, y me gustaría resumir en pocas palabras toda la cultura popular detrás de esa simple pregunta. Hoy en día el que quiera aprender programación por su cuenta esta realizando una de estas dos cosas:

  1. Suicidio
  2. La mejor elección de su vida

Como te podrás imaginar, la opción 1 es clara dada variedad de respuestas totalmente opuestas y dispares que te pueden llegar a dar si le disparás a alguien esa simple pregunta*.

Al menos como yo lo veo, en ese aspecto no hay grises. Al día de la fecha hay demasiados lenguajes de programación, demasiadas tendencias y demasiados puntos de vista diferentes para poder encarar por uno mismo esa titánica tarea de aprender a programar de forma autodidacta.

Al mismo tiempo, eso es algo bueno ya que tenés infinidad de herramientas y materiales de los cuales uno puede ejercitarse.

Antes de dar una respuesta a esa pregunta, hay que tener algo en claro: aprender a programar es algo que lleva tiempo, dedicación y esfuerzo. Alguien dijo que es un arte, pero también hace falta disciplina. Y como cualquier disciplina, hay que dedicarse a aprender las cosas que realmente importan, en tiempo y forma.

Al menos si uno pretende hacerlo bien.

Dejando muchos detalles de lado, todos los lenguajes de programación son básicamente iguales. Las diferencias entre Ruby, Python y Java (e incluso con C++) no se comparan en relación a las cosas que tienen de parecidos.

¿Qué cosas realmente importan en la programación? No voy a dar un curso de programación, sino simplemente enumerar lo que yo creo que vale la pena aprender. Para todo lo demás, Google y la Wikipedia están para ayudarte. Algunas personas dicen que Yahoo es también una buena opción.

Y en el caso que uno se termine apasionando por la programación, siempre está la opción de seguir alguna carrera universitaria del tema. Ciencias de la Computación en una linda opción, al igual que cualquier otra equivalente (en mi caso, Licenciatura en Informática).

Lo más importante es aprender a pensar apropiadamente. Esto es algo duro de aceptar para algunas personas, pero la realidad es que uno se tiene que adaptar a ver el mundo de la programación de forma diferente. Hace algunos años estuve de profesor ayudante, explicándole a los alumnos de primer año de mi universidad cómo resolver ejercicios de programación, y ese era el mayor inconveniente de todos.

Muchos decían “yo tengo mi propia manera de programar”. He visto a varias personas quedarse estancadas en la carrera (y cometer crímenes en contra de la programación) por pensar de esa forma.

Los otros dos mayores inconvenientes que tenían era poder diferenciar un algoritmo de una estructura de datos, cuando algo era cada cosa, y cuando usarlas y cuándo no. En programación esa distinción es muy importante, pero no muchos le dan importancia.

Un algoritmo es la “receta” de cualquier programa, y la estructura de datos son los ingredientes de esa receta.

En el caso de un programa, un algoritmo son las operaciones que se realizan (asignar variables, operaciones matematicas, tomar desiciones con un if, hacer un while, etc), y las estructuras de datos es el lugar usado para guardar la información (variables, clases, registros, arrays, etc).

Un algoritmo muy simple es el de contar la cantidad de caracteres que se leen desde teclado, hasta llegar a un punto. En este caso, no hay muchas estructuras de datos sino simplemente las variables que se usan para leer los caracteres. Otro muy parecido es contar la cantidad de letras “x” que hay dentro de un String. En Java eso es muy sencillo:

static int contar_equis(String s)
{
int cantidad = 0, indice;

for (indice = 0; indice < s.length(); indice++)
if (s[indice] == ‘x’)
cantidad++;

return cantidad;
}

Un algoritmo más elaborado es el de ordenar números dentro de un vector. Hay diferentes métodos o técnicas, como la de inserción, selección, burbuja con o sin centinela, quick-sort, sorting by merge, etc.

En el cuarto y quinto puesto del ranking de dificultad de cualquier tarea de programación están los temas de punteros y recursión. En los exámenes de primer año de mi facultad esos dos temas eran los que marcaban si alguien aprobaba la materia o no.

Ésto era así no por un capricho de los docentes de la materia, sino porque históricamente fueron las dos herramientas más potentes a la hora de resolver un problema en un programa.

Los lenguajes de programación como Java existen para hacerle al programador la tarea más fácil, ocultando lo que hay debajo: un procesador con registros conectado a una memoria principal por medio de un bus, y muchas otras cosas que no viene al caso mencionar (por temas de espacio, son tantas que no terminaría nunca de nombrar) pero que responden a lo que Von Neumann alguna vez dijo.

Los punteros, a su vez, existen para recordarle al programador que el lenguaje de programación le está ocultando todo eso de ahí abajo; que hay algo llamado procesador y que nada funciona por arte de magia.

Los punteros te recuerdan que hay algo llamado caché, que hay diferentes modos de direcionamiento de los datos (cada uno con sus ventajas y desventajas), y que ciclo tras ciclo el contador de programa se incrementa y la ALU (UAL en castellano) por medio de la CU (UC en castellano) ejecuta cada una de las instrucciones en código máquina.

De esa forma siempre existió alguna clase de equilibrio entre lo que es la “realidad” y lo que es la facilidad de hacer un programa.

La recursión es lo que le permite a un programador, por medio de un programa, dividir un problema grande y difícil en algo mas sencillo y simple de manejar. Uno puede tener una base de datos con información de toda las personas de un país, y la recursión nos ayuda de alguna manera a encontrar la información de una sola persona dentro de todo ese gran volumen.

Eso, hasta que llegó Java. En este lenguaje no existen los punteros, y la recursión es algo que rara vez se usa ya que el 99% de los casos en los que uno debería usarla se termina eligiendo algo que el lenguaje Java o la JDK te provee.

Querer aprender Java no es lo mismo que querer aprender a programar. Mucha gente aprende Java solo para poder trabajar de eso y ganarse algún dinero, pero solo los que quieren aprender a programar pueden lograr algo interesante. De la misma forma que hoy en día Java es uno de los lenguajes de programación más populares, 25 años atrás lo era COBOL.

No tengo nada en contra de ese lenguaje. El problema es que los que se durmieron en los laureles y solo se quedaron con COBOL, a la larga perdieron su trabajo y se quedaron en el tiempo. El error de ellos no fue querer aprender COBOL: en algún momento hay que leer el manual de COBOL, aprender a usarlo y escribir código en ese lenguaje. El error fue no aprender lo que realmente importa: a pensar, y los algoritmos y estructuras de datos adecuados.

Dentro de 20 años, los que se quedaron con un simple curso de Java van a quedarse sin trabajo y todo lo que aprendieron no les va a servir para nada útil.

Lo mismo ocurrió hace 5 años con Visual Basic 6.0. Cualquiera que haya hecho un curso de ese lenguaje y haya pagado, lo estafaron. Microsoft, por una cuestión puramente monetaria, decidió no continuar con el soporte para los usuarios de ese lenguaje. Desde ese momento, todos los programadores de VB 6.0 tuvieron que aprender .Net o dedicarse a otra profesión.

Por último, la programación orientada a objetos no es más que esas tres cosas metidas dentro de una sola cosa (llamada objeto ^^), pero visto desde otro punto de vista, bastante más abstracto.

¿Querés aprender Java? La pagina de Sun es excelente:

http://java.sun.com/docs/books/tutorial/

¿Querés aprender a programar? tenés que aprender:

  1. A pensar
  2. Identificar los algoritmos y estructuras de datos, y ser capaz de elegir apropiadamente cuando usarlos
  3. Punteros
  4. Recursión

* De hecho es muy probable que estés por tomar la opcion 1 luego de terminar de leer esto.

Por que Java no me gustaba

Wednesday, November 29th, 2006

… aun sin haberlo usado, y por que ahora lo miro con otros ojos

Hace mucho, mucho tiempo en una galaxia muy, muy lejana existia un lenguaje llamado Visual Basic. Con ese lenguaje por el año 1997 (cuando yo tenia 12 años) aprendi que era la programación. En esa misma época, cientos de miles de programadores en todo el mundo usaban VB para ganarse el pan de cada día desarrollando aplicaciones de, entre otras cosas, bases de datos.

¿Quien no vió una? Hace unos cuantos años en el hospital donde trabaja mi padre instalaron un sistema de gestion y manejo de pacientes, y a simple vista uno se daba cuenta el lenguaje en el que lo hicieron: Visual Basic. De la misma forma, habia millones de lineas de codigo en ese momento que ya habían sido escritas, estaban siendo escritas, y serían escritas.

Varios años mas tarde, ya era bastante sabido que ocurriria lo impensable, y el 31 de marzo de 2005 Microsoft puso punto final: corta el soporte para dicho lenguaje. 265 MVPs de Microsoft firmaron un petitorio para que esto no sea asi. Microsoft los ignoró; no le convenia economicamente, tenia que promover su nueva y brillante VM.

¿Tenes algun problema con el compilador que tanto dinero te costó comprar? Si, bueno, pagame un poco más y capaz te ayudo. ¿Queres Visual Basic? Usá .Net. Ahh.. si, hay un problema: lo único en que se parecen VB 6.0 y VB.Net es en el nombre; son lenguajes completamente diferentes.

Miles de millones de lineas de codigo tiradas por las cloacas.

Mi miedo con Java era que la historia se vuelva a repetir: si algun dia a Sun no le convenia económicamente continuar el desarrollo de Java, lo iban a hacer sin que uno desde su posicion de insignificante programador pueda hacer algo.

Es por eso tambien que soy muy rehacio a .Net. Si bien .Net tiene su propio estandar ECMA y un par de VMs alternativas, le falta un gran pedazo que Microsoft ni en un millon de años va a estandarizar: las clases de la interfaz grafica. La unica forma de respetar el estandar oficial publico ECMA de .Net es hacer programitas de consola. Es por eso que las otras VMs de .NET no son de fiar: todo lo que no aparece en el estandar lo hicieron a ojímetro con el masomenómetro para que aparentemente funcione.

No soy ningun fanático de Sun, pero haber liberado Java bajo GNU/GPL fue un gran paso para toda la indistria de la informática. Hoy en dia si uno tiene un programa en Visual Basic que no funciona, tiene que pagarle una suma importante a Microsoft para que lo ayude. Digo “importante” porque recordemos que el compilador de VB hay que comprarlo, y se supone que el soporte viene gratis (ya no es mas asi). Un programador Java, en cambio, puede elegir cambiar de VM (hoy en dia GCJ es una MUY buena alternativa, segun dicen) o leerse un par de cientos de miles de lineas de codigo.