¿Ayudando a los programadores junior a superar sus defectos? [cerrado]

15

¿Cuáles son sus quejas comunes sobre los desarrolladores junior que se unen a su equipo o con quién tiene que trabajar? Obviamente, son inexpertos, por lo que no puede esperar que lo sepan todo, pero ¿qué habilidades a menudo faltan inexplicablemente y cómo, específicamente, podemos ayudarlos a desarrollar estas habilidades faltantes?

No me refiero a habilidades interpersonales como "escuchar consejos", me refiero a cuestiones técnicas como (si corresponde):

  • 'nunca has hecho SQL?'

  • '¿Nunca has escrito una prueba unitaria?'

  • 'no sabes cómo usar una línea de comandos de Unix?'

Cosas que no esperas - Me gustaría escuchar sus observaciones y técnicas para la enseñanza de nuevos programadores para superar estos inconvenientes específicos.

Andrew M
fuente
13
La cosa más irritante: preguntar constantemente sobre lo que es irritante. :-)
Jerry Coffin
12
No creo que debas irritarte cuando la gente no sabe cosas que esperarías que supieran. Lo importante es que están dispuestos a aprender =)
koenmetsu
Sí estoy de acuerdo con @KoMet si tiene la voluntad de aprender a escuchar Creo que es importante :)
MALSR
8
No me gusta esta pregunta, tiene una mentalidad incorrecta para un desarrollador. Éramos TODOS UNA VEZ ese novato, y todos los días somos novatos en algo. NUNCA me irritaría por alguien que no sabe algo. Esto siente que hay demasiada arrogancia involucrada ...
Darknight
3
Oh, cerrado, BRAVO. Leí las seis preguntas constructivas preguntas subjetivas y esto las cumple todas. Francamente, la parte no constructiva son los cuerpos ocupados que cierran un hilo que 13 personas ya han respondido, simplemente porque no entendieron la pregunta. Es simplemente una realidad que los desarrolladores senior a veces se sentirán decepcionados con las capacidades de los desarrolladores junior, esta pregunta solo busca encontrar patrones en esta decepción para que podamos evitar mejor las dificultades. Ignorar las quejas y críticas legítimas no beneficia a nadie y no tiene nada que ver con la arrogancia.
Andrew M

Respuestas:

25

Sin saber qué es el control de versión o cómo usarlo correctamente .

Uno de los desarrolladores junior que ha estado en mi empresa durante varios meses recientemente tuvo que aprender los conceptos básicos de Subversion. Realmente me hizo estremecer ... ¿ha estado revisando el código para vivir proyectos todo el tiempo ... y no tenía idea de lo que estaba haciendo ...?

sevenseacat
fuente
44
¿Encogerse? Ella tiene suerte de que todavía tenga un trabajo.
Rein Henrichs
2
Parece que es más una cuestión de "no saber lo que no sabes" o "no admitir lo que no sabes". Si ella hubiera pedido ayuda desde el principio, ¿habría sido un gran problema?
Michael McGowan
1
ouch, sonaba a mí jaja, no implementamos el control de versiones hasta hace poco, y me uní a la compañía como recién graduado, aprendí un poco de control de versiones y cosas de subversión en la Universidad, pero nunca antes lo había implementado.
Sufendy
1
"Esa es la herramienta de copia de seguridad, ¿no? ¿La usas para guardar tu código todas las noches?"
David
2
Es una gran cosa que casi nunca te enseñan en la escuela
Elijah Saounkine
23

No hacer suficientes preguntas

Sé que son juniors, espero que cometan errores y simplemente no sepan cosas. Se podrían haber evitado tantos jodidos reales simplemente haciendo una pregunta en lugar de asumir algo. Honestamente, no puedo ser molestado lo suficiente.

Tuve TONELADAS de preguntas cuando comencé: preguntarles me salvó el trasero en varias ocasiones. Demonios, todavía tengo muchas preguntas ... Me gusta pensar que son mejores preguntas ahora.

