Para el momento en el que escribo esto tendré poco más de 17 años de haber comenzado mi carrera en el desarrollo de software, a lo largo de todo este tiempo he podido ver avances personales y profesionales que son los que me gustaría compartir aquí, con el objetivo de que otros desarrolladores aprendan y acorten su camino basados en la experiencia que puedo ofrecerles, y también, guiarlos a través elementos muy simples que les permitan saber qué pasos tomar a continuación en su carrera como profesionales de software.

He tenido la oportunidad de desarrollar en diferentes plataformas y tecnologías, he podido aplicar algunos métodos y técnicas existentes dentro del desarrollo de software, pero siempre enfrento el mismo problema cuando alguien se trata de iniciar dentro de esta carrera.

Adicionalmente, he podido ser parte de comunidades de software, y podría decir que la mayoría del aprendizaje que he obtenido ha sido de ver cómo los demás crean software, apreciar las técnicas y métodos que usan, así también sus herramientas y la forma en cómo van adoptando nuevas tecnologías. Durante mi participación en todos estos años en comunidades de software he escrito artículos, he grabado podcasts y videos, organizado eventos y reuniones que permiten a muchos programadores de diversos estilos y generaciones compartir conocimiento, o bien, aprender de gente con más experiencia en el área.

No siempre son las mismas preguntas, generalmente algunos casos coinciden; y creo que también existen confusiones por parte de algunas personas que creen que quieren dedicarse a esto cuando realmente están buscando algo diferente. A veces, tenemos que cuestionar el hecho de saber verdaderamente si se quieren dedicar a esto, exponiendo casos y contextos que les permitan identificarse a través de una cultura que hoy pretendemos formar para crear software de calidad.

En este punto de mi carrera, me doy cuenta de que deben existir ciertos elementos de conocimiento esenciales en las áreas de ciencias de la computación y la informática, que ayuden a los aprendices a incorporarse de manera efectiva en el proceso de desarrollo de software, así también, deberían de contar con mecanismos efectivos de comunicación y una guía que les permita saber qué hacer en caso de enfrentarse a su ignorancia o querer avanzar su carrera, cómo hacer un equipo de trabajo y escuchar a otros compañeros que les quieran transmitir algún tipo de conocimiento valioso que puedan ocupar en su día a día.

A lo largo de varias experiencias en diferentes organizaciones, he podido identificar algunas técnicas y métodos comunes en los equipos de trabajo, y que coincidentemente han servido para poder crecer como programadores, ya sea aprendiendo nuevas tecnologías o bien creando procesos de comunicación que permiten crear software que resuelve las necesidades que nuestros contratantes exigen.

Todo lo escrito aquí, está enfocado a guiar a un aprendiz de software que tenga la pasión de emprender un camino muy largo lleno de frustraciones satisfacciones, pero tan importante como poder hacer la carrera de un abogado o doctor o cualquier otra disciplina que impacte la vida de las personas.

A quién va dirigido

Creo que es importante mencionar que todo lo que puedas leer aquí está orientado a desarrolladores de software, sin embargo, bien podría servirte para algunos aspectos en alguna de las ramas alternas de la tecnología o de la ciencias computacionales en las que te deseas desempeñar, pero quiero hacer mucho énfasis en el hecho de que si estás pensando en ser un desarrollador de software y te agrada mucho la tecnología, pero sobretodo quieres aprender continuamente de todos los cambios que existen actualmente del mercado, entonces creo que lo que estoy escribiendo aquí podrá ayudarte.

Lo anterior lo digo porque hoy es el día en el que he tenido la oportunidad de moverme de plataformas y de procesos de trabajo, que me han permitido incorporar nuevos paradigmas de desarrollo, así como nuevas herramientas y tecnología acorde a las necesidades de cada cliente, he podido explorar soluciones tecnológicas y metódicas que me han ayudado no solamente a mí sino también a un grupo de personas a las cuales les he podido transmitir el resolver problemas que parecería muy complejos o difíciles, pero que con un poco de preparación en ciertos elementos que podemos considerar como esenciales hemos podido realizar.

Lo descrito aquí, también ha ayudado a otras personas y organizaciones, complementando las prácticas a través de las sugerencias, o que se han acercado a mí para preguntarme qué podrían hacer en dado caso de que su carrera se esté estancando, o bien, quieran avanzar hacia otra dirección, pero siendo conscientes del posible riesgo que podrían tomar.

Yo quiero mostrarles aquí cómo es posible que puedes arriesgarte a hacer ese cambio, tomando las previsiones y los elementos necesarios para aprender a fallar, para aprender a aprender, y sobre todo para examinarte como un profesional de software en algún momento en el tiempo, voltear hacia atrás para poder ver qué tanto has hecho y qué tanto te podría hacer falta.

Definitivamente, hay dichos coloquiales y frases muy bien conocidas que dicen que cuanto más conoces más ignoras, y en el aspecto de tecnología no puede ser más cierto, pues conforme te vas entrando en el grupo de herramientas y plataformas que existen para resolver los mismos problemas, vas desconociendo más porque quieres aprender todo eso, quieres saber cómo se usa en algunos casos, cómo mejorarlo, y puede ser tanta información que tal vez no sepas por dónde empezar. Es por esto que quiero asentar basado en mí experiencia y de algunas otras personas, qué sería lo más importante que deberías de hacer en algún momento del tiempo de tu carrera, ya sea que estás iniciando o reiniciando en otra plataforma para poder hacerte efectivo con los nuevos paradigmas y tecnologías que estés adoptando.

Por lo anterior, recomendaría ampliamente que cualquier persona que quisiera adentrarse al desarrollo de software de forma profesional pudiera echar un vistazo a lo que pretendo describir aquí.

Parte 1: Carrera en el desarrollo de software

Capítulo 1. ¿Qué es un profesional de software?

…​Los profesionales, en su mayoría, están sujetos a estrictos códigos de conducta, rigurosa ética profesional y obligación moral con la sociedad.
— Wikipedia

Piensa en un buen doctor, y analiza por un momento: verás que está rodeado de varios elementos que son proyectados a través de su cultura y la forma como se dirige a las personas, incluyendo sus propios compañeros. Verás que esa persona puede llegar a ser admirable, tiene conocimiento, una buena comunicación, podrías incluir buenos hábitos y costumbres, una gran responsabilidad, y el deseo de ayudar a la gente de alguna manera. Veras también que un profesional es el resultado de años de estudio y práctica, y que continuamente sigue ejercitándose, practicando, estudiando y tratando de ser mejor para las solventar las necesidades del usuario, y en algunos casos especializándose a nivel de negocio en algo muy particular.

Un profesional de software no es muy diferente a aquel doctor, inclusive podría decirse que mientras el doctor tiene la responsabilidad de una vida a la vez, un programador tiene una responsabilidad de un grupo de personas a la vez, que son los usuarios finales de todas las creaciones que él pueda hacer.

Ahora regresa al doctor: ¿Qué lo hace bueno? ¿Cómo es que él ofrece un lazo de confianza hacia ti? Piensa las veces en las que has visitado alguno: ¿Te han atendido de tal manera que puedas sentir la experiencia o conocimiento que te transmiten al tratarte de alguna enfermedad?, ¿De qué manera te está garantizando que cualquier diagnóstico o prescripción médica será efectiva para ti?; podríamos decir que basado en una serie de estudios e inclusive pruebas bien demostradas que lo avalan, o también en la cantidad de veces que ha atendido un caso similar al que tú tienes, es una experiencia pero también le podría proporcionar determinación al momento de diferenciar algo muy particular que escapa de cualquier cuadro médico, algo que específicamente tú necesitas, de tal manera que te hace sentir con un trato de una forma única, aunque posiblemente ya hayan tratado casos muy similares al tuyo, siempre será única la forma en la que él te puede transmitir lo que tú podrías hacer para estar mejor.

Ahora, piensa en el software que tú estás haciendo o qué podrías hacer: ¿Cómo garantizas que funciona correctamente?, ¿Cómo podrías trasmitir la misma confianza de que el producto que estás desarrollando cumple con lo que la gente espera de ti?, ¿Cómo sabes que cada usuario puede sentirse atendido de forma única al momento de usar el software que tú estás haciendo?, O bien, ¿Cómo puedes garantizar que el software desarrollado por ti realmente es una herramienta que ayuda a realizar las tareas para las cuales está diseñado?, Cualesquiera que éstas sean, porque si bien el software está siendo creado para resolver problemas que de otra forma podrían tomar mucho tiempo o esfuerzo.

Bajo este mismo esquema, reflexiona acerca del software que estás usando actualmente y pregúntate: ¿Qué tan bueno es? O ¿Qué tan malo es?, ¿Por qué lo usas?, ¿Qué necesitarías tú para desarrollarlo? O hacer un programa similar, ¿por qué pagarle a una persona con poca experiencia que hace software y no pagarle a un grupo de personas que lo hacen bien y que actualmente tú estás usando en alguno de tus dispositivos?, Actualmente cualquier herramienta cuenta con algún tipo de software que está dedicado solamente para resolver una necesidad; estamos rodeados de software y del trabajo de mucha gente que le ha dedicado tiempo y esfuerzo a hacer que funcionen correctamente, para que verdaderamente te ayude a ti en las labores para las cuales está diseñado.

Todo lo anterior, me lleva a mencionar varios aspectos que deberías de considerar al momento de desarrollar software para ti o para un grupo de personas que podrían contratarte y crear productos que pueden ser útiles para otras personas, o bien, simplemente porque verdaderamente crees que puedes crear un programa que ayude a cumplir un propósito.

Responsabilidad

Tal vez no lo estás viendo del todo, pero en el momento en el que estás creando una herramienta o un programa con un propósito, algún tipo de responsabilidad recae en la ejecución de este programa. Es por esto, que debes de ser consciente de que lo que estás haciendo puede ser un componente muy importante para alguien que lo usará diariamente, y que puedes ayudarle a mejorar la manera en que realice sus actividades, o bien impedirle de alguna manera que estas actividades se ejecuten correctamente solamente por cumplir ciertas condicionantes que se han puesto en dicho programa. La falta de flexibilidad en ciertas aplicaciones de software, han demostrado cómo es que se puede aumentar el tiempo que se dedica una actividad cuando un software está mal enfocado o mal diseñado.

Considera también que en algún momento tú ya no estás desarrollando este programa, y deberá ser lo suficientemente claro para quien continúe con tu trabajo pueda entenderlo, de tal manera que permita extender funcionalidad, o bien reparar algún tipo de error que se haya suscitado.

Esto me lleva a describir las interacciones que tienes hacia tus compañeros y tus usuarios finales, justo como el doctor tiene la responsabilidad hacia su paciente y familiares como a sus colegas, debes de ser lo suficientemente efectivo para poderte comunicar de la manera apropiada con cada uno de estos grupos, sin ser muy técnico con los ensayos finales y siendo muy preciso con tus colegas para evitar ambigüedades, es por esto que debes de tener los conocimientos esenciales que te permitan establecer tus conceptos y tus ideas de la manera en la que tus compañeros los puedan percibir, y que todos estén hablando de exactamente lo mismo.

También, una de las cosas que podría ayudar bastante cuando estás integrado un equipo que desarrolló software, es adoptar los elementos de mejora que sean necesarios para poder empatar conocimiento esencial que te permita entender de una mejor manera la operación de los programas que desarrolles: me refiero puntualmente a la necesidad de leer todos los elementos teóricos básicos, o bien aprender ciertos conceptos de la manera en cómo opera un software actualmente, una plataforma, un proceso o una organización. Todo esto también es algo que tendrías que hacer o considerar al momento de crear software, no solamente escribir código por escribirlo.

Una de las cosas que considero importante de las personas que recientemente se están incorporando a desarrollar software, es que pueda expresar y hablar abiertamente las ideas que puedan tener ante algún problema que se les presente, con esto me refiero a que los puntos de vista frescos que una persona puede aportar, ayuda mucho a la solución de problemas en donde un grupo de desarrolladores que posiblemente estén experimentados no puedan ver a causa de la complejidad que manejan en ese momento, es por esto que instó a cualquier novato o aprendiz de software a que exprese la posible solución que le podría dar al problema, pues realmente esa puede ser la solución.

Dicho lo anterior, puedo describir el conjunto de elementos pueden ayudar a un aprendiz a expresar sus ideas, y a que sus compañeros le sientan como alguien que puede ayudar.

Principios y valores

Creo que uno de los elementos más importantes para generar un lazo de confianza en un equipo de desarrollo es siendo honesto desde el principio. Lamentablemente, la actual sociedad y su forma en la que solicita a personas que puedan realizar un trabajo, establecen ciertos parámetros y condiciones que deben de cumplir los candidatos para poder ser competitivos dentro del lugar que pueden ocupar, que muchos de nosotros nos hemos vendido en algún momento por los elementos que conocemos, más no por los que no conocemos; esto trae como consecuencia el hecho de poder engañar a nuestro empleador diciendo que sabemos lo que nos está pidiendo, cuando realmente no lo sabemos con la finalidad de obtener un lugar dentro de la empresa u organización. Pareciera que ser honesto es más difícil, sin embargo, creo que podría resultar bastante simple si planteamos el escenario inicial con todos sus defectos, me refiero a aceptar el hecho de que hay muchas cosas que verdaderamente como aprendiz de software no sabemos, pero que en el camino vamos a aprender y que estamos comprometidos a hacerlo, dado el punto platicado anteriormente. Esto es mucho más despreciable por cualquier persona, pues son elementos importantes que determinan la toma de una decisión de alguien que nos puede emplear, o de nosotros mismos al saber que invertiremos esfuerzo y tiempo en conocer alguna plataforma, tecnología o proceso.

La honestidad siempre funciona, asimismo, el coraje de poder expresar nuestras opiniones de la forma adecuada y en el momento adecuado, de decir lo que no nos parece o bien lo que podría resultar raro, lo que quiero decir es que necesitamos verdaderamente saber qué estamos haciendo y porqué lo estamos haciendo, y esa curiosidad debe invadir nuestra mente para determinar las acciones que nosotros vamos a ejecutar durante la realización de un programa.

Así mismo, debemos de aprender a escuchar y reflexionar, a aprender de lo que estamos viendo y absorber el conocimiento que nos sea otorgado, filtrarlo y saber qué nos servirá de momento y qué no, mucho de esto se podría reflejar en un aspecto de humildad frente a nuestros compañeros, es decir tener la mente abierta de posibilidades ante los hechos que se los puedan presentar o bien ante el paradigma tecnológico que se nos requiera aprender, y estar siempre atentos de esos elementos nuevos que nos puedan interesar, para reforzarlos y siempre preguntar al respecto de ellos. Pero también, la humildad deberá reflejar el hecho de aceptar que hay muchas cosas que no conocemos y podremos conocer ya sea en la realización del proyecto o bien en la inversión del tiempo que nosotros le hagamos por nuestra cuenta.

Y aunque hay muchos tipos de personas, que piensan distinto a como yo pensaría, los aspectos de empatía y tolerancia deben ser presentes mientras se realiza la convivencia con los miembros del equipo que a su vez también podrán coincidir o no en mis ideas personales por lo que yo creo, pero eso no es un obstáculo para aportar algo útil a la aplicación que estamos haciendo.

Al final del día, ¿cómo sé que lo que estoy haciendo es lo correcto y que verdaderamente estoy avanzando en mi carrera como desarrollador de software? Pues bien, actualmente existen ciertos elementos que me pueden ayudar a determinarlo.

Trabajo ético

Durante los últimos 20 años, se ha escuchado alguna corriente denominada como ágil, que permite conocer y establecer ciertas metas al momento de desarrollar software.

Así como el doctor tiene un código de ética que cumplir, y que lo puede guiar de forma esencial en su carrera, actualmente contamos con lo que se llama el manifiesto ágil, que si bien no es del todo un código de ética, si es una muy buena base para realizar un trabajo de la forma más profesional posible.

Aquí lo citaré, y aunque estaremos platicando profundamente de algunos de estos aspectos más adelante, si en algún momento al crear un software podemos sentir que estamos perdidos, simple y sencillamente tenemos que regresar a este manifiesto.

  • Individuos e interacciones sobre procesos y herramientas


  • Software funcionando sobre documentación extensiva


  • Colaboración con el cliente sobre negociación contractual


  • Respuesta ante el cambio sobre seguir un plan

Esto es, aunque valoramos los elementos de la derecha,
valoramos más los de la izquierda.

— Agile manifesto

Aprendizaje continuo

No existe otra manera de avanzar en una carrera si no es aprendiendo continuamente nuevas técnicas y métodos, y en el caso muy particular del desarrollo de software, también tenemos que aprender tecnología.

Por lo anterior, deberá ser muy importante plantear un escenario en donde aprendas, y puedes tener una lista de elementos que no conoces y escribirla honestamente, para trabajar en ella.

Aquí lo difícil es para cualquiera que comience a hacer esta lista, saber qué es lo que desconoce realmente, sin embargo, puede ser muy sencillo resolver esta duda, con solamente una cuestión.

Toma el software que más te guste, ya sea tu celular o una aplicación en tu equipo de cómputo, un intermedio inclusive, y preguntate: ¿de qué elementos está hecho?, ¿Qué tecnologías usa o qué herramientas ocupan dentro de la organización que está haciendo ese software? Con esto podrás darte una idea de lo que desconoces y que posiblemente deberás de conocer de alguna u otra manera y en algún punto en tu carrera.

Lo importante aquí es tener esa lista, ordenarla y priorizarla, y buscar los elementos que sean necesarios para comprender en su totalidad los elementos conceptuales que rodean a los puntos a atacar.

