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í.

viernes 27 de febrero de 2009

Experiencia de intercambio en la India.

Escribo esto para poder compartir parte de lo que ha sido mi experiencia como alumno de intercambio del ITESO en el Loyola Collage. Esta escuela se encuentra ubicada en Chennai, Tamilnadu al sureste de India.
Las razones que en un principio me motivaron a venir fueron los rumores que como alumno del ITESO había escuchado: “en la India son muy buenos para programar”, “la India es uno de los países que está en top de lo relacionado con tecnologías de la información”, “las empresas relacionadas con TI buscan mucho el talento Indú”.
Con ánimos de aprender me embarque en esta travesía. A lo largo de ella he descubierto mucha riqueza cultural en este país tan lejano y una forma muy diferente de trabajo, estilos de vida únicos y milenarios en sus tradiciones. Los contrastes de esta experiencia me han hecho pensar en las oportunidades que el ITESO me ofrece como institución educativa. Y de manera análoga no puedo escapar a la reflexión del entorno que me rodea en Chennai, gracias a esto ahora soy más consciente de las oportunidades que tenemos y muchas veces desaprovechamos en México.
La experiencia de viajar al extranjero para nutrirse de otra cultura es una oportunidad que recomendaría no dejar pasar a todo estudiante mexicano.
Los ánimos de trabajar de algunos de mis compañeros, me han demostrado que a pesar de la adversidad y de la escases de recursos siempre se puede seguir adelante. La calidez de ellos me ha desvelado que son gente muy amable, dando cuenta de la riqueza y calidez de las tradiciones del pueblo Indú.
Me encuentro a cuatro semanas de finalizar el periodo formal de clases y me doy cuenta que la experiencia de intercambio académico ha sido enriquecedora no tanto por los conocimientos que he podido aprender, si no más bien por el contacto con los compañeros, profesores y en general con las personas que me he relacionado.
De las experiencias académicas más enriquecedoras que hasta el momento he atesorado menciono algunas describiendo sus peculiaridades.
He visto que se le da mucha importancia a la generación de conocimiento mediante investigación formal y aplicada de manera ejemplar. Algo que sin duda en el ITESO podríamos hacer pero que en el caso de las Ingenierías hemos dejado un tanto de lado. También considero importante mencionar que las investigaciones mantienen una estrecha relación con programas de apoyo del gobierno. Algunos de los temas que puedo mencionar son: Cómputo de alto rendimiento y sus aplicaciones en la biotecnología, desarrollo de semiconductores bioelectronicos, desarrollo e investigación sobre sensores y transductores así como sus aplicaciones industriales, investigación formal sobre grafos, entre otros.
He sido testigo de cómo la universidad en colaboración con ONGs realiza talleres de robótica para niños de 10 años de edad en adelante, en estos talleres aprenden algunos principios básicos de mecánica, electrónica y programación.
Dentro de los eventos académicos como congresos se promueve mucho la competencia y trabajo en equipo mediante concursos, tales como: Concurso de diseño web, debates sobre temas relacionados con TI (tecnologías de la Información), exposición de trabajos de investigación. Además en el caso de algunos de los congresos, estos están pensados para generar un espacio de debate particular sobre la aplicación de las TI en la resolución de problemas particulares de la región, tal es caso de “Workshop on Tamil Computing Technology” organizado para debatir sobre la representación del Tamil (uno de los lenguajes de la región sur de India) en diversas aplicaciones informáticas.
También puedo mencionar que en base a lo que he percibido puedo decir que se ve más difundido el uso de software libre bajo licencia GPL o similares. No solo las instituciones educativas si no también el gobierno y algunos profesionistas independientes usan mucho estas herramientas. Prueba del interés e importancia de esta tema es que hay congresos locales y nacionales que se ocupan del tema como tópico principal o anexo, pero siempre presente.
Además de la experiencia académica relacionada directamente con temas de la Carrera de Ingeniería en Sistemas Computacionales, puedo decir que el Loyola Collage también ofrece, mediante una programa de servicio social denominado "outreach program," la oportunidad de conocer parte de la realidad que viven las personas de comunidades rurales y/o de escasos recursos de la India. Como partícipe de esta actividad tengo que decir que en realidad es una oportunidad muy enriquecedora y que sin duda hace reflexionar cobre el compromiso social de estudiar una carrera (en México o en la India, no hago distinción de país).
Hay mucho que decir de esta experiencia, y podría relatar por líneas y líneas los detalles de esta, pero quiero concluir diciendo que a pesar del caos al que me enfrentado y de todos los problemas que he tenido y probablemente seguiré teniendo, la experiencia de intercambio me marcado para abrirme los ojos y descubrir como estudian, trabajan, viven, se relacionan, aprenden, en resumen como se forman a si mismos manteniendo viva la cultura que han heredado de antaño.

