Ver Mensaje Individual
  #1  
Antiguo 19-07-2019
soyeduardo soyeduardo is offline
Miembro
 
Registrado: jul 2019
Posts: 42
Reputación: 0
soyeduardo Va por buen camino
Wink Como puedo distinguirme de otros programadores?

Hola a todos.

Me presento, soy un programador igual que tu(olvidemonos de titulos y seniorities), he estado en este mundillo laboral por 15+ años con un monton de clientes en partes varias del planeta, basicamente un geek que ama su trabajo, a lo largo de esta larga jornada he aprendido algunas cosas, y bueno, por azares del destino, actualmente me encargo de entrevistar y filtrar candidatos para la empresa que trabajo, y me di cuenta que varios de ellos padecen de los mismos sintomas que yo padecia otrora, por lo cual me gustaria hoy expresar estos pensamientos y compartirlos contigo, tomalos o dejalos, depende de ti, lo que sigue viene meramente de mi experiencia y observaciones en esta carrera:

- Dejemos el ego: Si algo compartimos todos los ingenieros en tecnologia es un ego tan grande como un templo, aprende a recibir un no, a recibir criticas, a escuchar, creeme, aunque no siempre son los mejores consejos, muchas veces si que aprendes algo y te pueden abrir los ojos cuando menos lo esperes; Yo lo entiendo, si alguien critica nuestro codigo, es como si alguien te gritara en la cara "Joder, que horrible es tu hijo, dios!!!", pero no lo tomemos como algo personal.

- Se honesto al venderte: Me he topado con muchos candidatos que manejan basicamente todas las tecnologias, en sus curriculums puedes ver cosas como "manejo de bases de datos, administracion de proyectos, trabajo en la nube, sistemas de integracion y pipelines, mobile, UI, backend, etc..." pero cuando llega el momento de la verdad(la entrevista) te das cuenta que no es asi, como lo notas? Bueno, eh aqui un ejemplo:

- "Sistemas de integracion, pruebas y despliegues automaticos en la nube"
- Ok, como configuraste el sistema de integracion
- Bueno, usamos jenkins y otras cosas
- Otras cosas?
- Si bueno, hay scripts que corren en Jenkins y hacen los tests y suben todo a una instancia de Amazon (AWS)
- Pero tu configuraste algo de esto o sabes como funciona?
- No, cuando llegue todo esto ya estaba configurado
- Entonces tu solo haces commit de tu codigo y el sistema hace el resto
- Si

Esto significa que no tienes idea ni de conceptos de tecnologia en la nube ni de sistemas de integracion, recuerda esto "usar algo no es lo mismo que tenre conocimiento del mismo"

- Aprende las bases: Todo el mundo puede programar, todo el mundo entiende como crear una variable, como hacer un loop y tomar desiciones usando IFs, eso no te hace un programador, aun si tienes 20 años haciendolo, no importa si puedes hacer lo mismo en 10 lenguajes de programacion distintos, necesitas las bases para entender a profundidad como funcionan las cosas, he aqui algunos ejemplos:

Ejemplo #1

- Entonces eres programador Java
- Asi es, desde hace 3 años, me considero de nivel avanzado
- Ok, tengo aqui una web-app escrita en java y con maven, podrias importarla y trabajar en un ejemplo que te mostrare a continuacion?
- No, yo programo en NetBeans
- Pero NetBeans es un ambiente de desarrollo integrado(IDE), no una tecnologia o un lenguaje
- Si pero es que es lo que usabamos en la empresa anterior y todo el mundo lo usa

Ejemplo #2

- Veo que usas Spring en tus proyectos, porque?
- Porque es simple para desarrollar
- Ya veo, en que es mas simple?
- Para desarrollar
- Mmm, me podrias dar un ejemplo?
- Bueno, para inyectar dependencias
- Pero tambien Java nativo puede hacer eso, entonces, porque usar spring?
- Porque es mas facil

Ejemplo #3

- En mi actual trabajo estamos migrando las aplicaciones a restful y microservicios
- Y porque?
- Porque es mas simple
- En que sentido?
- Pues descomopones un proyecto en proyectos pequeños
- Ya veo, y porque REST y no SOAP?
- Porque es mas simple, y es mas facil leer un archivo en formato JSON o YAML
- Alguna otra razon?
- No, creo que el hacerlo simple fue el motivo

