¿Hasta qué punto de tu carrera te llevó sentirte como un ingeniero de software profesional?

Hay mucho alcance en su pregunta, dados los parámetros “primer año” y “cada pocas semanas”.

Si “cada pocas semanas” es “cada seis semanas”, entonces quizás sean nueve cosas nuevas para aprender al año. Si “primer año” significa que has estado en él unos meses, entonces quizás sean cinco cosas que has tenido que aprender.

Eso está bien y es normal. Espere ponerse al día con todos los demás en aproximadamente un año, una vez que haya comprendido la pila de desarrollo básico de alrededor de una docena de elementos: capa de persistencia (MySQL, si está usando la pila LAMP), servidor web ( Apache), servidor de alojamiento y gestión (Docker / AWS), conexiones remotas (SSH), lenguaje (PHP), control de línea de comandos y secuencias de comandos (Bash), sistema operativo (Linux), sistema de versiones (GIT / SVN / HG / CVS), sistema de prueba (PHPUnit), plataforma de entrega continua (Jenkins) y un IDE (PHPStorm). Al menos una de esas docenas de elementos se reemplaza en promedio al menos una vez al año en cualquier organización saludable. Si todos los elementos en su flujo de trabajo han estado en su lugar de trabajo durante más de una década, considere continuar.

Nunca notarás que estás al día con todos los demás, incluso una vez que sucede. Pasarás los próximos veinte o cincuenta años sintiendo que todos los que te rodean saben más que tú y solo lo estás fingiendo. Si alguna vez no siente esto, eso significa que es la persona más inteligente en la sala, lo que significa que ha superado ese papel y debe seguir adelante si desea crecer como persona y no convertirse en una persona bonsai.

Esto solo terminará una vez que te sientas cómodo admitiendo tu propia ignorancia acerca de todo, haz un esfuerzo para asegurarte de que siempre eres la persona más tonta en la sala y siempre pide consejo a todos sobre este flujo interminable de cosas nuevas y aterradoras, todo el tiempo

Resulta que todas esas personas realmente inteligentes a su alrededor asumirán que su interés en su trabajo y su facilidad de admitir que hay cosas fuera de su especialización significa que usted es uno de los expertos en tecnología y lo respetará. Y llegarán a ti con preguntas relacionadas con tu propio trabajo, y solo porque conoces las respuestas porque son cosas con las que has trabajado, considerarán que tu estado como gurú está consolidado.

La gente pensará que eres inteligente por ser ignorante, cuando realmente todo lo que querías era saber por qué la luz del disco duro parpadea cada vez que haces un sándwich o algo así.


Por otro lado, si quiere decir que ha estado trabajando aproximadamente un año y ha tenido que aprender un producto completamente nuevo cada dos semanas más o menos, eso es una señal de una empresa con problemas de gestión. Ni bien ni normal, sino patológico. Si tienen un sistema que se basa en más de 20 productos complejos, entonces tienen un sistema que nadie está calificado para mantener.

Se verá muy bien en su currículum, y podría ser que las personas que lo rodean lleven a cabo el relleno de currículum, o “RDD” (Desarrollo impulsado por currículum), utilizando tecnologías de palabras de moda para que se vea bien para su próximo trabajo, pero no Tómese el tiempo para aprender cualquiera de ellos en profundidad.

Aprender cosas nuevas es bueno . Pero hay cosas que nunca necesitamos aprender (que 24/7 no es un horario de trabajo sostenible; Pascal; cómo ser productivo con solo Ruby on Rails) No necesito aprender una segunda vez, incluso envuelto en la chapa de aprender un nuevo idioma.

Ya supe que los comentarios son malas funciones, deben ser diez líneas o menos, el fanatismo de codificación extrema lleva a un código impenetrable y dolorosamente desagradable que debería ser más claro, más inteligible y más accesible, como convertir un diccionario en miles de fichas para facilitar el acceso: debería funcionar; no lo hace Ya he aprendido que escribir en vim en lugar de en un IDE con un depurador incorporado conduce a una depuración lenta, lo que lleva a un código frágil mal depurado. Ya he aprendido que los lenguajes y los marcos que se basan en reglas implícitas en lugar del flujo de control explícito y depurable son una pesadilla tanto para depurar como para programar, que los marcos pueden hacer las cosas más difíciles si sus necesidades se extienden más allá de lo esperado por los diseñadores, eso el código que no tiene pruebas no se probará ni será comprobable, que menos es más cuando se trata de abstracción, que una declaración de cambio con mil casos a menudo es más inteligible y mantenible como diez mil líneas contiguas que destrozada en mil métodos, eso es un buen la mitad de cualquier base de código heredada puede ser reemplazada por buenas tablas de búsqueda (especialmente los conmutadores gigantes), que asignar memoria estáticamente es la opción correcta en casi todos los casos, que los hilos son generadores de van de Graaf y necesitan estar completamente aislados del resto del código, y lo más importante es que tener una base de código dependiente de muchas tecnologías de terceros solo significa que ningún desarrollador está calificado para trabajar en toda la base de código.

