¿Cómo puedo mejorar mi capacidad de resolución de problemas?


50

Todos dicen lo mismo: "un programador real sabe cómo manejar problemas reales". Pero olvidan cómo aprendieron esta habilidad o dónde: no se enseña en las escuelas.

¿Qué puedo hacer para mejorar mi capacidad de abordar problemas de programación complejos? ¿Qué estrategias te han funcionado? ¿Hay áreas específicas en las que debería centrarme, como algoritmos o patrones de diseño?


3
Dos libros útiles mencionados en Code Complete son: Blockbusting conceptual de James Adams y Pensamiento lateral de Edward De Bono.
mctylr

1
AH! Olvidé publicar aquí cuando solo tenía algunas respuestas.
Mark C

Respuestas:


25

Algunas técnicas que podrían o no funcionar:

  • Mire las soluciones existentes a problemas comunes, por ejemplo, patrones de diseño. Tal vez encuentre algo similar que al menos se parezca parcialmente a su problema. Busca en la web.
  • Actúa como si el problema ya se hubiera resuelto y rastrea lo que sigue a la solución que hay que hacer. Por ejemplo, en lugar de diseñar la API para una clase, simplemente escriba el código que hace uso de la clase, con llamadas a métodos como desee, y luego implemente esa API.
  • Haga otra cosa, por ejemplo, navegar por la red o jugar al solitario, y espere a que suceda la inspiración.
  • Piensa en la persona que más te gusta y finge que quieres impresionarla con tus habilidades para resolver problemas. ¿Cuál sería una solución extremadamente impresionante?
  • Verifique el problema en busca de contradicciones inherentes o requisitos en conflicto, y establezca exactamente cuáles son y qué compromiso podría hacerse. A menudo, cuando existen tales conflictos, pero usted no lo sabe, tiende a descartar una posible solución tras otra porque no puede satisfacer perfectamente todos los requisitos.
  • Si ya tiene una posible solución, pero se siente "sucia" (copiar y pegar, variables globales, código de espagueti, etc.), úsela de todos modos y luego mejore.

El último punto es excelente. A veces, la solución al problema es simplemente hacer que funcione para la mayoría de los casos y luego ver dónde debe mejorarse.
JeffO

44
Sin embargo, tenga en cuenta que el número de "Lo arreglaré más tarde" que se convierte en "Lo arreglé" es (al menos en mi experiencia) fraccionalmente pequeño.
Gareth

3
Gareth: Cierto, pero la idea no es mejorarlo la próxima semana, el próximo mes o cuando sea, sino inmediatamente después de que funcione. Se entiende como un método para romper nueces duras.
user281377

3
No navego por la red como una forma de esperar a que suceda la inspiración. Necesita ciclos cerebrales inactivos para obtener inspiración, y navegar por la red es una forma de desperdiciar esos ciclos cerebrales inactivos. En su lugar, vaya de compras, salga a caminar o ande en bicicleta, limpie su departamento, haga algo que no requiera mucho poder mental. La inspiración vendrá más rápidamente en esas circunstancias.
Ken Bloom

1
Geek: Sé que # 4 suena un poco paradójico, pero a veces, realmente funciona para mí; especialmente en situaciones donde parece posible más de un enfoque y el problema es la selección de uno de esos enfoques. # 6 significa no estar demasiado restringido por lo que no se suele hacer en nuestra profesión. A veces hemos internalizado reglas como "evitar variables globales" hasta el punto de que rechazamos inconscientemente cada solución que hace uso de una técnica tan obsoleta.
user281377

20

Use el modo R o el modo L según sea necesario

El modo R es el enfoque creativo, no verbal, que comúnmente asociamos con el subconsciente. El modo L es el enfoque lineal, lógico y verbal asociado con su "voz interior".

Si un problema parece ser invencible, probablemente se deba a que está intentando resolverlo utilizando el modo de pensamiento incorrecto. Para los programadores, el modo de pensamiento predeterminado tiende a ser el modo L, por lo que puede funcionar para que lo apague temporalmente y acceda al modo R.

Cómo acceder al pensamiento en modo R

Hay muchas formas, pero quizás pruebe el método Poincare (llamado así por el famoso matemático).

