Pense como um programador. Tutorial de solução de problemas

imagem

Se você está interessado em programar, pode ter ouvido a frase:
"Todo mundo precisa aprender programação, porque isso ensina você a pensar."

- Steve Jobs

Talvez você também tenha se perguntado o que significa pensar como programador?

De fato, estamos falando de uma maneira mais eficiente de resolver problemas.

Este post tem como objetivo ensinar isso a você.

Após a leitura, você entenderá com mais precisão o que precisa ser feito para encontrar as melhores soluções.

Por que isso é importante?


A solução de problemas é uma habilidade básica.

Nós constantemente resolvemos problemas. Grande e pequeno. Como fazemos isso? Às vezes é bom ... se você tiver sorte.

Se você não possui uma abordagem sistemática, provavelmente resolve os problemas da seguinte maneira (fiz isso quando estava começando a codificar):

  1. tentando uma solução
  2. se não couber, tente outro,
  3. se não funcionar, repita a etapa 2 até a vitória.

Você pode ter sorte, mas esta é a pior maneira! E isso pode levar muito tempo.

A melhor maneira:

  1. ter uma abordagem sistemática
  2. colocá-lo em prática.

“A maioria dos empregadores considera a capacidade de resolver problemas mais importante.

A capacidade de resolver problemas quase por unanimidade é a habilidade mais importante que os empregadores procuram ... Mais importante do que o conhecimento de linguagens de programação, depuração e design de sistemas.

Uma demonstração do pensamento integrado e a capacidade de resolver grandes problemas complexos são tão valiosas (se não mais) quanto as habilidades técnicas básicas necessárias para o trabalho. ”

- Classificação de hackers ( 2018 Developer Skills Report )

Abordagem sistemática


Para encontrar a abordagem correta, segui o conselho do livro de Tim Ferriss sobre o ensino do chef de 4 horas .

Isso me levou a uma entrevista com duas pessoas realmente impressionantes: C. Jordan Ball (1º ou 2º lugar entre 65.000 usuários de Coderbyte ) e V. Anton Spraul (autor de Pense nisso como um programador) Abordagem criativa para criar código. ").

Fiz as mesmas perguntas e adivinhem? Suas respostas foram muito parecidas!

Em breve você também os reconhecerá.

Nota: isso não significa que todos fazem o mesmo. Eles são pessoas diferentes, e você é diferente deles. Mas se você começar com os princípios básicos certos, o resultado será muito melhor e muito mais rápido.
"O erro mais sério que vejo com jovens programadores é o foco na aprendizagem da sintaxe, em vez de aprender a resolver problemas."

- V. Anton Spraul

Então, o que fazer quando você enfrentar um novo desafio?

Vamos seguir as etapas:

1. Compreensão


Entenda o que exatamente precisa ser feito. A maioria das tarefas é difícil porque você não as entende (e é por isso que este é o primeiro passo).

Como você sabe que entende a essência do problema? Tente explicá-lo em linguagem simples.

Lembre-se do caso em que você se fixou em uma tarefa e começou a explicar a si mesmo. Neste ponto, erros lógicos parecem que você nunca viu antes.

A maioria dos programadores conhece esse sentimento.

É por isso que você deve descrever sua tarefa, desenhar um diagrama ou contar a alguém sobre isso (alguns usam um pato de borracha ).
"Se você não pode explicar algo em linguagem simples, não entende."

- Richard Feynman

2. Planejamento


Não comece a resolver um problema sem um plano, esperando não se confundir nele. Planeje sua decisão!

Na programação, você não precisa seguir em frente. Dê tempo ao seu cérebro para analisar e processar informações.

Para obter um bom plano, responda a uma pergunta simples:

"Aplicando a entrada X, que medidas devem ser tomadas para obter Y na saída?"

Nota: os programadores têm uma ótima ferramenta para isso. Comentários!

3. Decomposição


Este é o passo mais importante. Cuidado!

Não tente resolver um grande problema.

Em vez disso, divida-o em subtarefas. Resolvê-los será muito mais fácil.

Em seguida, resolva as subtarefas, começando pelo mais simples. Quando a tarefa parece simples, significa que você sabe a resposta (ou está perto dela).

Resolva cada subtarefa independentemente das outras e combine os resultados após a solução.

A combinação de todas as pequenas tarefas fornecerá a solução para o original.
Parabéns!

Este método é a pedra angular da solução de problemas. Lembre-se disso (releia esta etapa, se necessário).
Se eu pudesse ensinar todo jovem programador a resolver problemas, isso reduziria o montante da dívida técnica.

Suponha que você queira escrever um programa com 10 dígitos e retorne o terceiro maior. Para um iniciante, isso pode ser uma tarefa assustadora, embora exija apenas o conhecimento da sintaxe básica.

Se você estiver preso, precisará simplificar. Em vez do terceiro maior número, que tal encontrar o maior? Ainda é muito complicado? Como encontrar o maior dos três números? Ou mais dos dois?

