¿Cuándo alguien sería considerado un mal programador? [cerrado]

57

¿Cómo consideraría que un programador es malo en lo que está haciendo?

Si es posible ... ¿Cómo debería mejorar?

Tom Wijsman
fuente
3
Porque dicha persona no acepta respuestas en una página web relacionada con la programación. Broma :-)
Daniel
1
@EvanKroske: No, eso no está bien ... Community Wiki existe para permitir la edición colaborativa de publicaciones. Ver también: Nuestro Meta - Etiqueta: community-wiki
Tamara Wijsman
En muchas preguntas, es imposible aceptar una sola respuesta. Ver también: Nuestro Meta - Buscar: aceptar
Tamara Wijsman
No todas las preguntas obtienen una respuesta que realmente aborde el problema.
Loren Pechtel

Respuestas:

134

Cuando no aprenden de sus errores y de las revisiones por pares.

Todos somos verdes en algún momento; sin embargo, si no mejora o intenta mejorar, entonces es un mal programador.

PSU_Kardi
fuente
44
De acuerdo: debe tener un ciclo de retroalimentación, siempre aprendiendo de sus errores.
Marcel Lamothe
1
@PSU bien dicho. Al igual que cualquier oficio, los programadores son comerciantes y no son perfectos, siempre aprenden, pero si no aprendes de los errores, no estás mejorando en tu oficio.
Chris
2
Esa es una definición muy amplia; No se limita a los programadores. Se aplica a científicos, cocineros, deportistas, traductores, conserjes, fotógrafos, y realmente cualquier profesión.
RegDwight
13
Todo el mundo es un imbécil al menos una vez a la semana.
MIA
@RegDwight: ¿y tu punto era ...?
SamB
125

Un programador que no sabe lo que no sabe y no está interesado en averiguarlo.

Graviton
fuente
16
Si pudiera votar este 100x, lo haría. Un poco de humildad y hambre de aprender compensa mucho a la larga.
William Pietri
1
+1 para Ngu y William también. Este es el criterio más típico de un mal "programador".
fabrik
¿Qué sucede cuando sabes que no sabes MUCHO y por mucho que lo intentes, nunca sabrás la mayor parte?
Steven Evers
@snOrfus, localizas un mentor para que te enseñe ...
75

Una gran señal de advertencia es si son programadores de "culto a la carga", lo que significa que hacen cosas pero no saben por qué hacen esas cosas (es solo "magia"). Gran publicación de Eric Lippert aquí .

Del artículo:

programadores que entienden lo que hace el código, pero no cómo lo hace.
Marcel Lamothe
fuente
3
* y ha estado codificando esa tecnología por un tiempo
Joe Phillips
55
Esto se aplicaría a casi todos los programadores que alguna vez hayan realizado algún desarrollo web con marcos como Java / Spring o Ruby on Rails. Esos marcos están llenos de magia negra que los programadores normales generalmente no se molestan en entender.
missingfaktor
3
@Missing Faktor - y por lo tanto, no sería tan inexacto decir que la mayoría de los programadores que hacen eso, no son grandes programadores :)
seanmonstar
14
Por otra parte, no es realista suponer que los programadores deben comprender completamente el funcionamiento interno del marco, la máquina virtual o lo que sea que estén construyendo código. (O, de hecho, detalles de todas las capas de abstracción a continuación, hasta alcanzar el metal desnudo). Puedes ser un programador perfectamente bueno y productivo incluso si conoces solo las partes más relevantes.
Jonik
44
@Missing Faktor: es posible que no comprendan las partes internas de las bibliotecas y los marcos que usan con precisión, pero al menos deberían saber para qué sirve cada cosa en su código: "para gruñir al robot", porque la documentación dice que esto es necesario para preservar la integridad del continuo espacio-tiempo ", etc.
SamB
45

Un gran consejo para mí es cuando te hacen preguntas a ti o a los demás programadores que muestran claramente que han hecho un esfuerzo absolutamente cero para resolverlo por su cuenta.

Un corolario es cuando hacen la misma pregunta de programación varias veces indicando que no están internalizando la información.

JohnFx
fuente
Ah sí, trabajé con él. Tiempo pasado, afortunadamente.
Mike Woodhouse
1
Algunos ni siquiera pueden formular preguntas decentes, pidiéndole que "solo lo arregle"
deltreme
21

