Como posso melhorar minha capacidade de resolução de problemas?


50

Todo mundo diz a mesma coisa: "um programador de verdade sabe lidar com problemas reais". Mas eles esquecem como aprenderam essa habilidade ou onde: ela não é ensinada nas escolas.

O que posso fazer para melhorar minha capacidade de resolver problemas complexos de programação? Que estratégias funcionaram para você? Existem áreas específicas em que eu deveria me concentrar, como algoritmos ou padrões de design?


3
Dois livros úteis mencionados no Code Complete são: Blockbusting conceitual por James Adams e Lateral Thinking por Edward De Bono.
Mctylr

11
Ah! Eu esqueci de postar aqui quando ele tinha apenas algumas respostas.
Mark C

Respostas:


25

Algumas técnicas que podem ou não funcionar:

  • Observe as soluções existentes para problemas comuns, por exemplo, padrões de design. Talvez você encontre algo semelhante que pelo menos se assemelhe ao seu problema. Pesquise na internet.
  • Aja como se o problema já tivesse sido resolvido e rastreie o que se segue até a solução a ser feita. Por exemplo, em vez de projetar a API para uma classe, basta escrever o código que faz uso da classe, com chamadas de método como você gostaria, e depois implementar essa API.
  • Faça outra coisa, por exemplo, navegue na Internet ou jogue paciência e aguarde a inspiração acontecer.
  • Pense na pessoa que você mais gosta e finja que deseja impressioná-la com suas habilidades de resolução de problemas. Qual seria uma solução extremamente impressionante?
  • Verifique o problema em busca de contradições inerentes ou requisitos conflitantes e indique exatamente o que são e que compromisso pode ser feito. Freqüentemente, quando esses conflitos existem, mas você não tem conhecimento, tende a descartar uma solução possível após a outra, porque não consegue satisfazer perfeitamente todos os requisitos.
  • Se você já possui uma solução possível, mas ela parece "suja" (copiar e colar, variáveis ​​globais, código de espaguete etc.), use-a assim mesmo e melhore depois

O último ponto é excelente. Às vezes, a solução do problema é fazê-lo funcionar na maioria dos casos e ver onde ele precisa ser aprimorado.
Jeffo

4
No entanto, esteja ciente de que o número de "eu corrigirei mais tarde" que se transforma em "corrigi-lo" é (pelo menos em minha experiência) fracionariamente pequeno.
Gareth

3
Gareth: É verdade, mas a idéia não é torná-lo melhor na próxima semana, no próximo mês ou sempre, mas imediatamente após fazê-lo funcionar. É um método para quebrar nozes duras.
precisa saber é o seguinte

3
Eu não navego na rede como uma maneira de esperar a inspiração acontecer. Você precisa de ciclos cerebrais ociosos para que a inspiração aconteça, e navegar na rede é uma maneira de desperdiçar esses ciclos cerebrais ociosos. Em vez disso, faça compras ou dê um passeio ou faça um passeio de bicicleta, limpe seu apartamento - faça algo que não exija muita energia do cérebro. A inspiração virá mais rapidamente nessas circunstâncias.
Ken Bloom

11
Geek: Eu sei que o # 4 parece um pouco paradoxal, mas, às vezes, realmente funciona para mim; especialmente em situações em que mais de uma abordagem parece possível e o problema é a seleção de uma dessas abordagens. O número 6 significa não ser muito restringido pelo que não se costuma fazer em nossa profissão. Às vezes, temos regras internalizadas como "evitar variáveis ​​globais" a ponto de inconscientemente rejeitarmos qualquer solução que faça uso dessa técnica obsoleta.
precisa saber é o seguinte

20

Use o modo R ou modo L, conforme necessário

O modo R é a abordagem criativa e não verbal que comumente associamos ao subconsciente. O modo L é a abordagem linear, lógica e verbal associada à sua "voz interior".

Se um problema parece intratável, provavelmente é porque você está tentando resolvê-lo usando o modo de pensamento incorreto. Para os programadores, o modo de pensamento padrão tende a ser o modo L, portanto, pode funcionar para desligá-lo temporariamente e acessar o modo R.

Como acessar o modo R

Existem muitas maneiras, mas talvez tente o método Poincare (nomeado em homenagem ao famoso matemático).

