Habilidades que todo informatico deberia tener

From FdIwiki ELP
Revision as of 21:38, 24 January 2016 by Jaime (Talk | contribs)

Jump to: navigation, search
Este artículo necesita una revisión de formato.
Puedes colaborar editándolo. Cuando se haya corregido, puedes borrar este aviso.
Consulta el tutorial si tienes alguna duda

Estas son algunas capacidades que todo informático debería tener.

1. Conocimiento sobre Licencias de software

Una licencia de cualquier aplicación contiene una serie de reglas para el uso, modificación, copia y distribución de la misma. Es necesario conocer qué tipo de licencias hay y sobre todo conocer la diferencia entre licencias libres, que dan libertades y licencias privativas, que no las dan.

2. Dominar lenguajes de programación

Un ejemplo de lo que no es un lenguaje de programación es Matlab.

Por otro lado se sabe que C++ o Java son excelentes lenguajes de programación. Sin embargo para desarrollar algo necesitaremos de un montón de líneas de código. Y también, en general, son lentos a la hora de escribir un programa y rápidos de ejecutar. El punto positivo es que ambos son libres.

Es altamente recomendable aprender lenguajes de scripting como Python, Perl, Ruby, o JavaScript. Los necesitarás con mucha probabilidad en tu puesto de trabajo.

3. Idiomas

El inglés se está sobreponiendo como lenguaje mundial, es prácticamente imposible que a lo largo de la vida profesional de un informático, a éste no se le exija un mínimo de inglés, seguro que cualquier alumno de esta facultad lo ha necesitado durante la carrera y en el desarrollo de alguna aplicación o el aprendizaje de un nuevo lenguaje. Por ejemplo los mensajes de error de las librerías y del compilador estarán en inglés. Así que el inglés es muy necesario durante nuestra formación y después en nuestra al ejercer nuestra profesión.

4. Sistemas.

¿Cómo se instala este programa? esta frase es muy escuchada. El problema es que cuando se ha visto sistemas operativos no se ha visto qué es el kernel, cómo se levantan servicios o cómo ver el rendimiento del mismo, sino semáforos y cómo almacenan los discos duros la información en bloques. Seguramente esto es útil, pero no si eso excluye que te expliquen como instalar un paquete desde la línea de órdenes. Y esto implica conocer una serie de cosas: el sistema operativo Linux, trabajar con la línea de órdenes y conceptos básicos como servicios, demonios o niveles de ejecución. Mucha gente tendrá la suerte de trabajar en una gran empresa donde el departamento de sistemas le proporcionará un ordenador con todo instalado. La mayoría tendrá que trabajar en entornos no tan favorables y le darán una máquina vacía en la que tendrá que instalar todo para ponerse a trabajar en un par de horas con el resto del equipo. Y eso es saber Linux, es conocer la ínea de órdenes y cómo montar un servidor web con una base de datos NoSQL.

5. Herramientas de gestión de equipos de trabajo.

Durante la carrera normalmente los trabajos en equipo se gestionan usando email o, los más modernos, Dropbox o similares. Es desde luego un avance a cuando se hacía con disquetes, pero un atraso a hacerlo usando un sistema de control de fuentes como git. Con git sabes quién ha hecho qué, puedes volver deshacer cambios, probar código de manera simultánea, crear y resolver tareas en entornos como GitHub... En público o en privado, no conocer Git y GitHub te hace ser más improductivo, y por tanto menos empleable.

5. Gestión de esos mismos equipos de trabajo. Una herramienta como git sólo te lleva al principio del camino, trabajar sobre los mismos fuentes sin demasiados follones. Pero, ¿quién hace qué? ¿Cómo se informa a los demás de lo que está haciendo? ¿Si surge alguna duda o no sabes cómo hacer algo, a quién le preguntas? ¿Cómo se decide qué características nueva implementar? ¿Y cómo se informa de un error que ha pasado los tests o la petición de una nueva característica?

En el mundo del software libre ya hay herramientas para todo ello: gestores de incidencias como RedMine o los más básicos integrados en GitHub o Gitlab, listas de correo, canales de IRC siempre abiertos para ayudar a los principiantes.

6. Gestión de los equipos de trabajo.

Es necesario saber manejar la gestión de un equipo de trabajo cuando éste se hace inabordable para un conjunto pequeño de personas. Así mismo, deberíamos aprender a seguir estrictamente lo que un gestor del equipo nos pueda asignar, ni más ni menos ni diferente.

