Tiene 12 años, se llama Allwell y es SCJP

Este post tiene un fin motivacional, y demostrarle a mis queridos y silenciosos lectores que el examen no es la gran cosa y que, literalmente, hasta un niño puede hacerlo.

Según lo publicado en ngbd , el crío de la hazaña se llama Nyemahame Allwell Worgu, es nigeriano y se hizo Sun Certified Java Programmer con un puntaje de 72%. Y por si acaso, no es el único niño con certificación: El 2001 la niña Pakistaní Afsah Shafqat, de doce años también, hizo lo mismo.

Además, Alwell es un ejemplo de modestia y humildad. Según sus palabras, después del exámen: "me sentí normal, no sentí alegría dado que el examen era bastante sencillo y yo me encontraba listo para darlo.". Asimismo, nos demuestra su buen juicio y criterio afirmando que "la gente de raza negra es más inteligente que la gente de raza blanca"

Bueno, Alwell es un niño, todavía está en formación y ha logrado un credencial importantísimo como es una certificación Sun, por lo que desde acá mis felicitaciones. Alwell quiere estudiar en el MIT o en Cambridge, y a mi criterio tiene todo el potencial para hacerlo. Ahora, lectores adultos y contemporáneos míos; ponganle fuerza y ganas a esto de la certificación, que en el fondo no es más que un juego de niños.

Hasta otra!!


PS: Que quede en actas, que mi puntaje es superior al del chiquillo xD

La pregunta SCJP del día: Modificador static


(Imagen: Pancho Fierro - Zamacueca de salón)

Una fácil, para que no se me asusten xD
  1. Which of the following statements is true about the static modifier?
    1. A static variable cannot change it's value
    2. A static method cannot be overriden to be non-static
    3. A static method is often written in a non-Java language and exists outside the JVM
    4. The static code lies outside of any class
La idea detrás de un campo o método estático es todas las instancias de la clase accederán al mismo campo u objeto según sea el caso. De declarar una variable de instancia estática, todas las instancias de la clase accederán a la misma variable de instancia.

Para el caso de métodos estáticos, estos pueden ser ejecutados sin necesidad de instanciar la clase, a través del nombre de la clase. Volviendo a la pregunta, lo primero corresponde al modificador final, la tercera al modificador native y la cuarta es incorrecta debido a que el código estático está dentro de la clase.

Por ende, la respuesta es la segunda. Ya que los métodos estáticos no pueden ser sobre -escritos (overriden), pero pueden ser ocultos. Más información aquí

Pregunta tomada de SCJP Exam for J2SE 5 de Paul Sanghera

SCJP - Enums Parte 1



Hasta antes de la aparición de Java 5, para poder representar determinados valores constantes o tipos de datos enumerados, usualmente teníamosque recurrir a interfaces, ya que estas nos permiten definir valores constantes, estáticos y públicos que pueden ser referenciados desde cualquier sección de código.

Sin embargo, para los amantes de un código limpio (como yo xD), esta solución no convence ya que no es el objetivo de una interface (o de una clase si es que es utilizada para este propósito) el ser un contenedor de constantes.

Afortunadamente para nosotros, desde la versión 5 de Java se incluyeron los Enums (o enumeraciones). Los Enums son objetos especiales de Java (como los arreglos) que sirven como tipos de datos que almacenan un conjunto fijo de valores y justamente resuelven el problema de tener constantes desperdigadas en interfaces y clases.

Una enumeración, en su forma más básica, se define de la siguiente manera:

enum DireccionesBrujula{ NORTE, OESTE, SUR, ESTE }

Como podemos observar en la declaración anterior, la palabra reservada enum nos indica que se va a definir una enumeración. En su contenido se definen las constantes de la enumeración, separadas por comas.

¿Y dónde puede ser usada una enumeración? Pues en todos los sitios donde puede ser usada una clase, se puede user como miembro de una clase, como variable local, etc.

En una clase Barco podría ser útil la dirección que se está cursando. Entonces la enumeración se usaría de la siguiente manera:

class Barco{
DireccionBrujula curso;
}

Y para asignarle un valor a la enumeración, se deben usar cualquiera de los valores constantes que hemos definido. Por ejemplo:

curso = DireccionBrujula.NORTE;

Otra ventaja que tenemos al usar una enumeración, es que pueden ser usadas dentro de expresiones switch, como si fuera una constante entera.

switch (curso){
case NORTE:
System.out.println("Estamos en la dirección correcta");
break;
case SUR:
System.out.println("¡Estamos en la dirección contraria!");
break;
default:
System.out.println("Estamos perdidos...");
break;
}