Steven Evers
fuente
Gee ... casi la misma respuesta que publiqué, entras unos 5 segundos antes.
rapid_now
2
"¡Eres molesto! Estoy ocupado aquí, ¿no puedes pensar solo?" si tienes mala suerte !! jaja
Sufendy
44
+1 - Un subcase de esto no es preguntar después de una explicación. Realmente me molestó cuando le expliqué una tarea a un joven, asintió con la cabeza, pensé que lo tenía y llegaría al trabajo, luego, dos semanas más tarde, regresa, hace las mismas preguntas nuevamente , asiente nuevamente, luego otros dos semanas después ... Bastante bien, no fue una tarea trivial, pero por el amor de Dios, no finjas que lo entiendes si no lo haces. Y si cree que entendió algo, tome notas para recordarlo dos semanas después.
Péter Török
1
Algunas personas, por otro lado, hacen demasiadas preguntas (en Stack Overflow).
BoltClock
1
@SnOrfus: Esos no calificados son a quienes me refiero: P
BoltClock
14

Copie pegar y prueba y error en lugar de tratar de comprender los fundamentos subyacentes

Muchos desarrolladores junior copiarán el código que parece cercano, luego probarán casi al azar diferentes permutaciones de modificaciones por fuerza bruta hasta que encuentren uno que funcione. Si no sabe por qué funciona, es probable que esté introduciendo errores en los casos límite que alguien que lo entienda tendrá que limpiar más tarde.

Manteniendo su "primer borrador" de código

Cuando un desarrollador experimentado escribe una nueva función de cierta complejidad, comienza con un trozo que no hace más que compilar, luego reescribe para agregar comentarios de pseudocódigo de alto nivel para el algoritmo general, luego reescribe esos comentarios uno por uno con código real, agregando y eliminando código ficticio según sea necesario para la prueba, luego reescriba para eliminar la redundancia que surgió durante la implementación, y así sucesivamente en una serie de mejoras sucesivas e incrementales.

Los desarrolladores junior tienen una tendencia a escribirlo en una gran parte, luego hacen una depuración masiva de fuerza bruta. No les gusta eliminar una línea de código una vez que está escrita en el editor, y están tan contentos de que finalmente lo hayan hecho funcionar que detestan reescribir las mejoras no funcionales, pero ellos son los que deben hacerlo. así que lo más.

Karl Bielefeldt
fuente
1
+1 para "copiar y pegar en lugar de tratar de comprender", aunque, por supuesto, este no es un problema exclusivo de los nuevos programadores, solo de los malos. Los nuevos programadores al menos tienen la oportunidad de crecer: los chicos con los que trabajo que han sido programadores durante décadas y todavía lo hacen no lo hacen.
Tom Anderson
Parte de esto también puede ser una consecuencia del estilo de gestión. La tarea ya está hablando más de lo esperado y el gerente quiere tu función mañana. Te apresuras a hacer que funcione y rápidamente pasas a la siguiente tarea. Todo se divide en tarjetas de tareas microsized, por lo que no hay tiempo para refactorizar o dar un paso atrás y ver el problema más amplio en su conjunto
Jamie McGuigan el
14

Creer que eres el primero en encontrar una situación.

Cada problema de programación que enfrenta ha sido enfrentado por otros, de alguna forma general. Hay mucho que aprender de programadores experimentados. Soy lo suficientemente mayor como para recordar programar antes de Google, y fue una mierda . Era aún peor cuando teníamos motores de búsqueda, pero todavía no había tanta información buena en la web. La programación ahora es mucho más productiva porque tiene acceso al conocimiento global en segundos. Las personas que no lo usan lo ignoran a su propio riesgo.

Editar :

Para ser claro, estoy no abogando copiar / pegar programación. Sin embargo, estoy seguro de que debe revisar el conocimiento existente antes de poder tomar buenas decisiones usted mismo.

Scott Whitlock
fuente
1
Bueno, tampoco desea que el desarrollador copie y pegue todo el código de algunos recursos dudosos de la Web. La búsqueda es buena para obtener algunas ideas, tal vez resolver algunos problemas fundamentales de comprensión, pero nunca para obtener soluciones. También hace que el desarrollador sea más tonto; tal vez lo hace un buen coleccionista, pero no un inventor.
Elijah Saounkine
Estoy de acuerdo en algún momento con Elijah, copiar y pegar código sin hacer tiempo para aprender lo que hace, no acelera sus habilidades de programación. Lo peor, se hará cargo y se convertirá en un mal hábito.
setzamora
1
Claro, pero @Scott no dijo nada sobre copiar y pegar código, solo dijo que no asuma que es el primero en enfrentar una situación, es decir, tenga en cuenta que puede haber algo de información y experiencia de la que pueda beneficiarse. Ejemplo: quiero saber si dos cadenas son similares. ¿Ya existe un algoritmo conocido para resolver este problema? Imagínese si un desarrollador simplemente decidiera comenzar a rodar el suyo sin siquiera saber que ya existen respuestas.
David Conrad
@David Conrad es cierto, punto tomado, estamos en la misma página aquí.
Elijah Saounkine
10

