Archivo para la categoría "Educación"

El instinto…   2 comments

Yo soy informático, trabajo algunos años ya en computación, desde hace unos meses desarrollamos un framework con mi equipo y ahora lo estamos aplicando; y justo hoy acabo de darme cuenta de mi instinto, fue debido a una comparación.

Hoy no había mucho que hacer así que me dediqué a pensar en cómo integrar los sistemas que tenemos usando la LDAP y el correo electrónico; de pronto uno de mis compañeros se acercó y me dijo: “¿Recuerdas el problema que tenías ayer? He pensado en una solución.”, me mostró el código que hizo y realmente estaba optimizado, era un buen código, mucho mejor que el mío debo admitir, pero en vez de yo interesarme mucho en el tema y alegrarme o ponerme celoso, mi cabeza estaba en los paquetes que mi maquina Gentoo estaba compilando y en cómo iba a integrarlos, vale decir el código no me interesó mucho; pero, mi amigo estaba con todas las pilas en ello y explicándome con todas sus ganas.

Qué puedo rescatar de ésto: el instinto de cada uno…

Mi amigo es un desarrollador neto, su vida está en el código, es su arte y su mejor momento; el mío está en la integración de aplicaciones, en la infraestructura y la organización del equipo, soy desarrollador y también hago control de calidad, pero todo ello lo enfoco desde mi instinto (punto de vista).

¿Se puede dar cuenta uno que tan importante es la multiplicidad de instintos en un equipo? Y también la importancia del entusiasmo que cada uno pone en su parte; es como una comida cocinada con muchos sabores todos le dan una parte del todo, y mientras más hayan y más consistencia tengan sabrá mucho mejor 🙂 …

Metodologías Ágiles (parte 1)   5 comments

Mucha gente tiene la duda de qué es “Agile”, de principio es confuso porque no se parece a lo que nos enseñan en las universidades, no tiene pasos específicos, tampoco cronográmas ni procesos a la vista como los tienen las metodologías tradicionales p.e. la Cascada o el Proceso Unificado.

waterfall_modelrup_model

¿Cuál es el problema de éstos modelos?

En los modelos lineales es necesario tener los requerimientos bien especificados desde el comiendo, el análisis, diseño deben estar completos en las primeras fases y no hay manera de pasar a la implementación ántes de éstos; el testeo se hace al final (gran error) lo cuál trae problemas de integración, males que podrían ser evitados desde el principio se encuentran (a veces no) faltando poco antes del lanzamiento del producto, en éste punto la adaptabilidad del producto a cambios y nuevos requerimientos es practicamente nula, lo unico que puede hacer el desarrollador es asegurar su trabajo mediante la firma de un papel sellando los requerimientos, al final sólo asegura el pago por el trabajo, no asegura la satifacción del cliente y la calidad del producto.

En un modelo del tipo RUP, iterativo – incremental y demás, las fases siguen estando bien definidas, en cada fase se realiza un poco del trabajo, análisis, diseño, implementación, prueba y despliegue, dandole más énfasis a cada parte o conjunto de partes a medida que transcurre el ciclo; todo ésto está muy bien pero lamentablemente la metodología se vuelve un monstruo porque exige demasiada carga en la documentación, todo el detalle exigido es una perdida de tiempo, se produce monton de material muchas veces inservible gastando tiempo y recursos valiosos (diagramas hasta para ir al baño), otro punto es la especialización de los profesionales, para cada fase un determinado tipo de profesional dando puntos cruciales de la información a algunos y con el riesgo de pararse el proyecto si ellos se ausentan por algún motivo; la separación de ramas y jerarquía entre el equipo (enorme equipo) hace que muchas veces exístan diferencias e imposiciones de ideas.

Agile

Agile no son pasos, gráficas elaboradas, o un plan maestro; Agile son consejos, buenas prácticas que muchos entendidos en software han puesto a nuestra disposición para usarlas, en otras palabras comparten su experiencia en una manera ordenada y sencilla de aplicar.

Éstos conceptos se pueden ver en el Agile Manifiesto que resume éste pensamiento:

Individuos e interacciones sobre procesos y herramientas