Inclusive, años después haber comenzado tu carrera como profesional de software, te darás cuenta que esto es una técnica muy efectiva, pues cada vez aparecerá más software que usarás y que seguramente querrás saber cómo funciona, lo importante aquí es mantener la curiosidad de conocer realmente qué hacen otras personas y cómo lo están haciendo.

Comunicación efectiva

Llegados a este punto, debo reconocer lo importante que ha sido y será la comunicación oral y escrita impartida a través de las materias de español, la literatura incluida ahí también, esencial en su forma más simple y necesario para transmitir las ideas de la manera que pretendemos lleguen a los demás.

Definitivamente, esta es una habilidad que se tiene que adoptar de alguna u otra manera en el proceso de desarrollo software, pues necesitaremos crear acuerdos, convenios y procedimientos con nuestros compañeros, tendremos que expresar a los clientes de forma clara que estamos haciendo y darles a entender de la mejor manera que existen elementos intangibles que deberán existir dentro de un programa, que requerirán un esfuerzo y una dedicación para ser desarrollados.

Justo como el doctor puede transmitir sus ideas a sus colegas, y también hablar con los familiares de sus pacientes, nosotros deberemos de conversar y ser lo suficientemente críticos de las ideas de los demás de la forma más constructiva posible, y ser capaces de transmitirle a los clientes y usuarios finales lo crítico que puede ser tomar una decisión, o las consecuencias de alguna acción, basándonos en la honestidad de la cual hemos descrito anteriormente, tener el tacto y la elocuencia de transmitir las malas noticias y las buenas también.

He visto cómo malos entendidos a través de ideas difusas y suposiciones pueden terminar en malos productos de software, debido a nuestra deficiencia al comunicarnos y quedar en el entendido de cosas que en la concepción de otras personas son totalmente diferentes: dos personas hablando exactamente lo mismo, pero entienden situaciones muy distintas, a pesar de que usemos una lengua o idioma siempre podremos encontrar huecos para malas interpretaciones.

Lo mejor que podemos hacer aquí, es leer, pues de entrada nos enseñará a escribir y a formular una secuencia de ideas enlazadas entre sí, lo cual nos da estructura y a su vez nos daría un plan. Y me refiero a leer de forma general, no textos de tecnología exclusivos, sino también historia, algo muy recomendable sería la historia de la computación, pero es simplemente una sugerencia.

Una gran práctica que podríamos realizar para mejorar nuestras habilidades de comunicación siempre será confrontarse con el cliente o los usuarios finales para explicarles cómo funciona nuestra aplicación, o conocer más al respecto de las necesidades que pretenden resolver a través de nosotros. En este escenario, definitivamente aprenderemos acerca del hablar y del escuchar, del interpretar y del no suponer, de llegar a acuerdos y de presentar los riesgos. Pero, ¿qué hacer dado caso de que este cliente no exista? Si bien puedes estar desarrollando un producto de forma interna o como un proyecto personal, deberías de pensar en la manera en ¿cómo se lo explicarías a alguien que no conoce al respecto de tecnología o del proceso que quiere solventar?

Una vez escuché decir a un amigo que tendrías que explicar algunas cosas como si se las estuvieras diciendo a tu mamá o a tu abuela; pensando en ese escenario las cosas se complican, no porque no sepan de tecnología sino más bien por el cuidado y la dedicación que invertirías para hacer que quede claro.

Practicar

Hemos tocado varios puntos que hablan de practicar ciertas habilidades, sin embargo, ¿qué hay de la adopción de nuevas tecnologías y plataformas de software?, pues bien, definitivamente lo que tienes que hacer es plantearte el objetivo de querer aprenderlas y comenzar a practicar.

Para este momento, existen muchos problemas que se pretenden resolver en las ciencias computacionales, sin embargo, existen algunos ejercicios comprobados que sirven justo para determinar si has comprendido algún concepto, dicho sea de paso, estos problemas están disponibles en la red y en los libros de texto, puede ser desde el desarrollo de una simple calculadora, hasta la creación del algoritmo más complicado.

Siempre existirán tutoriales que quieran mostrarte cómo usar una tecnología, sin embargo, creo que hay que diferenciar muy bien que el buen aprendizaje y la buena enseñanza tienen un costo, ya sea en tiempo, dinero y esfuerzo, es por esto que yo incito a que si tienes la posibilidad de comprar algún libro reconocido lo hagas sin dudarlo, pues te va a retribuir mucho más de lo que piensas.

Busca ejercicios, algunos de ellos los podrás encontrar como katas de código, y están diseñados para enseñarte técnicas y métodos, pero también pueden enseñarte a hacerte las preguntas adecuadas, ¿cómo diseñar un software? ¿Cómo estructurar un programa? ¿Cómo crear mejor código? ¿Qué pasa si tengo un cálculo muy complicado porque lleva mucho tiempo de ejecución?

Así como un músico practica todos los días con su instrumento, tú deberías estar practicando todos los días con tu lenguaje algún código en la resolución de un problema.

En algunos casos, podrás encontrar un objetivo que cumplir, una aplicación completa que te permite experimentar toda una plataforma, si ese es tu caso entonces tendrás mucho que investigar y por lo tanto tendrás la necesidad de ejecutar componentes aislados para incorporarlos después en tu proyecto.

Como se puede ver, todo esto es práctica y entre más la ejecutes mejor la dominarás, la tecnología está ahí y está disponible para ser explotada. Hoy en día contamos con herramientas de muy alto nivel que ayudan a abstraer la complejidad de ciertos conceptos, lo cual está bien para comenzar a adentrarse, sin embargo, considera el hecho de profundizar y practicar mucho más allá de lo superficial, de poner a prueba los conceptos más esenciales que vayas conociendo.

En esta profesión, uno de los mayores beneficios lo encontrarás al practicar y tener la satisfacción de que tú también lo puedes hacer.

Conocimientos generales

Se han expuesto varios puntos al respecto de los elementos esenciales que debería de conocer un aprendiz de software para comenzar su carrera, sin embargo, no queda de lado el hecho de que se debe enriquecer la mente a través de otras ciencias ajenas a la computación, especialmente aquellas que permitan llevar el ámbito tecnológico a algo más humano, a la convivencia y a una charla en algún lugar lejano de la computadora.

Para ser honestos, siempre estamos programando sin embargo hay veces que no ocupamos la computadora para hacerlo, pues estamos pensando en cómo resolver un problema y es aquí en donde otras áreas nos pueden inspirar para ver nuestro problema desde otro tipo de perspectiva más creativa.

Dado esto, también es muy bueno que se pueda conocer al respecto de elementos generales de programación en todos sus sentidos, creo yo que cualquier programador tiene la responsabilidad de conocer al respecto de temas como sistemas operativos, redes de telecomunicaciones, seguridad informática, compiladores, arquitectura de computadoras, algoritmos computacionales, teoría de la computación, sistemas digitales, matemáticas, entre muchos otros que son verdaderamente necesarios para comprender completamente el funcionamiento de una computadora. Estoy hablando no solamente de aprender o memorizar conceptos, me refiero a que verdaderamente se puede demostrar de alguna manera la comprensión total todos los conceptos de los temas que he mencionado anteriormente. Creo que eso es de las cosas más importantes que podemos ofrecer a nuestro equipo de trabajo, pues nuestro entendimiento ayudará a resolver las dudas más simples o bien aquellas que aparentemente no tienen solución.

Conocer de política, biología, humanidades, medicina o cualquier otra cosa no resta nada, en éste punto donde se está emprendiendo este camino, todo esto suma, pues ofrecerás soluciones para alguna de estas áreas y debes de conocer muy bien qué es lo que pretendes resolver, porque tú puedes comprenderlo de tal manera que podrías experimentarlo, y eso ayudará a que tus empleadores vean en ti a una persona de confianza que no solamente conoce de tecnología sino también sabe el tipo de problema que se enfrenta.

Al final, como se puede observar, todo esto se trata de conocimiento y de sus aplicaciones, a través de la tecnología usando técnicas, métodos y herramientas.

Capítulo 2. Invierte en ti

…​Considero que la buena educación(incluso la autodidacta) cuesta tiempo, dinero y/o esfuerzo…​
— El autor

Uno de los aspectos más importantes en la carrera de cualquier profesional, indistintamente del giro que ejerza, es y será mejorarse a si mismo. Existen muchas maneras de hacerlo, específicamente en el área de tecnología existen muchos recursos con los cuales uno puede lograrlo, hoy en día contamos con artículos, tutoriales, cursos en línea, diplomados, escuelas, etcétera.

Sin embargo, recuerdo muy bien cuando estaba en una etapa de aprendiz y estudiante, y muchos de los recursos disponibles estaban a un precio que yo no podía pagar en ese momento. Y seguramente puede ser la situación de cualquier persona que decida emprender una carrera como profesional de software, o bien, decida cambiarse de plataforma tecnológica.

Una de las cosas que pude notar durante el aprendizaje de varias de estas plataformas tecnológicas fue el hecho de que tenía que invertir algo en ellas, y definitivamente la inversión tenía que ser proporcional al beneficio que quería obtener. Podría decirse que una inversión pobre me estaría remunerando pobremente también, no quiero que me mal entiendan, a lo que me refiero es a la situación o el contexto que se presentan mientras eres un aprendiz y estás comenzando con pocos recursos.

Me quiero enfocar específicamente a lo que mencioné al principio, tres elementos que podrías bien balancear para obtener un gran beneficio, entiendo que durante la etapa de principiante los recursos económicos son escasos y en algunos casos nulos, por eso me quiero centrar en los otros dos, y a modo de resumen tocaré el aspecto monetario.

Esfuerzo

Definitivamente tienes que comprometerte con lo que estás haciendo y considerar que los elementos fáciles de obtener no te entregarán un gran valor; el hecho es que muchos de los recursos, específicamente aquellos que muestran tecnología, los que verdaderamente valen la pena están en otro idioma y tendrás que considerar el aprenderlo de alguna u otra manera, para lo cual existen recursos escolares o gratuitos que te ayudan a sobreentender lo más esencial, con lo que podrías avanzar.

Como lo hago hasta el día de hoy, quiero mencionar la situación en donde vas a tener que leer una y otra vez, buscar conceptos muy básicos, buscar a las personas adecuadas que te puedan resolver alguna duda, los libros de texto que tengas disponible en alguna biblioteca a la cual puedas tener acceso, inclusive crear grupos de trabajo que te ayuden a exponer y compartir lo que sabes para reafirmarlo y comprobar realmente que dominas el tema.

Actualmente, existe una brecha de comunicaciones acortada que nos ayuda a conectar con personas que están desarrollando tecnología, y no he visto a nadie que se niegue a resolver alguna duda de lo que están haciendo; lo que quiero decir es que puedes acercarte a comunidades de software que te permitan aprender al respecto de alguna plataforma que te interese.

Tendrás que experimentar con aquellos conceptos, recursos y elementos que vayas encontrando a tu paso para cerciorarte que en verdad funciona aquello que estás tratando de aprender; sin embargo, mi sugerencia siempre será referirte a la documentación original de cada uno de los proyectos de software que estés probando, pues en cada uno de ellos se considera el aspecto del uso básico de la herramienta un lenguaje que estés experimentando.

Si ya leíste o revisaste algún video al respecto del tema, definitivamente tendrás que buscar alguna otra lectura o recurso que te permita comparar o reafirmar lo que has aprendido; lo que quiero decir aquí es que no será suficiente ver o conocer algún concepto de una sola y única vez, sino que será necesario que lo compares con algunas otras fuentes y que a su vez también vayas explorando los elementos teóricos que lo sostienen, pues es aquí en donde creo que está el verdadero conocimiento, debes de cerciorarte que comprendes muy bien aquello que estás tratando de aprender, y si por alguna razón no lo estás logrando entonces deberás cuestionarte los conceptos en los cuales se está sustentando esa herramienta, plataforma o tecnología que estás aprendiendo. Con lo cual, poco a poco te irás dando cuenta que existen ciertos elementos teóricos que debiste aprender en algún momento, y que ahora es tiempo de reforzar.

Entre mayor sea el esfuerzo que inviertas al aprender algún elemento, mayor será el beneficio que pudieras obtener de este.

Tiempo

Uno de los elementos que más tienes cuando estás iniciando es el tiempo, y deberás aprovecharlo de la mejor manera, investigando, leyendo o bien practicando.

Creo que uno de los hechos que marca la diferencia en carreras conocidas de los profesionales de software es la forma en la que invierten su tiempo para avanzar de alguna manera, me refiero a que deberás de usarlo para conocer no solamente de tecnología, sino también de elementos que conciernen a las humanidades, la literatura, tal vez la biología, la sociedad, incluso podría decirte algunos elementos relacionados con el ocio y la cultura, pues es bien conocido que entre los desarrolladores se acostumbra una buena taza de café O un buen tarro de cerveza, de un videojuego inclusive, y deberás de conocer al respecto de esto o algunas otras actividades que te permitan relacionarte con muchas más personas que incluso no compartan tus mismos gustos.

Deberás de darte la oportunidad de conocer más al respecto de la cultura digital y todo lo que lo rodea, de los elementos e ideas que puedes adoptar y probar para usar en tu vida diaria, aplicaciones que existen hoy en día y programas que harán las cosas por ti.

En definitiva, lo que creo es que deberás ser muy cuidadoso al explorar ciertas herramientas en las cuales tendrás que invertir un espacio en tu día y que seguramente te beneficiarán una vez que las hayas dominado o aprendido, bien se dice que una herramienta puede ahorrarte mucho tiempo y esfuerzo cuando verdaderamente cumple su función.

Te encontrarás en algún momento con el problema en donde pareciera ser que el tiempo que tienes disponible es muy poco o casi nulo; piénsalo bien pues tal vez tienes espacios o huecos de tiempo que puedes aprovechar para avanzar en algo que estés haciendo; y no me refiero a llevarte una computadora a todas partes para que estés programando, me refiero más al hecho de que lleves contigo un libro o un medio de reproducción de audio que te permita leer al respecto de un tema mientras estás viajando en el transporte público, bien también, escuchar algún podcast de tecnología o programación que te proporcione alguna idea de cómo se expresan otras personas al respecto, incluso en el mejor de los casos podrás descargar videos que podrás reproducir en algún dispositivo con los que se encuentran actualmente y verlos durante el camino al trabajo, a la escuela, a tu casa inclusive.

Considera un conteo muy simple en donde un día tiene 24 horas, si tú durmieras ocho horas y estuvieras en tu escuela o en tu trabajo durante otras ocho horas y el tiempo de transporte te tomará alrededor de tres horas, aún te quedan cinco de las cuales podrías tomar tres para tus alimentos y actividades cotidianas, te quedan aún 2 horas al día que puedes usar en ti, en tu carrera como profesional, ya sea con algún libro o curso, con un video o simplemente aprendiendo un lenguaje nuevo, y si sólo lo sumas entonces tendrás 14 horas a la semana. Pero reflexiona, siendo honestos no dormimos 8 horas, yo diría que a veces es menos, y no trabajamos 8 horas, incluso también podría decir que es menos, entonces piénsalo de nuevo por un momento por que tal vez tengas más tiempo del que planteo aquí.

Lo que digo, como lo sugirió Robert C. Martin en el libro ”The clean coder”, tienes que dedicarle un tiempo sustancioso a ti como profesional, y a tu carrera como lo que eres y representas, deberás dedicarle también un tiempo a descansar y dormir, inspirarte y retomar energía para el aspecto creativo, a planear lo que tienes que hacer entre trabajo y en tu persona, revisando los objetivos que has logrado de forma periódica.

Todo esto te servirá para que administres correctamente uno de los recursos que jamás se recupera, el que no puedes comprar, y que te gustaría aprovechar con tus personas favoritas y las actividades que más te gustan.

Dinero

Definitivamente, si tienes la posibilidad de acortar un camino literal en tu carrera, deberías hacerlo y enfocarlo en aquello que deseas lograr.

No todos tenemos esta oportunidad, sin embargo, siempre será bueno ahorrar para invertir en uno mismo a través de algún curso o una conferencia, que tal vez sea gratuita pero que no se encuentra en tu localidad, si no en alguna parte muy lejana en la cual tendrás que comprar algún boleto de autobús o de avión para poder asistir.

A lo que me refiero es que definitivamente tendrás que invertir recursos económicos en tu carrera, pero tendrás que ser diligente con lo que gastas y observar detenidamente qué quieres lograr con lo que estás gastando.

Actualmente, la cantidad de recursos que puedes acceder y que tienen un precio modesto son muchos, desde videos con un gran contenido y edición que te permiten digerir mucho conocimiento, libros que puedes encontrar en descuentos en algunos días, o talleres cortos que ofrecen un conocimiento muy particular aunque no sea referente a tecnología.

Considera lo siguiente por un momento, seguramente has usado algún software en tu equipo de cómputo o en algún dispositivo móvil, el cual has disfrutado y usado, o inclusive te ha sacado de algún apuro, este software es gratuito; ahora bien, considera el software que tú estás haciendo y que otras personas podrían ocupar para beneficiarse por resolver un problema justo como tú lo hiciste, si tú no estás pagando por un software que estás usando y que te es muy útil, ¿porqué alguien más tendría que pagar el software que tu haces, con la calidad cualquiera que sea, que puedes ofrecer? No quiero que me mal entiendan, a lo que me refiero es que a veces hay software que podríamos comprar y está en nuestras manos hacerlo, los precios de algunas aplicaciones son muy pequeñas y alcanzables por muchas personas, tu como desarrollador de software deberías de invertir también en software, deberías de comprar el software que otras personas hacen o bien contribuir de forma económica a las aportaciones que solicitan.