Otro punto que debemos tener en cuenta es que un Enum puede ser definido dentro o fuera de una clase, y de acuerdo a esto cambia la forma en la que se acceden a sus constantes.

class Barco{
    enum DireccionesBrujula{ NORTE, OESTE, SUR, ESTE }

    DireccionesBrujula curso; 
}

Si la enumeración esta definida de esta manera, entonces la forma de acceder a sus constantes desde fuera de la clase Barco (siempre y cuando los modificadores de acceso nos lo permitan) sería:

DireccionesBrujula direccion = Barco.DireccionesBrujula.NORTE;

Pero con lo mostrado hasta ahora los Enums pueden parecer unos simples tipos de datos para representación de constantes, sin embargo el poder verdadero de estos se aprovecha cuando se le definen variables de instancia, constructores y métodos. Sin embargo no quiero hacer este post muy largo así que lo dejaré para una segunda parte.

La pregunta SCJP del día - Autoboxing

(Imagen : Pancho Fierro - Capeador de Toros)
Como para que vayan calentando para el examen, aquí les dejo una preguntita (la pongo en inglés, porque el examen está en inglés... y sorry por la indentación!):
package wrapper_boxing;
public class WrapperTest2
{
public static void main(String[] args)
{
Boolean bool1 = new Boolean(true);
Boolean bool2 = new Boolean(false);
Boolean bool3 = new Boolean("false");
Boolean bool4 = new Boolean(bool1);
System.out.println(bool1.equals(bool4));
System.out.println(bool2 == bool3);
System.out.println(bool1 == bool4);
}
}
  1. The program will not compile because the creation of bool4 object will cause compilation error.
  2. The program will produce the output 'true false false'.
  3. The program will produce the output 'true true true'.
  4. The program will output 'true false true'.

Entonces... veamos. Si revisamos la especificación de Boolean, veremos que no tiene un constructor del tipo Boolean (Boolena b). ¿Entonces la 1. es correcta?... No!!! Recuerden que desde J2SE 5 se aplica autoboxing, por lo que se extraerá el valor boolean (primitivo) del objeto y será pasado al constructor, por lo que no habrá problemas de compilación.

La primera comparación entre bool1 y bool4 se hace mediante "equals", por ende es una comparación semántica donde se comparan valores. Como bool1 y bool4 tienes valores de "true", entonces la comparación será true. En la siguiente línea, la comparación entre bool2 y bool3 se hace mediante el operador "==" lo que implica que se están comparando direcciones de memoria , por lo que al tratarse de objetos diferentes (cada uno fue instanciado independientemente) la comparación nos arroja "false". De manera similar en la siguiente línea, la comparación de dos objetos diferentes nos arroja "false"

Concluyendo, la respuesta correcta es la 2.

Pregunta tomada de JavaBeat

3 Verdades sobre las certificaciones SUN

(Imagen: Pancho Fierro - El soldado y la rabona)
  • El puntaje no importa...lo importante es pasar. Cuando llegue el diploma a casa, tu score no estará impreso en ningún lado. Así que si pasas a las justas , siéntete tranquilo
    • NOTA: La gente que saca un notón suele ponerlo en su currículum: de ser tu caso, te lo recomiendo
  • Si es que jalas (Dios no quiera), puedes volver a dar el exámen, pero SUN te impone una penalidad de dos semanas para volver a darlo. Aunque si tu puntaje fue escándalosamente bajo, tal vez necesites tomarte más tiempo para estudiar
    • NOTA: Por si no está implícito, lógicamente debes comprarte otro voucher (a menos que tu voucher tenga retake)
  • Las Certificaciones SUN no expiran, así que si pasas el examen serás Certified hasta el fin de tus días. Claro que de aquí a unos años, tu SCJP 5.0 no se verá tan bien como un SCJP 10.X, así que considera bastante tomar un upgrade

Programo en J2SE 1.4, pero quiero ser SCJP 1.5


Llevo programando por casi dos años, y al menos profesionalmente nunca me han pedido programar sobre J2SE 1.5. En las empresas a las que he llegado la plataforma siempre operaba sobre 1.4, por lo que me atrevo a decir que en nuestro mercado (el peruano) existen muy pocas aplicaciones de gran escala que operen sobre J2SE 1.5. Tal vez esté equivocado, pero conozco varios colegas que piensan lo mismo.

