Archivo de la etiqueta: desarrollo de software

Cómo crecer tu carrera en software de manera responsable

En el mundo del desarrollo de software, muchas veces nos centramos en la tecnología y en aprender nuevos lenguajes de programación o herramientas.

Sin embargo, hay un aspecto que suele pasar desapercibido: la agencia que cada desarrollador tiene sobre su carrera profesional. En este artículo, exploraremos la importancia de tomar las riendas de nuestro propio crecimiento y éxito.

Elegir dónde y con quién trabajar: un aspecto clave

Es común que los desarrolladores pongan mucho énfasis en la tecnología con la que trabajarán, pero elegir dónde y con quién trabajar es igual o más importante. Un ambiente laboral tóxico o poco estimulante puede frenar nuestro desarrollo profesional, además de afectar nuestra calidad de vida y salud mental. Por ello, es crucial investigar y seleccionar cuidadosamente las empresas y equipos con los que colaboraremos, asegurándonos de que compartan nuestros valores y objetivos.

Sí, está bien que una de tus metas sea trabajar con la tecnología de moda — llámese Elixir, Clojure, o TypeScript. Pero toma en cuenta que toda la tecnología es una ola, nada más. Se va a ir, y mañana habrá algo nuevo que será la sensación.

¿Sabes qué es lo que no se va tan fácil? El daño de sufrir burnout por haber trabajado en una empresa sin visión clara, con comunicación horrible, y con liderazgo tóxico.

No te quemes de a gratis.

El éxito es encontrar un camino hacia delante

Todos enfrentamos obstáculos y desafíos en nuestra carrera profesional. El éxito no se trata de tener un camino perfecto y libre de problemas, sino de nuestra habilidad para encontrar soluciones y avanzar entre las opciones que realmente tenemos a nuestro alcance.

Ser resilientes y adaptarnos a las circunstancias nos permitirá seguir creciendo a pesar de las dificultades.

Las habilidades blandas: el secreto para crecer profesionalmente

Es fácil caer en la trampa de pensar que, como desarrolladores, solo necesitamos mejorar nuestras habilidades técnicas. Pero las habilidades blandas, como la comunicación, el trabajo en equipo y la empatía, son extremadamente importantes para nuestro crecimiento profesional. Estas competencias nos permiten colaborar eficazmente con nuestros colegas, resolver conflictos y generar soluciones creativas a los problemas que enfrentamos.

Aparte, toma en cuenta que cada día que pasa, si lo único que sabes es programar, tu carrera está en más riesgo.

Impacto vs. conocimiento: crecimiento exponencial

Medir nuestro progreso solamente en función de cuánto sabemos puede hacernos crecer de manera lineal, es decir, mejorar poco a poco en nuestras habilidades técnicas sin realmente avanzar en nuestra capacidad para resolver problemas reales y generar valor. Sin embargo, si nos enfocamos en buscar tener un mayor impacto en nuestro trabajo y en la comunidad, nuestro crecimiento será exponencial. Colaborar en proyectos de código abierto, compartir nuestro conocimiento con otros y contribuir al desarrollo de nuevas soluciones nos ayudará a aumentar nuestra influencia y a expandir nuestras oportunidades profesionales.

La responsabilidad es tuya

La responsabilidad de crecer en la carrera de desarrollo de software va más allá de aprender nuevas tecnologías y herramientas. Debemos elegir cuidadosamente dónde y con quién trabajamos, ser resilientes ante los desafíos, desarrollar nuestras habilidades blandas y buscar tener un mayor impacto en nuestro entorno. Al tomar las riendas de nuestra carrera profesional, no solo mejoraremos como desarrolladores, sino que también contribuiremos al crecimiento de nuestra comunidad y de la industria en su conjunto.

Convertirte en manager no es un ascenso. Es un cambio de carrera.

Si en tu empresa te quieren “promover” a manager porque eres la persona con mejores capacidades técnicas de tu equipo: felicidades. Acabas de ser víctima del Principio de Peter, que dice:

“En una jerarquía, todo empleado tiende a ascender hasta su nivel de incompetencia: la nata sube hasta cortarse.”

