domingo, 18 de marzo de 2007

Sección 1: Declaración, Inicialización y Ámbito (Paso 1)

Sección 1: Declaración, Inicialización y Ámbito (Paso 1)

Ahora comenzaremos con el estudio de cada una de las secciones (Objetivos o Areas) que componen el examen, comenzaremos con la sección Nº1 describiendo los detalles y haciendo un mapa mental, sobre el cual basaremos nuestra preparación, es decir que y como estudiaremos.

La siguiente información fue extraída y traducida desde el sitio oficial de Sun Microsystems, la que pueden ver aquí

Sección 1: Declaración, Inicialización y Ámbito

  1. Desarrollar código que declare clases (incluidas clases abstractas y todas los tipos de clases anidadas), interfaces y enumeraciones,e incluir el uso apropiado instrucciones package e import (incluido static import)

  2. Desarrollar código que declare una interfaz. Desarrollar código que implemente o extienda una o mas interfaces. Desarrollar código que declare una clase abstracta. Desarrollar código que extienda una clase abstracta.

  3. Desarrollar código que declare, inicialice y use primitivos, arreglos, enums, y variables objeto como estáticos, instancia y local. También, usar identificadores permitidos para nombres de variables.

  4. Desarrollar código que declare métodos estáticos y no estáticos, y -si es apropiado- usar nombres de métodos que adhieran el estándar de nombres “JavaBeans”. También desarrollar código que declare y use una lista de argumentos variable en largo.

  5. Dado un código de ejemplo, determinar si un método esta correctamente sobre-escrito o sobre-cargado por otro método, y identificar valores de retornos legales (incluidos retornos co-variantes) para un método.

  6. Dado un conjunto de clases y superclases, desarrollar constructores para una o mas clases. Dado una declaración de clases, determinar si el constructor por defecto sera creado, y entonces determinar el comportamiento de ese constructor. Dado un listado de clases anidado o no anidado, escribir código que instancie la clase.

Si analizamos cada uno de los items obtendremos información relevante acerca de que debemos conocer en particular, esta información podemos representarla en un mapa mental, en esta URL podrán acceder al repositorio de mapas mentales. Ahí esta la primera versión de nuestro mapa, conforme avancemos con el estudio ira creciendo hasta cubrir el examen por completo, por ahora solo refleja la sección Nº1, al hacer clic sobre cada ítem podrán ir viendo los tópicos que tendremos que estudiar para cubrir con éxito el primer (de siete) objetivo del examen.


Bases de Conocimiento

Ahora veamos que hacer con cada nodo de nuestro mapa mental. Cada nodo representa un concepto ó característica del lenguaje de programación y que ademas ahora conforman un objetivo del examen SCJP y como estamos por transformarnos en expertos conocedores del lenguaje, cada nodo será algo que debemos conocer en profundidad.

Una de las cosas mas complejas al abordar los objetivos del examen es que pueden parecer redundantes, enredados, confusos, etc. Si ven el mapa mental aparecen “repetidos” varios términos como Classes, Enums, etc. esto puede parecer complejo, pero hay que considerar los nodos padre para entender el objetivo especifico que necesitamos comprender. Ahora cuando avancemos en los otros tópicos si descubriremos un “lado oscuro” y es el cruce de objetivos, es decir que la incorporación de un nuevo objetivo generara un cambio o agregara una condición que antes no la conocíamos, no hay manera de explicar esto claramente o dar un ejemplo sin entrar en detalles técnicos que confundirán a quien los lea, por ahora no se preocupen, solo tengan presente que los objetivos están bien planteados, solo que para las clases abstractas (por ejemplo) hay que saber declararlas y extenderlas, y ambas características se estudiaran por separado, por que el examen así lo considera necesario.

Ahora tendremos que recurrir a las bases de conocimiento para profundizar o aprender todo lo requerido para ser un Programador Java Certificado por Sun. Ahora recurriremos a los esenciales, de los que hablamos en el Post pasado, pero a petición de un visitante comenzaremos con el tutorial de Java.


Tutorial de Java