Si bien el examen de 1.4 todavía está disponible, creo que muy pocos querrán darlo dado que la última versión del examen es la 6.0. Entonces, el problema vendría a ser como preparse para dar un examen (de dificultad) sobre una plataforma sobre la que nunca se ha programado. Y sobre todo, querido lector, no vaya a cometer el error que yo cometí, de pensar que las diferencias entre una y otra versión era mínimas. Porque las diferencias están, son muchas e importan.
  • J2SE 5.0 le ha agregado un montón de cositas al lenguaje, por lo que se puede decir que ahora el lenguaje es diferente. Estudiar, y a conciencia, los siguientes temas: Enums, Generics (esto es horrible, leerlo dos veces. Ahora, puedes definir tipos para colecciones . Ej Arraylist), Static imports, Autoboxing (radical diferencia!!! tu método void hacerAlgo (int valor) puede tomar como parámatro un new Integer()...y va a compilar!!)
  • Ahora se evaluán también el API de J2SE. Revisar StringBuilder, Locale, Formater, Scanner, Pattern, Matcher. Ah!! Y ahora también evalúan I/O, así que una repasadita a File, BufferedReader, BufferedWriter, FileReader, FileWriter, y PrintWriter
  • También evalúan en el SCJP 5.0 principios de orientacióna objetos como high cohesion y loose coupling (sorry...no sé bien como traducirlos), pero ya no son necesarios los temas de manipulación de bits que venían en el SCJP 1.4
Como testimonio, yo dí el examen SCJP sin haber programado una solo linea sobre el J2SE 5.0 (si siquiera habia instalado el compilador xD) y me fui valientemente a dar el examen con la confianza de ser un buen programador y que era imposible que las cosas hubieran cambiado tanto. Como era de esperarse, JALÉ, y al agarrar el libro (ver post) me di cuenta del tamaño de mi ignorancia en lo referente a J2SE 5.0. No se confien

PS: Hasta ahorita no he programado profesionalmente sobre J2SE 5.0
Otra PS: Lógicamente, a la segunda si pasé el exámen

Salario : ¿Cuánto está ganando un Sun Certified Professional?


Sabemos muy bien que el dinero no hace la felicidad, que no es lo más importante en la vida y que corrompe a los hombres buenos pero sabemos también que un salario jugoso cada fin de mes se siente muy bien. Es que es un hecho que para hacer lo que nos gusta se necesita plata: unos tragos con los amigos, una buena película o una buena comida tiene su equivalente en soles (o dólares). Una certificación definitavemento nos hace más empleables, pero quería también saber si es que también nos hace más ricos xD.

Payscale es una web gringa dedicada a obtener salarios promedio según diversos criterios. Por ser una Web gringa, los datos que nos muestra son anuales, y en dólares. Acá les muestro lo que señala en lo referente a SCJP (Sun Certified Professional) y SCWCD (Sun Certified Web Component Developer) . AVISO: Si eres un certificado peruano, este post te hará sentir mal pagado y sobre explotado. Depresivos abstenerse.

Hay que tener en cuenta que el costo de vida en Estados Unidos es más alto y todo eso...pero igual esos números se ven muy grandes comparados con lo que un profesional certificado hace por acá (y a veces sin los beneficios de ley xD). De repente me entraron unas ganas de mudarme..!!

Guía de certificación Java para peruanos


Bueno, vamos ahora toca describir los pasos a seguir si algunos de mis compatriotas desea certificarse. Nuestros vecinos chilenos la tienen más fácil dado que Sun Microsystems tiene una sede allá en Chile, pero nosotros, y otros programadores sudamericanos ..supongo; tenemos que hacer unas cuantas jugadas antes de obtener los vouchers y poder rendir el exámen (pasarlo o no ya es otro tema). Ahi les va:

  1. Escribirle a la señorita Claudia Campos (Claudia.Campos@sun.com)de Sun Microsystems de Chile, y decirle que son peruanos y quieren certificarse en Java.
  2. La señorita Clauida es muy amable y diligente, y en unas pocas horas les hará llegar un número de cuenta donde hacer el depósito del importe respectivo. A la fecha, el precio de los vouchers era de 300 dólares (por si acaso pregúntele a Claudia si está vigente alguna promoción: precio reducido o retake)
  3. El problema es que la cuenta bancaria que Claudia tan amablemente nos ha hecho llegar, es que se trata de una cuenta Citybank en Chile, por lo que es necesario realizar una transferencia Interbancaria.
  4. Si están en perú, les recomendaría que la transferencia la hagan mediante el banco de crédito. EL costo es de 25 dólares, así que si compran varios vouchers pueden dividir este costo. Asimismo, es requisito que tengas una cuenta en dólares en dicho banco (si quieren ábranse una para hacer la transacción o hablen con alguien para que les haga el favor)
  5. Envíenle a Claudia los scans de los documentos que genera la transferencia, junto con los datos de factuación (nombre, dirección , DNI) de cada uno.
  6. Tener paciencia... y esperar
  7. Una vez que la gente de Sun reciba la confirmación de la transferencia (demora entre 3 a 4 días), Claudia procederá a enviarte por e-mail los vouchers de certificación, que no son otra cosa que papelitos enumerados.
  8. Estudia para tu examen a conciencia, y lee siempre el blog xD
  9. Una vez que te sientas listo, ingresa a la web de Prometric ; créate una cuenta y programa tu exámen en la hora y el lugar que desees (yo siempre doy en la UNI..es una cábala), teniendo en cuenta la fecha de vencimiento del voucher.
  10. El día del examen lleva tu DNI, no te pongas nervioso y certifícate xD. Ahora puedes pedir un aumento de sueldo.