Cuando les lleva mucho tiempo resolver el problema de FizzBuzz.

EpsilonVector
fuente
1
Creo que podría haber algunos principiantes con potencial para ser buenos programadores, que tienen problemas con eso.
JD Isaacks
2
Los principiantes están bien si buscas un programador junior que pretendes moldear y dar forma a uno bueno. Pero ese problema es tan trivial que no debería tomarle a nadie con experiencia escribir nada.
Matt DiTrolio
8
Yo diría que no debería tomarle mucho tiempo a nadie que haya terminado con éxito un curso de programación de nivel básico resolver esto.
EpsilonVector
44
Si un principiante no puede resolver FizzBuzz, no debería estar solicitando trabajos de programación. Si afirma que puede programar (por ejemplo, solicitando un trabajo de programación), debería poder resolver FizzBuzz.
Chinmay Kanchi
1
Vale la pena echarle un vistazo a la pregunta de Stackoverflow sobre FizzBuzz. Echa un vistazo a la solución de Python que no usa división o módulo. stackoverflow.com/questions/437/…
Gordon
21

Programadores que se niegan a aprender nuevas tecnologías / idiomas e insisten en atenerse a lo que ya saben.


Anexo: (agregando lo que el guión dijo a continuación en los comentarios)

Una extensión de esto son las personas que conocen un subconjunto de la funcionalidad de alguna tecnología pero no muestran deseos de aprender nada más al respecto. Lenguaje de programación, editor, otras herramientas ...

2 revoluciones
fuente
66
... y no por buenas razones, debo agregar.
missingfaktor
18

Cuando un miembro del equipo es el desarrollador productor negativo .

|# Lines Written| - |# Lines of bugs introduced| - |# Lines of rework required| < 0

Lo que significa que el resto de su equipo tiene que hacer más trabajo debido al mal desarrollador. NNPP

danivovich
fuente
1
Estoy de acuerdo: estas personas pueden ser extremadamente perjudiciales para su equipo.
Marcel Lamothe
44
Eh ... Ayer eliminé 500 líneas de código redundante y no introduje errores. ¿Las métricas LOC se consideran dañinas?
Piskvor
55
La mayoría de las métricas son horribles, y las métricas LOC generalmente son más inútiles. El punto aquí es que un mal programador es alguien que crea más trabajo para el equipo de lo que él / ella completa.
danivovich
55
Las métricas de LOC no son inútiles. Son nocivos. Además, el conteo de LOC es muy difícil en la mayoría de los idiomas modernos. Pero, la métrica no es el punto aquí. Solo dice | Trabajar para crear | - | Trabajo que estuvo mal | - | trabajar para arreglar | ... es decir, si te tomó 10 horas, de las cuales pasaste 6 horas trabajando en algo que finalmente tuvo que arreglarse y tomó 6 horas más para hacerlo, entonces tienes -2 horas. El tiempo es realmente a lo que estás tratando de llegar de todos modos.
MIA
1
LOC métricas son una gran manera de medir la cantidad de lugares errores tienen que esconderse.
Samb
15

Cuando saben que hay mejores formas de hacer las cosas, pero aún así se niegan a hacerlo, incluso cuando el tiempo lo permite.

JeffO
fuente
Pero podría haber desacuerdos de expertos sobre lo que es "mejor".
DarenW
@DarenW: No diría que alguien es un mal programador porque se pusieron del lado de un tema controvertido, pero cuando tienen una opción definitiva en su propia mente.
JeffO
15

Personalmente, creo que cualquier programador que pueda mirar su propio código que escribieron hace un tiempo y no encontrar algo malo no es bueno. "Un tiempo" puede escalar con la experiencia ... Yo diría entre unas pocas semanas hasta un año más o menos.

Daenyth
fuente
55
¿Qué pasa si no pueden encontrar nada malo y eso les preocupa?
SamB
1
O peor, no pueden encontrar nada malo e intentar arreglarlo.
Toon Krijthe
15

Aquellos que ignoran las advertencias en sus códigos y solo se preocupan por los errores.

Reigel
fuente
14