¿Hiciste un buen trabajo como Jr.? Felicidades, ahora eres Mid. ¿Seguiste haciendo un buen trabajo? Genial, ahora eres Sr. ¿Sigues siendo excelente en tu trabajo como desarrollador? Felicidades, ahora tienes un conjunto de responsabilidades para las que no estás preparado, y probablemente ni siquiera quieras tomar.

Las habilidades fundamentales que te hicieron tener éxito como contribuidor individual, no son las mismas que te harán tener éxito como manager.

Escribir “buen” código no se traduce en capacidad para analizar y resolver problemas organizacionales. Saber escoger el lenguaje de programación o framework adecuado para resolver un problema de arquitectura, no se traduce en saber entender las necesidades personales y aspiraciones profesionales de tu equipo, y alinearlas con las de la empresa.

Probablemente, dentro de tu organización, el convertirte en manager venga con aumentos salariales o mayores prestaciones. Pero ten en cuenta que es un trabajo completamente diferente. Convertirte en manager no es un ascenso. Es un cambio de carrera completo. Puede que estés trabajando en tu misma industria; incluso hasta con el mismo equipo. Pero tus responsabilidades ahora son completamente diferentes.

Antes de aceptar el “ascenso”, pregúntate: ¿sabes a qué te estás metiendo? ¿Estás consciente de las implicaciones del nuevo rol? Y más importante aún, ¿quieres hacerlo?

No tener claras las respuestas a estas preguntas te pone en riesgo de sufrir burnout.

Estarás jugando otro juego. Uno que no conoces. ¿Cómo vas a ganar?

No todas las empresas que dicen querer contratar Seniors lo dicen en serio

Un verdadero Senior no va a caer en la trampa de simplemente ir a implementar cosas sin pensar en sus posibles consecuencias e implicaciones a largo plazo. Un Senior no va a aceptar mediocridades, y va a presionar para mejorar procesos — no solamente dentro de su área.

Pocas organizaciones están preparadas para lidiar con el pushback que esto representa.

Muchos que dicen querer contratar Seniors, en realidad lo que quieren son desarrolladores “nivel Mid” con muchos años de experiencia resolviendo cierto tipo de problemas. Pero no quieren Seniors.

¿La carrera de un desarrollador de software se termina a los 35?

Cuando hablo de Soft Skills con “programadores de hueso colorado”, la reacción más prevalente es la de “¿por qué dejaría de programar, si es lo que más me gusta en la vida?” Pero la medida en que te guste algo no es siempre indicativo de los ánimos que tienes de hacerlo.

Este artículo explora lo que sucede con algunos desarrolladores de software cuando cumplen 35 años. Esta es una edad interesante porque, digamos, si iniciaste a programar en tus veintes, a los 35 es probable que ya tengas una década, o más, de experiencia. 10 años haciendo lo mismo es suficiente tiempo como para comenzar a cuestionarte si te ves haciéndolo por otros 10. Para algunos, la respuesta es sí. Para otros, como yo, la respuesta es un resonante no.

Algunas de las conclusiones a las que llega el autor:

  • Dejas de llamarte “programador” y comienzas a especializarte en resolver cierto tipo de problemas para el mejor postor
  • Pones tu negocio o startup
  • Te sales de la industria completamente

Mi objetivo con Soft Skills para Devs, y con este Newsletter, es ampliar el panorama de los desarrolladores de software de LATAM. Lo que quiero es ayudarte a que desarrolles habilidades que te permitan tener opciones para hacer un cambio en tu carrera cuando ya no quieras programar. ¿Estás lista?

Enlace: https://www.dottedsquirrel.com/dev-careers/

Software Habitable

En la industria del software estamos constantemente hablando de cómo hacer mejor software. Pero rara vez nos detenemos a preguntarnos qué, realmente, es lo que significa que una aplicación sea mejor.

El autor de esta publicación ofrece una forma interesante para pensar acerca de esto: los programadores deberíamos de crear software habitable.

La habitabilidad es la característica de un código fuente que le permite a programadores, codificadores, arregladores de errores y personas externas, integrarse a trabajar en él entendiendo su construcción e intención, para poder cambiarlo cómodamente y con confianza.

Al crear software habitable, las personas que trabajan en él tendrán más oportunidades de crear valor para sus usuarios.

Algunas cosas que contribuyen a hacer que un software sea inhabitable, por ejemplo: abuso de abstracciones innecesarias, sobreingeniería y atajos innecesarios.