Pero otros han hecho lo mismo que yo y se han ido con aprendizajes muy diferentes, incluso exactamente lo contrario.

Y no necesito volver a ejecutar esas lecciones con ellos, solo para volver a aprender que no estoy de acuerdo con ellos y que trabajar en un entorno impulsado por esos diferentes aprendizajes es desagradable para mí.

Y me ha llevado 25 años aprender esa lección. Espero que les lleve menos tiempo descubrir qué es lo más cómodo para usted en un entorno de programación.

Sospecho que si este ritmo se mantiene en su rol actual, el aprendizaje que obtendrá en un año o dos es que con su currículum y experiencia, ahora puede cobrar salarios mucho más altos en una tienda de codificación con un ritmo más atento.

Comencé en Philips Research Labs desde la universidad, y como esto fue en 1977, las computadoras que realmente podía pagar eran muy nuevas.

De las 600 personas en los laboratorios, yo era la única persona a la que se le había enseñado programación, había un par de tipos que eran autodidactas, pero desde el día 1, fui el ingeniero de software profesional.

Como dice el viejo refrán: “¡En la tierra de los ciegos, el tuerto es el rey!”

Dicho esto, no creo que dejes de aprender en este trabajo. Quizás un nuevo idioma / herramienta cada pocas semanas es un poco frecuente, pero cada pocos meses no es atípico … especialmente en la tierra del desarrollo web, donde es todo lo que puedo hacer para estar al día con los NOMBRES de las herramientas más modernas y demás.

El caso es que se vuelve más fácil con la práctica. Mientras más de estas cosas sepa, más podrá obtener lo último y más sexy y decir “Oh … así es como lo hace JQuery, pero esa otra cosa es más como …” lo que sea.

No te preocupes por sentirte mal en tu trabajo. Si está 1 año fuera de la universidad, su administración lo tendrá en cuenta. Probablemente te dieron la mitad del salario de las mejores personas del mundo, y tienen que esperar que tomes las cosas con más calma y tengas más para aprender.

Si realmente le molesta, hable con su programador principal o con su gerente de línea. Tal vez pueda trabajar durante un tiempo en una parte más estable del código mientras recupera el aliento.

Sucedió cuando me di cuenta de que la cosa del “desarrollador de pila completa” es una estafa 🙂

No existe

Teóricamente, necesitaría a alguien que sea muy sólido con tecnologías frontend, back-end, API, diversas arquitecturas de bases de datos (incluido SQL), infraestructura (gestión de configuración, sistema operativo del servidor, secuencias de comandos, redes, …), seguridad, etc.

Conocí a muchas personas que se describen a sí mismas como full stack y aquí algunos ejemplos de lo que eso significa:

  • Experto en Javascript, tanto en servidor como en cliente. Sólido en HTML / CSS. Conocimiento muy limitado de la base de datos, sin conocimiento infra.
  • Desarrollador de backend. Base de datos sólida conocimiento tecnológico. Hace cosas con infraestructura. Frontend se limita a aplicar Bootstrap con HTML / CSS / Javascript básico.
  • Experto en tecnología frontend (SPA, etc.), ningún conocimiento técnico de base de datos real más allá del volcado de objetos JSON en una base de datos MongoDB no segura. Experiencia muy limitada con el desarrollo del servidor más allá de configurar un servidor de nodo básico con express.

E incluso estas personas no conocen los entresijos de cada marco en sus respectivas áreas.

He estado dos veces en la situación que describiste:

  1. Solo un líder tecnológico inexperto / malo.
  2. Trabajó para un consultor / integrador de sistemas donde las opciones tecnológicas a menudo eran dictadas por los clientes y a menudo se ve obligado a aprender rápidamente su tecnología con muy poca incorporación / capacitación.

Gran pregunta! Es probable que la respuesta de todos sea bastante diferente, dependiendo de las circunstancias de sus primeros trabajos. La respuesta corta es que la mayoría de los desarrolladores (al menos, los que no se conforman con el viejo y el viejo trabajo gruñido una y otra vez) tienden a oscilar entre “¡YO SOY DIOS AQUÍ!” Y “¡Dios mío! un fracaso ignorante tan estúpido, debería dejar esto y cavar zanjas para vivir … ”