Cuando era líder de equipo en una tienda pequeña, había varias personas a las que tuve que reasignar (ni yo ni mi supervisor directo teníamos la capacidad de rescindir el contrato sin una tonelada de burocracia y un montón de documentación) o no tener renovación de contrato. al final del compromiso actual. Algunos de los tipos enumerados también funcionaron para otros líderes de equipo, y prácticamente adoptaron la misma opinión. Cosas que llevaron a la gente a la categoría "Programador malo" en mi libro:

  1. Imposible u Ossified en el pasado
    Cuando el 'programador' no parece ser capaz de absorber el nuevo sistema, la nueva herramienta o lo que sea que se esté implementando, sin importar cómo se realice la capacitación / educación. Tiene que repetir dicho entrenamiento con frecuencia.
    Cuando el 'programador' solo conoce la tecnología o el paradigma de codificación que usaban hace 10 o 15 años. Era lo suficientemente bueno entonces, entonces, ¿por qué deberían cambiar?

  2. Codificador de vaquero La persona que codifica primero, sin un plan. El 'programador' que realiza cambios no probados en el código de producción y / o datos "porque tenemos que arreglarlo ahora" y luego se sorprende cuando falla el "arreglo".
    El Cowboy tampoco es definitivamente un jugador de equipo. No necesita un equipo apestoso.
  3. La veleta
    Este 'programador' está enamorado de la "tecnología del día " y ve cada nuevo marco, lenguaje, metodología o lo que sea nuevo y caliente como el
  4. El "gran cerebro"
    Este 'programador' está tan seguro de su talento y capacidades que se hacen cosas que no tienen mucho sentido para el proyecto. por ejemplo, reescribir una biblioteca estándar "porque es ineficiente para nuestro sistema" o introducir herramientas y técnicas que no son adecuadas para el problema en cuestión. Por ejemplo, presentar Lisp o Forth en un entorno mainframe.
  5. LOC a. Sandbagger
    Este 'programador' utiliza ofuscación y dirección errónea para aumentar el a. LOC: Líneas de código que se pagan. He visto código en esta situación que era página tras página, pantalla tras pantalla de estructura y lógica duplicadas, con solo los nombres de párrafo o variables de control cambiados para aumentar el recuento de líneas.
  6. Experto indispensable
    El 'programador' que tiene el conocimiento del dominio para resolver los problemas en cuestión, pero ya que ellos "saben" todo al respecto. De hecho, si fueran atropellados por un autobús, toda la organización se vendría abajo. { Observación: Los que piensan que son indispensables generalmente lo son. (¿Alguien tiene la fuente de este aforismo?)}
  7. The Pasta Chef
    Este 'programador' se especializa en código de espagueti, aderezado con identificadores que son demasiado difíciles de seguir sin un IDE implementado sintácticamente. por ejemplo , Index1O0, Index1I0O, etc.
  8. Pasante de verano: específicamente un subtipo Caminata Desastre
    Mi antigua tienda solía contratar a una serie de pasantes en edad de secundaria o universidad. Una vez, un departamento necesitó una pequeña base de datos para rastrear el uso de algunos equipos (ahora esto era un regreso, y estaba usando dBase III). El tipo codificó durante todo el verano, pero no terminó cuando comenzó la universidad en el otoño. Obtuvo una extensión de una semana y luego una segunda semana. Al final de la segunda semana, me enviaron para tomar su proyecto y llevarlo nuevamente al Desarrollo de Sistemas para que estuviera terminado. Me mostró las cosas que había hecho, y luego la parte inacabada. Lo que funcionó fue agradable, pero la aplicación fueincompleto. Cuando abrí la nueva caja de disquetes formateados para obtener copias, dijo: "solo un segundo, déjenme eliminar mis archivos de prueba ..." y antes de que pudiera decir algo, había eliminado un montón de archivos.
    Siendo del tipo sospechoso, y descubriendo que su aplicación no era casi nada más que dulce para los ojos cuando regresé a mi tienda, volví al departamento, saqué a Norton y recuperé los archivos que había eliminado, tratando de encontrar alguna lógica adicional, incluso si está incompleto
    Encontré, no mala lógica, pero mal comportamiento. La impresora conectada a la PC que estaba usando era una impresora tipo margarita. El conjunto de caracteres normalmente montado era una variante suiza. La salida de los programas eliminados pone un nombre, dirección, fecha de nacimiento, algunos códigos de letras y algún tipo de número de identificación. El formato y el diseño me molestaron. Todas las fechas de nacimiento de varias personas eran apenas legales para beber. La mayoría de las direcciones no estaban allí, cuando las busqué en nuestro directorio entrecruzado. Cuando le mostré las impresiones a su supervisor, él me miró y dijo "Licencias de conducir, ¿no le parece?" Dije que lo hice. Dijo que por eso había encontrado el stock de transparencias cortado en la basura al lado del Xerox. Nuestro chico malo había hecho superposiciones para ajustar sus edades y las de sus amigos en sus licencias de conducir. Lo informamos a las autoridades.No ha pagado por sus últimas dos semanas.