Ejemplo #4
(En la empresa que trabajaba)
- Oye, porque no hay unit test para las clases de este proyecto?
- Es que no eran necesarias, ahora las hacemos porque la herramienta automatizada lo exije para que podamos deployar, es una molestia
Sobra decir que los tests eran malisimos y existian unicamente por temas de compliance, hoy en dia muchas empresas y personas siguen pensando de esta forma.

Todos estos son ejemplos de personas que trabajan en lo que se les asigna sin hacer preguntas o cuestionarse el porque de las cosas, se conformaron con respuestas como "ah porque es mas sencillo", el consejo que me hubiese gustado recibir cuando comenzaba y que hoy dia te ofrezco es: no aprendas lenguajes de programacion, aprende las bases de el diseño, como funcionan y porque, una vez que tengas estos conocimientos, no importa el lenguaje que utilices, te daras cuenta que estos conceptos aplican de forma universal, la unica diferencia escencial sera la sintaxis, usa lecturas basicas al respecto, "the mythical man month" es una de las lecturas escenciales que te puedo recomendar al respecto, aplica lo que ahi dice, veras como facilita tu vida, busca alguna certificacion como la de Java programmer, te ayudan con conceptos base, has ejercicios de codigo(no importa el lenguaje), hay paginas como hackerRank que ofrecen este tipo de ejercicios, son mas relacionados a algoritmos y optimizar soluciones, creeme, para ascender en tu carrera esto es vital, cualquiera puede codificar un loop y crear objetos, hacerlo eficiente, y rapido no cualquiera.

- Cuando aprendas las bases, aplicalas: Algo que me ocurria mucho era que leia cosas como "los principios SOLID" y en mi mente era "wow, suena bien, tiene sentido", pero jamas lo aplicaba, por alguna razon conservaba las cosas separadas, asistia a cursos de diseño artesanal y me di cuenta que lo mismo ocurria con mis compañeros, siempre nos quejabamos con el profesor con diferentes preguntas pero siempre referidas a un tema "lo que dices suena genial pero no se puede aplicar a la realidad", honestamente lo creia de corazon, que equivocado estaba.

- No hagas tests para tu codigo: Esto deberia ser una ley, no tienes que hacer tests para tu codigo, el test debe existir antes y ser el que te indique lo que debes codificar. Muchas veces cuando entrevisto candidatos y hacemos una prueba de codigo noto un detalle importante, todos quieren codificar al instante sin tener un pensamiento especifico de como resolver el tema, en nuestras cabezas pensamos "conforme lo voy codificando voy decidiendo como resolverlo", si empiezas a practicar haciendo tests antes de codificar la solucion comenzaras a corregir este instintivo defecto(te recomiendo leer y comenzar a aplicar "TDD").

- No te apegues a un lenguaje y te vuelvas devoto del mismo: "Yo soy programador iOS y no hay nada mejor que swift", enfocate en aprender conceptos que aplicaras a cualquier lenguaje(programacion orientada a objetos/eventos, patrones de diseño[lo mas escencial y bello que puedes conocer], expresiones regulares, buenas practicas, normalizacion(Bases de Datos), TDD).

- Aprende a mano limpia: Como programador java, he visto muchos candidatos que si les quitas la herramienta(Eclipse, IntelliJ, etc) no tienen ni idea de como compilar o ejecutar una clase/aplicacion, o de como funciona, incluso conozco personas que si les quitas la herramienta grafica, no tienen ni idea de como funciona GIT, sin embargo, lo utilizan cada dia. Antes de usar frameworks y herramientas que te simplifiquen el trabajo, aprende que es lo que estan simplificando.

En fin, solo senti que tenia que decirlo, me hubiera gustado escuchar esto(y entenderlo a plenitud) cuando era joven, por ello que lo comparto hoy dia, jeje, bien dicen "La juventud es una enfermedad que se cura con el tiempo".

Última edición por soyeduardo fecha: 19-07-2019 a las 17:12:50.
Responder Con Cita