El tutorial de Java puede ser accedido desde aquí . Hay solo un detalle la gente de Sun trabaja muy duro....y ya se encuentra actualizado a la versión 6.0!!, y esto es muy bueno, ahora el examen aun esta en la versión 5.0, pero la verdad es que los cambios en la plataforma no entran en conflicto con los objetivos del examen, si prefieren lo pueden bajar desde aquí.

Para los que tienen (o motivados por este blog compraran :P) el libro (en papel) del tutorial de Java (4ª Edición), incluye un apéndice dedicado a la preparacion del examen estas son las paginas que cubren los contenidos correspondientes a la sección Nº1 del examen:

  • Pagina 87: Declarando clases
  • Pagina 161: Clases y Métodos abstractos
  • Pagina 122: Clases anidadas
  • Pagina 139: Interfaces
  • Pagina 128: Tipos Enum
  • Pagina 183: Creando y Usando Paquetes
  • Pagina 187: Instrucciones import, static import y usando miembros de un paquete

Ahora los links a la versión electrónica (html) del tutorial están aquí:

Lamentablemente toda esta información esta en ingles, pero recuerden este es un ingles técnico y el vocabulario es bastante acotado. Ahora el examen pueden tomarlo en español, sin embargo mejorar nuestro nivel de ingles aunque sea técnico no le viene mal a nadie.

Ya tienen harto que estudiar, háganlo a conciencia, recuerden que obtener la certificación es una consecuencia de nuestro nivel de conocimiento, esto es lo importante obtener el conocimiento. Cualquier duda ya saben donde pueden encontrar la respuesta, pueden dejar un comentario y cuanto antes tendrás la respuesta.

En el próximo post, revisaremos la especificación para sumergirnos en los detalles del lenguaje y prepararemos un conjunto de preguntas que nos permitan validar que hemos comprendido cada uno de los conceptos o características incluidas en este objetivo.

jueves, 15 de marzo de 2007

Preparación del Examen SCJP

Preparación del Examen SCJP

Ahora entremos de lleno a preparar el examen de certificación SCJP, pero antes responderemos a la duda que quizás muchos se están preguntando: ¿como?. Muchos tendrán como expectativa con respecto a un blog dedicado a una certificación es que este lleno de trucos, pistas, preguntas "tipo", y un largo etc al respecto. La verdad es que esa "metodología" no sera la elegida y para explicar de que se trata la metodología seleccionada, respondamos otra duda común en cuanto al camino mas "corto" para obtener una certificación: ¿si me compro un libro y exámenes de practica dedicados a la certificación, puedo estar seguro que pasare la certificación?, la respuesta es: no, y entonces que me garantiza que la pase la certificación?, solo una cosa: conocimiento.

Sin lugar a dudas que un buen libro de certificación y exámenes de practica (en especial estos últimos) son una herramienta muy útil para mejorar nuestro conocimiento, sin embargo pueden ser también un arma de doble filo, si nos compramos un libro de certificación para aprender Java el tema es muy delicado, ya que los libros de certificación no son para quienes tienen pocos conocimientos y experiencia en Java, y si lo es, lo mas probable es que sea pobre en cuanto a la preparación del examen, por lo tanto las dudas pueden multiplicarse o peor aun, hacernos creer que dominamos el lenguaje por que conocemos algunas características avanzadas, pero esto no es mas que una suerte de espejismo que nos pasara la cuenta a la hora de rendir el examen.

En este blog discutiremos en detalle el nivel de conocimiento requerido en cada tópico (ó sección,objetivo, etc) que cubre el examen y usaremos herramientas (recursos, contenidos, exámenes de practica) libres de costos y disponibles en Internet, muchos ellos de Sun Microsystems. Si no tienes dinero para comprar un libro o exámenes de practica, no te preocupes, todo lo que necesitas para pasar el examen esta disponible en la Web! o donde creen que obtuvieron la información los que escriben los libros o hacen los exámenes de practica?...shhh esto ultimo es un secreto no se lo cuenten a nadie...

Detalles de la Certificación

Esta certificación está para programadores interesados en demostrar su habilidad en los fundamentos del lenguaje de programación Java usando la plataforma de Java edición estándar (JSE).