Estos son solo algunos de los malos personajes con los que he tenido que trabajar ...

/ s / BezantSoft

BezantSoft
fuente
RE "Los que piensan que son indispensables generalmente lo son" me recuerdan a en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
DaveDev
10

Incapaz de adaptarse a las nuevas tecnologías

Gopi
fuente
10

Además de la evidente falta de conocimiento / habilidad, un programador es malo, si su código es más difícil de leer y / o mantener de lo que debería ser.

revs Chinmay Kanchi
fuente
1
Y el programador es realmente malo cuando no puede leer un código bien escrito :-)
Maniero
44
¿No sería esto casi todos? Quiero decir, ¿no es el código casi siempre más difícil de leer y / o mantener de lo que debería ser?
SamB
No. El código siempre es más fácil de escribir que leer. Pero he tenido que mantener un código muy bien escrito que redujo este dolor tanto como sea posible.
Chinmay Kanchi
10

Cuando nadie más puede leer su código. No importa lo brillante que seas; Ningún programador es una isla.

stevenvh
fuente
Bueno, si está escribiendo en Unlambda, nadie debería poder leerlo.
SamB
Además, cuando un programador toma muy poco tiempo para hacer algo inicialmente y luego mucho tiempo para personalizarlo. A menudo he visto que esto sucede porque el programador copia principalmente código de pastas (por eso es rápido al principio), pero luego toma mucho tiempo porque es difícil (incluso para los buenos programadores) alterarlo desde allí debido a la ausencia de la intención escribir código personalizable al principio.
Sandeepan Nath
7

Alguien que no presta atención a los detalles y siempre está en "funciona, así que lo dejo solo. Todas esas excepciones en los registros no importan".

talonx
fuente
7

Para mí hay dos categorías para programadores: solo y en equipo.

Los malos programadores solos son

  • Aquellos que tardaron demasiado en hacer la tarea simple.
  • Aquellos que no pueden investigar por sí mismos para lo que están haciendo.
  • Aquellos que olvidarán lo que se ha codificado hoy dentro de unos días y no pueden mantener su propia base de código muy bien.
  • Los que no pueden adaptarse a los requisitos cambian.

Los programadores de equipos malos son aquellos que entran en la categoría de programadores solos malos, incluidos

  • Aquellos que no pueden coordinarse con otros miembros del equipo.
  • Los que no aceptan las críticas.
  • Aquellos que no saben cómo ser útiles para los demás y cómo beneficiarse de otros miembros del equipo.
  • Aquellos que no pueden escribir código legible.
  • Aquellos que no comentan en aras de la legibilidad para los demás.
tia
fuente
8
No recuerdo exactamente cómo implementé cosas que programé la semana pasada. ¿Es esto poco común? Tenía la impresión de que trabajar con memoria humana finita era solo uno de los desafíos de la programación. De ahí la importancia de estructurar y documentar el código para que no necesite recordar detalles.
James
@ James Disculpe mi inglés;). Quiero decir que si un programador vuelve a mirar su código unos días más tarde y no tiene ninguna pista, eso es una mala señal. Tampoco recuerdo cómo y qué hice exactamente hace unos días, pero estoy seguro de que no tengo que rascarme la cabeza al mirar mi propio código y decir '¿en qué estaba pensando?'
tia
@ James: Exactamente, se deben documentar su código de manera que no importa la forma en que se olvidó de la mitad de los funciona
Samb
4

