viernes, 12 de agosto de 2011

Ya soy programador ¿y ahora? ¿que sigue?

Divierte programando y disfrutarlo.

No creas que sabes todo, esto apenas comienza. Seguramente habrá más tecnologías por aprender allá afuera. Y no presumas de tus años de experiencia. Deja que otros colegas se den cuenta de lo bueno que eres por los que haces con tus lineas de código tu forma de trabajar y dar resultados.

No quieras reinventar la Rueda. Reutiliza el código tuyo o de otros. Lee código de otros y modifícalo. Aprende de tus errores y de los demás, practica mucho. No quieras correr antes caminar, empieza por la básico pero no te quedes ahí, avanza en aprendizaje de cosas nuevas y no olvides practicar las anteriores para no olvidarlas.

Aprende buenas practicas de programación del código de otros y trata de refactorizar código que esta mal hecho, esa es una excelente forma de aprender y no olvidar lo que se debe hacer y lo que es mejor evitar.

Entiende lo que estas haciendo. No hagas cosas a ciegas no digas "así funciona y no le muevan..." trata de comprender en la medida de lo posible que esta pasando.
No dejes sin corregir bugs... al menos deja etiquetas TODO en los comentarios del código, señalando cual es el error y porqué.

Si modificas el código asegurare de que los comentarios del código que al cual le estas dando mantenimiento sean consistentes con la funcionalidad de la pieza de código que acabas de modificar.

Cuando diseñes un software no se te olvide documentar las decisiones que tomas, las opciones que evaluaste y el criterio que seguiste para elegir esa opción. Haz diagramas preferentemente en una herramienta que mantenga sincronizado la representación gráfica y el código, si no pon la fecha a los diagramas y/o las versiones de código que se representaron en el diagrama. Si es necesario usa diagramas de formas libres para explicar el funcionamiento global del sistema.

Date tiempo para configurar tu ambiente de desarrollo evalúa cual es la herramienta que mas te gusta y te ofrece la funcionalidad que necesitas de acuerdo al lenguaje de tu proyecto o tecnología que debas manejar. Adelántate a las necesidades, estudia por anticipadamente lo que te puede servir.

Programar, esta 100% relacionado con escribir lineas de texto aprende a usar herramientas de procesamiento de texto por medio de linea de comandos. Si estas en un ambiente UNIX como alguna distribución GNU/Linux puedes investigar como se usa sed, awk, cat, grep, xargs, el uso pipes y redirecionamiento de flujos. Si estas en plataforma windows seguro podrás encontrar algunos de estas buenas herramientas con Cigwin.

Aprende acerca del ciclo de vida del software u otros tópicos relacionados, como pruebas manuales y automáticas de software, levantamiento de requerimientos, empaquetado de software, builts, deployments, modelado de software, auditoría de código, licenciamiento de código y cuestiones legales, aprende que herramientas se usan en cada una de estas actividades.

Las maquinas virtuales te pueden servir para simular ambientes distribuidos y probar nuevas herramientas de desarrollo.

Las pruebas de unidad automáticas (automated unit test) son una buena herramienta y una inversión a futuro, a la mejor requiere de una mayor inversión de tiempo pero es redituable cuando se requiere dar mantenimiento al código del programa.

Usa un repositorio de código y no tengas miedo a hacer commits. Si te equivocaste e introdujiste un bug has rollback, aprende a usar herramientas de comparación de código. Crea tags de código, y branches.

El dominio de la linea de comandos para invocar las herramientas que utilizas programando te dan mucha poder, la interfaces gráficas pueden ahorrarte mucho tiempo, elige cual usar según tus necesidades pero no tengas miedo de aprender a usar las dos.

Ten un cuaderno de notas, Puede ser un cuaderno y una pluma o bien un cuaderno de electrónico de notas como http://www.tiddlywiki.com/. El objetivo es que puedas expresar fácilmente tus ideas y plasmarlas para comunicarte y para no olvidar lo que has aprendido. Necesitaras saber hacer diagramas de muy diverso tipo UML, ER, Topología de red CISCO, o simplemente dibujos para comunicar ideas de manera sencilla.