Enlace: http://akkartik.name/post/habitability

Cómo vencer el síndrome del impostor

Todos sufrimos del síndrome del impostor.

Tan solo basta con hacer una búsqueda en Twitter para darte cuenta de que no estás sola. A unos nos vuelve paranoicos. A otros nos paraliza completamente, mientras que a varios simplemente nos atormenta en cada decisión que tomamos en nuestra vida profesional.

Cuando hablamos del síndrome del impostor también estamos hablando, hasta cierto punto, de vergüenza. Seguramente a ti también en tu niñez te dijeron que estar mal es algo que deberías de evitar a toda costa. Probablemente en varias ocasiones te dijeron, como a mí, que si no tenías algo bueno que aportar, mejor no aportaras nada.

Vivir el día a día con síndrome del impostor es agobiador. Sobre todo si trabajas en equipo. Y aún más, si trabajas en un ambiente ultra competitivo como lo es el desarrollo de software. El miedo de exponer una idea y quedar mal, como el que no sabe. El síndrome del impostor hace que nada de lo que tienes que aportar pueda salir a la luz. Pero todo esto se puede prevenir.

Considera lo siguiente: así como no mandarías código a producción sin probarlo o validarlo, tampoco deberías de convertir ideas en código sin antes pulirlas con tu equipo.

La próxima vez que sientas miedo de quedar “mal parada” por compartir tu idea de solución con el resto del equipo, recuerda: eso también es hacer software. Estás probando la viabilidad de la idea. Si escribir tests te ayuda a confiar más en tu implementación, exponer tus ideas con tu equipo y recibir feedback de ellas te ayuda a confiar más en que vas por el camino correcto.

Vencer el síndrome del impostor es tarea de todos

Si bien cada quien lo experimenta de manera diferente, todos en algún momento de nuestra vida nos hemos identificado (o nos vamos a identificar) con este síndrome. Creo que es una de las pocas cosas en las que todos podemos estar de acuerdo: el síndrome del impostor es algo que tenemos que tratar.

Y considero que es responsabilidad de todos los que estamos en esta industria buscar maneras de erradicarlo.

Recientemente, me compartieron una técnica que ha hecho maravillas para mí y mis equipos. Nos ha ayudado a bajar la barrera de entrada a discusiones, y al mismo tiempo, ha ayudado a que las soluciones a las que llegamos como equipo sean más diversas y ricas en perspectivas. La técnica se llama Wrong Answers Only, o “respuestas incorrectas únicamente”, pero me gusta más el nombre en Inglés.

Wrong Answers Only se trata de poner como regla, en cualquier discusión de equipo, que únicamente se vale compartir respuestas incorrectas.

La barrera de entrada ahora es mucho más baja, porque ahora lo que no quieres es estar en lo correcto. Dale rienda suelta a tu imaginación, y di lo primero que se te venga a la mente. Conforme va avanzando la reunión, la abundancia de ideas que no están atadas a la expectativa de tener que estar bien comienza a ofrecer un panorama mucho más amplio y diverso de soluciones posibles.

Poco a poco, utilizando esta técnica, los miembros del equipo ganamos confianza en nosotros mismos y aprendemos que estar mal es parte del proceso de aprendizaje. Y mientras más nos demos cuenta de lo anterior, más se rompe la asociación de que estar en lo incorrecto es un juicio directo sobre nuestra valía y capacidades como profesionales.

7 razones por las que tu carrera en desarrollo de software no ha despegado

Si estás leyendo esto es probable que te sientas estancado o estancada. Sí, has estado desarrollando software, tal vez profesionalmente, por algún tiempo. Pero ese breakthrough aún no llega.