Escriba todo lo que sabe sobre el problema. Resuelva de inmediato todos los aspectos fáciles (si los hay). Elija un solo elemento de la lista de "problemas difíciles" restantes y luego salga a caminar para no ser molestado o distraído.

No intente analizar el problema durante la caminata, solo deje que su mente divague y observe cualquier imagen o sensación interesante que surja que pueda estar relacionada con el problema. Deja que se unan. Si la inspiración golpea, pare inmediatamente la caminata y vuelva a escribir la información que ha adquirido.

Enjuague y repita hasta que todos los problemas tengan una idea. Luego comience a explorar las ideas.

Recomendación de libro

También leer Pragmatic Thinking and Learning puede ayudarlo a convertirse en un mejor solucionador de problemas. (Parece que estoy haciendo referencia a este libro mucho recientemente ...)


44
El pensamiento y el aprendizaje pragmáticos fueron excelentes
Brad Cupit

Ref: drawright.com/theory.htm (qué es el modo R y el modo L)
mctylr

17

Preguntale a alguien mas...

No en serio. Tu mayor recurso puede ser la persona sentada a tu lado. Ni siquiera les pidas la respuesta al problema, pídeles que se sienten a tu lado y que te dejen explicar el problema.

A menudo lo resolverá mientras lo verbaliza.

A veces, la otra persona hace una pregunta o señala un detalle que desbloqueará la compuerta mental.

Eventualmente aprenderá a verbalizar las cosas en su cabeza sin el uso de una marioneta, y detectará los detalles clave en el problema más rápido.

Y si todo lo demás falla, al menos podrían mostrarte una técnica que no habrías pensado usar.


Preguntar a otros o formar grupos de estudio es una excelente manera de aprender.
Gary Rowe

Hago lo mismo, solo para tener una idea de mí y esta es una de las mejores maneras.
Viswa

Esta técnica se conoce como Rubber Ducking, excelente artículo sobre codificación de horror codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html y wiki también es útil en.wikipedia.org/wiki/Rubber_duck_debugging
spats

9

En realidad, mi respuesta corta es "resolver más problemas". Pero el punto es: realmente concéntrate en los problemas y no te rindas. No pidas ayuda en StackOverflow o lo que sea. (¡Leer StackOverflow está bien, por supuesto!) Esfuérzate hasta que encuentres una solución que funcione, y casi alcanzas tu objetivo. Y continúe hasta que tenga una solución satisfactoria.

Para mí, la resolución de problemas es dos cosas:

  • estrategia de resolución de problemas
  • persistencia y tolerancia a la frustración

El punto 2 es realmente crucial en mi opinión porque te obliga a cambiar tu forma de pensar cuanto más tiempo estés atrapado en un problema. También le permite pasar más tiempo resolviendo problemas, lo que le permite mejorar aún más sus habilidades. ;-)

Por cierto, te recomiendo que leas a Edward de Bono. Aunque adquirí mis habilidades para resolver problemas principalmente estudiando Física, su escritura es realmente interesante.

Bueno, y mi kit de herramientas para resolver problemas es este:

  • prueba algo al azar
  • leer artículos / blogs / publicaciones al azar sobre el tema que me preocupa (o un tema estrechamente relacionado)
  • haciendo un bonito dibujo
  • dividir el problema en problemas múltiples pero más simples
  • hacer algo más
  • Google algo relacionado de alguna manera con el problema
  • hablar con otros sobre el problema
  • hacer una lista TODO
  • escriba cosas que sepa sobre el efecto del problema para que pueda encontrar patrones más fácilmente

Tenga en cuenta que la mayoría de estas herramientas se pueden aplicar de forma recursiva.

Y mi algoritmo es este:

  1. ¿Qué herramienta de mi kit de herramientas de resolución de problemas tiene más sentido en este momento?
  2. Problema no resuelto? Continuar con 1. ;-)

El paso 1. es una decisión difícil, pero tomas mejores decisiones cuanto más practicas.

Ah, y casi olvido el ingrediente más importante:

Piensa positivamente sobre todo el proceso. No piense "Espero que XYZ ahora resuelva el problema". Más bien piense: "Si XYZ no funciona, entonces sé que YZX no puede ser la fuente del problema y comprobaré si ZYX funciona". La resolución de problemas puede ser divertida a veces en particular si su proceso de encontrar un problema termina siendo elegante e informativo.


