Por curiosidad, ¿qué tipo de tentaciones en la programación resultaron ser realmente perjudiciales en sus proyectos?
Como cuando realmente siente la necesidad de hacer algo y cree que va a beneficiar el proyecto o simplemente se engaña a sí mismo para creer que es así, y después de una semana se da cuenta de que no ha resuelto ningún problema real , sino que ha creado otros nuevos o , en el mejor de los casos, complació a tu bestia interior sin impacto visible.
Personalmente, me resulta muy difícil no refactorizar el código incorrecto. Trabajo con muchos códigos heredados malos, y me cuesta respirar profundamente para no tocarlo cuando no tengo pruebas que demuestren que mi refactorización no rompe nada.
Otro demonio para mí en la interfaz de usuario, literalmente puedo pasar horas cambiando el diseño de la interfaz de usuario solo porque me gusta hacerlo. A veces me digo que estoy trabajando en la usabilidad, pero la verdad es que me encanta mover botones.
¿Cuáles son tus demonios de programación y cómo los evitas?
Respuestas:
La generalización prematura es mi gran problema; en lugar de resolver el problema en cuestión primero y esperar hasta que haya una necesidad real de resolver el caso general, siempre busco el caso general por adelantado y termino escribiendo una tonelada de código que es más complejo de lo que debe ser.
Actualizar:
Consulte " Sin # 1 - Generalización prematura " para obtener una descripción detallada.
fuente
"Volveremos a esto y lo arreglaremos más tarde. ¡Solo necesitamos que funcione ahora!"
fuente
El plazo está muuuy lejos, tengo tiempo más que suficiente para hacerlo, así que ¿por qué no pasar un poco de tiempo navegando por la web?
fuente
"Esto es solo un código de prueba de concepto desechable. Una vez que les guste, lo haré realmente bueno".
fuente
fuente
Caer presa de tratar de construir todo internamente, cuando existen marcos y bibliotecas existentes.
fuente
Mis demonios recurrentes: optimización prematura y sobre ingeniería.
Y todavía no puedo evitarlos al 100% ...
fuente
Estimaciones demasiado optimistas.
Cuando su gerente lo está mirando hacia abajo, y siente la sensación de ardor al dar una estimación más baja de lo que su intestino le dice ... ¡no lo haga!
Después de todo, ¡tu intestino probablemente ya esté demasiado bajo!
fuente
Usar una tecnología / herramienta / lenguaje en su proyecto simplemente porque lo acaba de aprender.
Para tratar de demostrar lo bueno que eres como desarrollador.
Para considerar el código que has escrito como tuyo.
fuente
Me tomaré un descanso y miraré stackoverflow.com;)
fuente
La peor tentación:
Adivina qué, duele. :)
fuente
goto
declaración dará como resultado un ataque de rapaces.Olvidar que escribir código es el último recurso para resolver un problema .
fuente
Característica de fluencia
Haga un plan, sígalo y despliegue. Y luego regrese y agregue las cosas que la gente está pidiendo.
He visto esto una y otra vez. Te sientas, elaboras el diseño y comienzas a codificar. Los usuarios escuchan algunas tonterías confusas acerca de que su función favorita está "perdida" y comienzan a presionar por ella. Su jefe exige que lo agregue a la hora 11, incrusta el despliegue, introduce errores en todas partes y, 3 meses después, una vez que todos se hayan calmado, se le pide que lo elimine, porque nadie puede entender por qué ¡Esa horrible característica retro en primer lugar! ¿No podrías decir que el resto del diseño lo hizo inútil?
fuente
Agregar más funciones
La competencia tiene esta característica. Entonces, esta es una característica imprescindible, por lo tanto, más programación que analizar estrategia, posicionamiento, etc.
La competencia NO tiene esta característica. Por lo tanto, esta es una característica diferenciadora, por lo tanto, más programación que analizar estrategia, posicionamiento, etc.
Resolver un problema de negocios con más programación. por ejemplo, no se puede obtener una mayor experiencia en la administración del servidor Linux en el que se aloja su sitio web mediante la programación de más funciones. A veces solo tiene que aprender a solucionar el problema en lugar de volver a codificarlo todo en C # .Net
Resolver un problema de marketing con más programación. por ejemplo, al abusar del concepto de vaca púrpura de Seth Godin de que indirectamente está resolviendo un problema de marketing al programar más funciones en su producto para convertirlo en una "vaca púrpura". A veces, es solo un monstruo mutante.
Resolver un problema de productividad con más programación argumentando a sí mismo que el tiempo dedicado a escribir este script se ahorrará en horas en el futuro en lugar de programar cosas realmente importantes
Planea codificar pero aún no codifica porque quieres "hacerlo bien"
Codificando una versión sucia y prometiendo que "lo mejorarás más tarde" pero nunca volviste a "hacerlo mejor"
No hacer una maqueta o un mapa del sitio porque es "muy problemático". Simplemente puedo capturar las páginas de la competencia para maquetas y dibujar a mano alzada el mapa del sitio "más tarde", que nunca es. Y luego simplemente vaya directamente a la programación de la primera página que visualizo en mi mente.
Confesión: personalmente he cometido errores 1, 3, 7, 8. También he cometido 2, 4, 5, 6 pero a menudo me engañé a mí mismo que no lo hice.
Actualmente estoy remediando 9.
EDITAR No me di cuenta de que la pregunta nos obliga a poner soluciones.
1) Agregar más funciones Simplemente no lo haga. Trabaje con su negocio, marketing, fundadores, asesores, etc. y reduzca su aplicación a solo 1 cosa.
Vaya a leer sobre Twitter, Groupon , etc. acerca de cómo simplemente reducen las cosas a solo 1 cosa que los llevó a su éxito.
Si crees que solo funciona si quieres construir grandes empresas, piénsalo de nuevo. Ctrl + F para esta línea "Cuantas más funciones agregue al software, peor se venderá (no hace falta decir que es muy poco intuitivo para la mayoría de los desarrolladores de software)" en este enlace.
2) La competencia tiene esta característica. Entonces esta es una característica imprescindible
Ver solución 1
3) La competencia NO tiene esta característica. Entonces esta es una característica diferenciadora
Ver solución 1
4) Resolver un problema de negocios con más programación.
Si necesita contratar a alguien para que le enseñe, consulte, o hágalo por usted y luego documente cómo lo hizo, para que pueda hacerlo usted mismo la próxima vez. ¡¡SIMPLEMENTE HAZLO!! No reescriba el código, no pase GO, no recolecte $ 200.
5) Resolver un problema de marketing con más programación.
Si la gente no entiende lo que está vendiendo, ES un problema de marketing. Regrese a la solución 1 y gire.
6) Resolver un problema de productividad con más programación
Espere.
Espere hasta que sienta que su productividad ha sufrido un problema particular de productividad durante un período de más de 2 semanas y razonablemente sucederá durante otras 2 semanas.
Ahora, evalúe la cantidad de tiempo dedicado a programar un script para resolver este problema. Recuerde tomar su peor estimación y multiplicar por 2.
Multiplique su estimación por su tarifa por hora.
Ahora revise soluciones alternativas: externalice, compre una solución lista para usar, no haga nada al respecto, etc.
Elija la solución más rentable.
Apégate a ello.
7) Planeando codificar pero aún no codificando porque quieres "hacerlo bien"
Ve a hacer ejercicio. Sentirás una avalancha de endorfinas que motivarán tu trasero y te harán planear actuar. Sé esto porque acabo de hacer 5x5 benchpress y 5x5 sentadillas.
8) Codificando una versión sucia y prometiendo que "lo mejorarás más tarde" pero nunca volviste a "hacerlo mejor"
Configure un sistema de archivos tickler en GTD. y seguimiento agresivo. Cumplir todas las promesas para usted y los demás.
9) No hacer una maqueta o un mapa del sitio porque es "muy problemático".
Ve a gastar USD75 en una edición de escritorio de maquetas balsamiq. Lo sé porque lo compré hace 3 semanas. Me ha hecho rehacer mis maquetas porque me siento como un artista, arquitecto y visionario, todo en uno, a pesar de que mi dibujo en el mundo real apesta. La fuente utilizada en balsamiq te recuerda inconscientemente que esto es solo una maqueta, no escrita en piedra que te ayuda en RAD.
Fin EDITAR
fuente
Un par de cervezas me ayudarán a trabajar mejor y por más tiempo.
fuente
"Sí, puedo refactorizar este desorden gigantesco de 2000 líneas de espagueti en un día ..."
fuente
y es malvado hermano
fuente
La dilación y la estimación optimista de tareas son mis pecados más grandes.
Estiramiento, flexiones o dominadas (o cualquier otro ejercicio físico) para el primero y ánimo pesimista antes de estimar el segundo.
fuente
"Es mucho más fácil volver a implementar la funcionalidad desde cero que comprender el código existente".
fuente
Una tentación masivamente dañina que ha sufrido el proyecto en el que me encuentro es el 'Efecto de plataforma interna'. Este es un enfoque que los arquitectos, que ya se han ido, han establecido en su sabiduría infinita que ha creado un proyecto que genera alrededor de 20 millones de dólares por año pero cuesta 60 millones para actualizar y mantener (cifras aproximadas, obviamente, pero esta es la magnitud del problema).
fuente
NIH - No inventado aquí
Me cuesta mucho darles a las soluciones de terceros una oportunidad justa. Todos deberían ser naturalmente escépticos con respecto a las soluciones de terceros que no fueron hechas a medida para ellos, pero me cuesta ser 100% objetivo al respecto.
El ahorro de tiempo puede ser tan grande que incluso si 9 de cada 10 veces la solución de terceros debe ser evitado, que deben ser lo suficientemente objetivo de realizar el uno que funcione.
fuente
Diseño, codificación y / o pruebas unitarias contra "datos de muestra" suministrados en lugar de analizar una copia de la base de datos real de los clientes. La fecha límite era corta y seguían diciendo que se acercaba, pero nunca lo hizo. Cuando se desplegó, la explosión fue espectacular. Realmente, quién hubiera esperado que un cliente tuviera 3 clientes principales.
Nunca volveré a comenzar un proyecto hasta que tenga una copia de los datos reales .
fuente
El Hay que ser una biblioteca que hace que en algún síndrome.
relacionado cercanamente a
El fetiche del complemento
fuente
El perfeccionismo mata; probablemente la mayor razón por la que los proyectos no tienen éxito.
fuente
Bueno, a veces la programación me lleva a la botella.
fuente
Reescritura en lugar de refactorización.
fuente
Pensar que tiene que haber una mejor manera de hacer esto. No me voy a conformar con algo que pueda ser "suficientemente bueno". Estoy tomando nada menos que la perfección! Por lo general, esto se evita al hablar con otros que pueden tener una perspectiva diferente sobre un problema o al ver una solución desde un ángulo diferente.
fuente
Automatizando todo hasta el punto se gasta más tiempo en el mantenimiento de las herramientas que en el trabajo real.
Solución: al igual que con la optimización del código, primero encuentre cuellos de botella en la productividad y solo después de descubrirlos, cúrelos con una buena automatización .
fuente
Aparte de lo que otros han mencionado.
Priorización : ignorar el trabajo de alta prioridad con respecto al proyecto y trabajar primero en otras cosas del proyecto porque son más interesantes.
Con un poco más de autodisciplina. En serio, la autodisciplina y la automotivación para hacer lo correcto ayudan a evitar la mayoría de estos "demonios".
fuente
Más tarde, una vez que haya terminado de construir el proyecto para que coincida con las composiciones ...
(* la funcionalidad principal es completamente diferente)
Luego sigue refactorizando su código original, basado en el modelo defectuoso original en lugar de comenzar desde cero porque está bajo la presión de un plazo corto y asume que esas fueron las últimas revisiones.
Este me mordió todo el tiempo. Es difícil de evitar como desarrollador web. Mi mejor consejo es presionar por más tiempo para que pueda hacer los cambios de la manera correcta.
fuente