Todo esto podrá crear una cultura que le permita a cualquier individuo comprar software de forma muy común, justo como hoy compramos cualquier artículo, la gente también podrá comprar o colaborar con el software que tú estás haciendo. Al final del día, este es el tema al que quiero llegar, el poder transmitir la cultura de adquirir software o servicios basados en software que verdaderamente aportan un valor, resuelvan un problema o una necesidad, o generen alguna ganancia o retribución aún a comunidad de personas, que no necesariamente tendría que ser económica.

Capítulo 3. No escuches a nadie

En cualquier momento de decisión, lo mejor que puedes hacer es lo correcto, la mejor cosa siguiente es lo incorrecto y lo peor que puedes hacer es nada.
— Theodore Roosevelt

No escuches a tus compañeros/amigos

Hace mucho tiempo después de que salí de la universidad, platiqué con algunos de mis compañeros con los que había estudiado y dado que ya habían pasado algunos años desde que regresamos, vino a la mesa la inevitable platicar al respecto de qué estás haciendo o en qué estás trabajando ahorita, esta plática puede resultar un poco incómoda dependiendo de donde la tomes, quiero explicar porqué, parafraseando un poco la charla iba algo así:

Omar

oigan, y que están haciendo ahorita? Ya tiene algunos años que salimos de la universidad…​

Víctor

yo ahorita estoy de gerente de administración tecnológica…​

Nadia

yo soy líder de proyecto en la empresa donde trabajo…​

Roberto

yo estoy de project manager en la implementación de un erp…​

Omar

yo soy encargado de la administración de ser servidores e infraestructura para varias empresas…​

Yo

yo estoy programando!!!

Todos

queeeeeé?

Nadia

acaso no has pedido un ascenso?

Víctor

aún sigues programando?

Omar

por qué no has avanzado?

La reacción de mis compañeros podría parecer muy obvia, bajo el contexto en el cual posiblemente ellos están formando una carrera, sin embargo, hay algo que ellos no saben porque posiblemente no han visto, y he aquí varias preguntas que deberías de hacer:

¿Qué significa ascender?, ¿Qué significa seguir programando?, ¿Qué es realmente avanzar como profesional?, ¿Qué es crecer?, ¿Qué es el éxito?, ¿Qué es lo que realmente quieres hacer o conseguir?

Lo que ellos no sabían es que había crecido, había avanzado, inclusive podría apostar que en ese momento mi ingreso económico por mi trabajo era similar o inclusive un poco superior al de alguno de ellos, porque realmente lo que ellos estaban buscando era un reconocimiento, una posición o un título elegante que les permitiera describir su trabajo, y yo solamente estuve buscando nuevas formas de resolver problemas, que me permitieran enfrentar retos verdaderamente interesantes y obtener soluciones con todo lo que iba aprendiendo a mi paso.

Un título nobiliario no te hace mejor o peor en el contexto del desarrollo de software; por lo menos, yo realmente había conseguido avanzar pues ya conocía más de un lenguaje de programación con el que podía resolver algún problema, ya dominaba un par de frameworks que me permitían ser productivo al desarrollar alguna aplicación, conocía de algunas técnicas y métodos que me permitían garantizar la calidad del software que estaba desarrollando, conocía algunas metodologías de trabajo, enseñaba a mis compañeros, conocía cada vez a más gente interesante que resolvía problemas verdaderamente difíciles, yo enfrentaba restos que antes ni siquiera podía imaginar, ¿y no es acaso las ganas de aprender a hacer cosas y resolver problemas lo que me motivo a estudiar mi carrera?, Lo mejor era que lo podía seguir haciendo.

Nuevamente, esto es como la analogía al preguntarle a algún doctor si todavía sigue operando, lo cual denotaría la experiencia que puede proveer en la excelencia técnica que ha alcanzado a lo largo del tiempo ejecutando una y otra vez cada operación, el respeto ganado por haber dominado la maestría de manejar instrumentos y herramientas que le permiten explorar rincones que nadie más ha explorado o que puede sentirse confiado con la forma de hacerlo, sin temor y con certeza, ¿no es acaso lo mismo que queremos hacer con nuestras herramientas en el software?

No quiero que me mal entiendan, lo que quiero decir es que definitivamente sí puedes avanzar en tu carrera siendo programador, yo me veo siendo programador toda mi vida, y aprendiendo continuamente, adoptando más tecnología y más técnicas, resolviendo nuevos retos y sintiéndome estudiante constante de todos los elementos nuevos que pueda ir encontrando.

También, y de forma colateral tus percepciones aumentarán pues serás de los pocos que pueden hacer algo verdaderamente bien, incluso podrás dominar herramientas antes que muchos y usarlas para hacer cosas como nadie, lo cual, en definitiva te traerá nuevos retos que a su vez tienen sus recompensas.

No veas esto por el efecto económico, pues si lo haces podrás desviarte del verdadero encuentro con el conocimiento, hoy en día el expertise de una tecnología puede ayudarte de muchas maneras, lo alcances tarde o temprano, y conforme pase el tiempo serás cada vez más valioso, muy diferente a otras profesiones en donde el rango de edad para emplearse es muy acotado, en el desarrollo de software cada experiencia cuenta más para el profesional pues tiene lo necesario para resolver una necesidad de magnitudes cada vez superiores.

No escuches a tu padres

No quiero que me mal entiendan, solamente quiero que consideren el contexto cultural en donde en algún momento en el tiempo la obtención de un título universitario o certificado era valorado de diferente manera, en donde la percepción de tus padres o familiares que te conocen les dice que estudiando podrás alcanzar títulos, y alcanzando títulos tendrás nuevas oportunidades, y por ende te irá mejor en la vida. Pues bien, hoy tenemos casos en donde hay gente que no terminó la escuela y que ha tenido algún tipo de éxito, no me refiero solamente lo económico, en otros casos también es concerniente el aspecto social, es decir cuántas personas ha impactado, o bien incluso los descubrimientos que ha hecho en su campo o el desarrollo de alguna nueva tecnología.

Tus padres te dirán que estudies, pues es ahí en donde se encuentra el éxito, y creo estar de acuerdo con todas aquellas personas que te dicen que estudies, sin embargo, no todo el estudio se encuentra dentro de la escuela, inclusive en algunos casos el verdadero conocimiento que tú podrías ocupar en tu carrera como profesional definitivamente no lo vas encontrar ahí, sino en alguna biblioteca. La percepción es que si tú vas a la escuela, asistes, y de alguna manera te gradúas entonces te irá bien en la vida. Pues bien, puede ser así en algunos casos, más puedes encontrar oportunidades en caminos alternos que inclusive no tienen nada que ver con la escuela, pero sí con estudiar y practicar.

Comprende a tus padres que te dicen que estudies, pero también hazles comprender que el verdadero estudio y fuente de conocimiento puede encontrarse de muchas maneras.

Enfrenta una entrevista, asiste a algunas de ellas, inclusive si aún no has terminado la escuela, no importa, pues lo que vas a conocer es un proceso de selección que está allá afuera y en donde seguramente lo peor que te puede pasar es que te acepten.

Y tú debes de comprender que en el aspecto social la apariencia dicta que entre más estudies en una escuela mejores oportunidades tendrás, lo importante aquí es saber que esas oportunidades te las puedes forjar independientemente de la escuela, pero debes de estar preparado para ellas con tu estudio.

También quiero resaltar que seguramente en alguna escuela a la que asistas existen personas que te van a hacer ver las cosas de una forma diferente, incluso ayudarte a mejorarte, seguramente así será, pero lo que yo te estoy diciendo es que no dejes tu carrera solamente en las manos de aquellas personas en las cuales su trabajo es apoyarte, sino que tomes tu carrera en tus manos, enfrentes a tus padres y les hagas comprender que por lo menos el desarrollo de software tiene aspectos que muchas escuelas no ha podido abarcar como se necesita actualmente.

No digo que te reveles de una forma arrogante, sino que comprendas el hecho de que la sociedad en muchos aspectos tradicionales se rige por ciertos elementos los cuales hoy no aplican tanto como quisiéramos.

Finalmente, lo que quiero decir con todo esto es que el único responsable de tu carrera profesional eres tú.

Capítulo 4. Entusiasmo, motivación y actitud (¿cuánto vales?)

Las personas somos como bombillas con patas, hay personas que van a 30mil vatios y hay personas que van fundidas…​
— Víctor küppers

La fórmula v = (c + h) * a

En mucho tiempo no había encontrado una forma de describir la manera en que un aprendiz puede desempeñarse, y una vez escuche a Víctor Küppers, quién comentó en menos de 18 minutos el valor de una persona. El lo describe en una fórmula: v = (c + h) * a.

En donde:

c es el conocimiento, el cual es importante pues te permitirá aplicarlo en el momento que identifiques la situación.

h es la habilidad, la cual es necesaria para ejecutar y tiene que ser elemento de práctica diaria.

Ambas suman y es crucial alimentarlas para poder alcanzar algo denominado la excelencia técnica, sin embargo hay un elemento remarcable:

a es la actitud, la cual multiplica o anula tu conocimiento y tus habilidades, y creo que de toda la fórmula es lo más importante.

Cuando comienzas una carrera, tus habilidades y conocimientos son pequeños de alguna forma, hay mucho por aprender y hay mucho por practicar, por lo tanto tu actitud podría multiplicar por mucho lo que tengas al comenzar.

Pero, ¿qué tipo de actitud debes de tomar?, Me refiero a la disponibilidad de poder hacer cosas que antes no hacías y también a vencer ciertos miedos, seguramente estarás en una situación en donde no habías estado anteriormente y te enfrentarás a problemas de los cuales desconoces su solución, sin embargo siempre habrá una forma de enfrentar a ambos, y es siendo totalmente honesto con lo que sabes y lo que puedes hacer.

Tendrás que comenzar a medir tus actividades y la forma en cómo las haces, los elementos que involucras y el tiempo que gastas en ello, podrás notar que existirán mejorías conforme lo vas haciendo y es ahí tu oportunidad para mejorar la actitud que tomas ante los nuevos retos.

A veces, tomarás algún problema y lo verás fácil, sin embargo te darás cuenta que hay muchos otros elementos a considerar y que seguramente no habías pensado, es por esto que debes de tomar en cuenta algo de prudencia para ejecutar. En otros casos, verás muy complicado el problema y cuando lo estés ejecutando te darás cuenta que realmente estuvo muy fácil, y cuando eso ocurra también deberías de adoptar una actitud al respecto.

A lo que me refiero es que seguramente necesitarás ser pro-activo en muchas cosas, proponer ideas y soluciones, las cuales podrían ser viables y quiero comentar el porque muchas veces cuando ciertas personas con experiencia discuten la solución de un problema, ven diseños con un grado de complejidad que en algunas ocasiones no les permite proponer una solución más simple que cumple bien con los requisitos, es entonces cuando la visión de alguien que no tiene experiencia y que posiblemente sea muy objetivo puede ser de gran ayuda.

Es decir, en algún momento deberás de exponer tus propuestas y no quedarte callado pensando que realmente no sabes porque no cuentas con la experiencia, pues muchas veces las soluciones simples que puedes proponer con lo que aprendes son lo suficientemente buenas como para implementarlas y cumplir perfectamente bien con un requerimiento.

Mi sugerencia siempre será que expongas todas las propuestas que tengas pues realmente el ánimo y la frescura de las mismas puede motivar al equipo a ver una solución diferente, inclusive enfocada a nuevos paradigmas o tecnologías que pueden ser aplicados.

También deberás de mantener tu curiosidad constante, hoy en día creo que mi curiosidad es mayor a cuando comencé con esto, y es eso lo que me ha permitido investigar nuevas formas y tecnologías para resolver problemas; la invitación es a qué te mantengas siempre en búsqueda de nuevos elementos, que te mantengas siempre en tiempo, en forma o en desempeño de una actividad relacionada a tu carrera.

Hay algo importante que debes de saber, cuando ya tienes más experiencia y por lo tanto conocimiento y habilidad, tu actitud puede decrecer o inclusive ser nula, lo cual, reduce de todas formas tu valor como persona.

No crezcas tu ego, mantén siempre una actitud proactiva y propositiva, humilde y positiva, que te permite encajar en cualquier equipo y que te dé la oportunidad de conocer las soluciones propuestas por tus compañeros.

Y mejor aún, transmiten tu forma de pensar recordando cómo comenzaste y lo que has alcanzado, enseña a través del ejemplo y hagas pensar o cuestionarse a aquellas personas que también están comenzando este camino, hazles las mismas preguntas que te hiciste tú en algún momento y llévalos a que ellos mismos busquen su conocimiento.

Trata de hacer no sólo lo que se te pide, si no tener una forma de que alguien más lo adopte en dado caso de que tú no estés y pueda entenderlo perfectamente bien, pues es esta la prueba de fuego que te permitirá saber si lo que has escrito en tu código es entendible y transmite eso que querías resolver de la forma en que tú lo pensaste.

Al final del día piensa en esto: una de las formas constantes que tenemos los programadores de comunicarnos es a través del código, te pasarás bastante tiempo leyendo código para poder comprender las ideas de los demás. Es por esto que incluso creo que tu actitud se ve reflejada en la forma en cómo escribes código y las pruebas del mismo.

No menos importante, buscar la satisfacción e inclusive podría atreverme a decir la felicidad en estos esfuerzos que haces poniendo una actitud, digamos positiva y colaborativa, pues al final del día son los pequeños logros los que satisfacen nuestras frustraciones y ganas de hacer más.

Busca también elementos inclusive artísticos que alimenten la inspiración y tu lado creativo; sonará un poco ridículo tal vez, pero hay muchos elementos que te ayudan a crear soluciones e imaginar nuevos diseños, muchos de ellos yo creo que vienen de estilos como la ciencia-ficción, la comedia, el terror, los videojuegos, las pinturas, el baile, la arquitectura, y muchas otras cosas que a pesar de que no están directamente ligadas con nuestra carrera siempre nos darán una forma de olvidarnos de aquellos problemas qué estábamos enfrentando y ser objetivos para poder resolverlos.

Entre otras tantas cosas, mi sugerencia siempre será que no te obsesiones con la solución a un problema, específicamente si ya son las dos de la mañana y no lo puede resolver, te darás cuenta, si no es que ya lo has hecho, que al día siguiente después de haber dormido y desayunado, o tal vez mientras te estás bañando, se te ocurre una solución, llegas a tu computadora y empiezas a teclear, y mágicamente en media hora haz resuelto lo que durante horas del día anterior no pudiste.

Mi recomendación con respecto a lo anterior es descansa, duerme, come y despeja tu mente para poder tener claridad al codificar.

Capítulo 5. Pasión (ámalo o déjalo)

Elegir es renunciar…​
— Todos los amos

Tienes que tomar una decisión, aunque podría ser un paso más en tu vida, podrías bien dedicarte lo que resta de ella.

Estos son los hechos…​

La verdad sea dicha, no necesitas estudiar una carrera para dedicarte a programar, sin embargo, ayuda mucho que tengas conocimientos esenciales al respecto de todo lo que rodea a la ciencias de la informática y la computación, y también ayuda mucho el hecho de que conozcas otros giros o actividades que no tengan que ver con la programación.

También tienes que saber, que no es malo estar en una escuela, pero debes de tener claras tus expectativas y la realidad que estás enfrentando en ese momento, a lo que me refiero es al hecho de que si buscas que la escuela te enseñe técnicas de programación o algún lenguaje, seguramente encontrarás alguna que lo haga en algún momento, sin embargo he visto muchos casos en donde eso solo ocurre al iniciar una carrera, pues muchos elementos están enfocados a terminar haciendo actividades administrativas o similares, lo cual tampoco está mal.

Tienes que darte cuenta que programar es una actividad multi-disciplinaria, que necesitarás de muchas áreas de conocimiento y que siempre será bueno conocer todo aquello que se te presenta, ya sea con finanzas y contabilidad o incluso con matemáticas, o con medicina, porque no sabes que es lo que te va tocar desarrollar cuando estés en tu profesión.

Además, tendrás que realizar actividades adicionales que te ayuden a adoptar herramientas o lenguajes para poder verdaderamente resolver problemas con ayuda de la tecnología usando tus habilidades como programador, aunque siempre tendrás la opción de usar el software que alguien más hizo y aplicar esa solución, lo cual tampoco es malo, te darás cuenta que todas estas las encontrarás en recursos colgados en internet o en libros muy especializados, de los cuales hablaremos mucho más adelante.

Tienes que entender que la escuela no está obligada a enseñarte técnicas de programación y la empresa u organización en la que estés trabajando tampoco está obligada a capacitarte, es decir, la única responsabilidad de aprender a realizar esta actividad es solamente tuya.

Inclusive, tendrás que enfrentarte siempre con el reto de crear software con herramientas y lenguajes que nunca has conocido, o incluso he escuchado, pero qué es muy importante que conozcas las bases por las cuales están sustentados para que puedas entender la forma en la que te puedes desempeñar.

No es sencillo, pero es muy gratificante y el camino es extremadamente largo, pues mientras más avances más te darás cuenta de todo lo que te hace falta por conocer y recorrer, sumado a las nuevas herramientas que están saliendo constantemente, o la evolución de alguna plataforma tecnológica.

Es decir, es una profesión en la cual puedes pasarte tu vida entera, y de ser así, entonces estás leyendo las palabras adecuadas.

Sólo tienes que decidir.

Definitivamente, considero que no necesitas haber nacido con un talento en la programación, creo que lo único indispensable es la pasión y emoción que te despiertan el hecho de conocer la tecnología y crear herramientas con ella, y con ayuda de la práctica alcanzarás la maestría, la excelencia técnica con la que serás capaz de resolver muchos tipos de problema en diferentes ámbitos o en uno muy particular.

