Como posso realmente dominar uma linguagem de programação?

100

Sei que aprendendo uma língua, você pode simplesmente comprar um livro, seguir os exemplos e, sempre que possível, tentar os exercícios. Mas o que eu realmente estou procurando é como dominar a linguagem depois que você aprender isso.

Agora eu sei que a experiência é um fator importante, mas que tal aprender os aspectos internos da linguagem, qual é a estrutura subjacente, etc.

Existem artigos que dizem ler este livro, ler esse livro, fazer este jogo e esse jogo. Mas para mim isso não significa dominar uma língua. Eu quero ser capaz de ler o código de outras pessoas e entendê-lo, não importa o quanto isso seja difícil. Para entender quando usar uma função e quando outra, etc etc.

A lista poderia continuar e continuar, mas eu acredito que eu fiz o ponto. :)

E, finalmente, tome qualquer linguagem como um exemplo, se necessário, embora seja melhor se C for tomado como exemplo.

    
por cprogcr 30.09.2012 / 18:55
fonte

14 respostas

162

Eu tenho que responder: "Todas as opções acima." As pessoas discutem se o código é uma arte, um ofício, uma disciplina de engenharia ou um ramo da matemática, e acho que é mais justo dizer que é um pouco de cada um. Assim, quanto mais técnicas você trouxer para o domínio da linguagem, melhor. Aqui está uma lista parcial:

  • Use o idioma todos os dias, 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 uma língua do que ter que limpar depois de alguém que fez algo horrível.

  • Suporte o código que você escreve - cada bug se torna um tour pelas suas piores decisões!

  • Estude ciência da computação e idiomas em geral

  • Aprenda um idioma muito diferente. Um grande elogio ao C seria uma linguagem funcional como o Lisp. Isso vai mudar a maneira como você pensa sobre sua linguagem procedural de dentro para fora.

  • Aprenda a usar as estruturas e APIs disponíveis para esse idioma.

  • Aproveite o 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 da língua para saber por que ela foi feita da maneira que é.

  • Participe de conferências para ouvir os autores de idiomas ou para ouvir o que os líderes do setor estão fazendo com o idioma.

  • Faça uma aula no idioma.

  • Ensine o idioma a outras pessoas (graças ao Bryan Oakley )

Em resumo, faça tudo o que puder imaginar. Não há como saber tudo sobre a maioria dos idiomas. Cada técnica de aprendizado que você usa traz uma perspectiva adicional para sua compreensão.

    
por 10.10.2017 / 18:42
fonte
52

10.000 horas de prática é o que é necessário.

Leia "Ensine-se a programar em dez anos"

Pontos-chave de cima:

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.
  • Program. The best kind of learning is learning by doing.
  • Talk with other programmers; read other programs.
    
por 20.09.2012 / 10:46
fonte
33

NUNCA considere-se o mestre de todo o idioma até ter implementado uma linguagem melhor do que isso. O que significa que, para aprender como uma determinada linguagem funciona por baixo, obtenha um livro que ensine os conceitos de compilador / intérprete da linguagem. Por exemplo:

  • C: O livro do compilador LCC

  • C ++: O Design e Evolução do C ++ (E, em seguida, continue a construir o seu próprio C ++ compilador ou pelo menos entender a implementação de um usando o código do compilador GNU C ++)

  • Java: obtenha "Inside JVM" e obtenha o código-fonte javac. "java" 's .C código também é útil

  • Python: implementação do CPython.

  • ObjectiveC: Quase qualquer material da Apple sobre os componentes internos dos códigos-fonte do compilador e do tempo de execução do ObjC irá ajudá-lo.

  • Lisp: SICP Book (ensina-lhe Scheme e um interpretador-compilador básico para linguagem lisp like) : Lisp em Small Pieces (outro bom livro).

por 20.09.2012 / 03:35
fonte
11

Tente usar o idioma para algo que não foi destinado a ser usado. Escreva um driver de dispositivo em Python ou uma biblioteca de manipulação de matriz em COBOL. Eu acho que uma das melhores maneiras de dominar uma língua é realmente empurrá-la, tentando fazer com que suas forças superem suas fraquezas.

    
por 19.09.2012 / 17:09
fonte
10