El examen de certificación de programador para la plataforma 5.0 de Java es para programadores experimentados usando el lenguaje de programación de Java. Lograr esta certificación proporciona una evidencia clara que un programador entiende el sintaxis y la estructura básica del lenguaje de programación Java y puede crear aplicaciones usando la tecnología Java que corran en servidores y sistemas de escritorio usando J2SE 5.0.

  • Entregado por: Centros Autorizados Prometric

  • Pre requisitos: Ninguno

  • Otros exámenes/asignaciones(tareas) requeridas para esta certificación: Ninguna

  • Tipo de Examen: De elección múltiple y "arrastrar y soltar"

  • Numero de preguntas: 72

  • Puntaje de aprobación: 59% (43 de 72 preguntas)

  • Limite de tiempo: 175 minutos


Los Esenciales

Si hablamos de fuentes de conocimiento donde se cubran los detalles de cada sección del examen, en primer lugar aparecerá (sin lugar a dudas) "Java Language Specification", ¿ahí esta todo lo que necesitamos saber?....casi, solo dos detalles a considerar primero es una "especificación" y por lo tanto pueden aparecer cosas poco claras, lo segundo es que podemos llevarnos algunas sorpresas a la hora de ver la implementación, muy importante por cierto ya que sin practica no llegaremos a ninguna parte, amigos "memoriones" les tengo malas noticias, ya hablaremos de eso ;)

En segundo lugar (sin lugar a dudas nuevamente) el "Tutorial de Java" que sera nuestra salvación cuando "Backus-Naur Form" este presente en nuestros sueños (mas bien pesadillas) de tanto leer las especificaciones sin éxito en cuanto al aprendizaje.

En tercer lugar hay unos cuantos libros (Java Series, ) que cubren topicos de manera ideal para quien esta mejorando sus conocimientos en tecnologia Java. Ya hablaremos de ellos.

En cuarto lugar herramientas ó recursos de terceros (osea no Sun, pero también gratis) que nos pueden ayudar a ir un poco mas allá (como nos exige el examen) u obtener otro punto de vista, siempre bienvenido.

Eso seria todo...por ahora....ya les adelante las "fuentes" sobre las cuales desarrollaremos este blog de preparación para el examen y les adelanto una herramienta que sera parte importante de nuestra metodología: "FreeMind" la cual pueden conseguir aquí, información acerca de lo que hay detrás de la herramienta la pueden encontrar en WikiPedia

martes, 20 de febrero de 2007

¿Certificaciones?

En este primer post, abordaremos antes que nada la importancia de las certificaciones en el mundo TI y dar respuesta a dudas comunes, dejando en claro que son y que NO son las certificaciones.

Dudas comunes: ¿Que es una certificación? , ¿Para que certificarse?, ¿Por que son tan difíciles?, ¿Si no me certifico, significa algo terrible?

Muchas de estas interrogantes han pasado por la cabeza de quien comienza en el "mundo" de las certificaciones, ya que estas suenan interesantes, quien las tiene presume de ello y en los demás despierta cierta envidia, lo que genera aun mas el interés de la gente, lo que resulta muy interesante de analizar.

¿Que es una certificación?

Vamos por parte, buscando una buena definición (no tan rebuscada y que exista en el mundo no TI) nos encontramos en RAE con: "Documento en que se asegura la verdad de un hecho" (fuente)....no podemos tener una mejor definición, sin embargo ahora tenemos dos interrogantes: ¿Que documento? y ¿Un hecho?.

El documento lo definiremos (siendo redundantes, lo que nos da coherencia a la definición) como un certificado, es decir un escrito, generalmente un diploma que contiene datos fidedignos. Este certificado es emitido por quien esta asegurando "la verdad de un hecho". Ahora ¿de que hecho estamos hablando?. Existen dos partes importantes en la definición del "hecho", El sujeto y lo que queremos asegurar con respecto a este. Es importante recordar que las certificaciones no solo se aplican a individuos, si no que a organizaciones, procesos, etc.

El "hecho"