lunes 26 de enero de 2009

Comuniades rurales de la India



Fotos Amapayanallur

jueves 4 de diciembre de 2008

Fotos de la India

Como sabran varios de ustedes me encuentreo en estos momentos en la Chennai, Tamil Nadu, India, por un intercambio academico. Es emocionate y mas adelante les contare las peripecias de mis primeros días. Por lo pronto les comparto algunas fotografías.
Esta imagenes que les muestro aqui son algunas de las fotos que he tomado, se las coparto porque vaios ya me han pedido fotografías y he estado algo ocupadin como para poderlas subir todas a algún album en la red. También les comento que al parecer no voy a poder contestarles por Facebook ya que la universidad o el proveedor de internet tienen bloqueada la página. El chiste es que estan igual de paranoicos aqui con ciertas páginas de internet como en el ITESO lo están con la cuestion de los puertos de la red, en fin... ya vere que hago.
He pasado un monton de aventuras y he estado grabando algunos videos, que despues les quiero compartir, los publicaré más adelante por aquí. Saludos a todos y espero que esten bien.
Me despido con las fotos.


Entrada a la Universidad de Loyola Colage en Chennai, Tamil Nadu, India (como todo tiene partes bonitas dignas de una postal y otras pues que la verdad no parece esculea ya se las ire mostrando)

Templo emblematico de la universidad.


Boda celebrada bajo el el rito de una de las religiones de la India. (más adelante publicaré el video)

Como sabrán la India tiene una cultura que se sumerge y empapa en los ritos que le conectan con la tracendencia, con aquello que esta más alla del entendimiento del hombre con El otro que le de alguna manera todos tienen la experiencia o almenos la intuyen, algunos le llamamos Dios o aveces de otra forma: El Cosmos, El Todo, Visnu, Ala, Jeova, Yavé. En fin mucho que aprender aquí de Janistas, Six, Musulmanes, Cristianos y quien sabe cuantas otras formas de pensar que se mezcaln en un mozaico que desvela la grandeza de siglos de de tradicón en la cultura de la India.
Por ultimo y apetición de varios "caballeros" que me hicieron diversos comentarios sobre las mujeres indus, les dejo una foto de una de ellas ( parte del staff que atendia el restaurante del hotel y muy amable por cieto), espero sea de su agrado.


Espero sus comentarios, gracias.

martes 8 de julio de 2008

Hoy lloré y no se ¿porque...?

Hoy lloré por tu ausencia, lloré por la nostalgia y por el dolor que me causas.
No valieron las palabras, no valieron discursos... las promesas aunque olvidadas se resisten a morir.
Poca luz de esperanza ante el flagelo de la perdida... no lloro por nada, no lloro por orgullo, no lloro por soledad, no lloro por rencor o impotencia... hoy lloro tu ausencia, lloro al enfrentar tu perdida...
Si estabas tan viva, si estabas tan feliz... solo me confundo y me atribulo pues a pesar del tiempo no logro responder... ¿porqué tuviste que partir?

***
P.D. Muy ad-oc para el 2 de noviembre en México. El panda me dará la razón... jeje.