Anote tudo o que você sabe sobre o problema. Resolva imediatamente todos os aspectos fáceis (se houver). Escolha um único item da lista de "problemas difíceis" restantes e depois faça uma caminhada onde você não será perturbado ou distraído.

Não tente analisar o problema durante a caminhada, apenas deixe sua mente vagar e observe quaisquer imagens ou sensações interessantes que possam estar relacionadas ao problema. Deixe-os unir-se. Se a inspiração surgir, pare imediatamente a caminhada e volte a anotar as idéias que você adquiriu.

Enxágue e repita até que todos os problemas tenham informações. Então comece a explorar as idéias.

Recomendação de livro

Também ler Pragmatic Thinking and Learning pode ajudá-lo a se tornar um melhor solucionador de problemas. (Parece que estou fazendo referência a este livro muito recentemente ...)


4
Pensamento pragmático e Aprendizagem foi excelente
Brad Cupit

Ref: drawright.com/theory.htm (o R-mode e L-mode é)
mctylr

17

Pergunte a outra pessoa ...

Não seriamente. Seu maior recurso pode ser a pessoa sentada ao seu lado. Nem peça a resposta para o problema, peça que se sentem ao seu lado e explique o problema.

Muitas vezes, você trabalha como verbalizá-lo.

Às vezes, a outra pessoa faz uma pergunta ou aponta um detalhe que desbloqueia a comporta mental.

Eventualmente, você aprenderá a verbalizar as coisas em sua cabeça sem o uso de um fantoche, e identificará os detalhes principais do problema mais rapidamente.

E se tudo mais falhar, pelo menos, eles poderão mostrar uma técnica que você nem imaginaria usar.


Pedir aos outros ou formar grupos de estudo é uma excelente maneira de aprender.
perfil completo de Gary Rowe

Eu faço o mesmo, só para ter uma idéia de mim e essa é uma das melhores maneiras.
Viswa 18/10/2013

Essa técnica é conhecida como Rubber Ducking, excelente artigo sobre codificação de horror codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki também é útil pt.wikipedia.org/wiki/Rubber_duck_debugging
spats

9

Na verdade, minha resposta curta é "resolvendo mais problemas". Mas o ponto é: realmente se concentre nos problemas e não desista. Não peça ajuda no StackOverflow ou o que for. (A leitura do StackOverflow está ok, é claro!) Se esforce até obter uma solução quase funcional e quase alcance seu objetivo. E continue até ter uma solução satisfatória.

Para mim, resolver problemas é duas coisas:

  • estratégia de solução de problemas
  • tolerância persistência e frustração

O ponto 2 é realmente crucial, na minha opinião, porque obriga a mudar seu pensamento quanto mais tempo você ficar preso a um problema. Também permite que você gaste mais tempo na solução de problemas, permitindo que você melhore ainda mais suas habilidades. ;-)

A propósito, eu recomendo que você leia Edward de Bono. Embora eu tenha adquirido minhas habilidades de resolução de problemas principalmente estudando Física, a escrita dele é realmente interessante.

Bem, e meu kit de ferramentas para solução de problemas é o seguinte:

  • aleatoriamente tentar algo
  • leia artigos / blogs / postagens aleatórios sobre o tópico que me interessa (ou um tópico intimamente conectado)
  • fazendo um bom desenho
  • dividir o problema em problemas múltiplos, porém mais simples
  • faça outra coisa
  • Google algo que está relacionado de alguma forma com o problema
  • converse com outras pessoas sobre o problema
  • faça uma lista TODO
  • anote as coisas que você conhece sobre o efeito do problema para encontrar padrões mais facilmente

Observe que a maioria dessas ferramentas pode ser aplicada recursivamente.

E meu algoritmo é este:

  1. Qual ferramenta do meu kit de ferramentas de solução de problemas faz mais sentido no momento?
  2. Problema não resolvido? Continue com 1. ;-)

O passo 1. é uma decisão difícil, mas você toma melhores decisões quanto mais pratica.

Ah, e quase esqueço o ingrediente mais importante:

Pense positivo sobre todo o processo. Não pense "Espero que o XYZ resolva o problema agora". Em vez disso, pense: "Se o XYZ não funcionar, eu sei que o YZX não pode ser a fonte do problema e vou verificar se o ZYX funciona". Às vezes, a solução de problemas pode ser divertida, principalmente se o processo de encontrar um problema acabar elegante e informativo.


Eu procurei nesta página a palavra "Física" para ver se alguém já escreveu sobre isso. A matemática é a outra.
Mark C

O valor de estudar física no que diz respeito à sua capacidade de resolver problemas é difícil de exagerar, eu acho.
Mark C

+1 por pensar positivo. Se você se excitar, sua capacidade de resolver problemas é prejudicada. Observe o problema, pois ele fornece conhecimento.
perfil completo de Gary Rowe

7

Comece a trabalhar também na habilidade de identificar problemas. Às vezes, você precisa reconhecer que há um problema antes de resolvê-lo. Na escola, eles exigem muitas respostas e não perguntas suficientes dos alunos.

Encontre pessoas ao seu redor que resolvam problemas e pergunte como elas lidam com isso.

Esteja preparado para estar errado. Você não vai melhorar se você guardá-los todos para si e você não será de nenhuma utilidade.


+1 em "Na escola, eles exigem muitas respostas e poucas perguntas dos alunos". este é soo verdadeiro e ter tempo para aprender a fazer as perguntas certas ... verificar em todos os lugares há tantos exemplos de pergunta ruim
Rémi

4

O principal benefício de uma educação em ciência da computação para engenheiros de software é a capacidade de criar e entender abstrações. As abstrações são usadas para encapsular funcionalidades comuns, como métodos da classe String, em pacotes restritos e reutilizáveis ​​que nos permitem focar no problema maior.

Aprenda a reconhecer e criar abstrações :

Mas, o mais importante, as abstrações nos ensinam como dividir um problema em pedaços menores e mais gerenciáveis . Quando combinada com um conhecimento científico, a combinação dessas habilidades pode criar um engenheiro capaz de cortar o barulho e chegar ao cerne do problema.

Aprenda a resolver problemas usando o Método Científico :

Ao solucionar problemas de um aplicativo de produção em que exista um problema difícil de encontrar, às vezes ajuda a realmente quebrá-lo ainda mais (em um ambiente de não produção) para eliminar várias variáveis ​​para isolar e eliminar uma.

Em resumo, o método científico, aprendido com todas as disciplinas eletivas de Física e outras disciplinas necessárias para obter um diploma em ciência da computação, ajuda a resolver esses problemas como se estivéssemos experimentando um placebo e um novo teste de drogas em uma série de voluntários. Como cientistas que às vezes precisam melhorar algo para melhorar, outras vezes nós, como engenheiros, devemos fazer o mesmo.

Pensar cientificamente dessa maneira só pode - em geral - resultar de experiência em ciências. Às vezes, resolver um problema não pode ser percebido como um caminho linear de A a B.

Em resumo, estude ciência da computação, estude outras áreas científicas, aprenda programação funcional. Isso o ajudará a pensar como um cientista e a pensar fora da caixa.


Exatamente. Divida os grandes problemas em problemas menores.
Bill Michell

3

Tudo depende de que tipo de problemas você pretende resolver, mas aprender a pensar logicamente, se ainda não o é, é uma coisa boa.

Em suma, e você vai me odiar por dizer isso, mas a prática leva à perfeição. Eu não fui puxada para fora do ventre de minha mãe, sabendo ser um bom solucionador de problemas e ninguém mais o fez. Você precisa praticar e aprender a fazer as coisas por conta própria. Se você ainda está na escola e não tem aulas do tipo programação / ciência da computação, matemática e ciências também são boas para promover o desenvolvimento dessas habilidades.


3

Eu acho que o que você está procurando é heurística de ciência da computação.

Quando se trata do que 99% de nós fazemos nas trincheiras, realmente não há nada de novo sob o sol. Então você pode ver um problema e reconhecê-lo como um problema de DP ou outro como um problema que poderia se beneficiar da memorização, etc ...

Como você ganha esse conhecimento? Um bom diploma de CS é um bom ponto de partida ... Não em engenharia de software ou sistemas de informação, mas as coisas que a maioria dos graduandos reclamam de "não serem práticas".