Software que funciona sobre documentación exhaustiva

Colaboración con el cliente sobre negociación de contratos

Responder ante el cambio sobre seguimiento de un plan

La gente nos importa, las personas son el recurso más valioso que se tiene, ellos son los que desarrollan el software no las herramientas ni los procesos, un programador feliz rinde mejor que uno con estrés, un cliente contento es mejor que uno disconforme.

No nos interesa crear 100.000 diagramas en herramientas super cargadas si sólo queremos tener una idea clara, nos basta un lápiz, una hoja de papel, o una pizarra y una camara fotográfica o celular para preservarla. Además ¡queremos Software ya! necesitamos que el cliente esté seguro que lo que pide es lo que necesita, para ello un demo rápido del producto nos da un feedback excelente; un demo cada cierto tiempo corto permite muchas cosas:

  • Adaptabilidad a los cambios de requerimientos.  Los diagramas de Gantt y Pert son OBSOLETOS, si alguien realiza un modelo predictivo por pasos NO ES AGILE, dar muerte a MS Project. No se puede predecir cómo serán los cambios de requerimientos en medio del proyecto, menos al final.
  • Predictibilidad a corto plazo, el cliente nos guiará, el mercado nos guiará y en un plazo cercano, dias, las funcionalidades tomarán forma.
  • Calidad, el testeo debe ir a la par del desarrollo, los bugs se encontrarán, reparán y documentarán a medida que el software tome forma, exísten muchas técnicas ágiles para ello, una es TDD (Test Driven Development).
  • Compartición y reutilización de código. Nuestra filosofía siempre ha de ser COMPARTIR, preservar conocimiento y reutilizarlo, ahorrar tiempo y esfuerzo, evitar trabajo excesivo y distribuir la carga mental entre todo el equipo y más (todos los participantes informáticos o no).

Metodologías Ágiles

Hay varias implementaciones de metodologías ágiles:

Cada cuál sigue sus propias tendencias pero siempre respetando los principios descritos anteriormente; algunas son muy simples, otras refuerzan documentación y procesos pero la mayoría puede adaptarse al ritmo del proyecto que se vaya a ejecutar.

scrumlargelabelled

400px-es_three_layers

Dev Quizz #1   Leave a comment

Anota 2 puntos por cada elemento de letra que sepas de antemano, 1 punto por cada uno que investigues y te parezca interesante, y 0 para las que no te interesen conocer. Al final publicaré una tabla y podrás compararla con la suma de los puntajes de tus respuestas para cada letra y tendrás una idea de tus aptitudes informáticas. Los quizzes saldrán dos veces por semana.

1.A. ¿Qué es Bootstrapping?
1.B. ¿Qué es un Skateholder?
1.C. ¿Qué son los puntos objeto y puntos función?
1.D. ¿En qué unidad se mide la velocidad del procesador?
1.E. ¿Qué significa UDP y para qué sirve?
1.F. ¿Cuál es la diferencia entre un gráfico de mapa de bits y uno vectorial?
1.G. ¿Puede describir la sucesión de Fibonacci de memoria?

Dev Quizzes   2 comments

Una de las mayores deficiencias de nuestro sistema educativo es el de brindar el rumbo correcto al estudiante de acuerdo a sus capacidades y a sus inclinaciones/gustos; al salir del colegio la mayoría de los jóvenes no sabe qué estudiar, de esos muchos elegirán la informática como su futura profesión por razones muy superficiales, el/ella es bueno/a en ofimática, le encantan los juegos, la multimedia, es “la profesión del futuro”, etc., pero no se enteran que eso que conocen como informática son sólo productos de consumo empaquetados y que no necesitan mucho esfuerzo para usarse.

Las ramas informáticas van más allá de lo que uno pueda imaginar, muchas veces la informática es un complemento par, para una habilidad natural como ser el dibujo (diseño gráfico), la música (ingeniería de sonido), talento matemático (estadística, simulación, ingeniería, física, química), medios sociales/masivos (Web, redes P2P, blogging);  y en sí cada rama del conocimiento humano puede almacenarse y analizarse usando medios informáticos. Pero, es necesario saber quién tiene el talento indicado y cómo explotarlo en el área correcta. Más aún cada uno debería descubrir su propia inclinación teniendo la información suficiante para hacerlo y proseguir de manera personal hasta asegurar su futura incorporación al centro educativo que consolide sus conocimientos.