Busqué en esta página la palabra "Física" para ver si alguien ya escribió sobre ella. La matemática es la otra.
Mark C

Creo que es difícil exagerar el valor de estudiar física con respecto a su capacidad de resolución de problemas.
Mark C

+1 por pensar en positivo. Si te encuentras agitado, entonces tu capacidad para resolver problemas se ve afectada. Mire el problema ya que le da conocimiento.
Gary Rowe

7

Comience a trabajar en la habilidad de identificar problemas también. A veces hay que reconocer que hay un problema antes de poder resolverlo. En la escuela requieren demasiadas respuestas y no suficientes preguntas de los estudiantes.

Encuentre personas a su alrededor que resuelvan problemas y pregúnteles cómo lo solucionan.

Prepárate para estar equivocado. No mejorarás si los guardas para ti y no te serán de ninguna utilidad.


+1 para "En la escuela requieren demasiadas respuestas y no suficientes preguntas de los estudiantes". esto es muy cierto y tómese el tiempo para aprender a hacer las preguntas correctas ... verifique en todas partes que hay tantos ejemplos de preguntas malas
Rémi

4

El principal beneficio de una educación en informática para ingenieros de software es la capacidad de crear y comprender abstracciones. Las abstracciones se utilizan para encapsular la funcionalidad común, como los métodos de clase String, en paquetes ajustados y reutilizables que nos permiten centrarnos en el problema más grande.

Aprende a reconocer y crear abstracciones :

Pero lo más importante, las abstracciones nos enseñan cómo dividir un problema en trozos más pequeños y manejables . Cuando se combina con una formación científica, la combinación de esas habilidades puede crear un ingeniero capaz de cortar el ruido y llegar al corazón del problema.

Aprende a resolver problemas usando el Método Científico :

Cuando se soluciona un problema de una aplicación de producción donde existe un problema difícil de encontrar, a veces es útil romper aún más la aplicación (en un entorno que no es de producción) para eliminar varias variables para aislar y eliminar una.

En resumen, el método científico, aprendido al tomar todas las asignaturas optativas de Física y otras asignaturas optativas de ciencias necesarias para obtener un título en informática, ayuda a resolver estos problemas como si estuviéramos probando un placebo y un nuevo ensayo de drogas en una serie de voluntarios. Al igual que los científicos que a veces tienen que empeorar algo para mejorarlo, a veces nosotros como ingenieros debemos hacer lo mismo.

Pensar científicamente de esta manera puede, en general, solo venir de tener experiencia en una formación científica. A veces, resolver un problema no se puede percibir como una ruta lineal de A a B.

En resumen, estudie ciencias de la computación, estudie otros campos científicos, aprenda programación funcional. Esto te ayudará a pensar como un científico y a pensar fuera de la caja.


Exactamente. Divide los problemas grandes en problemas más pequeños.
Bill Michell

3

Todo depende de qué tipo de problemas pretendes resolver, pero aprender a pensar lógicamente si ya no lo haces es algo bueno.

Con todo, y me vas a odiar por decirlo, pero la práctica hace la perfección. No me sacaron del útero de mi madre sabiendo cómo ser un buen solucionador de problemas y nadie más lo hizo. Necesita practicar y aprender a hacer las cosas por su cuenta. Si todavía estás en la escuela y no tienes clases de programación / ciencias de la computación, las matemáticas y las ciencias también son bastante buenas para fomentar el desarrollo de estas habilidades.


3

Creo que lo que estás buscando es la heurística de la informática.

Cuando se trata de lo que el 99% de nosotros hacemos en las trincheras, realmente no hay nada nuevo bajo el sol. Por lo tanto, puede ver un problema y reconocerlo como un problema de DP, u otro como un problema que podría beneficiarse de la memorización, etc.

¿Cómo obtienes este conocimiento? Un buen título de CS es un buen lugar para comenzar ... No es Ingeniería de Software o Sistemas de Información, sino esas cosas que la mayoría de los estudiantes de secundaria se quejan de "no ser prácticos".

Puede hacerlo por su cuenta, pero probablemente será más difícil. Comenzaría con estos dos cursos:

Introducción a los algoritmos

Grandes ideas en CS teórico