No están dispuestos a admitir que no saben la respuesta y / o no están dispuestos a buscar cosas.

Si no lo sabes, no te des por vencido, descúbrelo y hazlo.

Dean Higginbotham
fuente
4

Una gran señal de advertencia en mi experiencia es cuando no comentan sus hacks ...

Sabes a lo que me refiero: cuando te obligan a hacer algo muy hacky porque simplemente no hay mejor manera de hacerlo.

Los buenos programadores odiarán tener que hacerlo y escribir comentarios en línea que digan cuánto odian poner en ese tipo de pirateo, pero no hay otra opción. Los malos programadores simplemente lo introducirán y no lo comentarán.

Mesas Bobby
fuente
3

Silencio obviamente cuando un programador escribe MUCHO código. Funciones muy grandes, tal vez copiar / pegar líneas o bloques de código, usando mucho más si es necesario, etc. Esto podría deberse a que el programador no conoce una función estándar para hacer lo que quiere, pero la mayor parte del tiempo no lo es.

usuario2528
fuente
3

Que se le muestre repetidamente la forma correcta de hacerlo, y repetidamente solo hacerlo de la manera fácil.

DaveDev
fuente
3

Estoy moviendo mi respuesta aquí desde un tema duplicado cerrado que preguntó ¿Puedes reconocer si eres un mal programador? El otro tema se estaba cerrando mientras redactaba mi respuesta. Mi respuesta aborda más directamente la pregunta, ya que fue formulada por el otro autor de la pregunta y se leerá mejor si entiendes eso.

¡Suspiro! ¡Una parte de mí no quería agregar a este tema ya ocupado, pero la otra parte ganó! ¿Por qué ganó? ¿Por qué me molesto en agregar aún más palabras a este multílogo particular? Bueno, porque, hasta cierto punto, puedo tener una opinión ligeramente diferente sobre esto que los muchos comentaristas anteriores.

El binario funciona muy bien en las computadoras: es '1' o '0', "encendido" o "apagado". Podemos abstraer y codificar mucha información usando esos dos famosos estados. Pero, no tiende a funcionar tan bien para asuntos humanos: "bueno" o "malo", "sano" o "loco", "bueno" o "malo", "inteligente" o "estúpido", "gordo" o "delgado", "vivo" o "muerto"? Este tipo de evaluaciones polarizadas siempre han dejado al ser humano afectuoso parte de mí terriblemente insatisfecho. Por los esquemas de medición que elijo aplicar, generalmente encuentro que las respuestas a tales contrastes en realidad se encuentran en algún lugar a lo largo de un continuo entre uno de esos polos y el otro, no en ninguno de los extremos.

He luchado con esta tendencia hacia la polarización durante bastante tiempo, ahora, y mi solución personal es que encuentro mucho más útil aplicar tres palabras a cualquier evaluación: "¡ hasta qué punto!"

Entonces, mi respuesta a su pregunta es sugerirle que lo reformule y preguntarse esto: "¿Hasta qué punto soy un mal programador?" O, mejor aún, preguntar en la otra dirección: "¿Hasta qué punto soy un buen programador?" Si persigue la verdad, probablemente se ubicará en algún lugar a lo largo de un continuo entre ser un programador "malo" y uno "bueno". Luego, una vez que logre ubicar aproximadamente dónde se encuentra a lo largo de este camino, probablemente pueda identificar un punto algo más cercano al "buen" final, un punto en el que le gustaría encontrarse en el futuro cercano.

Si no establece ese punto demasiado lejos, probablemente pueda poner su extremo trasero en marcha y comenzar a moverlo en esa dirección. Si logra iterar este algoritmo heurístico bastante simple varias veces, ¡pronto puede encontrarse con una programación demasiado ocupada para tener que hacer esta pregunta nuevamente! Ah, y probablemente progresará más rápido si comienza a golpear el código en un teclado tan rápido y con la mayor frecuencia posible; y, si te tomas un pequeño descanso de vez en cuando, ¡lee un código de alta calidad escrito por tus compañeros! En estos días de desarrollo dinámico de código abierto, no tiene escasez de código libre y exquisito para aprender.

Por lo tanto, te recomiendo encarecidamente que pruebes mis tres pequeñas palabras, "en qué medida", ¡y veas cuán lejos en una buena dirección pueden llevarte!