Seguramente conocerás personas que pareciera que nacieron con esta habilidad, sin embargo al preguntarles a muchos de ellos siempre han respondido qué realmente lo que han hecho es que le han dedicado mucho de su tiempo libre a aprender, y experimentar con lo que han aprendido. Es entonces cuando la vocación emerge, y la práctica constante de tus actividades harán que algún día parezca que has nacido con un talento muy particular para la programación.

Quiero que sepas que definitivamente hay gente talentosa de forma natural, pero que es más la gente que es buena por el hecho de ser constante y es aquí en donde se desprenden varias cosas.

Tú en este momento estás a punto de decidir en convertirte en un profesional de software, y quiero que sepas que es una gran responsabilidad, casi como la de un doctor, y por lo tanto tendrás que manejar mucha disciplina, esto quiere decir qué tendrás que ser ordenado con muchas de las cosas que haces, tendrás que ser muy puntual en todas las reuniones a las que asistas, ya sea de alguna comunidad o de trabajo, y tendrás inspeccionar frecuentemente todo aquello que no te es útil para renovarlo.

Harás investigación y desarrollo, seguramente asistirás a eventos y reuniones de comunidades en las cuales encuentres personas que tienen tus mismos intereses, con las cuales puedas compartir o consultar alguna duda que tengas, e inclusive convivir de una forma más amigable con ellos.

Y es por esto qué quiero que sepas que tendrás que romper un estereotipo al respecto de las personas que hacemos desarrollo de software, la concepción que tienes de aquella persona que solo trabaja de noche en un sótano, que somos raros y muy difíciles para comunicarnos, un profesional de software no es así, es más una persona extrovertida capaz de entablar conversaciones de diversos temas, que que tienen prioridades, crea tecnología de manera responsable, es puntual y ordenado, conoce su área y sabe expresarse entre sus pares y con aquellos que no comprenden de tecnología, es una persona que descansa y disfruta de sus pasatiempos, tiene una familia o una vida social que atender.

Pareciera que es muy simple viéndolo desde afuera, que se programador sólo se trata de sentarse a escribir tanto código como sea posible, y que entre más tiempo te la pases enfrente de una computadora más código harás. Pues bien, gran parte del tiempo que estarás programando te la pasaras leyendo tanto código, como documentos y estarás concibiendo soluciones en tu mente en alguna charla, en algún café, o inclusive en la hora de la comida, al que me refiero es que programar es una actividad que no necesariamente requiere de una computadora para ejercerse, si no de la forma en la cual se diseñan soluciones basadas en tecnología y de la creatividad que tienes para resolver los problemas.

Como ves no es fácil ser un profesional de software, pero si decides serlo entonces te encontrarás en tu camino varias satisfacciones como retos y situaciones que te pondrán a prueba en las cuales todas las habilidades humanas que hayas juntado a lo largo del tiempo te ayudarán de sobremanera a enfrentar todo lo desconocido.

Capítulo 6. Tu lugar en un equipo.

En algún momento del tiempo alguien dijo:

El hombre valiente no es el que no siente miedo, sino aquel que conquista ese miedo.
— Nelson Mandela

Creo que saber nada es un buen comienzo, realmente saber nada o poco puede ser manejable y tal vez con esfuerzo y dedicación se resuelve, pero creer que sabes mucho y verdaderamente no es así entonces creo que puede ser un mal comienzo.

Aquí quiero dedicar un espacio a la comprensión de todas las personas que se unen a algún equipo de trabajo, podría decirse que en especial a los novatos, pero creo que cabe en muchos inclusive siendo experimentados. A lo que me refiero es que verdaderamente tienes ciertas habilidades que otras personas dentro de un equipo de trabajo no tienen y que podrías usar para tener un lugar que le permita a tu nuevo equipo confiar en ti, sin embargo, debes de saber que estas habilidades o conocimientos deben ser previos al ingreso y que es tu responsabilidad adquirirlos, ya que si nadie más sabe hacer lo que tú haces no importa lo pequeño que sea entonces podrás ayudar.

También tienes que saber que la frescura de las ideas en cualquier equipo de trabajo puede ser motivante, e incluso sorprendente, cuando alguien que apenas entra a un equipo puede exponer la forma en cómo lo resolvería, dando un punto de vista demasiado objetivo de las cosas.

Además, en todos los equipos de trabajo sin importar la experiencia que tengan los demás, siempre habrá tareas muy pequeñas que se estén realizando, y es aquí en donde puedes intervenir y seguramente aprenderás mucho de todas esas cosas que para los demás parecerían insignificantes, pero que para ti serán importantes pues tendrás que aprender a dominarlas y conocer profundamente cómo es que operan y la razón por la cual están ahí.

Es por esto que todas las herramientas nuevas que tu conozcas siempre serán bienvenidas en un equipo de trabajo en donde seguramente el pasar del tiempo no les ha permitido explorar esas oportunidades. Ten la confianza de que muchas de las cosas que tú has hecho o usado también pueden servir como herramientas de trabajo para ti y tus nuevos compañeros.

¿Qué vas a tener que hacer? Pues bien, ser extremadamente observador en los detalles que te permitan una oportunidad para preguntar al respecto de tecnología o para aprender alguna que ya se esté usando en algún equipo, y profundizar en ella. Seguramente, en el momento en el que tú entres o estés comenzando a trabajar con algún equipo verás que se usan ciertos elementos comunes, es ahí en donde tienes que ir creando tus oportunidades y tienes que ver qué están usando y buscar al respecto de ello; hoy en día eso es demasiado sencillo, pues sólo basta el nombre de algunas aplicaciones, lenguajes o herramientas para poder saber qué hacen, pero habrá ocasiones en las que seguramente no encontrarás mucha información o algo o que te diga exactamente qué es y es entonces donde tendrás que preguntar.

Con todo esto, quiero que sepas que la única forma de poder lograr algo que verdaderamente te ayude a ser parte de un equipo será la pro-actividad que le dediques, pero nuevamente, se observador y siempre indaga, valida con tu base de conocimiento y conceptos teóricos, y sacar algunas conclusiones que podrías bien cuestionar con alguno de tus compañeros que tienen más experiencia que tú. Debes tener la iniciativa de ir absorbiendo cada vez más conocimiento, técnicas y métodos que seguramente te ayudarán a ti, pero mejor aún podrán hacer que colabores con un equipo de trabajo muy rápidamente.

También, habrá ocasiones en las que seguramente estés platicando al respecto de algún tema en particular que sea de tu interés y muy fácilmente podrás preguntar al respecto, y si entre el grupo de personas se encuentra alguien que le apasiona este tema seguramente te dará algunas respuestas inmediatas, y podrá compartirte algo de lo que ha experimentado. Aún así, no te quedes sólo con lo que te dicen: ve siempre un paso más adelante y profundiza en el tema, aterrizando a los conceptos esenciales y busca si hay algo parecido a lo que has conocido.

Aunque no lo creas, tu opinión siempre es muy importante pues nos hace recordar los momentos en los que nosotros estuvimos en el mismo lugar, en dónde estábamos comenzando, y seguramente eso podrá inspirar a ciertas personas a darte alguna sugerencia que les hubiera gustado escuchar cuando estaban en tu posición, es por esto que siempre recomendaré que cualquier opinión, experiencia, sensación u observación que tengas, la expreses de forma abierta y honesta; agradecer la ayuda de dichas personas o bien darles una satisfacción en la cual puede notarse que están haciendo bien su trabajo con lo que te están enseñando.

Por último, aunque no menos importante, necesitas saber que en todos los equipos de trabajo siempre se necesita gente que aprenda o que tenga poco experiencia, ya sea como profesional o en el área en el que se está desempeñando, pues algunos elementos de curiosidad pueden ayudar a implementar soluciones en las cuales un equipo no ha visto por la inercia del trabajo o bien porque simplemente no veían dichos oportunidades.

Hay que saber una cosa más, la emoción y pasión de todos los aprendices siempre se transmite hacia el equipo, es renovante y refrescante ver como esa sensación de aprender cosas nuevas se contagia hacia aquellos que ya hemos pasado por esto, y mejor aún, ver que lo que hemos enseñado ha sido bien aprendido, así que esmérate en hacer sentir orgullosos a tus mentores y a darles el mérito que merecen.

Parte 2 Elementos esenciales

Capítulo 7. Herramientas necesarias

La oxidación por falta de uso gasta mucho más las herramientas que el propio trabajo.
— Benjamin Franklin

Un aspecto de suma importancia son las herramientas que escogemos para programar, pues muchas de ellas son vitales para poder realizar nuestro trabajo de manera eficiente y aprovechando al máximo nuestro esfuerzo.

Quiero comenzar con la definición, la que encuentras en la wikipedia:

“Una herramienta es un objeto elaborado con fin de facilitar la realización de una tarea mecánica que requiere de una aplicación correcta de energía.”

Es aquí en donde parte todo lo que necesitas saber al respecto de las herramientas, pues deberías de adoptar aquellas que te permitan aplicar el esfuerzo necesario para obtener un buen resultado, es decir, deberías de desechar aquellas herramientas en las cuales gastas más energía y obtienes un resultado mínimo, o inclusive aquellas en las cuales adaptas el problema a la herramienta.

Sin embargo, como muchas otras herramientas y como seguramente has aprendido a utilizar utensilios mecánicos, el uso y manipulación requiere de una práctica previa o de un periodo de reconocimiento para conocer el funcionamiento y fin del instrumento que estás usando: Con esto me refiero a que deberás de invertir cierto tiempo conociendo lo que quieres usar y para que lo quieres usar, comprenderás entonces que al igual como desarmadores y martillos, que sirven para dos propósitos distintos, también hay herramientas tecnológicas que sirven para propósitos diferentes.

Considera también el hecho de que algunas de ellas están hechas a su vez de otras más simples, por lo que mi recomendación será que profundices en aquellas herramientas que son cada vez más sencillas pues podrás encontrar el verdadero propósito o filosofía en la cual se están basando aquellas que son más sofisticadas.

De lo anterior, el aspecto relevante que deberías reconocer es la filosofía de una herramienta: Así como en algún momento las herramientas mecánicas se basaron en principios de física para la aplicación de esfuerzos, las herramientas tecnológicas se basan en aspectos computacionales para la reducción de tiempo, de esfuerzo y automatización de procesos y procesamiento. Muchas de ellas inclusive ya vienen incluidas en las computadoras que usamos diario, simple y sencillamente hay que conocerlas para poder aprovecharlas.

Con todo esto me gustaría escribir un poco más aquellas que considero esenciales para un aprendiz de software.

Conceptos esenciales

Definitivamente creo que hay elementos que deberíamos de conocer ya sea en nuestra época de estudiantes o bien cuando verdaderamente queremos crear aplicaciones de alto desempeño, o por lo menos con un nivel de detalles que se pueda considerar notable.

Por ejemplo, las representaciones numéricas y sus variantes, la notación decimal, las binarias y las hexadecimales, las representaciones internas numéricas que nos llevan a los strings, los números con signo sencillo, las representaciones codificadas(bcd), aquellas de punto flotante y las conversiones entre estas.

Otro grupo sería aquellas operaciones aritméticas que aplican a los binarios y las operaciones bits, es decir la suma, resta, multiplicación y división valores binarios, las operaciones lógicas y porque no la rotación de bits.

En algún momento como desarrolladores nos enfrentamos al problema de la codificación, y una manera de comprender lo que está sucediendo es a través del conocimiento de la representación de caracteres, tales como el ascii o el unicode, los cuales también requieren su atención.

En algunas aplicaciones que controlan el hardware a bajo nivel tenemos de estar conscientes de cosas como la realización de la memoria y el acceso a la misma, el bus de sistema, el direccionamiento y el control, el sistema de reloj y otros conceptos de arquitectura de computadoras, para después comprender elementos como los apuntadores y los arreglos, las estructuras de datos y los registros.

Y aunque parezca increíble, el conocimiento sobre la arquitectura de procesadores también es importante, saber cómo están diseñados e inclusive conocer un poco al respecto del conjunto de instrucciones que están contenidas en algunos de ellos, creo yo que cosas como estas son un buen precedente para comprender conceptos más importantes como concurrencia y paralelismo.

Conocer al respecto del sistema de entradas y salidas puede ayudarnos mucho a comprender la forma en cómo están hechas ciertas aplicaciones, refiriéndome específicamente a aquellas que usan elementos como el gps, la cámara, el teclado, y todas aquellas aplicaciones móviles con las que nos enfrentamos o usamos en nuestros días.

No describo cada uno de estos elementos mencionados porque seguramente podrás encontrar mucha información allá afuera, e inclusive considero que hay literatura mucho más valiosa de la que yo podría ofrecer aquí, sin embargo, si quiero destacar a modo general cada uno de los conceptos con los cuales te podrías enfrentar en un día convencional desarrollando software, hablando profesionalmente claro está.

Por ejemplo, ”Inside the machine” de Jon Stokes.

Manejo del sistema operativo

muchas cosas están aquí, me refiero a que hoy en día no existe una manera de usar una computadora si no es a través de su sistema operativo, y para un aprendiz de software es estrictamente necesario conocer la forma en como está diseñado el sistema operativo con el cual se va a dedicar a trabajar.

Para alguien que se dedica a desarrollar, el conocimiento de la estructura del sistema operativo es extremadamente importante, ya sea porque desarrollará aplicaciones específicas para dicho sistema operativo o bien porque será la herramienta base de la cual dependerá para crear aplicaciones de cualquier otro tipo.

Definitivamente deberías de conocer al menos dos sistemas operativos, una podría ser el que usas diariamente y otro podría ser aquel que te llamen la atención para alguna aplicación que desees desarrollar.

Hoy en día la atención de estos sistemas operativos es extremadamente sencillo, por lo que te recomendaría que explores alguno de estos inclusive podrías hacerlo sin ensuciar tu equipo de cómputo, pues puedes usar técnicas como la virtualización para instalar sistemas operativos invitados. Sin embargo, a mí me gustaría sugerir algo más que consideró importante para desarrollar software: profundizar en la estructura de un sistema operativo.

Para esto siempre nos podremos basar en elementos bien definidos; ya hablamos que algunos de ellos previamente, pero quiero destacar ahora el siguiente nivel, y para ello puedes basarte en un gran libro: “Sistemas Operativos: Diseño e Implementación” de Andrew Stuart Tanenbaum, en el cual podrás encontrar las partes por las cuales esta estructurado un sistema operativo, inclusive en versiones modernas de dicho libro podrás encontrar ejemplos muy bien conocidos por la industria, en los cuales se ejemplifica la diferencia en los diferentes subsistemas como son el de administración de procesos, el de administración de la memoria, el de entradas y salidas, el sistema de archivos, las interrupciones, entre muchos otros conceptos que son importantes para comprender el funcionamiento el sistema operativo instalado en muchos de los dispositivos modernos, por ejemplo Android e iOS.

Pero esto no termina aquí, pues deberás de conocer uno de los elementos más importantes para acceder a los recursos de tu sistema operativo, la denominada shell.

Una shell es una interface de usuario para acceder a servicios o programas contenidos dentro de un sistema operativo, mi sugerencia será me uses aquellas interfaces basadas en línea de comando o de texto, pues son rápidas y ocupan muy pocos recursos, algunas leyes son muy sencillas de utilizar, pero al igual que hay muchas otras herramientas deberás escoger aquella que te facilite el trabajo, y a su vez para que esto suceda deberás de conocerla o dedicarle el tiempo necesario para saber que te ofrece.

La historia de las shells es amplia, y no me gustaría detenerme en eso, más bien lo que quiero que sepas y que te aporta valor es que puedes usa varias hoy en día, y cada una de estas te acomodara de forma distinta, pero también tienes que saber que algunas de ellas están disponibles sólo en ciertos sistemas operativos, de los cuales también te sugiero explores la historia o su origen pues gracias a ello podrás explicarte porque cierto grupo de programas contenidos dentro de la shell son distintos o bien en algunos casos algunos no existen, por ejemplo te pongo algunas basados en unix que te recomiendo por lo menos echarles un vistazo:

  • Bourne shell sh

  • Almquist shell ash

  • Debian almquist shell dash

  • Bash (unix shell) bash

  • Korn shell ksh

  • Z shell zsh

  • C shell csh

  • Emacs shell eshell

  • Friendly interactive shell fish

Y definitivamente, para ser un poco más pragmático la sugerencia es que explores sistemas operativos basados en unix y linux, y conozcas el tipo que estás usando, pues existen elementos que con tan sólo conocer el origen pueden resolver muchos problemas, voy a poner un ejemplo muy sencillo:

Si estás usando ubuntu por ejemplo, entonces estás usando un super conjunto de otro sistema operativo llamado debian, y en este tú puedes instalar paquetes o programas adicionales con la instrucción apt-get install, que es justo la misma instrucción con la que haces lo mismo en todos aquellos sistemas operativos basados en debian como por ejemplo ubuntu; ahora bien, un sistema operativo famoso para montar aplicaciones es centos, y otro sistema operativo también muy usado para desarrollar software es fedora, ambos están basados en una distribución de linux conocida como red hat, y para instalar paquetes o programas adicionales tu usas el comando yum install, el cual funciona en todos estos sistemas operativos, pero no en ubuntu por que no está basado en redhat sino en debian. Ahora bien, todos los que he mencionado anteriormente tanto los basados en debian, como los basados en redhat, cuentan con programas comunes base como por ejemplo ls, que sirve para listar el contenido de un directorio, sin embargo, este mismo comando lo puedes encontrar en unix, y esto es porque tanto linux como unix están basados en minix, del cual comparten un grupo de programas comunes.