Creo que está todo. Si falta algo me avisan.

Actualización (25/08/2009): Desde hace unos meses ya no es necesario contactarse con Sun de Chile, debido a que una empresa peruana (CJAVA) ya está distribuyendo los vouchers de certificación de Sun. Ellos nos ahorran el rollo de la transferencia interbancaria.

Quiero certificarme y no sé de donde estudiar

Entonces, querido lector, este post es para tí. Si es que tienes el tiempo, y el dinero, definitivamente un curso presencial es la mejor opción de capacitación (pero ten mucho cuidado con que no te estafen). En cambio, si tu presupuesto es más modesto y pues calificas como autodidacta (ah!! Y si sabes inglés... sino, puedes seguir leyendo el blog) un libro es una buena opción. A continuación una lista de los que he leido y me han llevado a la certificación

  • SCJP 5.0
    • Mc Graw Hill - Osborne - Sun Certified Programmer for Java 5 Study Guide (2006). Definitivamente muy completo, y considerablemente más difícil que el examen real. De leerlo a consiencia, yo diría que tienes el 80% de posibilidades de pasar. También cubre temas para Sun Certified Developer. Ah..! Y tiene cierta complejidad...por lo que si de Java no sabes ni el "Hola Mundo" no te lo recomiendo
    • Apress - SCJP Exam for J2SE 5 (Paul Sanghera). Este librito es significativamente más delgado que el anterior, así que si no te gusta leer y estás apurado esta es tu opción. Es mucho más directo que el anterior, y no se toma el tiempo de entrar a detalle pero cubre todos los temas del exámen. Como bonus, tiene un mock exam resuelto al final del libro, con preguntas muy similares a las que verás en el examen (aunque más fáciles que el libro anterior. Te levanta la moral!)
  • SCWCD 5.0
    • Head First Servlets and JSP - Basham, Sierra y Bates. Ese es el libro!!! Ameno, ágil y didáctico. Hasta un cachimbo puede leerlo y certificarse. Con bastante humor, el libro cubre todo lo necesario para el SCWCD: desde protocolo HTTP hasta patrones. Después de cada capítulo te tomas preguntas tipo certificación, y los autores han colgado un mock bastante completo .
  • SCBCD 5.0
    • Manning - EJB 3 in Action. Lamentablemente, no hay todavía una guía de certifiación para este examen, por lo que los que queremos certificarnos nos arreglamos como podemos. Este libro es una guía para principiantes para el mundo de EJB 3.0. Si no has visto EJB 3.0 en tu vida (como yo), este es tu libro. Bastante didáctico, es una buena introducción.
    • SCBCD 5.0 Guide- Mikalai Zaikin. No es un libro, pero la leyenda dice que es indispensable leerlas para certificarte. De lo poco que he visto es bastante técnico, y si no hubiera leído ya EJB 3 in Action no entendería ni michi. Se puede bajar gratuitamente (grande Mikalai!!)
    • Otros recursos populares, pero que no he revisado son Mastering EJB 3.0 que se puede descargar gratis (y no es ilegal) y las especificaciones de Sun de la tecnología. Según me cuentan, son documentos extensos y muy detallados; ideales si quieres convertirte en un Dios en EJB 3.0
Eso sería todo. Hay formas legales e ilegales de conseguir los libros, la que elijan lo dejo a su criterio y libre albedrío xD. Hasta otra!