2

Mis respuestas se relacionan específicamente con la codificación, pero se pueden aplicar a cualquier cosa.

  1. Aléjate del teclado. Habla, camina, corre, habla con un colega mientras tomas un café
  2. ¡Hazte 10 años mayor! Mi experiencia me ha ayudado enormemente.
  3. Usa chuleta binaria. Divida el problema en dos y reduzca el problema: repita.
  4. Recuerde Sherlock Holmes: cuando haya eliminado lo posible, lo que queda (no importa cuán extraño) sea la respuesta
  5. Verifique sus datos de prueba. Más de la mitad de mis problemas realmente difíciles han sido causados ​​por datos defectuosos y no por códigos o algoritmos defectuosos.

1

En términos de práctica, puedo decirte lo que hago. Me interesa más la matemática aplicada que la programación, pero la matemática aplicada a la informática es una especie de programación. Veo problemas y soluciones a mi alrededor. Antes (o algunas veces después, si digo que mi trabajo requiere una solución oportuna), vinculando a una solución conocida -o biblioteca de códigos existente, me gustaría preguntarme a mí mismo: "Si esto fuera un problema virgen, no podrá encontrar una solución enlatada, ¿cómo procederías? " Si la respuesta es algo sencilla, considere escribir una solución (analítica o un programa de computadora para resolverla). Ignore los casos finales complicados, está interesado en explorar enfoques y algoritmos, no reinventar una biblioteca existente. Si la solución requerirá demasiado esfuerzo, no programe la solución completa, pero al menos piense en los tipos de estructuras de datos y métodos que desearía usar. También piense en métodos alternativos.


1

Hay una gran pregunta SO sobre esto.

Mi respuesta fue:

¡La mejor manera de mejorar es practicar!

Suscríbase a la fuente RSS en: http://www.mensa.org.uk/puzzles/ y tómese el tiempo para completarlos a medida que salgan.

Un calendario de escritorio de rompecabezas al día (por ejemplo, http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) es un buen idea también, ya que le dará problemas regulares, pequeños y variados para resolver.

Si bien estos estarán invariablemente fuera del tema de los problemas que enfrentará, la variedad es importante, ya que lo obligará a pensar de una manera que no lo ha hecho antes, de eso se trata realmente la resolución de problemas.

Editar: Consulte también: http://www.mindtools.com/pages/main/newMN_TMC.htm para obtener buenos consejos para resolver problemas.


1

Jugar ajedrez

Jugar al ajedrez es un excelente entrenador para resolver problemas de programación. Las capas de problemas y los árboles lógicos se relacionan muy bien. También le ayuda a pensar con anticipación y planificar antes de seguir un camino subóptimo y perder el tiempo.

El ajedrez también requiere un equilibrio entre los "modos de pensamiento" izquierdo y derecho. Si te vuelves demasiado analítico, puedes atascarte al tratar de calcular todo, lo cual es imposible. Sin embargo, cada inspiración creativa debe verificarse con un cálculo para asegurarse de que se ajuste a la realidad concreta de la situación. Los problemas difíciles son así.

El ajedrez demuestra cómo el estudio y la práctica conducen a una mejora sólida de una manera muy lineal. Esto también es cierto con la resolución de problemas del programa.

Jugar al ajedrez también puede ayudarte a comprender bien cuánto hay que aprender. A pesar de que has estado programando (o jugando ajedrez) durante 10 años, todavía no eres un gran maestro.


He descubierto que mi mente se agudiza jugando regularmente al ajedrez.
Paul Nathan

1