A lo que me refiero es que si conoces la filosofía con la que fue creado alguna herramienta o elemento dentro de algún sistema operativo, entonces podrás comprender muchas de las cosas al respecto de su funcionamiento.

Un editor de texto

Necesitas encontrar una forma de editar texto rápidamente y con alguna herramienta muy ligera que puedes encontrar en diferentes sistemas operativos, la cual te permita desempeñarte de forma natural sin importar que sistema estás explorando.

Muchas de las personas que en algún momento desean utilizar cualquier equipo de cómputo usan editores de texto universales, instalados dentro del sistema operativo, o bien, fácilmente descargables e instalables.

Hoy en día puedes encontrar muchos de ellos que incluso tiene funciones que te van a permitir modificar código de una forma eficiente y segura, sin embargo, la recomendación siempre será utilizar aquellos que ya llevan mucho tiempo iker inclusive puedes usar si tú responsabilidad en algún momento es montar la infraestructura necesaria para instalar una aplicación en un ambiente productivo o de pruebas.

Definitivamente, tendrás que invertir un tiempo en aprender las bondades que te ofrece cada uno de los editores de texto que quieras usar y aprender los atajos dentro del teclado para poder eficientar cada movimiento que hagas, lo importante es que es como desarrolladores de software nuestra herramienta principal hacia cualquier equipo de cómputo es el teclado, y tienes que aprender a moverte muy bien en cualquier aplicación a través del mismo.

Tal vez podrás estar pensando en herramientas cómo los ide’s, que contienen ambientes de desarrollo estructurados que te permite manejar herramientas externas y locales, son buenos, sin embargo la recomendación siempre será que conozcas exactamente qué es lo que está haciendo y cómo podrías hacerlo si no contaras con dicha herramienta para que puedas comprender el poder que se te está ofreciendo a través de un simple menú.

También podrás ser testigo vi que un común denominador en programadores experimentados, es que la mayoría de ellos usan algún editor de texto muy famoso, me refiero a vim o emacs.

Por lo que mi sugerencia seria que intentes aprender alguno de estos, sin embargo, déjame decirte que ambos tienen una curva de aprendizaje no tan corta pero que al final cuando adquieres cierta habilidad puedes sacarle mucho provecho.

En otros casos en donde cuentas con un ambiente gráfico podrás utilizar algunos editores de texto universales y modernos, es decir, a veces necesitarás simple y sencillamente editar texto de forma rápida y posiblemente estarás usando alguno que es gráfico y dependiente del sistema operativo, pero ya en un trabajo intenso en la creación del código constante buen la modificación del mismo seguramente tendrás la necesidad de utilizar un editor.

Ahora también, independientemente de que existan plataformas de desarrollo las cuales proveen ambientes completos, siempre te será de utilidad conocer la forma en la cual podrás manipular archivos de texto plano a través de algún otro medio ya sea para reparar algún tipo de configuración o simple y sencillamente porque quieres conocer el contenido del texto y lo quieres explorar de forma amigable. Hoy en día plataformas como android y ios proveen de entornos completos que permiten el desarrollo, de los cuales te recomiendo aprendas muy bien la forma en que operan y qué es lo que están haciendo internamente, pero también creo que es muy útil el hecho de que puedas mostrar o editar el texto de tu código o cualquier otro archivo a través de un editor que sea ligero, rápido y eficiente.

Inclusive algunos de estos editores fueron hechos para abrir archivos tan grandes que programas convencionales no podrían abrir.

Un control de versiones

A todas las personas que hacemos software nos ha pasado algo muy similar cuando estamos escribiendo algún fragmento de código que está intentando resolver un problema, llene el cual hemos invertido bastante tiempo, comenzamos con una solución pensando que podría hacer, y la crecemos y le evolucionamos a lo largo de un día o dos, inclusive en el peor de los casos una semana o más, y cuando nos damos cuenta vemos que la solución que más se acercaba a lo que queríamos era justo la que teníamos al principio o la qué comenzamos a hacer.

También pasa que en algún momento queremos saber por alguna razón el histórico de actividades o modificaciones que hemos hecho a algún proyecto, ya sea por alguna medida o simple y sencillamente para comparar la solución que teníamos en un inicio con los cambios que ahora tenemos, es lo único que nos podría rescatar sería el un fue hola pila de actividades que se encuentra almacenada en la opción de ‘deshacer’.

También, queremos colaborar en algún proyecto de software o queremos que alguien más se une a nuestro proyecto con alguna contribución, entonces lo que hacemos es que ofrecemos alguna copia junto con todas sus dependencias de nuestro proyecto o bien obtenemos la misma copia de alguien más.

Pues bien, es aquí en donde un control de versiones toma la importancia que debería, pues esta herramienta me va a permitir llevar un histórico de cambios del código fuente que estoy desarrollando, escribirle algunos mensajes que me ayuden a referenciar lo que estaba tratando de hacer en este momento, marcando las diferencias mejor conceptualizadas como deltas y llevando una bitácora de los cambios realizados en el proyecto.

Es importante saber que el control de versiones originalmente está hecho para archivos de texto, aunque actualmente ya existe la forma de comparar archivos binarios en algunos formatos, siempre que se tenga algún texto contenido en plano se puede llevar un control del mismo.

Me refiero a que cualquier cosa que escribas en un editor de texto puede ser versionada, y puede ser controlada para poder regresar a través del tiempo a alguno de sus versiones, puede ser marcada en algún momento muy importante en donde todo se encuentra estable y puedes crear tanto copias locales para trabajar en características especiales de tu software o bien puede ser distribuido de forma remota para que alguien más lo lea, o bien puedes obtener una copia estructurada del mismo software de alguien más.

La recomendación aquí es que conozcas algún control de versiones y lo explores en su totalidad para que te beneficies de los elementos internos del mismo, puedes distribuir copias del software o puedas hacer que alguien más se una a algún proyecto, o mejor aún, tú descargues una copia del proyecto de alguien más que puedas contribuir un alguna modificación o corrección.

Actualmente, existen controles de versiones centralizados y distribuidos, seguramente podrás encontrar mucha información al respecto en la web, sin embargo quiero que sepas que más allá de los nombres del software que puedas encontrar es importante que conozcas los conceptos, me refiero a que en cada uno de estos podrás encontrar una forma de hacer lo que necesitas y que cada uno de ellos te ofrecerá diferentes comandos para lograrlo.

Por ejemplo, cada uno de estos te permitirá crear versiones alternas que se desprenden de la versión original que puede ser estable, todos ellos te proveerán de un histórico de cambios que podrás explorar, también te proveerán de la forma en la cual encuentres las diferencias entre archivos, y también que te permita almacenar una copia en algún servidor remoto que puedas obtener desde otro lado. Lo importante aquí es que todos estos elementos que vana ayudar a poder crear versiones alternas del software original en conjunto con otras personas o bien si es solamente un desarrollo individual pero en diferentes versiones.

De los que seguramente podrás encontrar en este momento y que son reconocidos(algunos no tanto) y usados en la industria son: svn, git, mercurial, bazaar, fossil.

Por lo que la sugerencia es: conocer algunos de ellos lo explores y lo uses inclusive para tus proyectos personales.

Al final del día, considero que un profesional software se ve definido en una parte por aquellas herramientas que usa para la construcción de aplicaciones.

Capítulo 8. Proyectos alternos

Diseño es una solución al problema. Arte es una pregunta para un problema.
— John Maeda

Antes de comenzar de forma profesional tuve la curiosidad de hacer algo para mí, aunque no era la gran cosa fue importante plantearme un objetivo en el cual pudiera imaginar todo lo que yo pudiera hacer con lo que conocía o pudiera lograr hacer con aquello que iba a aprender.

En el comienzo, independientemente de todo lo que estuviera aprendiendo, en ese momento yo quise crear algo que imaginé y quería ver si era capaz de hacerlo, y pude notar que era libre de ocupar y hacer lo que yo quisiera en la forma en la que yo deseara, no tenía presión alguna al respecto de lo que estaba haciendo, y creo que lo más importante fue que empecé a hacer preguntas; preguntas las cuales me llevaban a la investigación y a buscar formas de hacer lo que yo deseaba hacer.

Para aquel momento mis recursos eran limitados: no tenía acceso a una red o a internet, lo único que tenía era la biblioteca de mi escuela y algunas revistas de las cuales no había mucho más que leer, pues las repasaba una y otra vez.

Toda esta experiencia lo que me dio es la oportunidad de crear y buscar elementos que me permitieran acrecentar mis habilidades, pero siempre persiguiendo un objetivo, queriendo crear algo que estaba en mi imaginación o bien creando algo con un propósito bien definido.

La creación de un proyecto alterno siempre te dará la oportunidad de fallar, de ser creativo, de incorporar tecnologías que no has usado antes, de quitarte la presión de una entrega, de disfrutar cada concepto y tecnología que vas agregando de a poco a ese proyecto.

Creo que la parte más importante de comenzar un proyecto alterno es tener un propósito propio o ajeno que te identifique, o bien, le veas alguna oportunidad de forma tecnológica. Siempre los retos cobran sentido cuando son aplicados ciertos elementos o plataformas tecnológicas conocidas o innovadoras.

Incluso, habrás escuchado de algunas empresas o compañías de software que comenzaron como un proyecto alterno, en donde sus creadores dedicaban su tiempo libre y lo invertían en dicho proyecto durante las tardes y fines de semana, algunos de sus proyectos son el software que usamos hoy en día.

Y como un efecto colateral, tendrás algo que mostrar al mundo cuando llegue el momento: me refiero a que sin saberlo ya estás construyendo tu propia carrera por lo que se conoce como tu currículum. La parte fascinante del software es que en la mayoría de los proyectos, hoy en día, se pueden mostrar muy fácilmente a través de cualquiera de las aplicaciones que hospedan código.

Y para que tus proyectos alternos tengan un círculo que cierre correctamente, la sugerencia es que los puedas desplegar en alguna parte, es decir, permitir que otros usuarios se beneficien de ellos o bien simple y sencillamente tenerlos disponibles cuando los necesites: para ello tendrás que hospedarlos en algún lugar y eso también te dejará un aprendizaje pues conocerás todo lo que necesitas para montar tu aplicación.

Proyectos con fines sociales

Desde siempre, puedes encontrar a muchas personas que están buscando generar un cambio en la sociedad y que no cuentan con el conocimiento técnico para hacerlo, estas personas están en busca de programadores que permitan hacer realidad sus propósitos, y son una muy buena oportunidad para crear software que va más allá de ayudarte a ti, y te permitirán crear algo que pudiera ayudar a una comunidad. También existen algunos otros eventos en los cuales se pretende crear software con un propósito en un tiempo muy acotado, y aunque estos eventos son muy famosos, prefiero aquellos en donde el bienestar está más allá de un interés económico.

Existen programas de investigación que también permiten desarrollar habilidades técnicas y probar tecnología acorde a la necesidad, la mayoría de estos los podrás encontrar inclusive en organizaciones sin fines de lucro y asociaciones que están buscando la manera de dar un mejor servicio a personas que verdaderamente lo necesitan.

En algún momento en mi carrera pude observar a una persona que inclusive ayudaba a instituciones religiosas con recursos escasos a dar servicio a gente que se hospedaba en los hostales, a través de un programa que llevaba el registro de las personas que se hospedaban ahí para determinar cuántos víveres necesitaban, y aunque pudiera parecer muy sencillo para las personas que dirigían ese lugar fue de vital importancia pues ahora contaban con un histórico de datos que les ayudaba tomar decisiones.

Durante otra experiencia en un evento enfocado a apoyar lo que se conoce como emprendimiento social, tuve la oportunidad de ayudar a un grupo de personas que estaban buscando la forma de responder a una comunidad en África, la cual padecía de varias enfermedades y la única forma de comunicarse era a través de mensajes de texto. Ellos pretendían crear un almacén de datos que les permitiera dar seguimiento a las personas que les escribieran a través de un número celular, y que la mayoría de los mensajes que fueran enviados se respondieran de forma automática pues las consultas eran frecuentemente las mismas. Al final, pudimos crear algo que le serviría a la comunidad para comenzar un camino y más allá de la gratificación económica, el agradecimiento y el bienestar que generaba dicho software fue mayor, y sin lugar a dudas la experiencia fue única en su tipo.

A lo que me quiero referir en esta parte es que existen personas que ya tienen un problema con el cual te puedes identificar, y al sumarte al propósito con tus habilidades puedes ayudar demasiado, inclusive podrías conocer una tecnología que está hecha justo para el problema que se está presentando.

Software para ti…​

En otras ocasiones, tuve la necesidad de hacer ciertos programas para no tener que hacer tareas manuales.

No todo se trata de hacer software para los demás, también puedes hacer herramientas para ti mismo, y es aquí en donde cobra más sentido pues seguramente las necesidades que tú tienes son muy específicas al principio, y si tienes la capacidad de hacer software para los demás entonces también puedes crear elementos que te ayuden a llevar el día a día.

Desde responder un correo todos los días, hasta crear un reporte semanal o mensual, o bien, hacer que las cosas de tu casa se enciendan cuando llegues, o hacerles saber a ciertas personas que has llegado a tu destino. Todos estos objetivos y más pueden ser programados de tal forma que cuando te des cuenta también les son útiles a otras personas.

Así como los dentistas cuentan con una dentadura saludable, y así como el carpintero tiene los mejores muebles, tú deberías de tener el mejor software hecho por ti para ti.

Y si escalamos esta forma de pensar, podrás apreciar que existen empresas que están creando software para sostener su propia operación, y que en algunos casos lo exponen al público porque seguramente les puede servir a otras organizaciones o personas, y a su vez estas organizaciones y personas en lugar de crearlo desde cero se suman al esfuerzo y contribuyen con los elementos específicos que les hace de utilidad, logrando así un software más robusto.

Al final del día, lo que quiero transmitir es el hecho de que deberías de tener proyectos de software alternos que te permitan explorar nuevas tecnologías o bien aprender nuevos conceptos que puedan ser aplicados a los problemas que se te presentan, todo esto te ayudará a crear una ruta de vida dentro de tu carrera; ayudarán a observar en un futuro qué era lo que hacías al principio y con qué conceptos lo hacías, te permitirá hacer una reflexión de una retrospectiva de tu trabajo que te ayudará a saber qué es lo siguiente que debes de hacer o estudiar.

Capítulo 9. ¿Que deberías leer?

Aprender a leer es lo más importante que me ha pasado. Casi 70 años después recuerdo con nitidez esa magia de traducir las palabras en imágenes.
— Mario Vargas Llosa
premio nobel de literatura.

Uno de los aspectos más importantes en la formación profesional será siempre leer al respecto de los temas que queremos conocer y dominar, tanto técnico como metódico siempre será importante apoyarse en las personas que han tenido una experiencia y que la han podido compartir a través de un texto.

Y así como existe mucha información al respecto de un tema, también existe información que de alguna forma consume mucho más tiempo del que deberíamos invertirle, y es muy difícil identificar dicha información en un mundo en donde existen los buscadores y el primer lugar es el más visitado, aunque no siempre el mejor.

Me refiero a que deberías de conocer a las personas que escriben, y conocer al respecto de ellas, que han hecho o dónde están trabajando, para que así te des una idea del contexto de la persona que estás leyendo, si bien el blog es una herramienta bastante útil, también es muy valioso conocer a la gente y sus personalidades.

Generalmente, hay sitios bastante famosos al respecto de cualquier tema, que son referencia en la web para cualquier interesado, pero yo te quiero hablar de aquellos que no son tan famosos, son más como una joya oculta o un diamante perdido en un vasto mar de información, existen personas muy valiosas que están escribiendo al respecto de temas muy importantes y que son visionarios del medio tecnológico, esas personas generalmente no son tan conocidas o populares, y lo que están escribiendo impactará o ha impactado la tecnología como hoy la conocemos.

En la historia han existido personas importantes, quienes han sentado las bases de lo que hoy conocemos, y también existen personas actualmente que están cimentando los conceptos tecnológicos que no alcanzamos a concebir hoy en día.

Muy cerca de todos nosotros existen todas estas personas que nos pueden dar muy buenas referencias al respecto de otros textos y libros que podemos leer, y definitivamente tendremos que comprar para poder acceder a esos recursos.

En alguna parte atrás comenté que la buena educación o formación cuesta, pues bien esta es una de las situaciones en donde tendrás que invertir de tu bolsillo para algún libro que esté disponible, pues existe una persona que se ha esforzado lo suficiente en escribirlo y merece un reconocimiento, no es verdaderamente que esa persona se vaya a hacer millonaria con el ingreso de ese libro, sino que tenemos que honrar el tiempo que le dedico a escribirlo, y como en muchas ocasiones no conocemos al autor, la compra de un libro siempre será significado de valorar el buen trabajo qué alguien ha hecho por nosotros al investigar al respecto de un tema que queremos conocer.

Es decir, mucho del contenido valioso está en aquellos libros que los profesionales de software están escribiendo actualmente.

Acerca de los libros técnicos