Administra tu tiempo, puede ser una hoja de excel, con una lista de tareas por hacer en un blog de notas, en un software como planner (http://live.gnome.org/Planner/Downloads) o http://mgsd-docs.tiddlyspace.com/. El que te sea mas útil de acuerdo a lo que necesites ya tu nivel.

¿Se te ocurren más cosas? seguro que si, pues después de todo ya eres programador. Te invito a postear en los comentarios otras cosas que se te ocurran.

Por lo pronto te recomiendo un libro, eso si te advierto esta en Ingles, vale la pena es muy bueno, los datos son:
Titulo: The Pragmatic Programmer: From Journeyman to Master
Autor: Andrew Hunt; David Thomas
Editorial: Addison-Wesley Professional
Fecha de publicación: October 20, 1999

y lo puedes encontrar en: http://acmsel.safaribooksonline.com/book/software-engineering-and-development/020161622x/firstchapter



¿Qué necesito para aprender a programar?

Motivación, eso es lo primero para aprender cualquier cosa. Si no estas motivado en el camino te rendirás. Yo se lo que te digo, esto no es fácil si te lo tomas en serio, y muy pronto te darás cuenta de eso. Pero eso si, al menos desde mi perspectiva, puedo decirte que es divertido, emocionante y gratificante ( por que me gusta y he encontrado mi motivación, tu deberás darte a la tarea de encontrar lo que a ti te motiva).

Lo siguientes es atreverse a hacer, e iniciar.

Y por ultimo no dejar de preguntar y buscar la respuesta a preguntas como ¿qué es programar?¿Como aprender a programar mejor?¿que me motiva en este momento? ¿que es ser programador?, para si pasar nuevamente a reforzar lo que nos motiva y después poner en practica lo aprendido y empezar el ciclo nuevamente.



¿Que debo de tener en cuenta si quiero aprender a programar?

Ten en cuenta que esto de programar es un habilidad que se perfecciona y no hay respuestas absolutas, los principios en los que se basan las técnicas de programación pueden cambiar el día de mañana cuando las Ciencias Computacionales evolucionen y encuentren nuevos paradigmas o simplemente cuando salga al mercado una nueva versión de algún software que utilices para programar.

Las respuestas que se den en un momento a cierto problema podrán ser validas en el contexto de negocios o del problema en cuestión, y podrán ser validas o no en otras circunstancias bajo otra situación o momento. Descubrir cuando aplicar o no cierto concepto o principio es tarea del programador.

Programar por programar no enseña tanto como tratar de resolver problemas de la vida real por medio de una computadora y ayudados por un lenguaje de programación. Acercarse a los limites de algo nos ayuda a definir las cosas, si tu tratas de programar para resolver algún problema te darás cuenta de los limites de la tecnología, entonces entenderás cada vez un poco más que significa y involucra esto de programar. Eso si, para resolver problemas de la vida real no tiene que ser lo más complejo, puedes empezar por algo pequeño. La forma de comer un elefante es a pedacitos.

Un programador no debe limitarse a saber de tecnologías de programación o de ciencias computacionales, si no por el contrario debe de tratar de expandir su conocimiento en aquellos tópicos que le requiera el contexto de su problema. Si estas haciendo un sistema para reservación de libros en una biblioteca, el tener una idea de que involucra este proceso te ayudará a entender que tecnología existente te ayuda a resolver más fácilmente tu problema. Si se tratase de un problema de como resolver ecuaciones entonces primero deberás saber tu como resolverlas. No puedes dar instrucciones incorrectas a alguien y esperar obtener la solución correcta a un problema, mucho menos a una computadora, si las instrucciones que das no son correctas no podrás asegurar que tu resultado sera el correcto. Primero hay que entender el problema antes de tratar de dar respuesta.

Programar significa usar lo correcto en el lugar correcto. Se puede decir que una tecnología es mejor que otra en base solo de los beneficios que ofrece sobre el contexto en en que se pretende usar. no por que sea de cierto fabricante significa que esa tecnología es mala.

A veces las soluciones no implican la solución óptima, si no la solución lo suficientemente buena. Más cuando la programación se convierte en tu profesión te das cuenta que debes de aprender administra el tiempo y recursos para maximizar los beneficios (algo asi como economía de la programación).

Lo importante es cumplir los objetivos que se han fijado y no usar la tecnología de moda o tener el algoritmo más avanzado, claro a menos de este sea el objetivo.

No existe el programa perfecto para todo. Generalmente las mejores soluciones son las que son simples y hacen tareas pequeñas bien definidas.

Se humilde. De todos se aprende y hay que aprender a tratar a los colegas con respeto. Nadie nace sabiendo programar.

Un programador debe aprender a administrar su tiempo para aprender, practicar, trabajar, tener vida personal y en general todo aquello que le lleve a un balance sostenido.

Finalmente dejo una lista de las habilidades que considero debe tener un programador en el contexto del mundo actual:

1. Hablar Ingles.
2. Saber aprender.
3. Saber resolver problemas de manera ordena.
4. Poder platear una serie de pasos para obtener la solución a un problema.
5. Tener gusto para usar la computadora.
6. Tener ganas de leer.
7. Tener ganas de escribir (no solamente código).
8. Saber interactuar con la gente.
9. Tener gusto por la tecnología.
10. Saber que no se sabe todo y motivarse por aprender aquello que se necesita.

El lado técnico de este Blog

Después de un largo pero muy lago descanso...

Este post surge después de mucho tiempo de descanso y con el objetivo de compartir parte lo que es mi vida profesional con os demás.
Se que no soy un experto pero algunos años de experiencia me dan algunas ideas que puedo compartir con el demás mundo allá afuera.

Mis motivaciones y que esperar de "artículos técnicos"

Debo decir que inicialmente había decido publicar en este blog contenido de mi ideología personal pero dado que gasto más del 30% de mi tiempo diario en cosas técnicas , me dije... "que diablos compartiré cosas técnicas de lo que se... ". Y ahora mientras lees esto a la mejor te preguntaras --a que rayos se refiere este con "lo que se "-- y pues bien, resumirlo en un solo post será complicado, pero lo que si puedo hacer es adelantar que estaré compartiendo cosas sobre: que es la ingeniería de software, cuales son las herramientas que he usado y por que, asi como sus características, sus ventajas y desventajas de estas herramientas, consejos de como aprender lo que yo he aprendido (hablando técnicamente claro), entre otras.
A esta serie de artículos que publicare en este blog les pondré la etiqueta: "Artículos técnicos"
También quiero compartir las motivaciones que dispararon esta inquietud que traía ya latente desde hace tiempo. El primero de estos motivos es una persona allegada a mi me ha pedido que le enseñe a "hacer páginas web". Y pues una de las cosas a las que se que me voy a enfrentar es es explicarle (no solo a esta amiga que me pidió un favor, si no a todo lector que se interese por esta serie de posts), que es lo que realmente implica el desarrollo wTiddlyWikieb termino que empleo que porque es como creo que deberíamos referirnos a esta área del conocimiento / actividad. Pues lamentablemente es triste ver como esta área del conocimiento y actividad profesional es aveces devaluada con ideas incompletas de lo que realmente implica, y no pretendo yo definir en su totalidad que implica todo el "desarrollo web" pero si contribuir a un mejor entendimiento de este termino.
Otra de las cosas que me motiva a escribir esta serie de artículos es que un profesora de mi alma matter, me pidió ayuda para configurar un servidor con diferentes programas que permitieran llevar a cabo a los alumnos de su materia, y dado que me apasiona estar relacionado con el mundo académico, acepte. La idea es que los acerquemos más a la vida real de como se hacen pruebas de software y como el proyecto que generalmente se pone en esa materia es en tecnologías web, tuve un pretexto más para iniciar este proyecto de publicar esta serie de "artículos técnicos".

¿y que pasa con el resto del Blog?
No limito el tema de mis post, podrán seguir viendo los que me gusta como fotografías, videos, chistes reflexiones, y otras cosas. pero bueno por ahora me enfocara en escribir sobre: ingeniería de software,programación web,herramientas de desarrollo, aprender a programar, etc

Trataré de mantener mis artículos en español, pero de ahora en adelante no me limitaré. Invito a todo hispanoparlante que visite a este blog a que aprenda Ingles como segundo idioma, especialmente si desea adentrarse en temas tecnológicos o bien por lo menos aprender otro idioma, así seguir superándose como persona. Pero por lo pronto si les advierto, podrán encontrase artículos en Ingles de ahora en adelante por aquí.