Recientemente he estado resolviendo los problemas en el Proyecto Euler . Los problemas son de diversa dificultad. Las soluciones generalmente no requieren grandes cantidades de código, pero debe considerar muchos factores, como el tiempo de ejecución de su algoritmo. Puedes usar cualquier idioma que desees, ya que solo ingresas una respuesta. Hay una buena redacción de una solución óptima para muchos problemas, y mucha discusión sobre cada problema. Intente resolver un problema todos los días y se sorprenderá de lo mucho que mejora su resolución y análisis de problemas. Para obtener crédito adicional, intente resolver el mismo problema en muchos lenguajes, como un lenguaje de procedimiento (tal vez C ++), un lenguaje de secuencias de comandos (como Python) y un lenguaje funcional (como F #).


1

Vengo de una formación científica, así que cuando miro un problema, tiendo a usar tácticas del Método Científico . Especialmente me gusta establecer "experimentos" basados ​​en hipótesis y usar "controles", así que construiré algo y luego cambiaré / agregaré solo 1 cosa y veré cuál es el resultado de ese cambio / adición y si yo ' No estoy obteniendo el resultado que necesito, lo cambiaré y cambiaré otra cosa. Esto funciona bien para solucionar problemas / depurar código. A veces obtienes la respuesta que buscas, pero siempre aprendes algo nuevo haciendo eso incluso cuando fallas. También me gusta aprender a través del reduccionismo.- tomar algo que ya existe (siempre es bueno comenzar con algo que quizás no entiendas, pero sabes que funciona) y me parece complejo y ver si puedo dividirlo en sus componentes y aprender cómo funcionan primero. A veces es más fácil para mi cerebro manejar un aprendizaje como este en lugar de abordar un problema de manera integral y puedo usar ese conocimiento para construir otras cosas complejas similares. También recomiendo leer libros sobre lógica y razonamiento eligiendo obras de pensadores clásicos y modernos (comience con Aristóteles y vaya ascendiendo). Pueden brindarle algunos de los fundamentos de la lógica básica que puede utilizar para ayudar a resolver problemas en las computadoras. Y, por supuesto, si no puede resolver un problema y ha estado trabajando en ello durante un tiempo, tómese un descanso mental. Reflexionar sobre un aspecto particular de un problema a veces es perjudicial. Todos necesitan descansos :)


0

La parte más difícil de la resolución de problemas es el "estrechamiento perceptual".

Eliges algo que parece ser el problema y persigues obstinadamente hasta que estés exhausto y no progreses.

La forma de hacerlo es estar seguro, absolutamente seguro, de que realmente comprende el problema. "Resolver el problema correcto" es la parte más importante de la resolución de problemas.

A veces lo llaman "pensar fuera de la caja". "La caja" es un punto de vista estrecho que puede no incluir el problema real y fundamental. Pensar fuera de la caja es buscar el problema correcto para resolver.

Existen numerosos libros sobre estrategias para evitar el estrechamiento que se enfoca prematuramente en el problema equivocado.

Principalmente el truco consiste en identificar cuál es el resultado real. Luego, averigua qué bloquea ese resultado deseable.


0

Honestamente, creo que todos somos diferentes, por lo que cada uno de los planes de trabajo para convertirse en un mejor solucionador de problemas es diferente. Puedes aprender de la experiencia de otras personas, pero al final tienes que forjar tu propio camino. Esto es esencialmente aprender algo de la "manera difícil", pero es efectivo en este caso.

Así es como comencé a mejorar mi resolución de problemas, aunque todavía no soy un gran solucionador de problemas, solo que soy mejor que el año pasado. Me dieron un nuevo proyecto en el trabajo que implicaba extender un software de seguimiento de tiempo de código abierto, agregando tres nuevos informes para la administración. Este software fue escrito en un idioma que nunca había usado y estaba mal documentado y muy ofuscado. Investigué e hice un montón de investigación y luego solo trabajé en los informes en pasos pequeños, una vez que tuve la funcionalidad básica, los mejoré y finalmente agregué más funciones.

En otras palabras, te recomiendo que encuentres algún tipo de proyecto para nadar o nadar en el mundo real para trabajar. Si actualmente trabaja como programador, busque un proyecto o pídale uno a su jefe. Si este escenario no es posible, encuentre uno fuera del trabajo, tal vez trabajo por contrato / independiente o algo así. Resuelvo problemas muy bien y muy rápido cuando tengo que hacerlo y conservo ese conocimiento debido a la intensidad del proyecto. Si esto no funciona para usted, simplemente haga lo que todos los demás en este hilo sugieren :).


0

La respuesta está en la pregunta al presentar diferentes soluciones. Siempre hay más de una solución (por ejemplo, la clasificación se puede hacer de diferentes maneras, por ejemplo, clasificación de burbujas, clasificación de selecciones, etc.) solo necesita elegir una forma de hacerlo (clasificación) de manera eficiente. Intente con diferentes la próxima vez y así sucesivamente ..... Y libros para la resolución de problemas ..... Ninguno No puede aprender habilidades de resolución de problemas de los libros, más código ejecutará más conocimiento que obtendrá. Buena suerte