Reduza o problema até entender como resolvê-lo. Registre a decisão. Expanda a tarefa até retornar à pergunta inicial.

- V. Anton Spraul

4. Preso?


Agora você provavelmente está sentado e pensando: "Ei, isso é legal, mas e se eu não conseguir resolver esse problema?"

Primeiro respire fundo. Não se preocupe. Isso acontece com todo mundo!

A única diferença é que os melhores programadores corrigiam bugs e resolviam problemas com interesse, não com aborrecimento.

De fato, aqui estão três coisas que você deve tentar fazer quando enfrentar dificuldades:

  1. Depuração Verifique passo a passo onde você pode estar errado em sua decisão. Os programadores chamam isso de depuração.
    “A arte da depuração é descobrir a diferença entre o que você escreveu no programa e o que você queria escrever”

    - Andrew Singer
  2. Mudança de abordagem. Volte um passo. Veja a tarefa de um ângulo diferente. É possível ignorar a implementação e aplicar uma abordagem mais geral?
    “Às vezes entramos em tantos detalhes que não levamos em conta os princípios gerais com os quais podemos resolver o problema em um nível superior. [...]

    Um exemplo clássico disso, é claro, é o somatório de uma longa lista de números inteiros consecutivos 1 + 2 + 3 + ... + n, que o jovem Gauss calculou facilmente usando a fórmula n (n + 1) / 2, evitando os problemas associados ao aumento do número de elementos ”

    - C. Jordan Ball

    Nota: Às vezes, é melhor excluir tudo e começar de novo com novas forças. Estou falando serio. Você ficará surpreso com o quão eficaz isso pode ser.
  3. Pesquisa. Oh, bom e velho Google . Não importa qual seja sua tarefa, provavelmente alguém já a resolveu antes de você. Encontre essa pessoa ou solução. Faça isso mesmo que você mesmo descubra. Você pode aprender muito com outras pessoas.

    Cuidado: Não procure uma solução para um grande problema. Procure soluções apenas para subtarefas pequenas. Porque Se você não forçar (pelo menos um pouco), não aprenderá nada de novo. Se você não aprendeu nada, perdeu seu tempo.

Prática


Não espere se tornar um profissional em uma semana. Para resolver bem os problemas, você precisa resolver muitos problemas!

Prática. Prática. E pratique novamente. Somente com o tempo você poderá dizer: "Esse problema pode ser facilmente resolvido com a ajuda de <substitua sua solução aqui>".

Como treinar? Existem opções interessantes!

Quebra-cabeças de xadrez, problemas de matemática, sudoku, monopólio, videogame, etc.

De fato, a prática comum entre as pessoas de sucesso é o hábito de "resolver microtasks". Por exemplo, Peter Thiel joga xadrez e Elon Musk joga videogame.

Byron Reeves disse: "Se você quiser ver como os líderes de negócios podem se parecer daqui a três a cinco anos, veja os jogos online".

Avanço rápido. Elon Musk, Reid Hoffman, Mark Zuckerberg e muitos outros dizem que os jogos foram fundamentais para seu sucesso na criação de suas empresas.

- Mary Meeker ( relatório de tendências da Internet de 2017 )

Isso significa que você só deve jogar? Claro que não.

Mas qual é a essência da maioria dos jogos? É isso mesmo, na solução de problemas!

Então, o que deve estar em exercícios práticos. Algo que permitirá que você resolva muitas micro-tarefas (e, idealmente, você gosta).

Por exemplo, eu gosto de tarefas de programação. E todos os dias eu tento resolver pelo menos um (principalmente no Coderbyte ).

Como eu disse, todas as tarefas têm modelos de solução semelhantes.

Conclusão


Isso é tudo!

Agora você sabe o que significa pensar como um programador.

Você também sabe que a solução de problemas é uma habilidade incrível (básica) que precisa ser desenvolvida.

Preste atenção, agora você também sabe como praticar suas habilidades de resolução de problemas!

Finalmente, quero que você enfrente muitos desafios.
“Quando você pensa que superou com sucesso um obstáculo, outro aparece. Mas é isso que torna a vida interessante. [...]

A vida é o processo de superar obstáculos - fortificações pelas quais devemos romper.

Cada vez que você aprende algo novo.

Cada vez que você desenvolverá força, sabedoria e perspectivas.

Cada vez haverá menos competição. E no final, apenas sua versão aprimorada permanecerá. ”

- Ryan Holiday ( O Obstáculo é o Caminho )

Agora vá resolver os problemas!

E que sorte esteja com você!

Agradecimentos especiais a C. Jordan Ball e V. Anton Spraul. Para os conselhos úteis que eles deram.

Além disso, eu não poderia ter adquirido meu conhecimento de programação tão rapidamente sem a Lambda School . Não posso agradecer ou recomendar.

Source: https://habr.com/ru/post/pt422543/


All Articles