Entre las bastas áreas y las diferentes disciplinas, las más generales a mi parecer son 10 de las cuales es fácil escoger por ramas, lo que me interesa saber es TÚ inclinación si eres un…

  • ¿Usuario?
  • ¿Gestor Multimedia?
  • ¿Asistente de Hardware?
  • ¿Administrador de Red?
  • ¿Administrador de Sistemas?
  • ¿Gestor de Control de Calidad?
  • ¿Analista/Arquitecto de software?
  • ¿Desarrollador de software?
  • ¿Gerente de Proyectos?
  • ¿Investigador de las Ciencias de la Computación?

Te daré una pequeña descripción de cada uno para que la idéa se vea más clara.

Usuario: Casi la mayoría, un usuario es un consumista acabado, instala, desinstala, usa y desusa cantidad de software incontable; lo aplica en su diario vivir, en su trabajo o pasatiempos. Un usuario no tiene idéa de cómo es el desarrollo o funcionamiento del software y tampoco le interesa, pero es hábil manejándolo, llamese procesadores de texto, paquetes de cálculo, programas de uso general, etc.

Gestor Multimedia: Un gestor multimedia es un usuario especializado, bastante requerido, utiliza herramientas de software para crear diseños elaborados que son un propósito o un complemento. Para citar ejemplos podemos decir a los diseñadores gráficos, los que realizan mezclas de sonido por software, animación digital, diseño Web, etc.

Asistente de Hardware: Te encanta rodearte de componentes de hardware, armarlos, repararlos, mejorarlos. Pruebas gadgets y configuraciones físicas en diferentes tipos de equipos.

Administrador de Red: Te gusta envolverte en cables, instalar modems, switches, routers, configurarlos. Te llevas muy bien con las telecomunicaciones también.

Administrador de Sistemas: Tienes una red instalada y vas a darle vida mediante servicios, permitirás a tus usuarios facilidades como correo, compartición de archivos, acceso a Web, vigilarás el tráfico y la seguridad.

Gestor de Control de Calidad: Eres un experto detectando fallos, desde ortográficos hasta el más oscuro bug de código. Empleas herramientas de pruebas asi como también las desarrollas. Estás al día con los estándares y las técnicas de control de calidad.

Analísta/Arquitecto de Software: Tienes una idéa clara de cómo será el producto, su evolución en el desarrollo, la arquitectura indicada, las herramientas a emplear. Tienes conocimientos de metodologías y técnicas para hacer un diseño eficiente y la facilidad de comunicación tanto con el cliente como con el equipo de desarrollo.

Desarrollador de Software: Eres el que le da vida a la aplicación, creas y enlazas mediante código de lenguajes de programación cada parte del sistema, tu creatividad, rapidéz y eficiencia son el corazón del proyecto.

Gerente de Proyectos: Eres la suma de las anteriores, tienes tanto experiencia como visión para planificar el correcto desarrollo del proyecto. Muchas personas y el proyecnto en sí, dependen de tu sabiduría para tomar decisiones. Estás acostumbrado al trabajo bajo presión además de estár al día en cuánto a tecnología y a las técnicas de desarrollo de software como también de manejo de equipos de desarrollo.

Investigador de las Ciencias de la Computación: Has trascendido las fronteras de la informática común, tu interés es más teórico – científico, desarrollas nuevos algorítmos que mejorarán las técnicas de programación; mediante el uso de ciencias como la matemática, física, química y más, innovas e inventas la informática del mañana.

Teniendo una idéa general de cuál podría ser el rumbo que el estudiante/profesional podría tomar, en futuros posts vamos a realizar preguntas sencillas relacionadas a cualquiera de los conceptos citados anteriormente, tanto para adentrar un poco en la cultura informática que se debe tener como para evaluar la inclinación correcta del estudiante informático.