Aquí hay 7 cosas que estás haciendo, y que te están metiendo el pie sin que te des cuenta.

  1. No tienes bien definido qué quieres hacer, o en quién te quieres convertir. Te gustaría dominar cierta tecnología, pero no tienes claro por qué, ni para qué usarás ese dominio una vez que lo obtengas. Básicamente estás aprendiendo por aprender.
  2. Estás construyendo en aislamiento. Crees que la solución es más importante que el proceso, cuando en realidad en el desarrollo del problema es donde se encuentran los verdaderos aprendizajes. Nada crece en un vacío.
  3. Estás acumulando conocimiento. Le das más valor a aprender cosas nuevas, que a aplicarlas y experimentar. En algún momento tienes que cerrar tus 200 cursos de Platzi y ponerte a resolver problemas reales. goto: 1.
  4. Te quedas con la textura de las discusiones, e ignoras el bigger picture. ¿Qué importa más, si ganó tu propuesta o si la solución acordada impacta de manera positiva al equipo?
  5. Le das demasiada importancia a los detalles de implementación. Sí, es importante el framework que quieres usar, o la arquitectura con la que quieres resolver el problema. Pero nada es más importante que resolver el problema a la mano.
  6. Aún le tienes miedo a tu ego. No quieres fallar en público, le temes a compartir tu proceso, y prefieres llegar con soluciones ya armadas. Crees que la opacidad de tus respuestas es una ventaja, porque te hace esencial. En realidad te hace un punto de fallo dentro del equipo.
  7. Estás aplicando demasiada lógica. Tratas a las personas con la misma frialdad con la que diseñas algoritmos. No es sorpresa que la tengas difícil a la hora de generar capital social.

Haz pequeños ajustes en estas 7 áreas, y verás cómo por arte de magia las oportunidades de crecimiento profesional comienzan a aparecer ante ti.

5 Soft Skills para dominar si desarrollas software

Los Soft Skills son imprescindibles para cualquier desarrollador de software. Puede que seas capaz de codificar mientras duermes, pero si no tienes la capacidad de comunicarte te encontrarás en una situación incómoda. Y a menos que pretendas trabajar por tu cuenta para siempre, no es lo ideal.

Un estudio en el estado de Sonora demuestra que los mismos desarrolladores de software dicen que los Soft Skills son igual o más importantes que conocer ciertas tecnologías.

Este artículo te enseñará los Soft Skills principales que pueden ayudarte a hacer o deshacer tu carrera como desarrollador de software.

Comunicación

La buena comunicación es una habilidad esencial para cualquier trabajo profesional. Pero es especialmente importante para los desarrolladores de software que son serios con su trabajo. Desarrollar software, a final de cuentas, se trata de resolver problemas — para y con otras personas.

No importa si trabajas por tu cuenta como freelancer o en un equipo de desarrollo, vas a tener que comunicar ideas complejas a otras personas. Lo único que cambia es el medio. El diseño de una API comunica cómo debería ser utilizado tu servicio. Cómo redactas reporte de un bug comunica muchas veces no solamente lo que se debe de resolver, sino cómo debería de resolverse.

Los desarrolladores de software, como personas lógicas que somos, tendemos a pensar en términos de unos y ceros. Pero tener esta misma mentalidad al momento de comunicarnos con otras personas, especialmente personas que no tienen nuestra misma formación, no hace otra cosa más que perjudicar nuestra carrera.

Aprende a comunicar, y verás cómo tu código e ideas se vuelven 100% más efectivos.

Negociación

Los desarrolladores de software también tendrán que negociar con personas. Es raro el escenario en el que no tendrás la necesidad de discutir con otra persona para resolver un problema.

Si trabajas eres freelancer, por ejemplo, tendrás que negociar fechas de entrega, alcance del proyecto y hasta tu compensación. Si eres parte de un equipo, tendrás que encontrar la manera de llegar a acuerdos con respecto a metodologías de trabajo, herramientas y hasta qué convenciones seguir.

¿Usarás tabs o spaces?

¿Por qué deberíamos de usar Ruby y no Elixir?

¿Deberíamos desarrollar este feature antes de refactorizar el sistema?

No hay manera de que te escapes de tener que negociar cuando desarrollas software. Incluso, si lo piensas, diseñar una API se trata meramente de negociar qué es lo que el usuario te debe de dar vs. lo que tú le vas a regresar.

Ser excelente negociando hará tu vida desarrollando software mucho más productiva. No

Habilidades interpersonales

Empatía, tacto, persuasión, liderazgo, entre otras. Las habilidades interpersonales son importantes cuando hay que interactuar con otros miembros del equipo para que no se sientan molestos o disgustados por tu presencia. No es divertido tener un compañero grosero, combativo, que se queja de todo y no sabe cómo adaptarse al grupo.

Pero, yo diría, son mucho más importantes porque desarrollar software, al final del día, se trata de resolverle problemas a las personas.

