Casi suena peyorativo, ¿no? Pero la distinción entre desarrolladores de software senior y junior está integrada en nuestros trabajos y títulos de trabajo. Ya sea que lo llamemos de nivel de entrada o poco más, distinguimos entre las personas que recién comienzan sus carreras y las que han estado cerca por un tiempo. Todos todavía estamos aprendiendo (una esperanza), pero las personas de nivel de entrada todavía están aprendiendo lo elemental, y las personas mayores tienen una decano responsabilidad, próximo con el potencial de cometer errores más grandes. Los desarrolladores de nivel de entrada pueden hacer una programación básica, pero su conocimiento no es necesariamente profundo o amplio. A medida que avanzan con destino a la fuerza sindical, necesitan profundizar su conocimiento y convertirse en parte de un equipo que escribe un sistema de software para un cliente que paga. Ese nuevo rol requiere desarrollar un nuevo conjunto de habilidades.
Las habilidades para los desarrolladores de software junior y senior varían enormemente, pero hay algunos temas comunes. Para un desarrollador junior, esperamos:
- Sencillez con uno o dos lenguajes de programación y sus bibliotecas más importantes
- Sencillez con un pequeño número de algoritmos básicos
- Sencillez con un sistema eficaz del flanco del servidor
- Sencillez con herramientas comunes, como git
- Experiencia limitada trabajando con equipos, en el contexto de proyectos de grupos pequeños
Por supuesto, los individuos igualmente varían enormemente, desde programadores autodidactos que han hecho contribuciones sustanciales a proyectos de código franco hasta aprendices de botas de inicio que pueden no entender la diferencia entre JavaScript y React. Sin confiscación, si somos honestos sobre las habilidades que esperamos de un desarrollador junior, esta serie muestra aproximadamente lo que esperaríamos, no cinco primaveras de experiencia en la escritura SQL.
Para los desarrolladores superiores esperamos:
- Sencillez con los idiomas en uso en sus empresas y un profundo conocimiento de al menos uno
- La capacidad de comenzar con un nuevo estilo de programación en días
- Experiencia trabajando con equipos, grandes proyectos y software heredado
- Observar la comprensión de los requisitos empresariales
- La capacidad de mentor de los empleados más nuevos
- Conocimiento total del entorno de herramientas
- Habilidades de depuración serias
- La capacidad de tomar responsabilidad Para decisiones importantes
Los idiomas positivamente no son el núcleo de la informática. Pero son una aprieto. Son una forma de decirle a una computadora qué hacer. En el interior de los límites, los lenguajes de programación son todos similares. Sí, escucho gritos, especialmente de los defensores de la programación utilitario, y otorgaré que hay dos o tres clases principales de lenguajes de programación, y que cada estilo expresa ciertas ideas importantes sobre el software de escritura. Sin confiscación, para un desarrollador senior, nos importa menos una larga serie de idiomas que la intimidad con las ideas. Vemos lo mismo con los idiomas humanos: una vez que hayas aprendido un idioma extranjero, ilustrarse un segundo es más hacedero, y una tercera o cuarta es aún más hacedero. Llegas a entender cómo funcionan los idiomas. El idioma en sí no es tan importante como ilustrarse a ilustrarse rápidamente. Los programadores senior igualmente conocen el profundo secreto de los lenguajes de programación: se negociación tanto de comunicarse con los humanos como de comunicarse con máquinas. La computadora no conoce C ++ y no le importa si el software fue escrito en Java, Haskell o Basic; No importa cómo se escriba el software, ejecutará el código de la máquina binaria. Los humanos necesitan comprender lo que sus programas están diciendo a una computadora que haga porque lo que sea que escriba ahora necesitará ser mantenido por determinado más tarde.
¿Qué pasa con los algoritmos? ¿Es importante ilustrarse sobre los diferentes algoritmos de clasificación, por ejemplo? La clasificación es importante, pero no por las razones que un desarrollador junior podría pensar; Casi nadie necesitará implementar un cálculo de clasificación, excepto como control. La clasificación es importante porque es hacedero de describir y tiene muchas soluciones diferentes, y cada alternativa tiene propiedades diferentes. Las soluciones representan diferentes enfoques para la resolución de problemas. Es posible que los programadores no necesiten aprender cómo clasificar, pero cada programador necesita comprender cómo resolver problemas con “dividir y conquistar”, cómo usar la recursión, cómo estimar el rendimiento, cómo ejecutar en una estructura de datos sin crear una nueva copia, hay todo tipo de técnicas e ideas incrustadas para clasificar que un programador positivamente tiene que aprender. Pensar que ese tipo es innecesario solo porque una función de clasificación () está en las bibliotecas de cada idioma es, bueno, un signo de un programador junior que nunca se convertirá en carencia más.
Los idiomas y los algoritmos son apuestas de mesa; No son las marcas distintivas de un desarrollador senior. Esperamos que un desarrollador senior tenga un conocimiento más amplio y más profundo, pero lo que hace que un desarrollador senior sea todo lo demás en la serie: trabajo en equipo, la capacidad de trabajar en grandes proyectos, comprender los requisitos empresariales, la tutoría y mucho más que no hemos enumerado. Podemos resumir diciendo “experiencia”, pero eso no es positivamente útil. ¿Qué enseña la experiencia? La experiencia comienza con el registro de que la programación no se negociación fundamentalmente de los lenguajes de programación. Los lenguajes de programación son necesarios, pero las personas mayores saben que la esencia de la programación es la resolución de problemas: comprender los problemas y descubrir cómo resolverlos de forma estructurada y repetible. Como dijo el profesor de informática de Stanford, Mehran Sahami conversación con Andrew Ng,1 “Te enseñamos Python, pero positivamente estábamos tratando de que entiendas cómo tomar problemas y pensar en ellos sistemáticamente”.
Las personas mayores igualmente reconocen que la comprensión de los problemas no solo se les ocurre un cálculo. Es comprender quién quiere que se resuelva el problema, por qué quieren que se resuelva, quién está pagando por el problema que se resuelve, qué partes del problema ya se han resuelto, qué diferentes tipos de soluciones son posibles, ya sea que esas soluciones puedan prosperar o extender, y mucho más. Los proyectos de software siempre tienen un pasado y un futuro, y casi siempre tienen un componente político. Un desarrollador senior entiende que el plan flagrante tiene que comprometerse con las soluciones del pasado y prepararse para los problemas y soluciones del futuro. Esperamos que un desarrollador junior haga un trabajo útil en una pequeña parte de un plan conspicuo; Esperamos que un senior entienda esos problemas más grandes: guerrear con la historia del plan y cerciorarse de que sea mantenible en el futuro.
Los desarrolladores superiores igualmente ejercen liderazgo, aunque no necesita ser formal. Por otra parte de liderar formalmente un rama, el liderazgo incluye la tutoría, trabajar acertadamente con los equipos, ser la voz de la razón cuando las cosas se calientan, tomando las decisiones difíciles y ser ampliamente informado sobre el entorno de la estructura: ¿cuáles son las herramientas? ¿Qué bienes están disponibles? ¿Cuáles son la política organizacional? Un líder es determinado a quien los miembros del equipo acuden con preguntas.
Los desarrolladores senior tienen habilidades técnicas ganadas con esfuerzo que van más allá de la capacidad de juntar nuevos lenguajes de programación rápidamente. Tal vez sea un mito, pero los desarrolladores experimentados parecen tener la capacidad de mirar un código de buggy y afirmar: “Eso parece sospechoso”. Conveniente a que han trillado mucho, saben lo que se ve acertadamente y qué no. Saben dónde es probable que se esconden los errores. Han resuelto muchos problemas y saben qué soluciones probablemente funcionen, y saben cómo probar diferentes enfoques.
Un desarrollador junior se convierte en un desarrollador senior a través del tiempo, la experiencia y la orientación. Se necesita crecer más allá de las tareas del cátedra y los proyectos de grupos pequeños para trabajar en software que ha estado en ampliación durante primaveras y aún estará en ampliación cuando se haya ido. El ampliación de software profesional casi siempre implica código heredado; La gran decano parte del ampliación de software no está construyendo poco nuevo, pero mantiene poco que ya existe. Debe pensar en cómo se ajusta cualquier código que escriba con lo que ya hay y igualmente con lo que podría estar allí en el futuro; Tienes que pensar en diseños y arquitecturas más grandes. Y esto lleva a otra distinción importante: mientras que los desarrolladores junior a menudo están fascinados por la última tendencia y el entorno más nuevo, las personas mayores saben el valía de “tecnología aburrida. “
Es importante pensar en los juniors y las personas mayores ahora, ya que los asistentes de codificación impulsados por la IA hacen que sea aún más hacedero difundir código. Los asistentes de codificación son valiosos y ahorran mucho trabajo. Dan a los desarrolladores de software superpoderes; Pueden escribir un montón de código repetitivo de calderas, código que es necesario pero ni divertido ni satisfactorio. Y cuando se usa correctamente, los asistentes de codificación pueden ayudar a los desarrolladores a ilustrarse. Pero igualmente pueden crear un trabajo innecesario. Como escribe Nat Torkington:2
Cuando los jóvenes presentan código que no escribieron, tienen que aplicar el ojo crítico de un senior a ellos mismos; debe seguir nuestras convenciones, ¿maneja los errores correctamente, es esta la mejor forma de resolver ese problema, etc. Si el junior no lo hace, entonces están haciendo un trabajo para el senior, cuando el senior, el Junior presenta un servicio de AI sin crítica. Efectivamente, los juniors que usan IA pueden hacer trabajo para personas mayores.
Entonces, una consecuencia de la codificación impulsada por la IA es que los juniors tienen que hacer el trabajo de un senior, tal vez ayer de que estén completamente equipados para hacerlo. Necesitan tener un ojo en el panorama caudillo, porque no solo están evaluando la calidad de su propio trabajo, lo cual es una tacto necesaria; Están evaluando el trabajo de otro (que podría tener una gran O), y esa es la tacto de un senior. La parte más importante de la programación no es difundir código. Es comprender el problema en su contexto completo. Eso es lo que hacen los desarrolladores de stop nivel. Y eso nos deja a algunas conclusiones.
Primero, escuchamos que decía con demasiada frecuencia que las empresas ya no necesitarán desarrolladores junior. Tal vez eso sea cierto, pero aún necesitarán personas mayores, y sin juniors, ¿de dónde vendrán las personas mayores? No crecen en los árboles ni entran a su puerta listos para comenzar. Todos quieren desarrolladores “experimentados”; Tiene que poseer una forma de coger experiencia.
En segundo motivo, ¿qué necesitamos para enseñar a los desarrolladores junior para que puedan convertirse en senior? El enseñanza no se negociación solo de programas de lenguajes, bibliotecas y algoritmos. Necesitamos enseñar la capacidad de analizar los problemas en un contexto más amplio, pensar en cómo evoluciona el software con el tiempo, comunicarse con los demás y hacerlo como una parte integral de un flujo de trabajo que incluye asistentes de IA. Como escribe Addy Osmani,3 Los jóvenes deben “centrarse en construir esa mentalidad de evaluación crítica y comprender cómo usar herramientas de IA de forma efectiva”. En nuestra experiencia, los desarrolladores junior están entusiasmados con ilustrarse a usar la IA de forma efectiva, pero tenga en cuenta que esto es una añadido a un conjunto de habilidades, y que la añadido aumenta la brecha entre los juniors y los adultos mayores. Y las personas mayores igualmente están trabajando para sumar estas mismas nuevas habilidades; AI es tan nuevo para ellos como para el fresco reconocido, posiblemente más nuevo.
Finalmente, los asistentes de codificación son buenos para codificar, pero los desarrolladores de asistentes de codificación han prestado relativamente poca atención al resto del trabajo. No está claro que no puedan, ya tenemos algunas herramientas. La IA es buena para tomar notas en las reuniones, difundir transcripciones y resumir. En el futuro, la IA ciertamente podrá hacer más: ayudar a negociar los requisitos, navegar cuestiones políticas, pero aún no. Y sí, la IA está ganando gradualmente la capacidad de navegar en grandes bases de código, pero aún necesitamos humanos que sepan cómo funcionan las cosas y dónde están enterrados los secretos.
Siempre necesitaremos desarrolladores senior, por lo que siempre necesitaremos desarrolladores junior, próximo con caminos que permitan a los jóvenes convertirse en personas mayores. A medida que incorporamos la IA en nuestros flujos de trabajo, debemos ser atentos a preservar y permanecer esos caminos. ¿Cómo creamos la tutoría en los requisitos de trabajo? ¿Cómo alentamos a las nuevas contrataciones a mirar imágenes más grandes, cuando gran parte de nuestra civilización (y nuestros entornos profesionales) se plinto en escalas de tiempo cada vez más cortas y cortas? ¿Cómo enseñamos a las personas a convertirse en solucionadores de problemas en motivo de generadores de código? ¿Y cómo enseñamos a los humanos a colaborar, tanto con cada uno como con la IA? Esos son los problemas que debemos resolver.
Notas al pie
- Y como he citado en otra parte.
- Correo electrónico personal
- Correo electrónico personal