Você pode fazer isso sozinho, mas provavelmente será mais difícil. Eu começaria com estes dois cursos:

Introdução aos algoritmos

Grandes idéias em CS teórico


2

Minhas respostas dizem respeito especificamente à codificação, mas podem ser aplicadas a qualquer coisa.

  1. Afaste-se do teclado. Fale uma caminhada, corra, converse com um colega tomando um café
  2. Torne-se 10 anos mais velho! Minha experiência me ajudou enormemente.
  3. Use chop binária. Divida o problema em dois e reduza o problema: repita.
  4. Lembre-se de Sherlock Holmes: Quando você tiver eliminado o possível, o que resta (por mais estranho que seja) é a resposta
  5. Verifique seus dados de teste. Mais da metade dos meus problemas realmente complicados foram causados ​​por dados defeituosos e não por códigos ou algoritmos defeituosos.

1

Em termos de prática, posso lhe dizer o que faço. Estou mais interessado em matemática aplicada do que em programação, mas a matemática aplicada aplicada à computação é uma espécie de programação. Eu vejo problemas e soluções por aí. Antes (ou algumas vezes depois, se o meu trabalho exigir uma solução oportuna), vinculando a uma solução conhecida - ou a uma biblioteca de códigos existente, eu gostaria de me perguntar: "Se esse era um problema virgem - você não conseguirá encontrar uma solução enlatada, como você procederia? " Se a resposta for um tanto direta, considere escrever uma solução (analítica ou um programa de computador para resolvê-la). Ignore os casos finais complicados: você está interessado em abordar e abordar algoritmos, não reinventando uma biblioteca existente. Se a solução exigir muito esforço, não programe a solução completa, mas pelo menos pense nos tipos de estruturas e métodos de dados que você deseja usar. Pense também em métodos alternativos.


1

Há uma ótima pergunta SO sobre isso.

Minha resposta foi:

A melhor maneira de melhorar é praticar!

Inscreva-se no feed RSS em: http://www.mensa.org.uk/puzzles/ e reserve um tempo para completá-lo quando ele sair.

Um calendário de mesa de quebra-cabeça por dia (por exemplo, http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) é um bom idéia também, pois fornecerá problemas regulares, do tamanho de uma mordida e variados para resolver.

Embora, invariavelmente, eles estejam fora de tópico com relação aos problemas que você se encontrará enfrentando, a variedade é importante, pois irá forçá-lo a pensar de maneiras que antes não era, o que realmente é a solução de problemas.

Editar: verifique também: http://www.mindtools.com/pages/main/newMN_TMC.htm para obter boas dicas de solução de problemas.


1

Jogar xadrez

Jogar xadrez é um excelente treinador para resolver problemas de programação. As camadas de problemas e as árvores lógicas se relacionam muito bem. Também ajuda você a pensar no futuro e planejar antes de seguir um caminho abaixo do ideal e perder tempo.

O xadrez também exige um equilíbrio entre os "modos de pensar" da esquerda e da direita. Se você se torna analítico demais, pode ficar atolado ao tentar calcular tudo, o que é impossível. No entanto, toda inspiração criativa precisa ser verificada com um cálculo para garantir que ela se encaixe na realidade concreta da situação. Problemas difíceis são assim.

O xadrez demonstra como o estudo e a prática levam a melhorias sólidas de maneira muito linear. Isso também ocorre com a solução de problemas do programa.

Jogar xadrez também pode ajudá-lo a entender bem o quanto há para aprender. Mesmo que você esteja programando (ou jogando xadrez) há 10 anos, ainda não é um grande mestre.


Eu descobri que minha mente estava afiada ao jogar regularmente xadrez.
Paul Nathan

1