Si bien conocer de tecnología es importante, entonces deberías de considerar el adquirir algún libro qué tenga que ver con un lenguaje de programación o una biblioteca particular, incluso un framework. Y en definitiva lo tendrás que hacer, ya sea para entrar a ser parte activa de un mercado que está en constante competencia, o mejor aún por el deseo de conocer de primera mano que es aquello de lo que tanto hablan todas esas personas que ya están laborando. Sin embargo hay algo que debes de considerar, generalmente los libros que son puramente técnicos y que tratan al respecto de una versión particular de un software o lenguage, tienden a caducar de forma natural, esto no es malo pues definitivamente habrá conceptos que se conservarán a lo largo de todas aquellas versiones, pero entradas en la constante actualización de esta herramienta, lo cual tampoco es malo, más bien lo que quiero transmitirte aquí es que en lo que a elementos técnicos se refiere deberás de estar en constante actualización y que seguramente muchas de las cosas que hoy leas en un futuro ya no serán vigentes, por lo que debes de ser cuidadoso con aquello a lo cual le inviertes un tiempo valioso para identificar aquellos conceptos que son centrales para dicha herramienta, lenguaje, biblioteca o framework.

Definitivamente tienes que leer libros técnicos, pero ten siempre en consideración qué hay conceptos debajo de todo ese tecnicismo que son más importantes de conocer, que esa tecnología que estás leyendo es la culminación de esos elementos y que si de alguna forma algo que teóricamente es relevante alguien lo ha plasmado de forma práctica en esta herramienta.

Al final del día, muchos de estos libros técnicos te quedarán simplemente de recuerdo, pues al pasar de los años nuevas versiones de los mismos surgirán y posiblemente tendrás la posibilidad de actualizarlo, pero estarás constantemente desechando aquellos textos viejos que contienen la actualización y el contenido núcleo el cual le distes desde un principio.

Acerca de los libros metódicos y teóricos.

En definitiva, los libros que tratan al respecto de alguna disciplina como todo lo orientado al desarrollo de software suelen ser perdurables, inclusive algunos de ellos siguen siendo referencia sin importar que hayan pasado los años y siempre habrá alguien que te recomiende alguno de estos.

En lo que se refiere a aquellos textos relacionados con ciencias computacionales puras, también podemos encontrar algunos textos qué a pesar de los años siguen siendo pilar importante de la forma en cómo se desarrolla hoy la tecnología, son motivacionales tecnológicamente hablando y contienen los fundamentos que cualquier profesional de software debería de conocer para operar correctamente uno o varios equipos de cómputo.

También existen algunos otros libros que tratan de transmitir un concepto a través de una tecnología porque se presta a hacerlo, estos libros también son buenos y son generalmente de una vigencia muy larga.

Entre los temas que podrían ser candidatos hacer buscados dentro de algunos libros podrían estár:

  • Estructuras de datos.

  • Análisis y creación de algoritmos.

  • Matemáticas orientadas a la programación.

  • Inteligencia artificial.

  • Teorías de grafos y lenguajes formales.

  • Problemas para la resolución en grandes cantidades de cómputo.

  • Formas de trabajo y administración para el software.

  • Métodos ágiles.

  • Seguridad en su forma esencial.

  • Conceptos esenciales del funcionamiento de las redes y las telecomunicaciones.

  • Arquitectura de computadoras.

  • Modelos de concurrencia.

  • Entre muchos otros….

Lo que quiero transmitir aquí es el hecho de que muchos de estos conceptos los vas a poder encontrar de forma natural en algún lenguaje o herramienta, o bien podrás comprender mejor algunas tecnologías, pues están basadas en los conceptos contenidos en algunos de estos textos, lo cual considero de mayor importancia que centrarse en algo específicamente técnico, es decir, no es malo para nada el hecho de ser tecnológicamente bueno, pero considero que un profesional de software debería conocer la esencia y filosofía de las herramientas que está usando.

Lo más importante de todos estos libros y textos, es el hecho de hacer que los conceptos que rigen a la ciencias computacionales sean congruentes con todo lo que usamos y podemos crear, realmente muchas de las cosas que hasta el día de hoy han salido a resolver algún problema que parecía imposible se ha podido lograr gracias al conocimiento extensor profundo de algo que ya existía desde hace mucho tiempo.

Acerca de los libros históricos

Definitivamente estos son los libros que deberías de leer, existen varios autores que han narrado la forma en cómo la tecnología y sus protagonistas han cambiado la forma de vida de muchas personas, que de los hechos más importantes en la actualidad es que la mayoría de las personas que han creado algo, son personas de esta época, con las cuales aún podemos tener contacto para poder preguntarles al respecto de sus motivos e inspiraciones.

Cuando empiezas a conocer lo que ocurrió realmente de forma histórica empezarás a darte cuenta del porque ciertos elementos tecnológicos tienen la esencia que poseen, y podrás imaginar de primera mano la creación de alguna organización que está desarrollando tecnología en el mundo.

Y no está de más mencionar, que estos libros o textos prácticamente son perpetuos pues te darán los hechos que han ocurrido durante la transformación tecnológica desde el principio de los tiempos, en donde los protagonistas principales son aquellas personas que hemos escuchado en libros de texto técnicos o metódicos, es por esto, que la sugerencia será no des vincularte absolutamente de la historia, pues gracias a todo lo que llegues a conocer en este contexto te ayudará a tomar las decisiones para las herramientas del futuro.

Capítulo 10. Teoría y pragmatismo en el software

¿Cuándo ser pragmatico?

Siempre que tengas bien entendida la teoría…​

¿Cuándo apoyarse en la teoría?

Cuando estés practicando y no comprendas lo que haces…​

Parte 3: Cultura en el software

Capítulo 11. Ignorancia y experiencia

Conocer nuestra ignorancia es la mejor parte del conocimiento.
— proverbio chino

Generalmente, cuando asistimos a una entrevista de trabajo o bien estamos buscando alguna oportunidad para poder participar en algún proyecto, nos vemos cuestionados en lo que sabemos, y comúnmente las personas nos preguntan de lo que conocemos o lo que hemos hecho, o de lo que ellos desean que sepamos para poder tener un avance en su proyecto. Si verdaderamente deseamos estar en dicho proyecto respondemos afirmativamente a todas estas preguntas, aunque internamente sabemos que no es verdad, y hoy en día mucha gente se ha dado cuenta de esto, por lo que se han creado nuevos mecanismos para hacer entrevistas, e inclusive evaluar de múltiples formas a una persona, ya sea involucrando su un contexto social ya sea explorando dentro de su mente y en los sentimientos que pudiera tener al respecto de ciertas situaciones.

Si bien, hoy existen exámenes psicométricos y técnicos que permiten evaluar a una persona, tenemos que aceptar como profesionales que existen caminos que no hemos recorrido y existen también métodos, técnicas y tecnología que no hemos usado, y es aquí en donde me quiero centrar.

Tradicionalmente, nos hacemos contratar por los elementos que conocemos, mas no por los que no conocemos, y poco a poco al ir conociendo más y más, podría decirse que escalamos una pirámide de posiciones dentro de una organización, si bien, ya hemos mencionado que realmente no nos importan los títulos que existen en dicha organización, sí es importante reconocer que debemos de contar con un mecanismo de crecimiento que nos ayude a agregarnos valor como personas y como profesionales, esto es la experiencia qué vamos a ir adquiriendo en función de los problemas que vayamos resolviendo y el conjunto de tecnologías que vayamos aplicando para resolverlos.

Una de las cosas que he visto positivas durante todo este tiempo, es el hecho de encontrar a personas que no conocen alguna tecnología o forma de trabajo, pues le será mucho más fácil de aprender al no tener que vaciar todo el conocimiento adquirido en experiencias anteriores, y eso ayuda mucho a avanzar y que tienen la necesidad de empatar lo que ya conoce con aquello que es nuevo, dando como resultado un mayor esfuerzo para poder aprender.

Si bien hay que reconocer todo lo que conocemos, también hay que reconocer todo lo que no sabemos, y que seguramente necesitaremos explorar para determinar si es útil a nuestro ámbito de conocimiento, si de alguna manera todo eso que está allá afuera me va a permitir resolver los problemas que hoy tengo que enfrentar en mi organización.

No saber muchas cosas no es para nada perjudicial o malo, saber mucho al respecto de algo en particular podría considerar que del todo no es tan bueno, pues podemos concentrarnos mucho en eso y será muy difícil cambiarnos si es que así lo deseamos, aunque considero que habrá algún momento en el cual querrás elegir un camino y seguirlo hasta el final.

También, el hecho de ir abarcando todo aquello que desconocemos no nos exenta de detenernos en nuestro camino como profesionales, lo que quiero decir es que habrá cada vez más y más tecnología o herramientas que aprender conforme vamos avanzando, y que nuestra responsabilidad será conocerlas.

Todo este camino que recorramos nos ayudará a obtener eso que denominamos experiencia, con lo cual podremos resolver problemas similares en un periodo menor de tiempo o tal vez con una mejor calidad de la que hicimos en primera instancia, la experiencia no es más que el aprendizaje de todos los errores que cometimos al usar una tecnología de la forma en la que se nos presentó bajo el contexto y circunstancias que vivimos en ese momento. Es por esto, que consideramos el hecho de no saber ciertas cosas como benéfico, pero que vemos mucho mejor el acto de atacar dichos elementos.

Haz una lista de cosas que desconoces

Siempre hay una forma de empezar, a veces esa forma no es la más adecuada, o bien no tenemos algún tipo de acceso que nos permita identificar un inicio, sea así, hoy es el día en el que usamos software mucho más que antes y seguramente lo usaremos más y cada vez más, es por esto que te podrías preguntar como hacen ciertas personas para crear el software que ahora estamos usando en todos nuestros dispositivos, y creo que ese es un buen inicio.

Si tienes la oportunidad de entrar en una organización que hace software, te será mucho más sencillo identificar aquellos elementos que desconoces pues tus propios compañeros los estarán usando y te pedirán que te unas a ellos a través de dichos elementos.

Llegará un punto en donde serán tantos los elementos y conceptos qué tienes que aprender que seguramente no sabrás por dónde empezar, es por esto que la sugerencia es que hagas una lista de todas aquellas cosas que desconoces e inclusive la puedas categorizar en secciones de acuerdo a la necesidad o el contexto del momento, puede ser por conceptos esenciales, o bien por tipos de lenguajes y herramientas, por base de datos, por el manejo del sistema operativo, entre muchas otras.

Lo importante aquí es que verdaderamente hagas está lista, porque será el precedente del estado en el que te encuentras en este momento, el cual tendrás que modificar conforme el tiempo avance, y en algún momento volverás a esta lista y determinarás si verdaderamente has progresado en este camino, o bien, está lista te servirá para no olvidar todo aquello que te planteaste conocer para poder llegar a ser un profesional.

Revisa tu avance

Tal vez existan muchas cosas por hacer o aprender, e inclusive podrías desviarte del camino que inicialmente elegiste, pero sin lugar a dudas la recomendaciones es que hagas la lista inicial, y que aunque no la ataques directamente y de forma inmediata, te podrá dar en algún momento un precedente de lo que querías aprender, lo cual será valioso para que tú puedas tomar una decisión al respecto de qué es lo siguiente que te gustaría aprender o incorporar a tu carrera profesional.

Lo ideal es que continuamente revises esta lista para poder determinar si efectivamente hay un avance en los elementos que te planteaste como objetivo, pues así podrás tacharlos y agregar otros elementos que seguramente te llamen la atención, así también, podrían ser parte de algo que te va a servir para resolver un problema en tu trabajo o tu proyecto personal.

No necesitas mucho, pues realmente solo deberá de existir esta lista en alguna parte en donde en un futuro puedas consultar y sepas que está ahí, y nuevamente, lo mejor sería que pudieras ir descartando algunos elementos para dar cabida a otros elementos nuevos.

Me gustaría decirte que este mecanismo me ha sido de utilidad durante mucho tiempo, y que inclusive no veo otra forma de plantearme un objetivo de manera tan simple como el hecho de proponerme aprender algo que escuché y que sé que me podría servir en algún futuro.

Inclusive podrás ver lo gratificante que es el hecho de tachar ciertos elementos que creías muy difíciles o imposibles de aprender, y que ahora son parte de tu portafolio de herramientas que puedes aportar a tu carrera como profesional.

Capítulo 12. Traza tu carrera

¿Cómo te ves en diez años?

Capítulo 13. Ser el peor

Siempre estoy haciendo lo que no puedo hacer para poder aprender cómo hacerlo.
— Pablo Picasso.

Cuando comienzas por primera vez a trabajar, existe esa emoción de empezar a saber de forma asertiva todo aquello que te va a ser útil para tu vida laboral, sabes que de alguna forma u otra aprenderás de los miembros de tu equipo que ya cuentan con algo de experiencia y que en algunos casos tú también podrás obtener el mismo conocimiento para poder aportar al proyecto.

También, sabes que deberás de poner un esfuerzo superior al de tus demás compañeros pues tienes que alcanzarlos a un punto en donde te permita ser productivo y aportar algo, ese esfuerzo lo haces o lo harás sin pensarlo, sabes que tienes que hacerlo porque sino sencillamente te estancarás.

Pues bien, esta misma sensación se repetirá a cada nuevo lugar que entres en donde el equipo de trabajo con el que estés participando sea intelectualmente superior o estén afrontando retos que hasta el momento tú no has enfrentado. Siempre tendrás algo que aprender de tu equipo o del problema que estás resolviendo, y tendrás que poner un empeño mayor que los demás, para poder dar una solución, o simple y sencillamente aportar algo a la inmensidad de un proyecto.

Tal vez, en algún momento cuando ya conozcas un grupo de herramientas y tengas la experiencia para afrontar ciertos problemas, estarás buscando oportunidades que posiblemente alimenten tu economía, lo cual no está mal, pues ya cuentas con los elementos para hacerlo. Si bien, lo que te quiero comentar en esta ocasión es el hecho de que cuando eso ocurre podrías entrar peligrosamente a una zona de comfort, que te permita desempeñarte en elementos que tú ya conoces, y no te permitas a ti mismo aprender más o sentirte de nuevo como aquel novato con la emoción de aprender algo nuevo.

Mi intención en esta ocasión es resaltar la importancia de volver empezar en equipos en donde somos los que más camino tenemos que recorrer, eso genera una experiencia y nos permite encontrar formas alternativas de ponernos al corriente con las habilidades de un equipo de trabajo. Y es que hay que pensarlo bien, de qué sirve ser el mejor integrante de un equipo si ya todo lo sabes y no tienes nada que aportar a los demás, o bien no estás aprendiendo de alguien más, es muy difícil que siendo el mejor elemento de tu equipo veas fácilmente como superarte pues no tienes a nadie con quien comparar o quien seguir, esto último es lo que genera la comodidad, pues tampoco vas a tener una competencia aparente.

Siempre será mejor ser el peor miembro de un equipo, pues te ayudará a reactivar todos esos mecanismos de estudio y te motivará a estar en aprendizaje continuo.

Cada vez que entras a una organización seguramente podrás verte a ti mismo con un perfil de conocimiento en comparación con los que ya están ahí, y conforme pase el tiempo podrás aprender lo mismo que los demás, y posiblemente migres a otra organización en donde comienzas de nuevo, siendo así la sugerencia es que busques esas organizaciones a las cuales sea muy difícil entrar, pues siempre serás el novato con ganas de aprender y llegar a ser como los demás.

La forma correcta de avanzar es usando esas fortalezas individuales que ya adquiriste con el entusiasmo con el que entraste, y cooperar con los elementos que te son asignados por los miembros de tu equipo.

Ser el peor no se trata de superioridad o fuerza, se trata de ritmo sostenido para poder ayudar a tus colegas, pues ellos te habrán ayudado a corregir tus errores, a cometer errores de forma segura y recuperarte lo antes posible, y lo que tu tienes que ofrecer es tu mejor esfuerzo para estar a la altura de las situaciones difíciles, no se trata tampoco de jerarquías si no de la suma de las colaboraciones de varios profesionales.

Capítulo 14. Mentores y aprendices

El maestro que intenta enseñar sin inspirar en el alumno el deseo de aprender está tratando de forjar un hierro frío.
— Horace Mann (1796-1859). Educador estadounidense.

Muchas personas hemos recorrido este camino, otras tantas están en el proceso, y otras más están empezando a andar este largo camino, y donde quiera que te encuentres siempre podrás hacer algo que aporte a tu vida como profesional de software.

Tienes que considerar algo muy importante, no siempre encontrarás quién quiera enseñar y los que quieren enseñar no siempre encontrarán a quiénes quieren aprender, por eso es que esta parte puede ser difícil en el sentido de la ejecución.

También es necesario aclarar algunas cosas al respecto de los mentores y los aprendices; tenemos que evitar el confundir o malinterpretar el rol de un mentor con el de un maestro, es decir, evitar caer en el error en donde idealicemos a nuestro mentor como la persona que tiene la verdad absoluta, pues el día en el que posiblemente flaquee de la forma natural en aquello que no domina posiblemente nos crearemos una mala opinión y de forma inválida, un mentor es como un acompañante que te ayuda a realizar algo por tu cuenta, a cuestionarte al respecto de lo que estás usando y a crear una conciencia que te permita saber si lo estás haciendo adecuadamente.

Sé un aprendiz

Un aprendiz puede ser cualquiera, inclusive aquellas personas que ya han recorrido un camino durante años, pero que desean conocer al respecto de un tema que es completamente ajeno al contexto en el cual están viviendo. Un aprendiz tiene la disposición de vaciar su mente para dar espacio a nuevas formas de crear software, tiene la humildad de aceptar su ignorancia respecto al tema y de formular preguntas usando el conocimiento que va adquiriendo, respeta a sus compañeros y a su mentor, no es egocéntrico y no antepone el conocimiento que ha adquirido para verse superior a los demás.

Realmente, recorrer el camino del aprendiz es un reto que implica la inversión de mucho tiempo, tanto como sea necesario para alcanzar lo que se conoce como seniority, te puede caer el caso que tal vez pueda ser alcanzado por unos antes que otros, esto irá en función de muchas cosas, realmente todos posiblemente, pero mayormente del aprendiz que esté practicando los conceptos que va aprendiendo.