Vou facilitar as coisas para você. Você nunca vai dominar uma língua. Período. Se você acha que tem, então obviamente você não tem. Não há um topo de montanha que de repente você alcance e diga "Bem, agora eu dominei completamente essa linguagem. E agora?" Mesmo programadores experientes que trabalham com a mesma linguagem há décadas dirão que às vezes eles ainda se deparam com novas idéias, processos, práticas, etc. O verdadeiro objetivo é dominar sua compreensão conceitual de um idioma ou idiomas. A capacidade de aprender novos conceitos e a velocidade com que você pode adotar recursos novos ou alterados na linguagem é muito mais importante do que o conhecimento geral de cada palavra-chave e sintaxe. Pare de se preocupar em "dominar" um idioma e simplesmente se preocupe em melhorar e aprimorar continuamente a qualidade e a eficiência de seu código. Isso é o que "mestres" fazem.

    
por 19.09.2012 / 18:10
fonte
5

Você já sabe a resposta para isso

  • Você precisa usar o idioma. Muito. Para resolver uma gama tão diversificada de problemas quanto possível
  • Você tem que ler (e, idealmente, trabalhar com) o código de outras pessoas, de preferência aqueles que têm um grau de domínio (ou seja, um profundo entendimento de pelo menos algum aspecto da linguagem). Por extensão, se você puder conversar com as pessoas sobre a solução de problemas com a linguagem, melhor ainda.

Tudo se resume a trabalho árduo e determinação e por tudo que você nunca pode chegar lá.

Pense em de onde tiramos o termo - para se tornar um Mestre Artesão você tinha que ser um aprendiz e depois um viajante e só eles poderiam ter a chance de se tornar um mestre. Ao longo do caminho você seria ensinado e você praticaria e você observaria e questionaria os outros em seu ofício e (esperançosamente) aprenderia com eles.

Não há bala mágica ...

    
por 19.09.2012 / 16:11
fonte
2

Comece lendo e entendendo o que é SDLC (também conhecido como Vida de desenvolvimento de software -ciclo). É um processo iterativo que envolve auto-aperfeiçoamento, aprendizado, **practicing, practicing...**

Issoabririaseushorizontesemquaisáreasvocêprecisaaprenderoumelhorar.Existemvárioslivrosbásicosdeengenhariadesoftwarequevocêtambémachariaúteisparalerdepoisdecriaralgunsaplicativosporcontaprópria.

Alémdisso,quandovocêsesentirconfiantecomumalinguagemOOP,poderácomeçaraaprenderpadrõesdedesigne Padrões do Head First Design é um livro muito bom a considerar. Eu amo este livro.

    
por 20.09.2012 / 12:43
fonte
2

Não há substituto para a experiência. Para dominar algo, você tem que fazer / usá-lo, no monte, para muitas coisas diferentes.

Então, vá em frente e use essa linguagem para exercícios (como Projeto Euler ) e projetos pessoais, coisas que você realmente precisa, ou coisas que você acabou de pensar é interessante. Escreva um jogo, escreva uma webapp, escreva um analisador, o que você quiser. E a cada passo, esforce-se para entender o que você está fazendo, em vez de apenas colar códigos ou seguir instruções.

I want to be able to read other people's code and understand it, no matter how hard that is.

Isso é algo que você pode fazer imediatamente depois de entender a sintaxe básica. Basta pegar um código e aproveitar para detalhar. Procure coisas que você não entende ou faça perguntas específicas em lugares como estouro de pilha .

    
por 29.09.2012 / 00:18
fonte
2

No lado de alto nível do problema, aprenda sobre arquitetura: como organizar seus projetos, qual é sua estrutura. Não deixe que cresçam aleatoriamente.