Pensando que lo saben todo.

Tuve un jr. pasante que intentó resolver todo con javascript. Intentó explicar varios conceptos, pero siempre pensó que podía hacerlo mejor. Ahora renunció y estoy reelaborando un importante programa que creó para imprimir utilizando HTML en lugar de una tecnología lista para imprimir como PDF. Sin mencionar un montón de otros problemas importantes.

La lección es pedirles a las personas mayores una orientación general importante al principio de un proyecto, no se salgan de la arquitectura sin ayuda. Puede escribir el código y los detalles solo, pero asegúrese de utilizar al menos la tecnología adecuada.

P.Brian.Mackey
fuente
5

Raramente me molesto cuando los jóvenes no saben lo básico, no se les enseñan habilidades de la industria como SCC en la Universidad. Es el trabajo de los desarrolladores senior enseñarles. Solo me molestan los enfrentamientos de personalidad. Pero me molestan más los desarrolladores senior que no conocen los conceptos básicos.

Craig
fuente
1
@Graig tiene razón, muchas cosas que nos molestan a los desarrolladores experimentados con respecto a los juniors son cosas que tuvimos que aprender, no en una universidad, sino en un entorno comercial.
Nickz
5

No queriendo avanzar en su conocimiento, en su lugar, tomar el camino de menor resistencia.

El otro día, un pasante junto con el diseñador gráfico (que es sorprendentemente experto en programación) solicitó ayuda porque tuvieron problemas para implementar algo en jQuery; el cierre puede ser doloroso si no puede verlo venir.

Me senté con el interno y le expliqué exactamente qué estaba mal y por qué. Arreglamos el error, luego señalé varias mejoras adicionales que podrían hacerse ("ya que estoy aquí") y terminamos reescribiendo la función culpable en 10 líneas en lugar de 20 y sin errores. Después de responder cualquier pregunta, satisfecho de que todo estaba bien en el mundo una vez más, me fui.

Al día siguiente, el interno llegó con una pregunta que reveló que "um, quería hacer algunos cambios y reescribió la función a mi manera porque me resultaba difícil de entender" (en su mayor parte deshaciendo mis mejoras).

Podría haber intentado más en su lugar (hacer preguntas adicionales, leer sobre los conceptos que mencioné), el código tan corto nunca puede ser tan difícil de entender, o tomar la salida fácil. Me entristece cada vez que veo a alguien hacer lo último.

Jon
fuente
Interesante, sin embargo, me pregunto si posiblemente hiciste que fuera mucho más difícil de leer. Recuerdo que mi primer gerente de proyecto hizo esto un par de veces (y también soy culpable de cambiarlo de nuevo). Aunque estoy seguro, en retrospectiva, su enfoque fue mejor, simplemente no estaba lo suficientemente avanzado en ese momento para entender por qué y cómo funcionó. .
Maxim Gershkovich
3

No entiendo POO. Lamentablemente, esto es mucho más común de lo que la mayoría de nosotros probablemente nos damos cuenta.

Saber cómo crear una clase, una clase abstracta, una interfaz o incluso conocer el polimorfismo es una cosa; comprender cómo usarlos adecuadamente en beneficio de su programa es otro .


Si desea evitar esta, encontré estas preguntas y sus respuestas esclarecedoras:

Nicole
fuente
Como en un nivel básico, ¿no saben lo que quieres decir con crear objetos, clases e inherencia? O cosas más avanzadas como usar los patrones de diseño (tienes que admitir que el libro GoF es bastante abstruso, aunque por supuesto hay otros libros / guías)
Andrew M
@ Andrew He ampliado un poco la respuesta.
Nicole
1
Y veo lo contrario: no saber cómo escribir código de procedimiento antiguo en C debido a que solo se les enseña POO. Por otra parte, no me hagas hablar de personas a las que ya no se les enseña a escribir analizadores sintácticos porque se les dice que todos esos problemas se pueden resolver usando lex y yacc.
rapid_now
1
@quickly_now Sin embargo, ese es un buen punto writing code other ways than OOPy writing bad OOPson dos cosas totalmente diferentes. El primero, no tengo ningún problema.
Nicole
La mayoría de las universidades no enseñan diseño orientado a objetos. También muchos lugares de trabajo funcionan como silos incluso con desarrolladores junior ... o tienen desarrolladores "senior" que no conocen la programación orientada a objetos. Hay desarrolladores "senior" que obtuvieron el título de trabajar x años y desarrolladores senior que conocen sus cosas ...
Cervo
3

Sin saber lo que no sabes, y en la ignorancia pensando que lo sabes todo.

(Y su primo cercano, no queriendo preguntar).

En parte, esto es una cuestión de organización: una inducción entrante adecuada contribuiría en gran medida a evitar que algunas de estas cosas se conviertan en problemas. Pero muy pocas empresas tienen tiempo o personas disponibles para una inducción entrante, algo que debería llevar desde unos pocos días hasta unas pocas semanas y saca a los desarrolladores de su trabajo. Entonces tenemos que apagar los fuegos en su lugar.

rápidamente_ahora
fuente
2

Estoy sorprendido de cuántos programadores junior relativamente nuevos de un programa CS son débiles con los algoritmos. La mala elección del algoritmo puede no destacarse realmente en la línea de aplicaciones comerciales, pero cuando se procesan miles de millones de solicitudes de servicio web por día, realmente importa.

Aquí hay una pregunta de entrevista que uso que casi todos los programadores Junior pierden y que resalta el problema:

Escribe un código que calcule el enésimo número de Fibonacci .

Casi siempre van por lo más alto, escriben lo obvio pero ineficiente

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Cuando se me pide que comente sobre la complejidad algorítmica, generalmente obtengo "es peor que O (N) ... uhm ... O (N logN)". En realidad es (mucho) peor que eso ...

Eric J.
fuente
1
Para responder a su pregunta sobre la complementariedad, uno debe conocer esa fórmula para calcular los números de Fibonacci sin recursividad, que utilizaría en lugar de la recursividad en primer lugar.
P Shved
1
@Pavel: Hay una solución O (n) y O (1) ... de hecho Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.
1
No digo que la solución que publicaste sea perfecta. Solo estoy cuestionando la relevancia de su pregunta de seguimiento para tal solución, la pregunta sobre la complejidad. ¿Qué quiere lograr preguntándolo y, lo que es más importante, por qué espera que se logre lo que desea con la respuesta a la pregunta anterior? (¿Hice mi punto?)
P Shved
Para aclarar mi punto, le sugiero que pregunte sobre cómo se podría mejorar el código en lugar de pedir una estimación de la complejidad. Estoy seguro de que algunos graduados de CS propondrán la memorización, o dirán que conocen la fórmula pero no quisieron mostrarla de inmediato porque pensarían que son inteligentes.
P Shved
En términos prácticos, dicha función podría descubrirse utilizando un generador de perfiles y optimizarse agregando un caché de memorización. La ineficiencia es realmente un problema para los valores grandes de N. La mejor manera de enseñarle a un joven sobre dicho código es forzarlo a pasar por la ejecución del código completo usando un depurador. Para valores realmente grandes de N, resulta que hay una fórmula matemática maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
Jamie McGuigan el
1

¡Hacer sangría de código hacia atrás!

Por supuesto que no es muy "típico". Nunca podría creer que fuera posible, pero como escribiría un desarrollador normal

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

ella escribiría como (¡Dios, todavía me parece imposible!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

¿No es frustrante?

Elijah Saounkine
fuente
En nombre de ...
Mike Speed
1
¡Es muy asombroso!
javanna
Es casi como si fueran árabe, hebreo o chino donde lees de derecha a izquierda, en lugar de la convención occidental de izquierda a derecha. Es una forma perfectamente válida de sangrar su código, pero significa que necesita volver a sangrar todo su archivo en función de su nivel más profundo de anidamiento, y hace que su código sea incompatible con todos los que comparten la convención opuesta.
Jamie McGuigan el