¿Quién hace qué? ¿Cómo se informa a los demás de lo que está haciendo? ¿Si surge alguna duda o no sabes cómo hacer algo, a quién le preguntas? ¿Cómo se decide qué características nueva implementar? ¿Y cómo se informa de un error que ha pasado los tests o la petición de una nueva característica?

En el mundo del software libre ya hay herramientas para todo ello: gestores de incidencias como RedMine o los más básicos integrados en GitHub o Gitlab, listas de correo, canales de IRC siempre abiertos para ayudar a los principiantes, Aplicaciones como Trello para gestionar objetivos y encomendar tareas.

7. Documentación.

Si documentas no lo hagas en Word. Todos los lenguajes de programación (entre los que no se incluye Matlab) incluyen su propio sistema de documentación, pero también hay otros sistemas como Textile, Markdown o Latex que permiten escribir documentación estructurada aparte de los ficheros de la aplicación. A partir de ahí, generar cualquier cosa es fácil: PDF, HTML o un ePub. Además, se aprende rápido.

8. Seguridad.

La seguridad no es algo que se le añade a un programa al final cuando está todo terminado: es un requisito fundamental. Tienes que pensar en todos los posibles huecos y evitarlos, usar prácticas seguras, usar versiones de las librerías sin huecos de seguridad conocidos.

Eso no sería posible sin el software libre: La mayoría de herramientas que vas a usar que son libres han pasado por controles y los ha visto tanta gente que podemos tener un buen nivel de confianza al utilizarlas.

9. Estadística

¿Cómo? ¿Estadística? ¿Eso no es matemáticas?. Efectivamente, pero... también es informática y es imprescindible cuando analizas las prestaciones de un sistema o un programa. Pídele a un informático recién licenciado que te diga qué carga es capaz de soportar una aplicación web. Si te dice que toda la necesaria y le indicas que puede ser que no, te es capaz de montar un proxy con equilibrado de carga. Pero ¿es capaz de leer un log y modelar esa carga? ¿Es capaz de montarte un test de esfuerzo sobre el servidor con diferentes escenarios a partir de ese modelo de carga? ¿Es, simplemente, capaz de probar dos diferentes implementaciones de un algoritmo y decirte, estadísticamente, cuál es la más eficiente usando algo tan simple como un test de Wilcoxon o, más aún, decidir si se usa uno de Wilcoxon o u T de Student? O, volviendo al tema anterior, ¿saben montar un test de usabilidad con un grupo de usuarios y analizar los resultados?

Lo más normal es que no. De hecho, puede que este no sea un problema del plan de estudios, porque la mayoría incluyen Estadística, sino de no cruzar el puente entre las técnicas estadísticas y su uso en el diseño e implementación de sistemas informáticos. O de dejar la estadística como una asignatura de primero y no como algo fundamental que interesa al resto de las asignaturas de programación y de sistemas.

10. Mito: Los informáticos saben hacer de todo

Vamos a hablar un poco de este mito en el que la mayoría de la gente piensa que ser informático implica saber todo de todo lo relacionado con la tecnología...Os garantizo que es MENTIRA!!! Ojalá fuese así. El 90% de las personas que deciden estudiar informática son gente a la que le encantan los videojuegos y los efectos especiales y que nunca han programado en su vida, es más, me atrevería a decir que no saben ni usar una lavadora.

Por desgracia, los 4 años de carrera no son suficientes para aprender todo de todo. Esto de debe al plan de estudio de las distintas universidades. Por lo general a lo largo de la carrera, hay 4 bloques de contenidos a mi parecer:

-Bloque 1: Asignaturas relacionadas con las matemáticas, álgebra, cálculo, estadística y lógica. Éstas se dan en los primeros años.

-Bloque 2: Asignaturas relacionadas con la gestión, en general se ven contenidos para la gestió de una empresa o de cómo hacer software eficiente y mantenible.

-Bloque 3: Programación. Se manejan distintos lenguajes de programación para la creación de programas o páginas web.

-Bloque 4: Redes y Computadores. Aquí se ve muy por encima cómo funciona la red, los protocolos de internet y los elementos de un computador como memoria ram, registros, chips, etc.

Como veis no salimos sabiendo cosas como reparar el dvd, el microondas o un lavavajillas. Salimos con unos conocimientos medios de muchas cosas pero para hacernos expertos en algo hay que seguir creciendo y adquiriendo conocimientos, ya sea por nuestra cuenta o haciendo un máster más específico. Y si es en un trabajo remunerado mejor que mejor.


Referencias

https://medium.com/espanol/7-habilidades-que-deberian-estar-en-un-curriculum-informatico-pero-no-estan-40bd0d7da879