Estos últimos meses he aprendido mucho. Hace poco menos de año que me metí de lleno al mundo de la programación y me he dado cuenta lo basto que es y lo mucho que hay por aprender en este campo. Sin embargo, y sobre todo cuando comienzo con una nueva tecnología, me siento abrumado por la cantidad de información que hay, de la forma en como se relacionan con otros temas que también es necesario comprender.
Leyendo un post en tutsplus, me pareció gracioso que resaltaran este sentimiento como algo normal entre los programadores, pues todos seguimos siendo estudiantes y de la importancia de aceptar que no podremos saberlo todo, pero que si nos gusta lo suficiente, esto no importará.
Y es cierto, cada vez que me encuentro ante el panorama de temas nuevos, aunque en un principio me abruma, también me emociona y me impulsa a seguir aprendiendo, no hay de otra, cada día esta industria mejora, crece y es excitante saber que siempre habrá algo nuevo que ver.
lunes, 11 de febrero de 2013
Modulos VS Herencia en Ruby
Como parte de mi iniciación en Ruby y viendo los conceptos básicos del lenguaje, llegué a la parte en el que se explica la herencia y otras alternativas como son los módulos.
La herencia en Ruby es simple, es decir, solo se puede heredar de una sola clase padre. Aquí no existen las interfaces y una manera de simular la herencia múltiple es a través de módulos.
Los módulos a demás de definir un name space (el alcance de la clases y métodos , definen métodos y clases que pueden ser utilizados por otros módulos o clases para aumentar la funcionalidad ya sea a nivel de clase o a nivel de instancia.
Otra vez, los módulos son para compartir comportamiento o agregar una característica genérica, mientras que la herencia es para crear relaciones entre objetos.
Entonces la diferencia y la ventaja de utilizar módulos es que, se puede utilizar más de un módulo al mismo tiempo y en clases que no estén directamente relacionadas pero que si necesiten tener la misma funcionalidad.
A la facilidad de incluir un módulo y todos sus métodos dentro de una clase se le llama mixin.
La herencia en Ruby es simple, es decir, solo se puede heredar de una sola clase padre. Aquí no existen las interfaces y una manera de simular la herencia múltiple es a través de módulos.
Los módulos a demás de definir un name space (el alcance de la clases y métodos , definen métodos y clases que pueden ser utilizados por otros módulos o clases para aumentar la funcionalidad ya sea a nivel de clase o a nivel de instancia.
Otra vez, los módulos son para compartir comportamiento o agregar una característica genérica, mientras que la herencia es para crear relaciones entre objetos.
Entonces la diferencia y la ventaja de utilizar módulos es que, se puede utilizar más de un módulo al mismo tiempo y en clases que no estén directamente relacionadas pero que si necesiten tener la misma funcionalidad.
A la facilidad de incluir un módulo y todos sus métodos dentro de una clase se le llama mixin.
jueves, 31 de enero de 2013
Programación
Hoy me reuní con unos amigos para hablar sobre algunos proyectos que vamos a realizar. En algún momento de la plática salió el tema de las universidades y como había sido nuestra experiencia. Esto me hizo recordar algunos puntos que me hubiera gustado saber o al menos tener noción cuando cursé mis estudios.
Para empezar yo llegué a mi carrera sin mucho conocimiento de informática, nunca había destapado una computadora y lo más que sabía hacer era picarle al Word y descargar películas. Y cuando entré me estrelle completamente con temas como algoritmos, lenguajes de programación, ciclos, variables, redes, protocolos, routers, etc. Lo que creo que es peor, es que me presentaban la programación como algo muy difícil, algo que solo gente especial podía hacer, que había que estudiar mucho.
Sin embargo creo que esto no es del todo cierto, la programación para mi es tan sencillo como que tienes un material que podemos llamar entrada, al cual le aplicas un proceso u operación que puede o no hacer cambios en la entrada y luego tienes un resultado o salida. Ahora solo es cuestión de hacer varios de estos procesos, juntar entradas, salidas y hacer el proceso intermedio tan elaborado como se necesite.
Es todo, sin embargo yo no podía ver esto, realmente se me hizo muy difícil y no fue hasta que me puse de lleno que pude sacar esos temas. Si se les introdujera a los personas a temas de programación con otra aproximación, mas simple y sencilla que se comprendiera el concepto se podría generar un interés genuino y libre de prejuicios causados por malas experiencias o malas practicas.
Ahora, creo que ser un programador políglota es importante y te ayuda mucho a generar un criterio y abrir la mente a nuevas formas de resolver o evitar problemas, así que hacer consciente a las personas de que hay de donde escoger en cuanto a lenguajes, que cada uno tiene sus fortaleces y debilidades, que pueden considerarse como herramientas que podemos utilizar en determinadas situaciones, es algo que debería estar presente desde los primeros semestres. Establecer por ejemplo, las bases de la programación orientada a objetos, patrones de diseño, modelos y ahora sí, generar diferentes proyectos en los que se pueda ver en acción a los lenguajes y así tener opciones para elegir.
Otra de las cosas es el crear proyectos para aplicar los conocimientos, apegados a los "estándares" de la industria, con metodologías de desarrollo aplicadas, y formar en el trabajo de conjunto, con herramientas de comunicación y control de versiones.
Y principalmente, generar un ambiente creativo al rededor de la programación, de como ésta nos puede ayudar a resolver problemas cotidianos, aprovechar y sacar el máximo de los dispositivos a los que tenemos acceso y divertirnos en el proceso.
A lo mejor no estoy abarcando todas las posibilidades, a lo mejor no todo es aplicable y se que hay muchas cosas a considerar pero son de las acciones que me hubiera gustado experimentar a una edad mas temprana.
Y principalmente, generar un ambiente creativo al rededor de la programación, de como ésta nos puede ayudar a resolver problemas cotidianos, aprovechar y sacar el máximo de los dispositivos a los que tenemos acceso y divertirnos en el proceso.
A lo mejor no estoy abarcando todas las posibilidades, a lo mejor no todo es aplicable y se que hay muchas cosas a considerar pero son de las acciones que me hubiera gustado experimentar a una edad mas temprana.
domingo, 27 de enero de 2013
Bootcamp Ruby on Rails
El viernes y sábado pasado tuve la fortuna de ser uno de los 15 seleccionados por Crowd Interactive para asistir a un bootcamp en sus instalaciones en Colima. Nunca había asistido a un bootcamp y vaya si fue divertido. Aún mas siendo Crowd Interactive, a los cuales llegue hace poco, y que de inmediato me atraparon con la buena vibra y pasión por la programación que transmitía a través de su sitio. Sin embargo, estar ahí en persona, rodeado de gente talentosa, de gente con ganas de aprender, que ama lo que hace, es una sensación que me gustaría vivir a diario.
Como dije, al bootcamp asistimos un grupo de personas con ansías de aprender, y divertirnos, así que desde que llegamos eso fue lo que hicimos, el primer se nos dio una introducción a Ruby, que nunca había tocado. Es increíble la facilidad con la que te permite hacer las cosas, la sintaxis obviamente nos saca de lo que conocemos, pero la curva de aprendizaje es pequeña, así que vimos algunos ejemplos de lo que se podía hacer y se nos reto a resolver unos problemas.
Al día siguiente seguimos con lo que ya era el framework de Rails, con una introducción y se comenzó a elaborar una pequeña aplicación para demostrar otra vez las capacidades de la tecnología. Me divertí mucho aprendiendo y otra vez me sorprendió lo fácil y lo mucho que se puede lograr en tan poco tiempo, realmente hace felices a los programadores, porque el tiempo voló.
Luego salimos a comer y a convivir a una casa en frente y todo estuvo muy bien. Puede platicar con otros de los asistentes y intercambiar opiniones en cuanto a las respectivas universidades a las que asistimos.
Después continuamos con la cátedra, otra vez, las herramientas que te da Rails realmente aceleran el trabajo y aumentan la productividad. Así, llegamos al punto donde teníamos que agregar un poco más de funcionalidad a la aplicación con lo ya aprendido. Así que con el tiempo restante trabajamos en la aplicación mientras se nos brindaba apoyo en cualquier cosa que nos atoraramos. En ningún momento me frustre o desesperé, y aunque no pude terminar ese día la funcionalidad se que fue en parte por malas suposiciones mías o que no tengo todas las bases del framework. Esta mañana terminé la aplicación y pude hacerlo sin más que aclarar ciertos conceptos y replicar acciones que ya había hecho.
Del bootcamp me quedo con la experiencia, la vibra de comunidad y apoyo y el interés de profundizar en Ruby y Rails para desarrollar aplicaciones con estas herramientas, el reafirmar mi pasión por la programación y seguir trabajando para mejorar. Realmente la pase muy bien buscaré la oportunidad de realizar y transmitir esta experiencia a más personas.
Gracias Crowd Interactive.
martes, 15 de enero de 2013
Hacker Épico
El fin de semana pasado por fin recibí el bonche de libros de Informática64, después de casi un mes (de hecho estaba algo preocupado) de espera, tengo en mis manos, una colección con temas enfocados a la seguridad y que más que nada son un capricho mio por lo mucho que admiro a los chicos de Informática64.
Y el primer libro que leí fue Hacker Épico. Una mezcla entre novela, manual técnico y documento de divulgación. Cuando lo comencé a leer no sabía que esperar, sin embargo desde el primer capítulo me enganche con la historia y el personaje; aunque no es nada profundo y la premisa que usa no es demasiado desarrollada, cumple con su objetivo que en lo personal pienso que es enseñar y divulgar dándole una utilidad dentro de una historia a los diferentes temas de seguridad informática que contiene, además de sembrar una sed por el conocimiento.
Estos temas no son nada difíciles y si a caso uno que otro pueden generar dudas, éstas se despejan un query en Google. Me llamó la atención lo útil que es envolver información técnica con una historia y línea y lo bien que lo hicieron funcionar.
Lo terminé y me quede con ganas de más, espero que pronto salga una segunda parte. Sin duda y tal como se lo dije a mi hermano, este es un buen libro por donde empezar si quisieras saber mas de seguridad por que aunque no es en sí una introducción, el libro te da un panorama muy claro de lo que se puede llevar a cabo con las herramientas adecuadas, además de estar sazonado con toques de humor y una historia muy acorde.
viernes, 11 de enero de 2013
Trackball
Hace algún tiempo me conseguí un desktop para trabajar en casa, quería una máquina con la que pudiera trabar sin problemas. Con ella venía un mouse Logitech T-BC21 con un trackball, un aditamento muy curioso y que me resultó mas cómodo. Sin embargo el trackball no me permite hacer scroll de las páginas como normalmente se hace. A pesar de todo, el mouse trae 2 botones extra, que no se por que razón estaban configurados para ejecutar la función de "back" y "forward" sin opción de alterar este comportamiento, así que para no utilizar las teclas para navegar verticalmente por las aplicaciones y al no poder usar el trackball me vi en la necesidad de buscar un programa que me permitiera modificar los eventos desencadenamos por los botoncitos extras. Después de unos cuantos querys en Google me tope con X-Mouse Button Control un pequeño programa que me permitió configurar los botones con la función de scroll correspondiente sin mas problema. La verdad es un programa muy completo que te permite crear perfiles para los distintos botones que pueda traer un mouse e intercalar entre ellos, me imagino que la aplicación está orientada a los mouse para gamers con muchos botones, aunque a mi me resolvió mi pequeño problema.
domingo, 6 de enero de 2013
Get Things Done
Hoy comienzo mi camino en las artes arcanas del GTD, un sistema para organizar el flujo de trabajo. Este año tengo varios proyectos, libros y un torbellino de cosas que quiero lograr y como no quiero volverme loco, he decido implementar este sistema tanto en mi vida personal como en mi trabajo y el objetivo es convertirlo en un hábito.
De lo poco que he leído sobre él, se escucha algo difícil de hacer y algo que requiere disciplina, así que me voy a poner a prueba en estos puntos, quiero hacerlo porque se dice, el sistema es muy bueno.
¿Qué es?
Es una metodología o flujo de trabajo que funciona bajo la premisa de que si liberamos nuestra mente de todos los detalles y cosas superfluas que surgen a la hora de organizar un proyecto o actividad podremos entonces dedicar nuestro valioso tiempo a de hecho realizar tal actividad o proyecto.
"No ocupes tu mente en organizar, ocupala mejor en crear y disfrutar."
- Es un cambio muy grande los hábitos de organización. Eso si se tiene cierta organización.
- No hay "listas de tareas" clásicas. Aunque si se asignan prioridades de forma inteligente.
- Un flujo de cuatro pasos a seguir de forma estricta.
- Aplicable al trabajo y a la vida diaria ( "contextos").
¿Qué necesito?
- Aprender y habituarse al método: flujo de los 4 pasos.
- Aplicación web o móvil que pueda sincronizar.
- No es el método definitivo, no es para todos...
- Paciencia: no desesperar, persistir.
¿En qué consiste?
A grandes rasgos, cada actividad que tengamos que realizar, pendiente, idea, a la que se le tenga que invertir determinada cantidad de tiempo, la vamos a sacar de nuestra mente inmediatamente y la vamos a trasladar a un "inbox" o contenedor. Este "inbox" va a contener en primera instancia todas las actividades como primer paso, y al cual llamamos "recopilar". Entonces tendremos una lista de actividades, es decir cosas que requieren de acción, no archivos, no contenido (sonido, imágenes, vídeo), no contactos, sólo acciones.
GTD está concebido para ser ágil, y los procesos que lo componen deben de ser lo más simplificados y sencillos posibles para poder surtir efecto y lograr una mejoría, si no, sólo estaríamos entorpeciendo nuestro trabajo.
Después pasamos a la etapa de "procesar", en este momento actuamos sobre el bonche de actividades y debemos desarrollar la capacidad para valorar como reaccionamos ante las distintas actividades, en realidad suena más complejo de lo que es. Sólo preguntarnos si la actividad la podemos realizar en seguida, depende únicamente de nosotros o si requiere de alguien más para completarse.
Si la actividad no nos llevará mas de un tiempo mínimo como 2 o 5 minutos, la realizamos enseguida y así la sacamos de nuestros quehaceres. Si depende únicamente de nosotros la archivamos. Si depende de alguien más la delegamos.
Este paso esta complementa con el siguiente, que es el de "organizar", en el cual distribuimos todas las actividades de acuerdo a su naturaleza o estado. Se recomiendan 4 carpetas, conjuntos o estados: "Próximo", "Proyecto", "En Espera", "Algún día".
Las actividades de carácter urgente e inmediato las almacenamos en "Próximo", como las próximas a realizar. Pueden ser las actividades a realizar la siguiente hora o día.
Las actividades programadas para los siguientes días, o semanas las compactamos en "proyectos". Así tendremos varios proyectos, y estos a su vez deben de reducirse a actividades sencillas que podamos manipular fácilmente.
Las actividades que por algún motivo exterior a nosotros estén detenidas, estén delegadas o necesitan algo para poder llevarse a cabo las pondremos "en espera".
Por último tenemos las acciones que queremos realizar "algún día".
El siguiente paso es la revisión, la cual se recomienda hacer 1 o 2 veces al día. En este paso verificamos el estado de las actividades y si han cambiado su estado las trasladaremos al lugar correspondiente; si ya no nos interesan o se han completado las eliminamos.
Los 4 pasos fundamentales
Recopilar
Captura de ideas, tareas, recordatorios, cosas que hay que hacer..
Todo va a un lugar llamada inbox
En cuanto aparezca la idea-tarea... mandarla al inbox
No hagas nada más, solo asegurarte de enviarla ahí.
Procesar
Es el momento de "sacar" las cosas del Inbox.
¿Requiere acción? Delégala o asígnala a carpeta
¿No requiere una acción? Archívala o elimínala.
Aplica la regla de los 2 minutos de forma estricta: Si lo que tengo en el inbox lo puedo hacer en 2 minutos lo hago. (llamada, correo breve, etc.)
Organizar
Organizamos por carpetas lo asignado anteriormente.
Carpeta: Próximo.
Carpeta o carpetas: Proyecto.
Carpeta: En Espera.
Carpeta: Algún día o tal vez...
Revisar
Chequea el estado de tus tareas y proyectos.
Hazlo "siempre que puedas" o una vez al día.
Reasigna estado... o mueve de un sitio a otro.
Proceso ágil, pero asegura el éxito del método.
Hasta aquí como introducción y como un panorama general, una vez que lea el libro podré dar más detalles de los pasos y sus características.
Suscribirse a:
Entradas (Atom)