O que você faz quando parece que não consegue entender uma certa parte da programação? [fechadas]

11

Estou aprendendo novos idiomas à medida que avança, escrevo código para programas muito básicos em vários idiomas e vou para as aulas. Eu li livros, artigos, lições, vídeos, você escolhe, no entanto, parece que não consigo entender certas coisas.

Por exemplo, eu nunca entendi indicadores - no que eles são bons. (NÃO FAZ PARTE DA PERGUNTA - não é necessário marcar novamente com "Ponteiros" ...)


Minha pergunta, no entanto, não é o que os ponteiros fazem, mas como posso entender coisas assim? Se, depois de ler um livro ou um artigo sobre uma certa parte da programação, e eu não entendo, o que devo fazer? Escrever código em um determinado recurso da programação certamente ajuda, no entanto, na verdade, não ajuda muito a entender isso. A parte teórica é importante no entendimento.

Bugster
fonte
11
Eu gostaria de entender por que as pessoas têm tanta dificuldade em entender os indicadores. O nome fornece todo o esclarecimento necessário.
ChaosPandion
1
Algum Computer Architecture 101curso ajudaria muito a entender os ponteiros. ...e qualquer outra coisa.
ZJR 28/02/12
6
A questão não é exatamente sobre ponteiros, é uma pergunta geral, mas obrigada.
Bugster
2
Eu não acho que lembrar o cara do exemplo com o qual ele confessou ter problemas o ajudará um pouco para a iluminação ... Feito com bastante frequência, no entanto, impedirá que ele peça ajuda por medo de ser atropelado. longa sequência de respostas mesquinhas e pedantes e comentários negativos.
haylem 28/02/12
4
@FrustratedWithFormsDesigner: "Como aprendo a aprender", eu acho. Qual é uma pergunta válida e valiosa.
haylem 28/02/12

Respostas:

22

Se você tiver problemas para entender um conceito abstrato, basta descer um nível. Se você não conseguir obter os ponteiros em C - desça até o nível da montagem. Ainda tem problemas? Aprenda mais sobre o hardware, até os portões lógicos.

SK-logic
fonte
2
+1: Trabalhou para mim. Eu tive problemas com ponteiros no ALGOL até começar a escrever a linguagem de montagem PDP-10.
22612 kevin cline
2
Idéia interessante. Embora eu aponte que escrever e executar um programa em assembly está indo longe demais. Na minha opinião, ir além do ponto de entendimento básico é desnecessário nesse nível. Mas ei, se é isso que você quer fazer, mais poder para você!
Bryan Campo
1
@ George Bailey, sim, pode ser um pouco exagerado para qualquer montagem e hardware reais. É por isso que existem MIXe outras arquiteturas de brinquedos similares por aí. Para uma parte de hardware, é a mesma coisa - existem muitos núcleos simples de CPU de brinquedo para estudar.
SK-logic
+1: ideia interessante e, com certeza, provavelmente funcionará, mas (para reutilizar o caso de exemplo do OP) descer do nível de entrada C para o nível de entrada ASM pode ser um caminho longo, difícil e sinuoso para um iniciante, que provavelmente seguirá mais tempo do que o previsto pelo curso / projeto / outro. Também pode alienar pessoas mal motivadas (o que provavelmente não é o caso do OP, mas de uma perspectiva de nível superior, isso bloquearia muitos estudantes que frequentam aulas de ciências da computação e precisam entender isso, mas não dão a mínima para a própria ciência da computação). . Mas definitivamente é uma boa ideia a longo prazo.
haylem 28/02/12
Bem, meu diploma de CS cobriu isso em arquitetura de computadores. Aprendemos sobre portas lógicas, as combinamos em um simulador lógico para criar somadores, ALUs e, eventualmente, uma CPU RISC muito simples. Também escrevemos programas simples na montagem do MIPS. Tudo isso era necessário para um bacharelado em ciência da computação e não era realmente considerado um dos cursos "weeder", então não acho que seja exagerado ou muito longe.
Adam Jaskiewicz
17

Ciclo de vida curto de aprendizado incremental

  1. Tente e não consiga entender o conceito.
  2. Tente implementar algo que ilustra o conceito.
  3. Tente fazer um diagrama do conceito no quadro branco (se aplicável)
  4. Tente conversar com alguém que entenda o conceito.
  5. Tente explicar os bits que você entende para essa pessoa (às vezes ajuda a ver a luz).
  6. Reinicie a partir de 1 até que você possa finalmente explicar para alguém que está no estado 1 e fazê-lo entender.