Recentemente, resolvi os problemas no Projeto Euler . Os problemas são de dificuldade variável. As soluções geralmente não exigem grandes quantidades de código, mas é necessário considerar muitos fatores, como o tempo de execução do seu algoritmo. Você pode usar qualquer idioma que desejar, basta digitar uma resposta. Há uma boa descrição de uma solução ideal para muitos problemas e muita discussão sobre cada problema. Tente resolver um problema todos os dias e você ficará surpreso com o quanto sua solução e análise de problemas melhoram. Para crédito extra, tente resolver o mesmo problema em muitas linguagens, como uma linguagem procedural (talvez C ++), uma linguagem de script (como python) e uma linguagem funcional (como F #).


1

Eu sou formado em ciências, então, quando olho para um problema, costumo usar táticas do Método Científico . Eu gosto especialmente de criar "experimentos" com base em hipóteses e usar "controles". Por isso, construo algo e depois altero / adiciono apenas uma coisa a ele, para ver qual é o resultado dessa alteração / adição e se eu Como não estou conseguindo o resultado que preciso, vou voltar e mudar outra coisa. Isso funciona bem para solução de problemas / código de depuração. Às vezes, você obtém a resposta que procura, mas sempre aprende algo novo fazendo isso, mesmo quando falha. Eu também gosto de aprender através do reducionismo- pegar algo que já existe (sempre bom para começar com algo que você talvez não entenda, mas você sabe que funciona) e parece complexo para mim e ver se posso decompô-lo em seus componentes e aprender como eles funcionam primeiro. Às vezes, é mais fácil para meu cérebro lidar com um aprendizado como esse, em vez de abordar um problema de forma holística, e eu posso usar esse conhecimento para construir outras coisas complexas semelhantes. Também recomendo a leitura de livros sobre lógica e raciocínio, escolhendo obras de pensadores clássicos e modernos (comece com Aristóteles e suba). Eles podem fornecer alguns dos fundamentos da lógica básica que você pode usar para ajudar na resolução de problemas em computadores. E, é claro, se você não conseguir resolver um problema e estiver trabalhando por um tempo, faça uma pausa no cérebro. Ruminar sobre um aspecto particular de um problema às vezes é prejudicial. Todo mundo precisa de pausas :)


0

A parte mais difícil da solução de problemas é o "estreitamento perceptivo".

Você escolhe algo que parece ser o problema e persegue obstinadamente até ficar exausto e sem progresso.

A maneira de fazer isso é ter certeza - absolutamente certo - de que realmente entende o problema. "Resolver o problema certo" é a parte mais importante da solução de problemas.

Às vezes eles chamam isso de "pensar fora da caixa". "A caixa" é um ponto de vista estreito que pode não incluir o problema real e fundamental. Pensar fora da caixa é procurar o problema certo a ser resolvido.

Existem inúmeros livros sobre estratégias para evitar o estreitamento de foco prematuro no problema errado.

O truque é principalmente identificar qual é o resultado real. Depois, descubra o que bloqueia esse resultado desejável.


0

Honestamente, acho que todo mundo é diferente, portanto, o roteiro de todos para se tornar um melhor solucionador de problemas é diferente. Você pode aprender com a experiência de outras pessoas, mas no final você precisa forjar seu próprio caminho. Isso é essencialmente aprender algo da "maneira difícil", mas é eficaz nesse caso.

Aqui está como comecei a melhorar minha solução de problemas, embora ainda não seja um ótimo solucionador de problemas, apenas um melhor do que era no ano passado. Recebi um novo projeto em andamento que envolvia a extensão de um software de rastreamento de tempo de código aberto, adicionando três novos relatórios para gerenciamento. Este software foi escrito em um idioma que eu nunca havia usado e estava mal documentado e altamente ofuscado. Eu pesquisei e fiz uma tonelada de pesquisa e, em seguida, apenas trabalhei nos relatórios em etapas de bebê, uma vez que tinha a funcionalidade básica, aprimorei-os e, finalmente, adicionei mais recursos.

Então, em outras palavras, eu recomendo que você encontre algum tipo de projeto do mundo real para se afundar ou nadar. Se você atualmente trabalha como programador, encontre um projeto ou peça um ao seu chefe. Se esse cenário não for possível, encontre alguém fora do trabalho, talvez contrato / trabalho freelance ou algo assim. Resolvo os problemas muito bem e muito rapidamente quando preciso e retenho esse conhecimento devido à intensidade do projeto. Se isso não funcionar, faça o que todo mundo sugere neste tópico :).


0

