miércoles, 4 de enero de 2012

Preparación para las entrevistas de trabajo orientadas a la informática

Durante una entrevista de trabajo uno debe mostrar sus amplios conocimientos sobre el puesto al que aplica, tanto da la rama de la informática a la que se dedique.

La preparación pues es un factor determinante a la hora de destacar en un lista interminable de candidatos. Es obvio que no podemos avanzarnos al entrevistado buscando la respuesta perfecta a todas las preguntas, el rango de posibilidades es tan amplio que simplemente no existe una respuesta "universalmente correcta", depende de las variables de la situación.

Aun así en el blog de Jurgen Appelo ( www.noop.nl ) se recogen un grupo muy amplio de preguntas, divididas en las diferentes ramas de la informática. Estas nos ayudan en la preparación de nuestra entrevista. Obvio es que sólo nos centraremos en nuestro ámbito, un programador se centrará en la sección de construcción y algoritmos, un admin de redes en diseño técnico etc.. No está de más por eso echarle una ojeada a todas las preguntas y buscarle tu propia solución, quien sabe, quizá un día nos encontramos realizando nosotros la entrevista!

martes, 3 de enero de 2012

Documentación de Proyectos: Introducción + SCRUM

Una de las fases más cruciales a la hora de realizar un proyecto con éxito y evitar que se convierta en otro aborto más en la interminable lista de "ideas que revolucionaran el mundo" es la documentación.

Esta fase debe ser la fase inicial de todo proyecto. ( Proyectos serios me refiero o al menos que pretendan serlo :) )

La ingeniería del software se encarga de explicar con detalle como debe estar documentado así como las fases y sus planificación. Existen un grupo mas o menos fijo de fases en todo proyecto:

















Estas fases son las inalterables en todo proyecto aunque su orden y repetición se puede ver alterado con el fin de optimizar la metodología empleada a nuestras necesidades.
La imagen anterior muestra el paradigma lineal-secuencial, este paradigma esta limitado a un único análisis de requerimientos hecho que en la realidad casi nunca sucede, así pues modificando este esquema podemos conseguir iteraciones donde los requerimientos pueden variar durante el proyecto:












La principal ventaja de esta metodologia es que pasa de ser predictiva a adaptativa. Acepta cambios y da flexibilidad al proyecto, siempre que se requiera por supuesto!

Una vez diferenciados estos paradigmas vamos a entrar en los tipos de metodologías por iteraciones. Básicamente pueden ser más burocrática, más extensas, detalladas y completas pero farragosas de llevar a cabo y muy "time consuming", o ágiles, centradas en documentar lo indispensable para tener un proyecto sólido y poder concentrarse en el desarrollo.

En este artículo me centraré en la metodología ágil puesto que es la que estoy más familiarizado.

Existen diferentes tipos de metodologias agiles tales como el XP ( extreme programing ), el código abierto, cristal de cockburn, SCRUM, DSDM...

En este post me centraré en el SCRUM dado que es uno de los métodos más conocidos y que mejor que un experto en gestión de proyectos en SCRUM, Hamid Shojaee de Axosoft para que nos explique el proceso:



Una vez que ya sabemos el tipo de metodología a usar, somos unos expertos en SCRUM y tenemos un proyecto entre manos el único cabo suelto que queda es el de la estimación del tiempo de las tareas.

Indagando en el asunto encuentras gente como Joel Spolsky con una larga y dilatada carrera profesional en el ámbito de la informática, más especificamnete en el de la ingeniería del software, y que explica los factores más importantes a tener en cuenta:



Con toda esta información ya se adquieren unas mínimas nociones para empezar a crear proyectos con cara y ojos a través de la metodología ágil.

lunes, 2 de enero de 2012

Componentes de una aplicación Android: Activities(I)

Las Activities son los componentes más habituales en las aplicaciones Android y el componente principal de la interfaz gráfica, representan una determinada actividad llevada a cabo por una aplicación. Cada Activity ofrece una pantalla con el fin de interactuar con el usuario, son como una ventana en cualquier otro lenguaje visual. Es importante señalar que no contempla únicamente el aspecto gráfico, sino que éste forma parte del componente Activity a través de vistas representadas por clases como View y sus derivadas.

Una aplicación por lo general esta formada por varias Activities, una de ellas la Activity marcada como "Main" o principal, esta sera la Activity que se lanzara al iniciar la aplicación. Una Activity a su vez podrá lanzar otras Activites con el fin de componer la aplicación de diversas interfaces, con esto permitimos a la aplicación la ejecución de varias acciones a través de la existencia de una o más pantallas. Cada vez que se inicia una nueva Activity, la Activity anterior se detiene, pero el sistema mantiene la Activity en una pila "Back Stack". Cuando se inicia una nueva Activity se inserta en la pila "Back Stack" y se centra en el usuario, cuando el usuario ha terminado y presiona la tecla "Back" se extrae de la pila y reanuda la Activity anterior.

Cuando una Activity se detiene debido a una nueva Activity, es notificado este cambio de estado a través de los métodos de "callback" del ciclo de vida de la Activity. Existen varios métodos de "callback" que una Activity puede recibir, debido a un cambio de estado como crear, detener, reanudar, destruir, etc. Y cada "Callback" ofrece la oportunidad de realizar un trabajo especifico y apropiado para el cambio de estado. Estas transiciones de estado son parte del ciclo de vida de una Activity:



Una actividad tiene un ciclo de vida muy definido, que será igual para todas las actividades. Este ciclo de vida esta impuesto por el SDK de Android. Una Activity tiene cuatro posibles estados: Activa, pausada, parada y reiniciada.

En el siguiente post, analizare los fundamentos de cómo crear y utilizar una Activity, incluyendo una explicación de cómo funciona el ciclo de vida de una Activity, para poder manejar las transiciones entre los estados diferentes de una Activity.