Las certificaciones nacen de la necesidad de reconocer y/o acreditar y/o garantizar, el conocimiento y/o habilidad y/o competencia y/o normas y/o procedimientos. La combinación que podemos hacer con Y ú O, puede ser muy variada y a la vez interesante, pero esto ultimo dependerá de quien emite el certificado (o mejor dicho quien crea la certificación) es decir quien esta certificando el hecho, luego el sujeto acepta y reconoce la certificación y el mecanismo a través del cual se obtiene.

El mecanismo para obtener una certificación por lo general son evaluaciones (tipo cuestionario) asistidas por un computador, en linea y con resguardos anti-fraudes, pero también podemos encontrarnos con el desarrollo de pequeños proyectos que permiten no solo medir conocimiento (muy cómodo para "memoriones") si no que las habilidades y competencias (experiencia practica) de un sujeto. Este mecanismo ó medio de certificación puede ser administrado por un ente independiente como lo es Thomson-Prometric, esto no significa que Sun no sea el creador de la certificación, si no que el gran trabajo que significa el registro, coordinacion de fecha y hora, infraestructura y cobertura mundial, Sun lo delega en un tercero. Ya dejaremos esto en claro, cuando veamos en detalle cada certificación.

Para tener una definición concreta y especifica de una certificación, es necesario detenerse en una certificación en particular, esto lo dejaremos pendiente cuando abordemos cada una de las certificaciones Java de Sun Microsystems.


Que empresas tienen certificaciones en sus productos o tecnologías además de Sun Microsystems?, estas son algunas:

Cisco,Microsoft,Novell,Citrix,IBM,Oracle,3COM,AccessData,ACI,Adobe,American College,APC,Apple,ARE,Ariba,BICSI,Business Tests,Checkpoint,Cisco,Citrix,CIW,Computer Associates,CWNA,Dell,EC-Council,EMC,Enterasys Networks,Ericsson,Exam Express,Exin,Inc,Extreme Networks,FileMaker,Fortinet,Foundry Networks,Fujitsu,GMAT,Guidance Software,HDI,Hitachi,HP,Huawei,Hyperion Solutions,IBM,IISFA,ISACA,ISC,ISEB-ITIL,ISM,Juniper,Legato,Lotus,LPI,Lucent,MCAFEE,McDATA,Microsoft,Mile2Security,NCR ,Teradata,Network Appliance,Network Associates,Network General,Nokia,Nortel,Novell,Inc,OMG,Oracle,Patchlink,PMI,Polycom,Red Hat,Riverstone,SAIR,SAS Institute,SCO,SCP,SeeBeyond,SNIA,Sybase,Symantec,Telecommunication Industry Association,Teradata,Tibco Software Inc,Trend,TruSecure,Unisys,Universitas 21 Global,Veritas,VMware.



¿Para que certificarse?

Las motivaciones para obtener una certificación son variadas y consideran muchos factores que van desde retos personales hasta asuntos legales. En el caso de las certificaciones que se aplican a individuos nos encontramos -en muchos casos- con un gran respaldo o reconocimiento por parte de la industria, es decir contar con una certificación nos abre puertas o nos permite competir con cierta ventaja en comparación con quien no las tiene.

Contar con una certificación es dotar a nuestra carrera profesional de credenciales que nos permiten asegurar a una entidad (organización, empresa, etc) cierto nivel de conocimiento y/o habilidades que un tercero ya valido, y que por cierto esta entidad también confía. Podemos hacer una analogía con la infraestructura que soporta a los certificados digitales, quien los emite es un tercero en que nosotros y cualquier otro confía.


¿Por que son tan difíciles?

La verdad es que podemos decir que en general todas las certificaciones son difíciles, desde la perspectiva de quien se enfrenta por primera vez a una certificación y tiene un déficit de conocimientos y/o habilidades. Con esto ultimo podemos decir lo siguiente: la dificultad de una certificación esta en directa relación con la carencia de conocimientos y/o habilidades que tenemos con respecto a los objetivos (materias, contenidos a medir), lo que en la practica significa que para quien tiene realmente los conocimientos sobre los objetivos medidos por una certificación aprobar con éxito, es trivial.