John Tobler
fuente
2

Alguien que dice "No se puede hacer".

En mi opinión, se trata de resolver problemas, la herramienta debería ser mucho menos relevante que realmente hacer el trabajo. Si tengo que resolverlo usando MS-Access o lenguaje ensamblador, es cuestión de tiempo y dinero, no de "No se puede hacer"

Una señal de advertencia se centra demasiado en la forma académica y "adecuada" de hacer las cosas, y no se enfoca lo suficiente en hacer el trabajo.

Dan Williams
fuente
2
¿Y cuando dice por qué se puede hacer?
Maniero
1
Entonces, ¿qué hay de resolver un problema de detención? Se puede hacer?
P Shved
2
Es malo descartar algo como imposible si no es así y viceversa.
Randall Schulz
2
@Randall Schulz: Por lo que puedo decir de Craigslist, un programador estrella de rock es alguien que maneja todos los niveles de desarrollo (base de datos, experiencia de usuario, implementación, administrador de sistemas y soporte de usuario) en una agencia de publicidad por mucho menos que el salario normal para Una de esas cosas. Los llaman estrellas de rock porque después de 60 horas a la semana de esto, su dieta es similar a la de alguien que viaja en una furgoneta económica y tiene que empeñar sus guitarras para comer.
Dan Monego
1
Sí, hice una generalización radical :), pero ... fue para hacer un punto. "Mi opinión profesional es que no se debe hacer" es mejor. Aún mejor "¿Qué pasa con la solución del mismo problema de una manera diferente". Mi punto es que un buen programador debe centrarse en la solución. "No se puede hacer", sin ofrecer opciones es muy frustrante para el cliente.
Dan Williams
2

Si solo conoce la sintaxis de un lenguaje pero no conoce los conceptos básicos de los algoritmos.

Chankey Pathak
fuente
2

Cuando hacen mucho pontificado pero producen muy poco.

Gratzy
fuente
2

! (inteligente y hace las cosas)

Nick Pierpoint
fuente
== estúpido o no puede hacer nada ;-).
Toon Krijthe
2

Aquellos que no conocen principios como SOLID, DRY, OOP, etc. Es importante tener una buena comprensión de los principios y fundamentos de programación en lugar de conocer tecnologías específicas. Aquellos con una base sólida podrán aprender nuevos temas fácilmente y producirán un mejor código.

Giorgi
fuente
2

Un programador incorporado que no entiende las interrupciones muy bien o la multitarea. También programadores que necesitan trabajar con campos de bits pero que no comprenden las operaciones lógicas y los cambios.

tcrosley
fuente
2

Una señal de reconocimiento inmediato es alguien que dice: "No entiendo por qué no funciona. Hice todo bien".

Robert Rossney
fuente
Seguido de cerca por "No entiendo por qué eso funciona, no está bien".
Randall Schulz
Sí, es la computadora la que es estúpida :)
Dan Williams
2

Una cosa que distingue a un mal programador de un programador novato es la obstinada insistencia en implementar su sistema favorito en cualquier idioma y API en el que estén trabajando.

Una vez heredé un sistema donde el desarrollador anterior volvió a implementar (en Java) un gran conjunto de la API Ashton Tate DBase III + en capas sobre la biblioteca de acceso dbf personalizada. No se utilizó ninguno del marco de colecciones de Java.

Esto fue para que pudiera escribir una aplicación Java / swing que se viera y actuara como una aplicación DBase III + (o posiblemente clipper).

Las aplicaciones que escribió en este sistema tenían menús de barra lite y abrirían un formulario de ventana completa con una fila de botones en la parte inferior cuando navegaste por la barra lite a la opción. Era como una pequeña máquina del tiempo desde la década de 1980.

El hombre era claramente un desarrollador experto. Sabía lo suficiente como para poder escribir todo el sistema él mismo en el plazo de ese proyecto. También pudo reutilizarlo en algunos otros sistemas internos.

Pero fue un programador horrible porque su código hizo un mal uso de las características de los sistemas en los que trabajó. Estaba más dispuesto a pasar 3 meses en una biblioteca personalizada de dudoso beneficio que aprender Java / Swing / SQL.

sal
fuente