Sei que aprendendo um idioma, você pode simplesmente comprar um livro, seguir os exemplos e, sempre que possível, tentar os exercícios. Mas o que realmente estou procurando é como dominar o idioma depois que você o aprender.
Agora eu sei que a experiência é um fator importante, mas que tal aprender o interior da língua, qual é a estrutura subjacente etc.
Existem artigos por aí dizendo: leia este livro, leia esse livro, faça este jogo e esse jogo. Mas para mim isso não significa dominar um idioma. Quero poder ler o código de outras pessoas e entendê-lo, por mais difícil que seja. Para entender quando usar uma função e quando outra, etc.
A lista poderia continuar indefinidamente, mas acredito que fiz isso. :)
E, finalmente, tome qualquer linguagem como exemplo, se necessário, embora seja melhor se C for tomado como exemplo.
fonte
Respostas:
Eu tenho que responder: "Todas as opções acima". As pessoas discutem se a codificação é uma arte, uma arte, uma disciplina de engenharia ou um ramo da matemática, e acho mais justo dizer que é parte de cada uma. Assim, quanto mais técnicas você trouxer para o domínio da língua, melhor. Aqui está uma lista parcial:
Use o idioma o dia todo, todos os dias. Geralmente, isso significa estar empregado em tempo integral no idioma.
Leia tudo o que puder sobre o idioma. Especialmente, "melhores práticas" e expressões idiomáticas.
Participe de um grupo de usuários para conversar com outras pessoas sobre o idioma e o que eles fazem com ele.
Trabalhe com o código de outras pessoas! Não há maneira mais rápida de aprender o que não fazer em um idioma do que ter que limpar alguém que fez algo horrível.
Apoie o código que você escreve - todo bug se torna um tour pelas suas piores decisões!
Estudar ciência da computação e idiomas em geral
Aprenda um idioma muito diferente. Um ótimo elogio a C seria uma linguagem funcional como o Lisp. Isso mudará a maneira como você pensa sobre sua linguagem processual de dentro para fora.
Aprenda a usar as estruturas e APIs disponíveis para esse idioma.
Reserve um tempo para fazer suas próprias experiências com o idioma. O SICP não é aplicável ao C, mas a atitude de aprender um idioma testando seus limites é muito produtiva.
Leia a história do idioma para saber por que ele foi feito da maneira que é.
Participe de conferências para ouvir os autores do idioma falar ou para saber o que os líderes da indústria estão fazendo com o idioma.
Faça uma aula no idioma.
Ensine o idioma a outras pessoas (graças a Bryan Oakley )
Em resumo, faça tudo o que puder pensar. Não há como saber tudo sobre a maioria dos idiomas. Toda técnica de aprendizado que você usa traz uma perspectiva adicional ao seu entendimento.
fonte
Every technique you use to learn brings and additional perspective to your understanding.
10.000 horas de prática é o que é preciso.
Leia "Aprenda a programar em dez anos"
Principais pontos de cima:
fonte
NUNCA se considere o mestre de todo o idioma até que você tenha implementado um idioma melhor que esse. O que significa que, para aprender como um idioma específico funciona por baixo, obtenha um livro que ensine os conceitos de compilador / intérprete do idioma. Por exemplo:
C: O livro do compilador LCC
C ++: o design e a evolução do C ++ (e depois construa seu próprio compilador C ++ ou pelo menos entenda a implementação de um usando o código do compilador GNU C ++)
Java: Obtenha "Inside JVM" e obtenha o código-fonte javac. O código .C de "java" também é útil
Python: implementação do CPython.
ObjectiveC: Quase todo o material da Apple sobre os componentes internos dos códigos-fonte do ambiente de tempo de execução ObjC e do compilador ajudará você.
Lisp: SICP Book (ensina Scheme e um interpretador-compilador básico para linguagens semelhantes a lisp): Lisp in Small Pieces (outro bom livro).
fonte
Tente usar o idioma para algo para o qual não foi planejado. Escreva um driver de dispositivo em Python ou uma biblioteca de manipulação de matrizes em COBOL. Eu acho que uma das melhores maneiras de dominar um idioma é realmente pressioná-lo, tentando fazer com que seus pontos fortes superem suas fraquezas.
fonte
Vou facilitar para você. Você nunca vai dominar um idioma. Período. Se você pensa que tem, então obviamente você não tem. De repente, não há um topo de montanha que você alcance e diga "Bem, agora eu já dominei completamente esse idioma. E agora?" Mesmo programadores experientes que trabalham com a mesma linguagem há décadas lhe dirão que, às vezes, eles ainda encontram novas idéias, processos, práticas etc. O verdadeiro objetivo é dominar seu entendimento conceitual de uma linguagem ou línguas. A capacidade de aprender novos conceitos e a velocidade com a qual você pode adotar recursos novos ou alterados no idioma são muito mais importantes do que o conhecimento comum de cada palavra-chave e sintaxe. Pare de se preocupar em "dominar" um idioma e simplesmente se preocupe em melhorar e refinar continuamente a qualidade e a eficiência do seu código.
fonte
The true goal is to master your conceptual understanding of a language or languages.
Exatamente. Foi isso que eu realmente quis dizer.Você já sabe a resposta para isso
Tudo se resume a trabalho duro e determinação e por tudo o que você pode nunca chegar lá.
Pense de onde tiramos o termo - para se tornar um Mestre Artesão, você tinha que ser um aprendiz e depois um viajante, e somente eles, se você tivesse a chance de se tornar um mestre. Ao longo do caminho, você seria ensinado e praticaria, observando e questionando outras pessoas em seu ofício e (esperançosamente) aprendendo com elas.
Não há bala mágica ...
fonte
Comece lendo e entendendo o que é SDLC (também conhecido como ciclo de vida de desenvolvimento de software). É um processo iterativo que envolve auto-aperfeiçoamento, aprendizado,
**practicing, practicing...**
Isso abriria seus horizontes em quais áreas você precisa aprender ou melhorar. Existem vários livros básicos de engenharia de software que você também consideraria muito útil ler quando criar alguns aplicativos por conta própria.
Além disso, quando você se sentir confiante com uma linguagem OOP , poderá começar a aprender padrões de design , e os padrões de Head First Design são realmente um bom livro a considerar. Eu amo este livro.
fonte
Não existe substituto para experiência. Para dominar algo, você precisa fazer / usar muito, para muitas coisas diferentes.
Então vá em frente e use essa linguagem para exercícios (como o Project Euler ) e projetos pessoais, coisas que você realmente precisa ou coisas que você acha interessantes. Escreva um jogo, escreva um aplicativo da web, escreva um analisador, como quiser. E a cada passo, esforce-se para entender o que você está fazendo, em vez de apenas colar o código ou seguir as instruções.
Isso é algo que você pode fazer imediatamente depois de entender a sintaxe básica. Basta pegar um código e reservar um tempo para detalhá-lo. Procure coisas que você não entende ou faça perguntas específicas em locais como o estouro de pilha .
fonte
No lado mais alto do problema, aprenda sobre arquitetura: como organizar seus projetos, qual é a sua estrutura. Não basta deixá-los crescer aleatoriamente.
No nível médio, aprenda diferentes técnicas e paradigmas. Quanto mais ferramentas diversas você tiver em seu repertório, mais poder terá para você. Se você estudou apenas java, python e ruby, foi exposto apenas a uma pequena parte do espaço de programação. Aprenda programação imperativa e funcional, aprenda prólogo e J. A idéia não é "dominar" centenas de idiomas, mas aprender sobre diferentes maneiras de resolver os mesmos problemas.
No lado de baixo nível do problema, uma coisa que poderia ajudá-lo a ser um programador melhor (de fato, seja o que for que você faz) é ter um bom modelo mental da plataforma. Por exemplo, você pode aprender como as estruturas de controle C funcionam e conhecer as bibliotecas mais comuns, mas se você não tiver um modelo mental de como os ponteiros e a memória funcionam, terá problemas com expressões moderadamente complexas.
fonte
Posso fazer algumas sugestões?
Primeiro, se você puder encontrar um mentor para discutir o uso do idioma e obter as melhores dicas e truques, além de responder quando uma técnica é melhor que a outra.
Em segundo lugar, pratique o máximo possível e experimente o idioma ao máximo! Eu costumava trabalhar em equipe, que (por diversão) selecionava um verbo ou outra parte da linguagem de programação do manual todos os dias. Foi uma marca de honra se você pudesse trabalhar na sua codificação naquele dia. Isso significava que toda a equipe de programação precisava examinar e entender o termo (às vezes) obscuro para entendê-lo e usá-lo efetivamente. Alguns dias fracassamos, mas essa equipe foi divertida de trabalhar e realmente tecnicamente ligada !!
fonte
As linguagens de programação refletem as idéias por trás dos paradigmas de programação que foram desenvolvidos visando o desenvolvimento de software de uso geral ou o desenvolvimento de software de uso especial. Por exemplo, uma linguagem de programa como Java representa o paradigma de programa orientado a objetos, mas o AspectJ (uma extensão de Java) é usado para programar de acordo com a programação orientada a aspectos.
Dada esta breve introdução, para realmente dominar um idioma, comprar e ler um livro por si só não seria muito útil. Você precisaria entender o ambiente em que pode programar usando o idioma desejado, aprender sobre o paradigma e, mais importante, criar um aplicativo significativo usando o idioma. Construir um pequeno aplicativo que pode oferecer várias ferramentas fornecidas pelo idioma é uma abordagem de aprendizado realmente útil.
Eu tenho visto pessoas vindas da comunidade C pura sem aprender nada sobre orientação a objetos e dificuldade em aprender Java ou objetivo-c. Também vi pessoas lutando com a programação de interfaces de usuário quando realmente não entenderam os elementos da interface do usuário, programação orientada a eventos, etc.
Eu espero que isso ajude!
fonte
Eu adicionaria dois itens à lista de Glen
fonte
Para desenvolver o que a @TMN disse. Tive grande sucesso em aprender idiomas escrevendo o mesmo programa em um idioma diferente.
Por exemplo, escrever um programa que lê um arquivo CSV, analisa o texto e depois o grava em um segundo CSV com as colunas na ordem inversa.
Como isso,
para
Isso lhe dará um entendimento básico ou o idioma. Então veja o que mais você pode fazer. Talvez permita a substituição de valor, reordenação ou leitura na linha de comando. Torne-o tão complexo quanto você desejar.
Também acho o que o @GlenPeterson disse sobre,
É uma ótima idéia. Eu sugeriria uma linguagem como Haskell, porque nas versões mais recentes você pode programar usando todos os quatro paradigmas de programação OO, procedurais, lógicos ou funcionais. Mesmo sendo uma linguagem funcional, você pode, com algum esforço, implementar outros paradigmas, o que seria uma boa experiência de aprendizado.
Ótima linguagem para brincar.
fonte
Você não pode aprender um idioma do livro. Tudo que você precisa é prática e prática. Não pense que você pode aprender um idioma desse livro em particular ou de uma fonte específica. Apenas pense que a linguagem de programação é a mesma que a linguagem humana. Você não pode simplesmente aprender inglês ou francês lendo um livro em particular. vida do dia. Código do zero, amplie sua funcionalidade, tente criar algo que o deixará um pouco satisfeito. E se você está pensando em dominar uma linguagem como conhecendo toda a linguagem e usando cada elemento da linguagem de programação em codificação prática, você NÃO PODE. Ou mesmo se você puder, pode levar de 10 a 15 anos.
fonte