extreme programming - practicas - ¿Puedes compartir tus secretos o mejores prácticas para resolver problemas?
buenas practicas node js (19)
Escuché que Kent Beck, que lidera XP, utilizó tantos lápices de colores para estimular su cerebro cuando necesitaba resolver el problema. Probé el método de Kent y realmente funcionó para mí. No sé por qué. ¿Tienes algún método especial para atacar un problema difícil? Realmente quiero aprender sobre tu gran secreto.
Resumen: la gente recomienda seguir cosas:
- Haz otra cosa: ve a pescar, da un paseo,
- Hable con las otras personas: rompa el problema en pedazos Revisión del código
- TDD
- Experiencia
- Repetir y repetir
- Enfócate en entender cuál es el problema
Muchas gracias
- Escribe una prueba de unidad
- Míralo fallar, luego hazlo pasar
- Repita hasta que el problema se resuelva
En serio, solo sigue agregando capas de abstracción hasta que las cosas ''simplemente funcionen''. Si estoy en mi cabeza solo le pregunto a alguien más inteligente que yo cómo resolverían el problema.
A menudo, lo mejor es describir el problema a alguien. La mitad de las veces que le pregunto a un experto la respuesta me llega a mitad de la pregunta. Si hay algo que solo entiendo a medias y trato de explicárselo a alguien más, termino entendiéndolo por completo.
Solo adelante y habla de eso.
Antes de:
- Lea todo lo que puede encontrar sobre el dominio del problema.
- No te saltes temas que creas que no serán relevantes.
- Repita los pasos 1 y 2.
Durante:
- Divida los problemas grandes en las tareas más pequeñas.
- Defina sus criterios de aptitud (escriba las pruebas).
Ater:
- Haga una autopsia de la solución / proyecto.
- Pruebe nuevos idiomas, aprenda nuevas técnicas.
- Practica, practica, practica.
Apago la computadora, saco las varillas y paso unas horas de pesca.
Es una actividad increíble para despejar tu mente y preocuparte por esos problemas molestos. Lo mejor es que cuantos menos peces atrapes, más problemas puedes resolver.
Bueno, puedo decirte lo que no debes hacer:
Programar soluciones con su administrador no informático en la sala de juntas 5 segundos después de que se haya reconocido el problema mientras hablaba con el cliente en una conferencia telefónica :)
Experiencia.
En serio, ¿qué tipo de respuesta esperas de tu pregunta?
No existe ningún tipo de algoritmo que le permita resolver todo tipo de problemas.
Sea exhaustivo, explore cada opción, recuerde lo que aprendió, reutilice lo que sabe, considere otras opciones, pregunte a las personas que conoce, busque en Google, recuerde lo que ha aprendido, reutilice lo que sabe, sea creativo, sea caótico, recuerde lo que ha aprendido, reutilice lo que sabe, piense de manera innovadora, inspire el problema en una dirección extraña, recuerde lo que ha aprendido, reutilice lo que sabe.
Generalmente no comienzo a programar de inmediato. Analizo el problema y tomo notas hasta que llego a un punto donde sé lo que debo hacer en términos de código. Utilizo los archivos de modo orgánico de emacs y, ocasionalmente, papel y lápiz, dependiendo del tipo de problema.
Pasar un tiempo pensando en el problema antes de poner un código real en general me lleva a escribir una solución mucho más elegante de lo que hubiera hecho de otra manera.
Lo redefino una y otra vez. Y otra vez. Luego lo rompo en los pedazos más pequeños que puedo.
Al codificar utilizo muchas variables y no hago más de un paso en una línea. Si tengo que agregar cinco números y multiplicar, obtengo un porcentaje. Haré cada paso en su propia línea.
Más tarde, cuando sepa que lo tengo, combinaré las líneas, pero no hasta que esté SEGURO de que el problema está resuelto.
Esto también ayuda cuando se depura, ya que puedo inspeccionar cada paso para saber que hizo lo que yo quería que hiciera.
Mi mejor truco es dejar de trabajar detrás de la computadora. Prepare una taza de té, camine un poco, tal vez dé un paseo. Si es un problema difícil, explicárselo a otra persona y discutir el problema me ayuda mucho. Si es realmente difícil: deja de trabajar en él y concéntrate en otra cosa por un momento.
Creo que lo más importante es hacer que tu cerebro se relaje y te permitas ser creativo. Esos lápices de colores son una forma de estimular tu creatividad (¡debería intentarlo yo mismo, suena genial!); la taza de té (o @Martin: pesca) es una forma de relajarse. Algunas de las mejores ideas de la historia fueron descubiertas mientras tomaban una ducha, por cierto :)
Referencias obligatorias:
Conceptual Blockbusting , por James L. Adams
Cómo resolverlo , por G. Polya
y tal vez incluso
Mind Performance Hacks , por Ron Hale-Evans
tal vez estas son cosas a considerar también:
- hacer las tareas molestas primero
- no te repitas a ti mismo
- saber cuándo parar
- revisa tu código con un compañero de trabajo
Para mí, depende de cuál sea el problema: si estoy trabajando para tratar de resolver un nuevo problema, lo primero que haré es buscar un tablero blanco y comenzar a esbozar algunos conceptos, o encontrar un bloc de notas y comenzar a esbozar algunos conceptos. Por lo general, para resolver un problema primero tengo que entender cuál es el problema y por qué es un problema, una vez que está fuera del camino, las cosas pasan a la codificación y los procesos habituales asociados con la codificación.
La depuración, por otro lado, es un problema completamente diferente. Cuando estoy depurando, generalmente trato de averiguar qué está sucediendo en el código (es decir, paso a paso y ver las variables), averiguar qué se pretende que esté haciendo e intentar solucionarlo. Por lo general, hay un "paso fuera de la habitación y tomar algo para beber" entre cada uno de esos pasos también. Un truco que he encontrado con la depuración es tratar de mantener la calma, y si eso no funciona, ignorar el problema por un tiempo y trabajar en otra cosa. La mayoría de las veces se necesita más tiempo para resolver el problema, aunque dedicado - estresado - el trabajo lo hace tomando un descanso.
Tres palabras: desarrollo impulsado por prueba
Para la resolución de problemas, tengo los siguientes pasos arraigados en mi cabeza.
Pregunta: descubra cuál es el problema / pregunta real. Muchas veces es bastante vago u ofuscado.
Datos: haga todo lo que sabe que es un hecho real y descubra cuáles serán las incógnitas.
Imagen - Dibujar imágenes Uso mi pizarra todo el tiempo.
Estrategia: averigüe las diferentes maneras en que puede resolverlo y decidir cuál es la mejor opción.
Respuesta: obtenga una solución real a través de la estrategia elegida.
Comprobar: compruebe que su solución resuelve el problema con los hechos.
Basado puramente en la experiencia y cuando obtengo mis mejores momentos de revelación / eureka:
- Tomar una ducha
- Acuéstese en la cama, tratando de quedarse dormido
Para mí, tu pregunta puede ser tomada de dos maneras. Una es cómo creo la solución a un problema de programación y la otra es cómo resuelvo un problema que existe (es decir, depuración).
Programación:
- No pienses en la implementación, aún.
- Asegúrese de tener toda la información que necesita.
- Comience a dividir el problema en pedazos. Yo uso un outliner para esto. Actualmente usando My Life Organized .
- No te preocupes por resolver todo el problema. Comience con lo que sabe y manténgalo simple para empezar. Uso PDL para describir la solución.
- Después de completar un pase, continúe volviendo a 2 y repita. Usando un perfilador externo, puedo seguir aumentando el nivel de detalle y mover fácilmente estos detalles a medida que la solución se vuelve más clara.
- Si hay piezas del rompecabezas para las que no tienes la respuesta, agrégalas a tu esquema y describe cuál será el siguiente paso para resolver esa pieza. Puede ser más investigación, hablar con alguien u obtener más detalles de los usuarios.
- Regrese al paso 2 y repita hasta que le describan su solución.
- Implemente su solución en el idioma de su elección. Probablemente puedas usar el bosquejo como comentarios.
Depuración:
- Debes esforzarte para comprender lo que realmente está sucediendo.
- Compila una lista de lo que sabes que es verdad (hechos).
- Haz tu mejor esfuerzo para que sea repetible lo más fácilmente posible.
- Haga su mejor enfoque para atacar el problema (consultar con otros, google, etc.)
- Pruebe su enfoque para solucionar el problema.
- Si lo arregla, entonces vea si puede romperlo de nuevo, y luego arreglarlo de verdad. Te ayuda a demostrar que realmente entendiste y solucionó el problema.
- Si no lo soluciona, deshaga los cambios y vuelva al paso 1 y repita
Después de algunas iteraciones, debe comprender completamente el problema y conocer la mejor solución para su situación. Hay momentos en que simplemente no puedes obtenerlo. Es bueno alejarse, dormir y estar preparado para atacarlo de manera fresca. Definitivamente hablar y mostrar sus problemas a otros puede ayudarlo a comprender mejor el problema y obtener nuevas ideas.
tantas respuestas ...
¡Intenta buscar metacognición! Hay montones de técnicas para ayudar a resolver problemas.
el más simple que he encontrado se llama la rueda de "resolución de problemas" que aparece en google.
También hay material basado en la psicología para probar la psicología gestalt. El principal popular de ellos es entender el momento "ah ha" cuando un problema se convierte en una solución.
He encontrado que muchas veces parece difícil porque realmente no entendí el problema por completo. Volviendo al usuario / cliente real y escuchándolo describir lo que realmente necesita en lugar de leer un documento de requisitos, a menudo puedo reducir el problema a algo trivial.
Probé el método de Kent y realmente funcionó para mí.
Supongo que es porque puedes ver el problema desde dos perspectivas diferentes al mismo tiempo, al menos subconscientemente.
Como enfoque general, tiendo a pensar en lo que la eventual solución tendría que hacer.