0

Es fácil para un programador atacar mentalmente un problema visualizando cómo resolver el problema con su lenguaje de programación favorito. Al igual que el carpintero clásico que ve todos los problemas como clavos cuando su herramienta favorita es el martillo.

Creo que los mejores ejercicios de resolución de problemas vienen cuando superas el nivel práctico y solo piensas en términos de "esto es lo que necesitaría para resolverlo de manera óptima". En algunos casos, es posible que tenga que aprender (muchas) cosas nuevas para aplicar la solución, pero el punto clave es que su capacidad para encontrar una solución no debe limitarse a sus técnicas históricas y existentes.

Un viejo ejemplo práctico para mí es que aprendí cómo implementar una multitarea cooperativa eficiente cuando me di cuenta de que mi problema en realidad no necesitaba hilos preventivos, a pesar de que generalmente hubiera seguido adelante a mi zona de confort golpeando todos esos mutexes (eso eventualmente siempre parece dejar de sentirse cómodo en algún momento ..)


0

En el desarrollo de aplicaciones, muchos de los problemas que enfrentamos son nuestra propia invención o la invención del idiota del que heredamos la base de código jodida. Resolver un problema con mayor frecuencia se reduce a encontrar la fuente . A menudo, una vez que encontramos dónde está sucediendo, la mera competencia es lo que se necesita para resolverlo .

Con ese fin:

  1. Aprende tu plataforma.
  2. Aprende tus herramientas.
  3. Conozca qué herramientas están disponibles para su plataforma que aún no ha encontrado.

Todo el entrenamiento cerebral en el mundo es inútil sin información para el cerebro. ¡Para resolver un problema, primero debe saber cuáles son las posibilidades ! Incluso entonces, es mucho más rápido trabajar con buena información en lugar de solo una descripción del problema.

Podría especular hasta que las vacas vuelvan a casa sobre por qué algo tarda demasiado en ejecutarse. Pero si digo "obtengamos primero algunos datos", podría ver que se están lanzando muchas excepciones y darme cuenta de que podría cambiar esto a una declaración if. Sin saber cómo recopilar la información, sabiendo que las excepciones de mi plataforma requieren bastante trabajo y que hay una manera de verificar antes de intentar que sea más rápido, nunca resolvería el problema.


0

Hay dos partes en su respuesta:

a) Técnicas para la resolución real de problemas.

b) Hacer que su cerebro sea inherentemente "mejor" para pensar y resolver problemas

Siempre ha habido algunas respuestas excelentes sobre la técnica (suponga que conoce el problema, etc.), por lo que no voy a cubrir eso tanto. En cuanto a entrenar tu cerebro, hay un par de cosas que puedes hacer para cruzar esas sinapsis y construir más interconexiones

1) Aprende un nuevo idioma, un idioma real (como el francés o el chino podría ser una buena apuesta en estos días)

2) Aprende a tocar un nuevo instrumento

3) Hacer algo artístico como pintar, dibujar o esculpir

4) Jugar scrabble o hacer crucigramas

5) Baila como lo dices en serio. No, no estoy bromeando. Se ha demostrado que bailar tiene un impacto en tu cerebro y pensamiento

6) Amplíe sus experiencias, las soluciones innovadoras provienen de la aplicación de una teoría en un campo en otro, así que estudie diferentes campos y áreas que le parezcan interesantes.

7) Ejercicio, el ejercicio es crucialmente importante para mejorar el proceso de pensamiento

Finalmente, voy a ofrecer mi mejor consejo para resolver problemas difíciles: dar un largo paseo. Descubrí que funciona milagros para despejar la cabeza y dejar que uno contemple los problemas.



0

¡Mi consejo sería tirar el libro!

No literalmente, por supuesto. Lo que quiero decir es que ingrese a un área temática en la que tiene poca experiencia y resuelva problemas difíciles allí, sin conocer las soluciones existentes. Confíe en nada más que su creatividad y pensamiento crítico y tal vez un manual de referencia.