Muy rara vez se desarrolla un software para que funcione en un vacío. Es casi seguro que si estás desarrollando una aplicación o sistema, o implementando un algoritmo, es porque alguien, en algún lado, necesita resolver un problema. Es aquí donde las habilidades interpersonales marcan la diferencia entre un software mediocre (dogmático, apegado a las ideas del programador) y un software realmente útil (usable, que resuelve los problemas del usuario).

Cuando desarrollamos software tenemos que tener siempre en mente a nuestro usuario. Por más novedosa que sea nuestra arquitectura, o más eficiente sea nuestro algoritmo — nada de eso importa si no estamos resolviendo el problema de la persona que usará nuestro desarrollo.

Sucede exactamente lo mismo en el contexto del equipo de desarrollo: ¿de qué sirve que seas el que más sabe de algún tema si nadie quiere trabajar contigo?

Eres una persona, y te mueves en un mundo de personas. No dejes que tus habilidades interpersonales se echen a perder.

Trabajo en equipo

Complementando a las habilidades interpersonales, viene el trabajo en equipo. Que es similar, pero no lo mismo. El trabajo en equipo es uno de los Soft Skills más citados en currículums, pero no muchos saben realmente qué significa.

Más allá de poder comunicar ideas complejas a tus compañeros, y de poder “llevar la fiesta en paz”, la habilidad de trabajar en equipo se podría resumir en la siguiente frase: tú no eres lo más importante del equipo.

Debes de ser capaz de observarte dentro del contexto del equipo, y ver cómo puedes apoyar, no cómo puedes obtener más control. Un desarrollador que sabe trabajar en equipo gestiona soluciones, delega responsabilidades y apoya en lo que puede. Pero nunca bloquea esfuerzos, acapara responsabilidades o tiene actitud de “quítate, yo lo hago”.

Seguramente has escuchado el término 10x Programmer — hace referencia a un programador que hace el trabajo de 10 personas, presumiblemente porque es tan bueno. Pero piénsalo de esta manera: un 10x Programmer no solamente hará el trabajo de 10 personas, sino que hará que 10 personas no quieran trabajar con él o ella. Y, a largo plazo, esa es una posición en la que no quieres estar. Muy bueno tirando código, pero insoportable al momento de colaborar.

No seas ese rockstar.

¿Quieres ser un 10x Programmer? Trabaja en equipo y haz que 10 personas crezcan para cumplir sus metas y objetivos.

Paciencia

Seguido me preguntan qué es lo que se necesita para poder desarrollar software profesionalmente. Muchas personas no se esperan que la respuesta que usualmente comparto es: paciencia. Un Soft Skill que usualmente pasa desapercibido porque es personal.

Desarrollar software es como armar un rompecabezas en tu cabeza. Solamente que no sabes cómo se debería de ver el diseño final, ni qué tamaño debería tener, ni si está en la orientación correcta. Si te frustras fácilmente, no sabes cómo lidiar con incertidumbre, y buscas la gratificación inmediata de todas tus experiencias, probablemente serás miserable desarrollando software.

No solamente deberás ser paciente con tus propios problemas — cuando estés intentando encontrar un error en un programa o aprendiendo una nueva tecnología. También deberás de ser paciente con personas que no hablan el mismo idioma que tú, o que no tienen la misma experiencia empírica. Tendrás que explicar conceptos complejos a personas que no saben de lo que estás hablando, y te harán preguntas sin sentido. Deberás lidiar con cientos de intentos fallidos para configurar alguna parte de tu stack.

Desarrollar software es un ejercicio de paciencia constante.

Si no eres paciente contigo mismo, y con las personas que te rodean en tu industria, probablemente la pasarás mal.

Y si estás leyendo esto porque apenas estás considerando iniciar tu carrera desarrollando software, te ofrezco una disculpa. Sé que puede sonar nada divertido, y hasta como una advertencia de que no lo hagas. Pero, por experiencia propia te digo: hasta las veces que perdí la paciencia y lloré porque no podía configurar una simple tabla en mi aplicación de iOS valieron la pena. Porque durante los siguientes 10 años pude aprender de los mejores, viajar por el mundo, hablar en conferencias y mi código hoy corre en cientos de millones de dispositivos. Porque fui paciente.