¿Si no me certifico, significa algo terrible?

Entonces, si no pasamos una certificación, significa que no sabemos nada?, antes de contestar esta delicada pregunta sigamos argumentando la "máxima" definida sutilmente en el párrafo anterior. Retrocedamos en el tiempo (poco o mucho, vea Ud. :P) hasta la época de educación superior (universitaria, técnica, etc) al finalizar un examen (elija Ud. la asignatura/ramo/materia) que comentarios hacia al finalizar?: "estuvo muy difícil!", "muy fácil", "mas o menos"...ahora, los "aventajados" del curso lo mas probable es que siempre respondieron "muy fácil" y los demás (me incluyo) nos repartimos entre "estuvo muy difícil!" y "mas o menos", recordando nuestra propia experiencia, podemos entonces asociar directamente el éxito con el nivel de conocimiento?...con certeza. Ahora, hay que considerar otros factores que influyen como; motivaciones, intereses, ambiente, pedagogía, etc, etc...pero nada de lo anterior justificara el hecho de no adquirir los conocimientos necesarios para aprobar el examen.

El no aprobar una certificación es la mejor manera de progresar, ya que sabemos perfectamente cuales son nuestras fortalezas y debilidades, aunque aprobemos una certificación, también tendremos feedback, es decir tenemos una oportunidad que no tienen otros.

Que NO es una certificación

También es importante aclarar que una certificación en ningún caso esta al nivel de un titulo universitario o de nivel técnico, ya sea ingeniería o licenciatura. La razón es bastante obvia, si queremos hacer una comparación de una certificación solo podemos llevarla al nivel de un examen para aprobar una asignatura (de las tantas que tiene un titulo universitario), ahora bien, no cualquier examen y no cualquier asignatura es valida para realizar la comparación, tendremos que buscar una asignatura con un nivel equivalente en cuanto a contenidos, complejidad, madurez, calidad, horas de aprendizaje y un par de etc... lo mas probable es que terminemos solo con un par de asignaturas (materias ó ramos) que califican para esta comparación, lo que juega notablemente a favor de las certificaciones.


Por que son importantes?

Empecemos con una anécdota. Después de finalizar una entrevista de trabajo, a la que postulaba junto a un amigo, este me comento: "Creo que debemos traer a nuestras madres a las entrevistas de trabajo, ya que ellas son las únicas que podrían sostener una reunión de mas de 30 minutos argumentando sólidamente que somos los mejores, mas inteligentes, mas astutos y mas lindos de todo el mundo". Tenia toda la razón, el tema es que las organizaciones, requieren algo un "poco" mas serio.

Como ya se ha dicho una certificacción nos otorga credenciales, las que pueden ser usadas en distintos contextos, permitiéndonos sacar ventaja en dicho en muchos casos, como por ejemplo al dar una charla, confeccionar un "paper" y principalmente a la hora de conseguir un nuevo empleo. El mecanismo clásico de selección de personal consiste en una entrevista (personal, sicológica,etc) y una evaluación técnica para medir si el candidato cumple con los requisitos del puesto. Este ultimo punto es bastante controversial, en varios aspectos, comenzaremos con una interrogante: ¿quien confecciono la evaluación técnica era competente? estudiemos este caso (muy buen blog). Ahí esta el problema, que pasa si la evaluación (ya sea entrevista o en "papel") es subjetiva? ó pobre técnicamente? ó quizás mal diseñada?. Digamos que las certificaciones vienen a solucionar este problema, ya que alguien ya valido los conocimientos/habilidades del candidato, entonces la organización solo se concentraría en evaluar al candidato en el contexto del trabajo que desempeñaria y no en aspectos técnicos, que además y en muchos casos no es el negocio de la organización.