Puede diseñar un formato de imagen. O un servidor web. O un esquema de compresión. Sistema de archivos. Núcleo. Inteligencia artificial. Lenguaje de programación. Sistema de visión por computadora.

Algo que le parezca interesante, que sea razonablemente complejo y del que nunca haya aprendido. No leas sobre eso: solo salta directamente. Experimenta. Cometer errores. Reinventar la rueda.

No pidas ayuda. Manténgase alejado de los tutoriales. Mantente alejado de la teoría. No saque una solución del estante.

¿Por qué?

  • Aprendemos mejor de los errores.
  • Le brinda la oportunidad de practicar la creación de soluciones creativas, en lugar de regurgitar y adaptar soluciones antiguas.
  • Estás obligado a evaluar tus ideas. No puede evaluarlos sin desarrollar una buena comprensión de sus herramientas, del problema que está resolviendo y de la idea que desea evaluar. Esto lleva a una comprensión más profunda del tema de lo que desarrollaría de otra manera. (Siéntase libre de leer sobre las herramientas que está utilizando, simplemente no lea sobre el problema que está tratando de resolver).

Haz algunos intentos, y una vez que te sientas feliz con lo que has logrado, déjalo por unos meses. Luego, vuelva fresco y vea si puede encontrar una nueva perspectiva. Después de eso, es hora de comenzar a leer sobre el problema y cómo otros lo han resuelto (o hablando con la gente). En este punto, en lugar de decirte a ti mismo "sí, eso tiene sentido" mientras lees, dirás "sí, exactamente ", o "bueno, hasta cierto punto", o "wow, eso es inteligente".

En otras palabras, pensarás mucho más críticamente acerca de lo que lees, y te resultará mucho más fácil de entender y recordar porque ya tienes un gran "marco mental" para adjuntarlo. Te sentirás bien con esas cosas que descubriste de forma independiente, y te irás con un montón de nuevos conocimientos.

No intentes hacer que tu solución sea perfecta. Sólo demostrar a sí mismo que puede resolver el problema. Adopte una actitud de "poder hacer", y si se siente intimidado por el problema, recuerde que la persona que lo resolvió por primera vez probablemente sabía tanto como usted (de hecho, ¡no sabían que tenía una solución!).


0

La resolución de problemas no es algo que se pueda enseñar o incluso aprender leyendo. La única forma de mejorar en la resolución de problemas es resolverlos.

Existen diferentes técnicas y metodologías para la resolución de problemas que puede leer, y puede leer sobre herramientas y tecnologías que puede usar para resolver problemas en un dominio particular. A menos que piense continuamente en los problemas, intente encontrar soluciones (encuentre múltiples soluciones para cada problema y evalúelas entre sí), y luego evalúe sus soluciones contra las soluciones desarrolladas por otros, no mejorará en el problema resolviendo

Recomiendo recoger una copia de Pragmatic Thinking and Learning: Refactor Your Wetware de Andy Hunt . Es un libro sobre la comprensión de cómo piensas, reaccionas y aprendes. Trae teorías relevantes de la teoría del comportamiento y otras ciencias cognitivas. Está específicamente dirigido a desarrolladores de software, pero aplicable a cualquier trabajador del conocimiento.


0

Para los novatos en programación como yo, recomiendo el libro "Piensa como un programador". En el primer capítulo cubre técnicas de resolución de problemas tales como replantear y dividir el problema, comenzando con lo que sabe, reduciendo, analogías y experimentando.

Luego hay técnicas más avanzadas con ejemplos en C ++: resolución de problemas con matrices, punteros y memoria dinámica, clases, recursión, reutilización de código. No puedo comentar sobre esta parte porque todavía es muy difícil para mí.


-1

Resuelvo tantos problemas como sea posible. También me gustan algunos libros de rompecabezas como este . También jugueteo con juegos de resolución de problemas, como juegos de matemáticas que involucran números primos o algo así, sudoku, la Torre de Hanoi, etc. Solo encuentro cosas para resolver. Además, codifíquelo cuando sea posible.


-1

¡Adiós resolviendo MUCHOS problemas!

comienzas con problemas fáciles y avanzas a problemas más difíciles una vez que los fáciles se convierten en una rutina en lugar de problemas.


-4

No te limites a la teoría, practica más. Con la práctica viene la experiencia.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.