A resposta está na pergunta , apresentando soluções diferentes. Sempre há mais de uma solução (por exemplo, a classificação pode ser feita de diferentes maneiras, como classificação de bolhas, classificação de seleções etc.), você só precisa escolher uma maneira de fazê-lo (classificação) de maneira eficiente. Tente com a próxima vez diferente e assim por diante ..... E livros para Resolução de problemas ..... Nenhum Você não pode aprender habilidades de resolução de problemas nos livros, mais código você executará mais conhecimento que ganhará. Boa sorte


0

É fácil para um programador atacar mentalmente um problema visualizando como resolvê-lo com sua linguagem de programação favorita. Assim como o carpinteiro clássico que vê todos os problemas como pregos quando sua ferramenta favorita é o martelo.

Penso que os melhores exercícios para resolver problemas surgem quando você ultrapassa o nível prático e apenas pensa em termos de "é disso que eu precisaria para resolvê-lo da melhor maneira possível". Em alguns casos, talvez você precise aprender (muitas) coisas novas para aplicar a solução, mas o ponto principal é que sua capacidade de elaborar uma solução não deve se limitar às suas técnicas históricas e existentes.

Um exemplo prático antigo para mim é que aprendi a implementar multitarefa cooperativa eficiente quando percebi que meu problema não precisava de threads preventivos, embora eu normalmente tivesse ido direto à minha zona de conforto, pressionando todos esses mutexes (que eventualmente sempre parecem parar de se sentir confortáveis ​​em algum momento ..).


0

No desenvolvimento de aplicativos, muitos dos problemas que enfrentamos são nossa própria invenção ou a invenção do idiota do qual herdamos a base de código errada. A resolução de um problema geralmente se resume a encontrar a fonte . Freqüentemente, uma vez que descobrimos onde está acontecendo, é necessária mera competência para resolvê- la.

Para esse fim:

  1. Aprenda sua plataforma.
  2. Aprenda suas ferramentas.
  3. Saiba quais ferramentas estão disponíveis para sua plataforma que você ainda não encontrou.

Todo o treinamento do cérebro no mundo é inútil sem informações para o cérebro usar. Para resolver um problema, você deve saber quais são as possibilidades primeiro! Mesmo assim, é muito mais rápido trabalhar com boas informações em vez de apenas uma descrição do problema.

Eu poderia especular até que as vacas voltem para casa sobre por que algo está demorando muito para ser executado. Mas se eu disser "vamos obter alguns dados primeiro", posso ver que muitas exceções estão sendo lançadas e perceber que eu poderia mudar isso para uma declaração if. Sem saber como coletar as informações, sabendo que na minha plataforma as exceções exigem um pouco de sobrecarga e que há uma maneira de verificar antes que a tentativa seja mais rápida, nunca resolveria o problema.


0

Há duas partes em sua resposta:

a) Técnica para a solução real de problemas

b) Tornar seu cérebro inerentemente "melhor" em pensar e resolver problemas

Sempre houve ótimas respostas na técnica (suponha que você conheça o problema, etc.), por isso não vou abordar isso tanto. Quanto ao treinamento do seu cérebro, há algumas coisas que você pode fazer para atravessar essas sinapses e criar mais interconexões

1) Aprenda um novo idioma, um idioma real (como francês ou chinês pode ser uma boa aposta atualmente)

2) Aprenda a tocar um novo instrumento

3) Faça algo artístico como pintar, desenhar ou esculpir

4) Jogue scrabble ou faça palavras cruzadas

5) Dance como você quer. Não, não estou brincando. Foi demonstrado que a dança afeta o cérebro e o pensamento

6) Amplie suas experiências, soluções inovadoras surgiram da aplicação de uma teoria em um campo em outro, então estude diferentes campos e áreas que você achar interessantes

7) Exercício, exercício é crucialmente importante para melhorar o processo de pensamento

Por fim, vou oferecer minha melhor dica para solucionar problemas difíceis: fazer uma longa caminhada. Descobri que isso faz milagres para limpar sua cabeça e deixar que se contemple problemas



0

Meu conselho seria jogar fora o livro!

Não literalmente, é claro. O que quero dizer é: entrar em uma área de tópico em que você tem pouca experiência e resolver problemas difíceis lá, sem aprender sobre as soluções existentes. Confie apenas em sua criatividade e pensamento crítico e talvez em um manual de referência.