El proceso de selección de personal en TI es en un gran desafió para el área de RR.HH. (hay una certificación en RR.HH. ver aquí), particularmente por el constante cambio de las tecnologías involucradas y las habilidades, conocimientos y competencias tienen que lidiar con estos cambios y a la vez estar alineadas a las necesidades del negocio. Considerando esto, las certificaciones resuelven al menos el 50% de este problema, ya que implementar por cuenta propia una "certificación" a medida es un gran trabajo, que en muchos casos consumirá tiempo que no aportara al negocio y requerirá un gran trabajo para evitar los males antes mencionados. Aquí hay algo de ayuda.

Certificaciones Java de Sun Microsystems

La siguiente información ha sido extraida desde el sitio ofical de Sun.

El programa de certificación Sun en tecnología Java es reconocido por la industria, es un programa a nivel mundial que se centra en roles críticos del trabajo en el desarrollo de software y arquitectura empresarial. Estas certificaciones, al centrarse en tecnología, el conocimiento y las habilidades adquiridos mientras se prepara la certificación son transportables desde una compañía a otra.

La filosofía de Sun es que la certificación es central al proceso de aprendizaje pues proporciona, la validación de los conjuntos de habilidades para los roles específicos del trabajo. La certificación de Sun también ofrece una progreso natural para apoyar sus metas profesionales.

  • Primero, siendo un "Sun Certified Associate" Sun verifica que tengas un conjunto base de conocimiento que permita la entrada en una carrera de desarrollo de software o administrar un proyecto que use la tecnología de Java.
  • En segundo lugar, Sun verifica un conjunto fundamental de habilidades, que puedan ser validadas convirtiéndose en "Sun Certified Programmer".
  • Luego, puedes seguir con las certificaciones avanzadas o de especialidad que permitan un crecimiento profesional en roles más específicos de trabajo que te harán más valioso para una organización.

Sun ofrece las siguiente certificaciones profesionales en tecnología Java :

  • Sun Certified Java Associate (SCJA) Blog Sun
  • Sun Certified Java Programmer (SCJP) Blog Sun
  • Sun Certified Java Developer (SCJD) Blog Sun
  • Sun Certified Web Component Developer (SCWCD) Blog Sun
  • Sun Certified Business Component Developer (SCBCD) Blog Sun
  • Sun Certified Developer For Java Web Services (SCDJWS) Blog Sun
  • Sun Certified Mobile Application Developer (SCMAD) Blog Sun
  • Sun Certified Enterprise Architect (SCEA) Blog Sun

Sun aclara lo siguiente: "la meta de la certificación de Sun es probar un rol particular de trabajo. Así, para prepararse para un examen de certificación recomendamos el entrenamiento de Sun y entre seis a doce meses de experiencia real. Sun no dice que tomando los cursos está garantizado aprobar los exámenes de certificación, no obstante indicamos que el entrenamiento de Sun es un componente importante en la preparación de la certificación". En próximos "posts" hablaremos de esto en detalle.


Beneficios de las Certificaciones

Ya se presentaron las certificaciones como una ayuda a la hora de buscar empleo, pero, será cierto? busque Ud. mismo: Pruebe aquí ó aquí ó aquí, ahora todo dependerá del desarrollo TI del lugar en que habitemos o queramos trabajar, definitivamente habrá lugares donde las certificaciones no importan ya que el nivel TI es bajo o poco desarrollado, sin embargo las ventajas de tener una certificación siempre serán validas y será cuestión de tiempo que las certificaciones tomen valor, de hecho, hace un par de años atrás hablar de ISO-9000 era hablar de algo desconocido, hoy en día hasta funerarias están certificadas ISO-9000.

Veamos que dice Sun al respecto aquí

En resumen:

1) Optar a nuevas posiciones, aumentos de sueldo, etc (fuente: Certification Magazine)
2) Respaldo de una gran compañia (fuente: Foote Partners and CIO Magazine)
3) Las certificaciones Sun son validas en todo el mundo
4) Mayor credibilidad frente a colegas o gerentes
5) Mayor confianza acerca de nuestro conocimiento o habilidades
6) Mayor productividad

Esto seria la introducción al mundo de las certificaciones.


"I guess it's hard for people who are so used to things the way they are - even if they're bad - to change. 'Cause they kind of give up. And when they do, everybody kind of loses" @ Pay it forward