Ser aprendiz también consiste en un compromiso con la práctica de los conocimientos aplicados de forma disciplinada y constante, se debe de llevar dicha práctica preferentemente de forma diaria, pero no sólo eso sino también designar su momento para reflexionar lo que se está haciendo y apoyarse en el mentor para confirmar los conceptos que se han repasado.

Ser un aprendiz también consiste en hacer trabajos simples, en algunos casos repetitivos y tal vez en otros casos sin tener un conocimiento real de la causa de ciertos ejercicios que sean puestos por el mentor, sin embargo todo esto tendrá un propósito para que el aprendiz vuelva incorporar a su caja de herramientas los conceptos que rigen muchos de los métodos con los que se crean software.

En algunos otros casos, incluso consiste en escuchar a aquellas personas que están platicando al respecto del tema que puede tornarse interesante, ser oyente e inclusive participar con preguntas que permitan ampliar la conversación.

Personalmente, he sido aprendiz de muchas personas con conocimientos en áreas muy específicas los cuales me han dejado marca en muchas de las aplicaciones que he podido desarrollar, ninguno ha tenido desperdicio, ninguno es mejor que otro, todos han aportado algo que ha sido valioso para el momento en el que lo use.

Y así también, que tenido la oportunidad de invitar a comer o por un café o cerveza, a algunos de mis mentores y he de confesar que he aprovechado el momento para hacerles alguna pregunta, que me permita saber su opinión al respecto de un tema, y puedo encontrar en todos los casos el gusto de cada uno de ellos por compartir su experiencia al respecto del tema.

He podido recibir a algunas personas que se han acercado a mí, con sus preguntas al respecto de que hacer o qué pasos seguir en su carrera, y yo con gusto siempre responderé en los términos en los que mi experiencia y contexto pueda ofrecer una guía que les sea de utilidad.

Generalmente, es muy difícil que alguien nos acepte como aprendices, pero tendremos que ser insistentes e incluso aprovechar esos momentos o reuniones en los cuales nos encontremos con estas personas para poder acercarnos a ellos. Algunos nos causarán confianza, y otros más allá nos inspirarán a realizar actividades que antes no nos hubiéramos atrevido a hacer, y es aquí en donde realmente creo que puedes seguir a alguien, pues te causa la suficiente emoción para poder emprender algo.

Ahora bien, no te confundas, así como tu mentor no será del todo un maestro, un aprendiz no deberá vivir la vida del mentor, sino conseguir su propio criterio y estilo, que le permita tener autenticidad en el software que hace. Lo que me refiero es que los mentores son un ejemplo a seguir en definitiva, pero que en algún momento tendrás la responsabilidad de ser un ejemplo para alguien más, y tendrás que encontrar tu manera muy particular.

Es fácil identificar quién podría ser tu mentor, una recomendación es que asistas a grupos de usuarios y comunidades en tu localidad, qué escuches a aquellos que exponen y participan, a aquellos que organizan también, te informes y preguntes, y seguramente podrás encontrar una oportunidad.

Sé un mentor

Conforme pasa el tiempo y estés alcanzando un nivel de experiencia, también lograrás ciertos niveles de confianza qué te permitirán transmitir el conocimiento que has ido adquiriendo en el camino, y es aquí en donde encontrarás una de las mejores formas de reafirmar todo aquello que has aprendido.

No te menosprecies, puedes ser el mentor de un tema muy particular de alguien más, no necesitas saber todo para ser un mentor, sin embargo, sería recomendable contar con por lo menos algunos mecanismos básicos para poder expresar tus ideas, y es aquí en donde las relaciones más cercanas a ti, por ejemplo tus amigos, pueden ser aquellos aprendices, los cuales te ayudarán a practicar la forma en la que tú transmites conocimiento.

En definitiva, una de las mejores formas de saber si has aprendido algo es tratándolo de explicar, y si te es posible hacerlo de una manera fluida entonces habrás alcanzado el primer nivel de conocimiento al respecto del tema, se cuidadoso, no has aprendido todo, simplemente has podido practicar o memorizar lo suficiente como para saber de qué se trata algo, sin embargo hay muchas más cosas que deberás de comprender al respecto del tema, y es aquí en donde verdaderamente surge otra parte del conocimiento, cuando transmites tus ideas habrá gente que te hagas ciertas preguntas y estas mayormente no se te habrán ocurrido ti, entonces es la oportunidad para poder profundizar en el tema.

Con el paso del tiempo, y a veces sin darte cuenta ya habrás sido el mentor de muchas personas.

Capítulo 15. Aprender a aprender

Me lo contaron y lo olvidé; lo vi y lo entendí; lo hice y lo aprendí.
— Confucio (551 ac-478 ac) filósofo chino.

Una de las dificultades más importantes para enfrentar es sin lugar a dudas el aprendizaje continuo de elementos que no conocemos, nos vemos con la responsabilidad de ir incorporando cada vez más elementos a nuestra caja de herramientas, que nos permitirán resolver diferentes tipos de problemas y aplicar las tecnologías adecuadas para cada uno de ellos, y tratar de no caer en el error en donde todos los problemas los queremos resolver con una sola herramienta.

Desde siempre estés sido el tema central en las escuelas, e incluso uno de los principales problemas para poder abrir cada vez más tipos de carreras o profesiones distintas.

Generalmente, les delegamos toda la responsabilidad a las instituciones para que nos muestren cual es el camino que debemos de seguir; esto funcionó durante mucho tiempo e incluso puede seguir aplicando para algunas disciplinas, o bien inclusive también para el desarrollo de software en su forma esencial, sin embargo, llega un punto en donde este tipo de enseñanza tradicional no cubre los aspectos de adopción en elementos de innovación.

Existe un esfuerzo muy grande por la gran mayoría de instituciones en estar al día con estos elementos, tratar de ofrecer a los alumnos los conocimientos que son comúnmente usados en el mercado, lo cual puede ser tan bueno como malo a la vez.

A lo que me refiero aquí, es a el hecho de que los profesionales de software definitivamente se apoyan de instituciones, pero mayormente forman su carrera de los elementos que han aprendido por si mismos a través de su experiencia o de la inversión de tiempo que han hecho en sus proyectos personales.

Quiero que sepas que llegados a este punto, existe la necesidad de que puedas adaptarte rápido a las circunstancias, y de que puedas aprender de las mismas, pero mejor aún de que crees los mecanismos necesarios para aprender a aprender.

Esto es que te permitas plantearte un grupo de objetivos y que puedas identificar los elementos necesarios para poder alcanzarlos, en términos de adquirir conocimientos, y es aquí en donde comienza a complicarse.

Tienes que responder varias preguntas, por ejemplo:

  • ¿Qué es lo que tengo que aprender?

  • ¿Qué mecanismos tengo para aprender?

  • ¿Qué necesito aprender?

  • ¿Qué me gustaría aprender?

  • ¿Dónde voy encontrar información?

A partir de aquí, podrías empezar a tomar algunas decisiones por ti mismo para recorrer un camino, que sin lugar a dudas te va llevar por una vereda larga pues en algunos casos posiblemente no tengas quien te pueda explicar detalladamente algún concepto, y es aquí en donde te recomendamos cómo lo mencionamos anteriormente, que busques a un mentor. En la mayoría de los casos no vas a contar con dicho mentor, y es por eso qué tienes que tomar la decisión de ser autodidacta.

Sé autodidacta

¿Qué significa ser autodidacta? De manera muy simple considero que es la habilidad que se puede adquirir a través de algún método para poder comprender el funcionamiento de ciertos elementos, sin necesariamente profundizar en el tema al respecto.

Lo que quiero transmitir aquí es que todos contamos con una forma de aprender que nos sirvió en algún momento, en donde a pesar que muchos de nosotros cursamos una formación escolar de cualquier grado, existía el momento en donde teníamos que comprobar todo el conocimiento adquirido y fue ahí en donde muchos métodos de estudio se nos presentaron, los cuales no voy a mencionar por que cada persona tuvo un contexto que le va permitir recordarlo, sin embargo es importante reconocer que estuvieron ahí y que seguramente algunos de ellos puede servirte para volver a aprender por tu cuenta.

Pero mejor aún, cuando aprendiste de forma inicial algo que te gustó, seguramente comenzaste a adoptar de alguna forma una variación de ese conocimiento para hacerlo auténtico. Es aquí en donde quiero centrarme un poco, pues algunas de las cosas que nosotros logramos aprender fueron a través de varios mecanismos, que cuando adoptamos nos funcionaron, y que no son verdad absoluta para otras personas, a un grupo de personas le sirve de una manera y seguramente alguien más aprende de una forma la cual no nos sirve a nosotros, tal vez porque no le exploramos bien o simplemente por alguna cuestión cultural.

La lección aquí es no desechar ninguna oportunidad que te permita descubrir una forma de aprender a hacer algo.

Formas de aprender

Me gustaría mencionarte algunas de las principales formas que he visto efectivas en la mayoría de las personas o equipos con los que trabajado, recomendaciones meramente personales que me han traído algún resultado positivo.

Aprendizaje por imitación.

Una de las formas que me sirve mucho para poder adquirir conocimiento fue observado detenidamente la forma en cómo operaban ciertas personas, la manera en cómo manipulaban el teclado e inclusive los elementos que hacían aparecer en la pantalla, sin lugar a duda yo quería hacer algo similar si no es que lo mismo, y entonces observaba detenidamente que era lo que hacían estas personas para poder replicarlo, el objetivo aquí era realizar exactamente las mismas actividades o ejecuciones que yo veía a través de otras personas.

Aprendizaje por error.

Definitivamente, cuando estamos atorados con alguna pieza de software if frente nuestros ojos aparece un error, generalmente buscamos en el error y llega un punto en donde es complicado encontrar una solución, a lo cual comenzamos a experimentar con lo que circula alrededor del fragmento de código en cuestión hasta que por alguna extraña razón atinamos, la recomendación aquí es verdaderamente conocer la razón de dicho error pues eso será un permanente qué se irá en nuestra mente debido a la frustración que nos puede causar.

Aprendizaje por experiencia.

Muy similar al anterior, pero haciendo componentes de forma exitosa y alcanzando pequeños logros sucesivos que nos permiten llegar a un fin, la satisfacción es algo que permite que el aprendizaje sea perdurable.

Aprendizaje por repetición.

Algunas otras veces, creamos piezas de software similares o bien realizamos tareas diarias recurrentes que nos van a permitir perfeccionar poco a poco la forma en cómo ejecutamos y manejamos los periféricos, o accesos a diferentes recursos en una red, estas actividades son las mismas una y otra vez.

Aprendizaje en la resolución de retos.

Actualmente, existen muchos sitios que exponen ciertos problemas los cuales son candidatos a resolverse con algún lenguaje de programación, también hay otros tipos de retos mucho más elaborados que permiten crear productos casi completos; en ambos casos se puede utilizar el conocimiento adquirido para resolverlos, o bien si no se sabe cómo resolverlos puede ser un buen comienzo para poder investigar que puede ayudar a resolver.

Aprendizaje por lectura.

La lectura de tutoriales ayuda mucho, aunque personalmente recomendaría la lectura de libros escritos por profesionales que te lleven a lo largo de lo que ellos pretenden mostrar en el texto que han escrito, sin lugar a dudas, la recomendación aquí es que adquieras libros qué contengan el contenido que deseas desarrollar y que verdaderamente te detengas a ejecutarlo.

Aprendizaje por enseñanza.

Definitivamente, para comprobar si has aprendido algo tienes que enseñárselo a alguien mas y determinar si eres capaz de explicar todos los conceptos alrededor del tema.

Seguramente existen muchas otras formas de aprender a aprender, las que he descrito aquí son las que he visto que resultan mejor en la mayoría de los equipos. Lo verdaderamente importante aquí es poder determinar que mecanismo planeas usar y el momento en el que lo vas a aplicar para adquirir por tu cuenta un conocimiento.

Capítulo 16. Aprender a fallar

Experiencia es el nombre que todo el mundo le da a sus errores.
— Oscar Wilde

Una de las situaciones más frecuentes cuando comienzas una carrera por lo menos en el software es equivocarse, sin embargo, de alguna manera podemos estar protegidos cuando desarrollamos pues con ayuda de ciertos elementos podemos crear algunas cajas de arena que nos permitan estar a salvo de nuestras acciones.

Quiero resaltar que una de las cosas más importantes es equivocarse, pero sobretodo aceptar que te equivocaste, aprender de ello, incluso documentarlo y avanzar con la certeza de saber que harás la siguiente ocasión.

Considero que muchas de las cosas por las cuales nos contratamos hoy en día con algún empleador es por el hecho de lo que conocemos y no lo que ignoramos, y culturalmente hablando es aceptable hacerlo de esta manera, pero hay que reconocer el hecho de que no conocemos ciertos elementos y que necesitamos tener un ambiente que me permita experimentar para poder fallar.

Importante será equivocarse y recuperarse rápidamente, será aun más importante comunicar al respecto de nuestros errores a los demás y hacernos responsables por ello.

Quiero que sepas que no te debes de sentir mal por equivocarte, todos hemos estado en tu lugar alguna vez y nos hemos equivocado al tomar una decisión o ejecutar alguna instrucción, incluso hoy muchos de nosotros nos seguimos equivocando, lo que quiero que sepas y que seas consciente es que cuando comentes con alguien que tiene más experiencia al respecto de tu error seguramente te comprenderá y sabrá orientarte para que sepas que hacer, algo que no deberías dejar que pase es que ocultes tu error hasta el punto en el que no puedas ni siquiera controlarlo, tal como una botella que se deja abandonada en el bosque y que puede causar un gran incendio.

Las fallas son potencialmente los elementos que engrandecen al software, especialmente hablando de innovación, en donde para hacer punta de flecha necesitas atravesar caminos que otros seguramente han evitado o no han cruzado, y que inclusive te permitirán explorar nuevos retos.

También, deberás considerar apoyarte de foros y comunidades alrededor de tu entorno que pueden ayudarte con los errores que has tenido, ten por seguro que no eres el único, ni el primero y tampoco el último que falla en su camino, y te causará asombro la cantidad de veces y contextos en los que se repite exactamente la misma situación.

Crea una red de salvación

Creo que una de las cosas que todos hacemos en algún momento es echar a perder nuestra propia computadora, ya sea porque estamos tratando de instalar nuevo software o hardware, o bien porque simple y sencillamente queremos conocer que hay dentro de todo este complejo. Y si bien, tienes un plan por si la máquina llega a fallar completamente y puedes consultar a alguien que te pueda ayudar comprarla, o sabes de algún lugar en donde puedas repararla o consultar alguna información que te resuelva el problema, has creado un plan de acción alterno en dado caso de que todo falle.

De la misma forma en el software, tienes un conocimiento al respecto de algo que has usado frecuentemente o que has experimentado hasta cierto punto y conoces en algún nivel; al momento de tratar alguna nueva idea que no funciona podrías refugiarte en este conocimiento inicial que te va a permitir sacar tu trabajo.

Anteriormente mencioné la importancia de los proyectos alternos, pues bien, es que de ellos empezarán a surgir las primeras redes de salvación pues nos habrán dado el conocimiento necesario para poder resolver problemas de un proyecto con las tecnologías que hemos experimentado, por lo tanto, es importante que lo antes posible comiences con un proyecto alterno o que por lo menos comiences tocando ciertos elementos de tecnología que en muchas partes encontrarás con guías rápidas o tutoriales que hallarás propiamente en cada sitio de cada herramienta nueva que desees conocer.

Y así como el caso de la persona que conoces para ayudarte en una emergencia, también puedes crear una red de salvación con alguna persona de tu confianza en la cual puedas informarte al respecto del quehacer en dado caso de que todo falle, inclusive hablamos de encontrar mentores en algún momento, pues bien esa persona podría ser tu mentor.

Lo importante a resaltar aquí, es el hecho de que existen formas en las cuales tú puedes arriesgarte a aprender algo nuevo e ir con la confianza de que si algo sale mal sólo tengas que invertir más tiempo.

No temas a tus errores

La mejor forma de avanzar en tu carrera con el riesgo de los errores es ser claro con todas las personas al respecto de lo que no conoces, así ellos sabrán de lo que eres capaz y lo que podría ocurrirte en algún momento durante tu camino hacia el descubrimiento de un conocimiento nuevo, inclusive algunos de ellos podrían guiarte para que en algún momento te equivoques de forma segura pero aprendas al respecto de esa equivocación.

Creada lazos de confianza con tu equipo de trabajo, las personas que te rodean, dales una prueba de tu honestidad y humildad indicando verdaderamente que para algunas tareas no estás preparado, o simplemente no conoces del tema, pero que estás dispuesto a enfrentarlo y explorarlo en base a las sugerencias que te hagan.

Una prueba de honestidad y confianza siempre será el elemento clave para que las personas que están a tu alrededor retiren el miedo de los posibles errores que puedas cometer, es decir, estas personas te protegerán de ti mismo.

Busca el error

Tu carrera no se detiene durante este inicio en dónde estás aprendiendo al respecto de ciertas tecnologías y herramientas, en definitiva, una de las formas en las que podrás aprender cualquier lenguaje o herramienta, inclusive en el trato con algún usuario o cliente, serás siempre a través de los errores.

Tendrás que buscar y crear por ti mismo redes de salvación, exponer tus valores como profesional los cuales permitirán crear relaciones fuertes con las personas a tu alrededor, y hacerles saber de que eres capaz en este momento.