No nível médio, aprenda diferentes técnicas e paradigmas. Quanto mais diversas ferramentas você tiver em seu repertório, mais poder terá para você. Se você estudou apenas java, python e ruby, você 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" cem 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, melhor naquilo 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, você terá problemas com expressões moderadamente complexas.

    
por 29.09.2012 / 15:21
fonte
1

Posso fazer algumas sugestões?

Primeiro, se você puder encontrar um mentor para discutir seu uso da língua, e para obter as melhores dicas e truques, e para responder quando uma técnica é melhor que outra.

Em segundo lugar, pratique o máximo possível e experimente a linguagem ao máximo! Eu costumava trabalhar em equipe, que (por uma questão de diversão) pegava um verbo ou outra parte da linguagem de programação do manual a cada dia. 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 analisar e entender o termo (às vezes) obscuro, a fim de compreendê-lo e usá-lo com eficiência. Alguns dias nós falhamos, mas essa equipe foi divertida de trabalhar e realmente tecnicamente ligada !!

    
por 19.09.2012 / 18:16
fonte
0

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 propósito geral ou para o desenvolvimento de software para fins especiais. Por exemplo, uma linguagem de programa como Java representa o paradigma de programa orientado a objeto, 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 uma língua, comprar e ler um livro por si só não seria muito útil. Você precisa entender o ambiente no qual pode programar usando o idioma desejado, aprender sobre o paradigma e, mais importante, criar um aplicativo significativo usando o idioma. Construir uma pequena aplicação que lhe dê uma amostra das várias ferramentas fornecidas pela linguagem é uma abordagem de aprendizagem realmente útil.

Tenho visto pessoas vindas da comunidade C pura sem aprender nada sobre orientação a objetos e dificuldade em aprender Java ou object-c. Eu também tenho visto pessoas se debatendo com interfaces de usuário de programação quando elas realmente não passaram pela compreensão dos elementos da interface do usuário, programação orientada a eventos, etc ...

Espero que isso ajude!

    
por 19.09.2012 / 20:52
fonte
0

Eu adicionaria dois itens à lista de Glen

  • Tente resolver um problema difícil que outras pessoas tenham, por ex. dar respostas sobre SO
  • Leia os blogs / livros sobre designers de idiomas. Esse é o melhor recurso de conhecimento profundo. Você saberia qual é a decisão de design por trás da razão X.
por 19.09.2012 / 20:55
fonte
0

Para desenvolver o que a @TMN disse. Eu tive grande sucesso em aprender idiomas escrevendo o mesmo programa em um idioma diferente.

Por exemplo, escrever um programa que leia um arquivo CSV, analise o texto e grave-o de volta em um segundo CSV com as colunas na ordem inversa.

Assim,

Column1,Column2,Column3

para

Column3,Column2,Column1

Isso vai te dar uma compreensão básica ou a linguagem. Então veja o que mais você pode fazer. Talvez permita a substituição de valor ou reordenação ou leitura a partir da linha de comando. Faça o mais complexo que você quiser.

Também acho que o que @GlenPeterson disse,

Learn a very different language. A great compliment to C would be a functional language like Lisp. This will turn the way you think about your procedural language inside out.

É uma ótima ideia. Eu sugeriria uma linguagem como Haskell porque nas versões mais recentes você pode programar usando todos os quatro paradigmas de programação de OO, processuais, lógico ou funcional. Mesmo sendo uma linguagem funcional, você pode, com algum esforço, implementar os outros paradigmas, o que seria uma boa experiência de aprendizado.

Linguagem excelente para brincar.

    
por 19.09.2012 / 21:55
fonte
0

Você não pode aprender um idioma no livro. Tudo que você precisa é praticar e praticar. Não pense que Você pode aprender uma língua daquele livro particular ou daquela fonte particular. 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. dia de vida. Código do zero, estender sua funcionalidade tentar construir algo que vai fazer você um pouco satisfeito.E se você está pensando dominar uma linguagem como conhecer toda a linguagem e usando cada elemento da linguagem de programação na codificação prática .. VOCÊ NÃO PODE. Ou mesmo se você puder, pode demorar 10-15 anos.

    
por 01.07.2013 / 04:57
fonte