Você pode criar um formato de imagem. Ou um servidor web. Ou um esquema de compactação. Sistema de arquivo. Núcleo. Inteligência artificial. Linguagem de programação. Sistema de visão computacional.

Algo que você acha interessante, razoavelmente complexo e sobre o qual você nunca aprendeu. Não leia sobre isso: apenas entre diretamente. Experimente. Cometer erros. Reinventar a roda.

Não peça ajuda. Fique longe de tutoriais. Fique longe da teoria. Não puxe uma solução da prateleira.

Por quê?

  • Aprendemos melhor com os erros.
  • Oferece a oportunidade de praticar a criação criativa de soluções, em vez de regurgitar e adaptar soluções antigas.
  • Você é forçado a avaliar suas idéias. Você não pode avaliá-los sem desenvolver um bom entendimento de suas ferramentas, do problema que está resolvendo e da ideia que deseja avaliar. Isso leva a uma compreensão mais profunda do tópico do que você desenvolveria. (Fique à vontade para ler sobre as ferramentas que você está usando, apenas não leia sobre o problema que você está tentando resolver.)

Faça algumas tentativas e, quando estiver satisfeito com o que conseguiu, deixe-o por alguns meses. Então volte sempre e veja se consegue encontrar uma nova perspectiva. Depois disso, é hora de começar a ler sobre o problema e como os outros o resolveram (ou conversaram com as pessoas). Nesse ponto, em vez de dizer para si mesmo "sim, isso faz sentido" enquanto você lê, você diz "sim, exatamente ", ou "bem, até certo ponto" ou "uau, isso é inteligente".

Em outras palavras, você pensará muito mais criticamente sobre o que lê e encontrará muito mais fácil de entender e lembrar, porque você já possui uma grande "estrutura mental" para anexá-la. Você se sentirá bem com as coisas que descobriu de forma independente e sairá com um monte de novos conhecimentos.

Não tente tornar sua solução perfeita. Apenas prove para si mesmo que você pode resolver o problema. Adote uma atitude de "posso fazer" e, se você se sentir intimidado pelo problema, lembre-se de que a pessoa que o resolveu primeiro sabia muito sobre você (na verdade, eles não sabiam que tinha uma solução!).


0

A solução de problemas não é algo que possa ser ensinado ou mesmo aprendido pela leitura. A única maneira de melhorar a resolução de problemas é resolvê-los.

Existem diferentes técnicas e metodologias para solução de problemas sobre as quais você pode ler e sobre ferramentas e tecnologias que podem ser usadas para resolver problemas em um domínio específico. A menos que você pense continuamente nos problemas, tente encontrar soluções (encontre várias soluções para cada problema e avalie-as uma contra a outra) e depois avalie suas soluções com as soluções desenvolvidas por outras pessoas, você não ficará melhor com o problema resolução.

Eu recomendo pegar uma cópia do Pragmatic Thinking and Learning: Refactor Your Wetware de Andy Hunt . É um livro sobre como você pensa, reage e aprende. Traz teorias relevantes da teoria comportamental e de outras ciências cognitivas. É voltado especificamente para desenvolvedores de software, mas aplicável a qualquer profissional do conhecimento.


0

Para iniciantes em programação como eu, recomendo o livro "Think Like a Programmer". No primeiro capítulo, aborda técnicas de resolução de problemas, como reafirmar e dividir o problema, começando com o que você sabe, reduzindo, analogias e experimentando.

Depois, existem técnicas mais avançadas com exemplos em C ++: solução de problemas com matrizes, ponteiros e memória dinâmica, classes, recursão, reutilização de código. Não posso comentar esta parte porque ainda é muito difícil para mim.


-1

Eu resolvo o maior número de problemas possível. Eu também gosto de alguns livros de quebra-cabeça como este . Eu também mexo com jogos de solução de problemas, como jogos de matemática envolvendo números primos ou algo assim, sudoku, a Torre de Hanói, etc. Basta encontrar coisas para resolver. Além disso, codifique-o quando possível.


-1

Tchau resolvendo muitos problemas!

você começa com problemas fáceis e passa para problemas mais difíceis quando os fáceis se tornam uma rotina em vez de problemas.


-4

Não se mantenha na teoria, pratique mais. Com a prática vem a experiência.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.