Durante mis primeros trabajos me sentí francamente arrogante . Estaba en la cima de Mount Stupid, con un poco de entrenamiento impartido por la escuela pero sin suficiente experiencia en el mundo real ni exposición a una buena ingeniería de software, para darme cuenta de lo que no sabía. Eventualmente me caí del Monte Estúpido, me levanté y comencé el largo y duro camino por el camino del conocimiento real. Siempre fui bueno programando , es decir, haciendo que el sistema hiciera lo que quería … pero después de unos diez años de experiencia tuve la epifanía de que la buena ingeniería de software se trata en gran medida de la mantenibilidad . Eso me puso en el camino correcto por fin, y después de unos quince años (¡en total, no después de los diez!), Confiaba en mis habilidades de ingeniería de software , no solo en la programación. Por supuesto, he seguido aprendiendo más cosas que creo que debería haber sabido antes, pero he dejado de reprenderme y llamarme idiota, ignorante o fracasado …

Ha sido un tiempo muy largo para mí, pero recuerdo claramente sentir que había “llegado” cuando comencé a ver los puntos en común entre las cosas en lugar de las diferencias. Eso es difícil cuando estás aprendiendo, porque todo es literalmente nuevo. Pero eventualmente, podrás decir “oh, esto es así, así que no está mal, y puedo manejar las cosas nuevas”. Luego, más tarde, esas cosas nuevas que acabas de recoger aparecerán nuevamente en otra cosa, pero para entonces será bien conocido por usted, y nuevamente puede usarlo para establecerse.

Otra cosa que recuerdo es cuando me di cuenta de que podía usar mi juicio para ignorar o mejorar las formas aceptadas de hacer algo, y demostrar por qué una forma diferente podría ser mejor, más simple, etc. No estoy hablando de algoritmos aquí, pero más las normas culturales que se producen en las tiendas de desarrollo de larga data. A menudo comienzan a tener una actitud de “así es como lo hacemos”, y simplemente copian código o procesos sin mucho análisis.

Creo que esto comenzó a suceder aproximadamente dos años después de mi primer trabajo de programación (codificación de mainframe con COBOL y ensamblador). Podría haber sido más largo. Por supuesto, he revivido la sensación de no saber nada muchas veces a medida que he cambiado de plataforma e idioma a lo largo de las décadas, pero he ido mejorando cada vez más. Creo que si realmente amas el desarrollo de software, experimentarás algo similar (a excepción de la parte COBOL y ensamblador :-)).

Lea Teach Yourself Programming in Ten Years que da una respuesta útil. Necesita muchos años, probablemente al menos diez (y en muchos casos, incluso más).

Considere la tarea de aprendizaje como parte del trabajo de su desarrollador de software . En mi opinión, el aprendizaje es muy agradable y uno de los mejores aspectos de la profesión del software.

Si se siente estresado por el aprendizaje, debe elegir otro campo. Se espera que los ingenieros de software aprendan durante toda su vida profesional (y su gerente debe saberlo).

Véase también la respuesta de Basile Starynkevitch a Si quiero codificar para vivir, ¿cuáles son los idiomas que debo aprender y las cosas que debo hacer?

FWIW, nací en 1959, comencé a programar en 1974, obtuve un doctorado en ciencias de la computación y soy ingeniero de investigación en software. Estoy aprendiendo todo el tiempo, y realmente disfruto eso (no me siento estresado por aprender). Incluso cuarenta y dos años después de haber comenzado a programar, estoy aprendiendo y feliz por eso. Entonces, esencialmente, el desarrollo de software es aprendizaje de por vida . Dejarás de aprender cuando estés muerto (o enfermo hasta el punto de no poder aprender).

Por supuesto, aprenderá no solo herramientas y lenguajes de programación, sino conceptos más importantes.

Lea también sobre el efecto Dunning-Kruger y el principio de Peter. Ambos son relevantes para su pregunta.

Tener que aprender nuevas herramientas e idiomas cada pocas semanas (!) Probablemente sea específico para el desarrollo web y / o su empresa. No creo que sea común en otras áreas del desarrollo de software.

Dicho esto, debes (tienes que) aprender todo el tiempo ya que te enfrentas a nuevos problemas todo el tiempo como desarrollador de software. El hardware evoluciona. El software falla de una manera que no has visto antes. Tienes que integrarte con nuevos sistemas. Etc.

Llevo más de 20 años trabajando como desarrollador de software, pero no sé si me siento profesional. Soy bueno en ciertas cosas y tengo experiencia en ciertas áreas, pero hay muchas cosas / reas. No tengo ni idea de cómo funcionan o cuáles son las mejores prácticas.

Ser un desarrollador de software profesional probablemente se trata más de respetar la complejidad y el tiempo requerido para lograr algo, en lugar de dominar un cierto conjunto de habilidades.