Cada vez surgen más tecnologías y más formas de trabajo, y cuando las comiences a adoptar desconocerás muchas cosas y por ende cometerás errores, poco a poco te darás cuenta de que la forma en la que te equivocas impacta cada vez menos en tu carrera, y será aquí cuando puedas empezar a controlar los errores en base a las decisiones que tomes con la experiencia previa de alguna situación similar en el uso de tecnología o comunicación con clientes y usuarios.

En algún momento durante tu camino, podrás incluso reconocer riesgos que al tomarlos son directamente proporcional al beneficio o pérdida del tiempo o esfuerzo que puedas invertir, es decir, a mayor riesgo mayor beneficio, o bien una pérdida grave, lo importante será que tendrás este poder de decisión.

Parte 4: Comunicación

Capítulo 17. Métodos y metodologías

El arte es la expresión de uno mismo. ¡Cuanto más complicado y restrictivo es un método, menos oportunidad para la expresión del sentido original propio de libertad!
— Bruce Lee

Seguramente cuando empieces a desarrollar tu carrera vas encontrar en tu camino una serie de elementos que te ayudarán a administrarte en cuanto al software que estás desarrollando y también en la forma en la que diseñas soluciones a problemas en términos de código.

No pretendo ahondar en cada método o marco de trabajo existente, pues existen libros completos que hablan de ello y cualquier cosa que mencione aquí seguramente se quedará muy corta con respecto al todo que suelen ser dichos conceptos, sin embargo, si me gustaría mencionar un par de cosas al respecto del fin y lo que motiva a la gente a usar/conocer todos estos elementos.

Es importante conocer la historia de los métodos y marcos actuales, ya que así podrás comprender el valor de lo que están aportando o lo que quieren resolver, podrás comparar cada uno y la utilidad que tienen con respecto al trabajo que haces.

En definitiva creo que lo mejor que puedes hacer es aprender la esencia de cada concepto, y entre más simple sea dicho elemento mucho más sencillo será aplicarlo.

Una cosa que también debes conocer es que por lo menos hasta este tiempo, se han intentado usar formas de trabajo de elementos conocidos en las ciencias sociales y las de ingeniería, sin embargo, ninguna de ellas ha podido cubrir completamente los rubros que deben ser considerados en el desarrollo de software, siempre hay algo que se fuga y generalmente esos pequeños detalles siempre dejan un mal sabor de boca.

Al final creo que lo que pretende cada método, metodología y marco de trabajo es disciplinar a las personas.

También es importante identificar que con un poco de habilidad, destreza y conocimiento de las reglas, pues simplemente puedes romperlas y jugar con lo que hay alrededor de cada mecanismo que te permitirá hacer o lograr cosas que no habías imaginado antes.

¿Qué es la disciplina?

Un gran pensador moderno habla al respecto del tema diciendo:

"La disciplina, tarde o temprano, vencerá a la inteligencia"
— Yokoi Kenji

Y el mismo personaje indica que la disciplina se puede considerar como la suma del orden, la limpieza y la puntualidad.

Por lo menos hasta este momento existe una tendencia por parte de ciertos grupos a conocer cosas como: Scrum, Kanban, Lean, XP, Management 3.0, Crystal, entre otros, estos varian entre métodos y metodologías, debes de ser cuidadoso con lo que estás aprendiendo, es decir, identificar si es un método, una metodología o un marco de trabajo, pues a partir de ahí suelen nacer muchas cosas.

Otros elementos menos conocidos serían Programmer Anarchy, Mikado Method, MOB programming, Squadification, TDD/ATDD/BDD, Software Craftmanship, entre muchos otros, que tienen mucho que ofrecer para poder ser conjugados.

Queda claro que debes aprender los conceptos de trabajo para hacer software, y descubrir a través de tu juicio, y verás por que considero que algunos son mal usados y otros están poco sensibilizados; ahora bien, prefiero ahondar en un par de actividades basadas en dichos elementos que me han ayudado de una forma muy simple pero esencial en lo que aprendo y como avanzo en mi carrera como profesional.

Previamente, mencionamos de hacer una lista de cosas que ignoras y recomendamos atacarla, pero ¿cómo hacerlo si tengo tiempo/dinero/recursos limitados?

Es muy simple, crea tres listas:

Técnicas y/o métodos a aprender Tecnologías a incorporar / reforzar Libros por leer

En la primera lista lo que pondrás será todo aquello que tenga que ver con tus habilidades de comunicación, de equipo y humanas, que generalmente se aprende de aquellos elementos que no vinculan directamente el uso de la tecnología, es al respecto de ti como persona, por ejemplo, aprender un idioma como el inglés, implementar unidades de tiempo en tu trabajo, aprender a dibujar, enviar correos concretos, hacer resúmenes concretos, conocer gente de otras áreas, entre otros.

En la segunda lista incluye herramientas, lenguajes, bibliotecas, frameworks de una plataforma, vaya esta lista es más sencilla, es realmente lo que quieres incorporar o reforzar para crear software.

En la tercera pon aquellos libros que te han recomendado, aquellos que te gustaría a ti leer en general y aquellos que deberías de leer, pueden ser técnicos o no.

No te límites en el número de elementos por cada lista, escribe todos aquellos que te interesan.

Prioriza las tres listas en términos de lo que tienes que aprender, lo que debes de aprender y lo que te gustaría aprender, ordena cada lista en estos términos y te irás dando cuenta de tu situación.

De cada lista, enfócate en las tres primeras, no elimines las demás pero si resalta aquellas que serán prioritarias y con ello tendrás los elementos para trabajar.

Determina una unidad de tiempo de un mes y comienza a leer ese libro, a investigar de esa tecnología o técnica, asiste a reuniones donde se habla de aquello que estás aprendiendo(a estas alturas ya deberá haber alguno que te oriente), pregunta a las personas a tu alrededor, compañeros de trabajo o de clase, usa las redes sociales para acercarte a aquellas personas que consideras pueden orientarte.

Incluso con todas estas actividades por hacer, y algunas nuevas que surgirán, podrás crear un tablero de Kanban que te permitirá saber que tanto tienes y que tanto te falta por hacer para mantenerte enfocado con aquello que estas atendiendo.

Al paso de una semana, revisa todo aquello que completaste, y determina tu avance, y sólo tu sabrás si fue mucho o poco, nadie más te lo puede decir, y reflexiona de aquellas cosas que fueron bien y aquellas que no, toma decisiones con respecto a lo que tienes que hacer para la siguiente semana y listo, sigue actuando sobre ello, respeta tus decisiones y dedícales el espacio que necesitan para que sucedan.

¿Qué es lo que siempre se puede mejorar? Una vez, leí en el libro de Clean Coder de Robert C. Martin, que dedicarás 20 horas a la semana a tu carrera, y muchas personas se sorprenden por que creen que no cuentan con dicha cantidad de tiempo, ya sea por su trabajo, su situación actual, el transporte, los medios que usan, etc., sin embargo quiero reflexionar al respecto de varios hechos que si ocurren y los cuales puedes aprovechar.

Dicho texto considera que duermas 8 horas(lo cual a veces no es así, es menos), trabajes o estudies 8 horas, te quedarían 8 horas, de las cuales he conocido gente que puede pasarse en transporte público 4 horas, llevando así 20 horas, con las 4 restantes podrías dedicarle 2 a tus responsabilidades personales, amigos o actividades adicionales, te quedarían 2 horas al día, que sumadas te darían 14 horas a la semana, las casi 20 que necesitamos, y estas se las puedes dedicar a tu crecimiento, ya sea yendo a estudiar un idioma, leyendo el libro que te planteaste o practicando algún ejercicio.

Sin embargo, con todo y esto, tienes potencialmente mucho más tiempo del que consideras; he visto y escuchado gente que se queja de lo difícil que es la situación al moverse en su auto o transporte público, donde se invierte mucho tiempo, pues bien, hoy contamos con elementos muy prácticos que nos pueden ayudar a aprovechar el trayecto, mi recomendación es que durante tu viaje escuches algún podcast de tecnología que hayas descargado, o bien compres un dispositivo de lectura electrónico ligero, que te permita aprovechar incluso esos trayectos, verdaderamente es una inversión que te dará mucho más de lo que pienses que vas a gastar en ello.

Al final de todo, se trata de encontrar cada vez mejores formas de hacer las cosas, aprovechar más tu relación con las personas, el tiempo y tus habilidades para crear la mejor versión de ti mismo.

Capítulo 18. Equipos y colaboración

Ninguno de nosotros es tan bueno como todos nosotros juntos
— Ray Kroc

Durante tu carrera como profesional de software te encontrarás en diferentes situaciones que pondrán a prueba tu sentido común y tu capacidad de transmitir tus ideas, en otras ocasiones no tendrás a quién consultar directamente, en algunas otras te sentirás con menos experiencia y tal vez con poco derecho a preguntar, sin embargo, quiero mencionar algunos puntos que podrían ayudarte en algunas de las situaciones más comunes.

A través del tiempo y de la práctica podrás encontrar diferentes formas de colaborar, de aprender, de enseñar y de crear software, pero verdaderamente te digo que lo más importante de hacer colaboración comienza por uno mismo.

Aprende a trabajar solo

Algunas ocasiones, la gente se apoya de las personas que van ingresando a una organización para asignarles una responsabilidad particular sobre un proyecto, otras veces simplemente te ves obligado a trabajar por tu cuenta en algo que tienes pensado, o bien eres la parte técnica de un equipo. En todos estos casos la gente confiará en lo que tú sabes hacer y lo que podrías lograr con tus habilidades.

El hecho de que seas la única persona que está trabajando en esto no te hace superior ni inferior a algún miembro de tu equipo, simplemente te hace responsable de la parte de la ejecución técnica de un proyecto, es por eso que debes de contar con todos los mecanismos para poder resolver por ti mismo los problemas que se te presenten, pero también debes de tener la voluntad de decir cuáles son aquellas cosas que en este momento no conoces y sincerarte con aquellos que confían en ti.

Reconocer que no sabemos ciertos elementos, ayudara meramente a que el equipo de trabajo tome decisiones al respecto del tiempo que tomará hacer algo, en definitiva en muchos de los casos los conocimientos que te hacen falta serán necesarios Y deberás de invertir cierto tiempo en adquirirlos, lo único que en este momento el equipo deberá de saber es un estimado de esfuerzo por tu parte para aprenderlos.

Esto último es muy importante, pues los conocimientos son bastante nobles y puedes encontrarlos en muchos lados, sin embargo el conocimiento directo puede tener un costo al comprar un libro o asistir a un curso, que de haber leído o asistido respectivamente, pudieras avanzar con mucho mejor ritmo; dicho costo puede ser extremadamente pequeño para una organización y puede redituar demasiado tanto en el resultado del proyecto como en tu persona, por esto siempre es importante mencionar todas aquellas cosas que no conocemos, pero también hacer ver que existen opciones para adquirir conocimiento que permita avanzar en el desarrollo de un proyecto.

He podido atestiguar muchos casos en donde hubiera sido suficiente haber leído un libro, escuchado un programa, asistir a un curso o inclusive contar con un lector electrónico, para que la gente tenga las herramientas necesarias para realizar su trabajo. Necesitas esas herramientas y necesitas saber aquello que puede ayudarte a ofrecer mejores resultados, es por esto que debes de ser lo suficientemente con esto con aquello que no sabes, pero también lo bastantemente preparado para saber qué caminos tomar para adquirir los conocimientos que ayudarán a progresar en el proyecto.

En este punto, me restaría decirte que el hecho de que tú sepas más o menos que alguien no te hace mejor ni peor, es que no deberás de ser un cretino con lo que sabes, ni tampoco de forma opuesta, ser extremadamente tímido con aquello que no sabes y es necesario para ti y tu equipo.

Aprende a trabajar en equipo

Tal vez te sientas menos preciado por ser el más novato de un equipo, inclusive puedes llegar a pensar sentir que estás en cero, sin embargo, debes de saber qué tienes mucho que aportar cuando te unes a colaborar con un equipo de trabajo; ellos cuentan con tu entusiasmo y con la forma distinta que tienes deber los problemas, la cual es fresca y simple, y debes de saber que esas formas son mayormente las que algunas personas experimentadas ya no tienen.

Con lo mucho o poco que hayas hecho a lo largo de tu carrera como estudiante o inclusive en algunos otros equipos de trabajo, te has formado una opinión y un criterio, qué seguramente tendrás que desarrollar mucho más conforme vayas conociendo las cosas, pero que en este momento es necesario expresar ante los demás.

A diferencia de trabajar solo, aquí podrás ver a otras personas colaborar entre ellas y también podrás hacer preguntas, lo más importante es hacer preguntas, sumado a los elementos anteriores en donde te debes de ser honesto con lo que sabes; aquí debes de tener la suficiente congruencia y claridad para hacer preguntas y poder conocer aquello que necesitas para realizar tus actividades, mayormente podrás encontrar personas que están dispuestas a darte un espacio para explicarte todas aquellas situaciones que rodean a un proyecto, pero también debes de ser analítico con todos esos términos que irás escuchando y no conoces para después investigarlos por tu cuenta y nuevamente preguntar al respecto de si lo que tú concibes es lo que realmente se desarrolla en tu equipo de trabajo.

Anteriormente hemos hablado de “ser el peor en un equipo de trabajo”, pero nos referimos al hecho de ser siempre los más novatos en ese equipo de trabajo, y mirar a aquella gente experimentada para aprender de ellos, debes de tener formas de aprender de eso también.

Deberás de apoyarte de aquellas habilidades que has adquirido por cuenta propia, ofrecerlas como parte de lo que puedes contribuir en un proyecto, y de verdad no digo que ninguna de esas habilidades será menospreciada, desde aquella capacidad de poder ensamblar un juego en línea dentro de una red hasta algunas otras en donde puedas administrar o manejar paquetería convencional o de diseño, todas sumarán al final del día en lo que hiciste y sobretodo serán agradecidas por tu equipo de trabajo, pues es aquello que por voluntad propia aportaste para cumplir un objetivo común.

Conoce a tus compañeros, trata de involucrarte un poco más socialmente con aquellos que estarán sentados a tu lado, pues como así cuando estudiaste pasabas mucho tiempo con un grupo de personas, ahora lo harás con otro grupo de personas que están persiguiendo un objetivo común en beneficio de todos.

Conoce la forma de colaborar en un proyecto

Involúcrate, interésate, se parte del todo, no importa que sea la más pequeña de las partes, pues como una pequeña bacteria podrás propagarte y ser gran parte de un organismo.

Durante tus primeras participaciones en la creación de software descubrirás costumbres, técnicas y métodos por parte de aquellos que son parte ya de un equipo, y esperan de ti que te unas a ellos, pero también que sigas siendo auténtico con tu estilo de vida, con lo que tu eres, la autenticidad que puedas darle a tu trabajo y sumarla al equipo.

Tendrás que conocer y ajustarte a los métodos de trabajo, pero también a su vez tendrás que cuestionar por qué haces lo que haces en la forma que lo haces, pregunta cuál es el problema que se resolvió con aquello que estás replicando y sobre todo cual es el objetivo de seguir ciertas reglas o estructuras de trabajo.

Tendrás que adaptarte a las formas de colaborar, pero también ser consciente de que habrá otras, además de que existirán algunas más emocionantes que otras, ya sea dentro del mismo equipo o en otro equipo, y no me mal entiendas, ninguna es mejor que otra, sólo que las formas están en un momento en el tiempo por el contexto que están viviendo, solamente que algunas se quedaron congeladas y otras evolucionaron más rápido de lo que la gente puede pensar.

Al final no temas, deberás hacer propuestas, demostrativo y ¿por qué no?, iniciar una nueva forma de trabajo basada en lo que investigues, veas y te dicte tu sentido común para crear una disciplina de trabajo que te lleve más lejos.

En el trayecto de tu participación con cualquier equipo(o de forma individual), tendrás que adoptar, conservar y desarrollar varios valores, que del todo no son para nada nuevos, han existido desde siempre, pero han sido marcados por eras, culturas y personas; lo más cercano que hoy he podido ver que se asemeja a lo que pretendo describir como el profesional de software que empieza con lo que describo como el aprendiz de software es el código del samurai, descrito como:

  • La Rectitud: ser capaz de tomar una decisión sin vacilar. Ser justo y objetivo en toda circunstancia

  • El Coraje: afrontar el reto de tomar decisiones

  • La Bondad: ser magnánimo, paciente y tolerante

  • La Cortesía: el respeto y las buenas maneras del comportamiento

  • El Desprendimiento: actuar desinteresadamente, sin egoísmos y generosamente

  • La Sinceridad: decir siempre la verdad, defender ésta, y ser fiel a la palabra dada

  • El Honor: aprecio y defensa de la dignidad propia

  • La Modestia: no ser soberbio ni vanidoso

  • La Lealtad: no traicionar a nadie, ni a uno mismo. Ser fiel a las propias convicciones

  • El Autodominio: tener control sobre los actos, emociones y palabras

  • La Amistad: entregarse en un todo. Saber compartir y ayudar

  • La Integridad: tratar a todos por igual, defender los principios, y ser fiel a los compromisos

  • La Generosidad: dar sin pedir nada a cambio

  • La Imparcialidad: emitir juicios de acuerdo a la verdad

  • La Paciencia: es tolerar lo intolerable.

  • La Serenidad: control de los impulsos ante conflictos y dificultades

  • La Autoconfianza: creer en uno mismo

— El código samurái

No perdiendo de vista que todo lo mencionado hasta este punto siempre está enfocada a desarrollar software.

La programación hoy en día es el conjunto de conocimientos organizados para la creación de nuevos componentes de software, que transformarán la forma en cómo suceden las cosas, y cambiará la vida de las personas,

Parte 5: Consejos de los veteranos