Etapas adicionais

Para usar com cautela.

  • Pesquise material adicional de leitura e estudo :
    • online (mecanismos de pesquisa populares e Wikipedia são ótimos amigos),
    • na biblioteca (não subestime livros e as pessoas que vão lá para lê-los),
    • no seu sistema (documentação empacotados e doc ferramentas são muitas vezes alienar no início, mas o seu melhor Goto-buddy depois de um tempo:. aprender a encontrar o que você está procurando neles por exemplo man -k, apropos, etc ...)
  • Tente ler algum código usando o conceito ...
  • ... e percorra o código com um depurador.

Eles são mais furtivos, pois você precisa se reavaliar para garantir que está certo. A orientação direta por uma pessoa experiente geralmente é melhor, seguida, é claro, pela sua própria validação do conhecimento adquirido, reimplementando o que você acabou de aprender (e, em seguida, tentando avançar um pouco mais e aprender um conceito de nível superior construído no topo). dessa, por exemplo, listas vinculadas para seus ponteiros).

Créditos: Nupul (para diagramação)

haylem
fonte
2
+1! Posso acrescentar - antes de falar, tente o quadro branco para 'esboçá-lo' (ou apenas mantenha o quadro útil à mão quando estiver conversando com alguém :)
PhD
1
+1 para "percorrer o código com um depurador". Eu aprendi sobre muitos conceitos com ferramentas simples de depuração ...
funkymushroom
@ Nupul: boa sugestão, acrescentou.
28512 haylem
@ funkymushroom: De fato, embora eu diria que geralmente você não aprende o conceito dessa maneira. No entanto, ajuda a "levantar a névoa" quando está bem na sua frente e você simplesmente não conseguia ver as peças se juntarem, porque você está muito concentrado em algo ou sua mente está frita. Acho mais útil entender problemas gerais de algoritmo do que conceitos gerais.
28512 haylem
Conversar com o quadro branco fez isso por mim.
Peter
5

Na minha experiência, é tudo sobre entrada e feedback. Você deseja obter informações da forma mais ampla possível e obter feedback sobre seus erros o mais rápido possível.

Na minha experiência, meu diploma de CS era muito seco, muito formal e totalmente inútil no ensino de qualquer programação. Participei de duas ou três palestras por semana e, se você não conseguir, é praticamente isso: o professor tem outra classe para ensinar e não pode ficar por perto para ajudá-lo. E, provavelmente, esse cara entende de uma certa maneira, e ele a ensina de uma certa maneira, e é isso, então, se você não pensa como ele, nunca vai entender. O pior é que, uma vez que ele provavelmente entende um bilhão de outros conceitos relacionados, ele provavelmente o enquadrará em termos desses outros conceitos, que podem muito bem ultrapassar sua cabeça ou simplesmente nem mesmo no material do curso.

Fui ao Stack Overflow e perguntei no canal de bate-papo C ++ e obtive cinco explicações diferentes em cinco minutos. Eles foram todos adaptados especificamente para mim e para o problema exato que eu tinha, então não é surpresa que um deles tenha chegado em casa por mim e eu o entendi. A taxa com a qual você pode aprender ao receber feedback ao vivo de vários especialistas excede largamente o que você pode obter de uma fonte de papel seco.

Então, idealmente, faça uma pausa e, em seguida, você encontrará um grupo pequeno e médio de pessoas afins que não têm nada melhor para fazer e conversar com elas ao vivo. A propósito, o Stack Overflow é um excelente lugar para obter esse tipo de feedback pessoal de alta qualidade e alta velocidade.

DeadMG
fonte
3

Em nenhuma ordem, livros, amigos e leitura de códigos bem documentados são boas fontes. A prática é a única maneira de aprender: tente escrever pequenos testes de unidade. Por exemplo, para ponteiros escrever código que lida com seqüências de caracteres: inverter uma string, inverter cada palavra em uma string, testar palíndromo, substituir uma letra por um número ...

Faça perguntas sobre stackexchange ...;>

Sardathrion - contra o abuso de SE
fonte
2

A prática leva à perfeição! (bem melhor de qualquer maneira). Continue tentando e tente usar o máximo de fontes e sentidos possíveis:

Fontes: Livros, Internet, Grupos de usuários, amigos, Aprendizado em vídeo, usando sites que permitem testar pouco 'código' como jsfiddle (principalmente html),
Rubular (expressões Ruby),
SQlzoo para testar sql,
jslint para javascript,
bloco de código para muitos idiomas.