Todavía subestimo cuánto tiempo tomarán las cosas, tanto simples como complejas, por lo que en ese sentido todavía no soy un desarrollador profesional 🙁

En mi experiencia, dependiendo del campo en el que se encuentre, de 3 a 5 años. Se trata de cuánto tiempo lleva a la mayoría de las personas resolver sus errores de novato y su arrogancia de segundo año. Los desarrolladores recién creados pueden ser técnicamente expertos en algunas áreas, pero carecerán de conocimientos específicos, sentido común y buen juicio. Se necesitará mentoría y experiencia para superar esa fase y permitirles aprender más sobre sus conjuntos de herramientas. Después de lo cual comenzarán a entender cómo hacer las cosas, pero luego comenzarán a ser “demasiado inteligentes”, lo cual es arriesgado. Necesitan aprender algo de moderación. Además, deben desarrollar el conocimiento del dominio, ya que el problema más difícil no son las herramientas, sino saber cómo aplicarlas.

Por supuesto, depende de la persona y la situación. Personalmente, no me sentiría mal, pero haría el mejor trabajo posible. Y después de aprender algunos idiomas y herramientas, encontrará que muchos de ellos son solo variaciones de un tema. Busque los patrones entre las tecnologías. Además, asegúrese de tomar vacaciones y relajarse, ya que es cuando descubro mis ideas más importantes.

Comenzaré por darle un consejo: realmente no importa si se especializa en un lenguaje de programación o no.

Sentirme profesional me llevó unos 4 años. Déjame decirte algo que todo el mundo sabe, pero la gente rara vez piensa en ello:

Un ingeniero de software no es uno debido al conocimiento tecnológico que tiene de una herramienta específica. Es ingeniero de software porque su mente es capaz de tomar ideas y crear estructuras, pensar en algoritmos e ingeniar soluciones a los problemas.

Para la parte profesional, ¿qué es profesional ? Una forma de decir que es “una persona comprometida o calificada en una profesión” pero es un poco general, ¿no?

Digámoslo así: se vuelve profesional en el momento en que se compromete, se responsabiliza y se enfoca en brindar las soluciones que su tarea específica requiere, con integridad (haciendo lo que dijo que haría) y siguiendo las mejores prácticas disponibles en su conocimiento.

Para sentirse profesional, también se requiere mucha confianza en sí mismo y constantemente desafiarse a sí mismo para crecer. La experiencia generalmente proviene de aprender que nos equivocamos, o que alguien más se equivocó, y fuimos testigos. No tengas miedo al fracaso y no te sientas mal si sucede. Haz tu mejor esfuerzo, falla, comienza de nuevo, repite … hasta que logres.

Otra cosa es: un trabajo nunca es lo suficientemente importante como para estresarse. Lo sé, el dinero es importante, pero los jóvenes en la industria de TI tienen muchas oportunidades, no te preocupes, en cambio, concéntrate en lo que quieres lograr. Cuando su trabajo establece un objetivo y lo hace suyo, suceden cosas buenas.

Durante mi entrevista de 1980, cuando me explicaron que éramos “profesionales” que vestían camisas con cuello y no jeans, para separarnos del riff-raff por hora en el piso de producción. Pero no tuve que cortarme el pelo, ya que las cosas se estaban aflojando.

More Interesting

¿Es factible la automatización industrial con Android?

¿Cuántas horas trabajan los ingenieros de software de teletrabajo?

¿Cuál es el conocimiento fundamental que debe tener un gran programador?

Como ingeniero de software que ya trabaja, ¿cuánto tiempo tomaría ser contratado por Google y luego trabajar en el equipo de Angular?

¿Cuáles son algunas buenas bromas sobre los programadores de software?

¿Qué papel desempeñan los más nuevos como ingeniero de software asociado en una pequeña multinacional?

¿Cuál es el mejor sitio para principiantes en el dominio comercial para aprender terminologías comerciales?

Cómo conseguir un trabajo en Automattic como ingeniero de software

Si soy ingeniero de software, ¿debería centrarme solo en la programación para crear riqueza o invertir mis ganancias en acciones?

¿Existen estilos de codificación claramente diferentes entre los ingenieros de software con educación india y china en Silicon Valley?

Ingeniería en Silicon Valley: ¿es cierta la siguiente generalización?

¿Cuáles son los pasos para convertirse en ingeniero de software en India?

¿Merece la pena mudarse a Holanda desde Ucrania si soy ingeniero de software?

¿Los ingenieros de software de las principales compañías tecnológicas como Google, Facebook, Microsoft, Apple, Amazon y Quora hacen preguntas técnicas / de programación relacionadas con su trabajo en un espacio como Stack Overflow?

¿Son rentables los programas / softwares gratuitos?