Para se lembrar de coisas abstratas, considere a mnômica - os médicos as usam!

Considere-se um aprendiz ao longo da vida e permaneça humilde e poderá ir longe.

viciado
fonte
1
+1 para "prática". Mas mnemônicos, ugh. Eles são uma muleta muito insuficiente que nunca pode substituir e nunca deve substituir a compreensão. De fato, eles marcam a ausência de entendimento. "Os médicos os usam" porque são forçados a aprender muitos fatos desconectados em muito pouco tempo. Estamos lentamente voltando ao fato de que nossa educação para médicos é péssima, e os EUA, por exemplo, estão no caminho de remodelar completamente a educação. Mnemônicos não são uma solução, eles fazem parte do problema. Se você se encontra usando, não conseguiu entender.
21912 Konrad Rudolph
1

Você precisa mudar seu foco por um tempo, não por 5 minutos. ou 5 horas ... quero dizer algo como 1 dia sem olhar para esse código ... apenas relaxe ... vá ler algo diferente ...

Se você precisa entender agora ... peça ajuda a amigos ou aqui =)

Gerep
fonte
1

O que todo mundo na TI faz.

Utilizo um mecanismo de pesquisa para pesquisar os conceitos relacionados que não entendo até poder revisitar o tópico que inicialmente queria entender.

Provavelmente, você também não entende completamente a pilha, a pilha, as variáveis ​​automáticas, o processo de compilação do C ++, a montagem, a memória gerenciada e a memória não gerenciada.

Mais clareza sobre esses e outros conceitos relacionados a ponteiros provavelmente esclareceriam tudo.

Brian
fonte
1

Não existe uma maneira rápida de entender um assunto. Seu sucesso depende de quanto contexto você traz em seus estudos. Você terá muita sorte em encontrar alguém que explique as coisas com seu ponto de vista. Como as máquinas de Turing, qualquer um pode aprender o que os outros sabem, e é apenas uma questão de persistência e aceitação que a frustração é natural.

Lembro-me da imensa dificuldade que tive com ponteiros. Não foi até um cara muito paciente me explicar como se eu fosse um completo idiota que eu entendi. Às vezes é o que é preciso.

Kevin Hsu
fonte
1

Este é um problema comum no aprendizado e no ensino. E, como outros já disseram, não há maneira de contornar isso. É uma verdade fundamental que todos aprendemos de maneira diferente, já que nossos cérebros são conectados de maneira sutil, mas crucial.

O aprendizado gera novas conexões neuronais. Sem entrar muito na neurociência (sobre a qual não sei quase nada), gerar novas conexões requer diferentes tipos de exposição a um conceito para pessoas diferentes. Tente muitos ângulos diferentes, leia / ouça / assista a explicações diferentes. Prática!

Se isso não funcionar, deixe o problema de lado: você pode simplesmente estar perdendo outra parte do quebra-cabeça que, uma vez adquirida, faz com que o problema original pareça óbvio.

Você conhece esses aha! momentos? É quando seu cérebro acaba de fazer uma nova conexão. É assim que o aprendizado acontece.

Aliás, qualquer bom professor sabe disso. As diretrizes para redação técnica geralmente afirmam que todo conceito deve ser explicado pelo menos duas vezes, usando palavras diferentes (e talvez com algum texto entre elas). Se você prestar atenção, será capaz de perceber que todos os bons escritores científicos seguem essa regra.

Infelizmente, muitos professores o ignoram e explicam as coisas apenas uma vez. E mesmo que consigam encontrar uma explicação elegante com uma grande metáfora, isso simplesmente não é suficiente.

Konrad Rudolph
fonte
0
  1. Leia qualquer documentação relevante e pesquise no Google suas dúvidas.

  2. Tente escrever exemplos de código, veja o que eles fazem.

  3. Tente executar o código na depuração e assista passo a passo.

  4. Se você ainda não entende um determinado comportamento, pergunte a alguém, pessoalmente ou em um site como este. Se você tentou todas as opções acima, deve ter todos os elementos para compor uma boa pergunta. Não seja tímido :)

Eu acho que é praticamente o que todo mundo faz.

jlemos
fonte
0

Continue pesquisando e aprendendo. Eu tive o mesmo problema com vários outros aspectos da programação. Mas conversar com outras pessoas e ler artigos acaba levando a um momento "AHA". Geralmente, é alguma outra postagem no blog ou resposta SO que apresenta as informações que eu posso seguir.

Basicamente, continue procurando e seja paciente com o entendimento que está por vir.

Schleis
fonte