Em que momento posso dizer que "aprendi" um idioma?

67

Nos meus poucos anos de programação, eu brinquei com tudo, desde Ruby até C ++. Eu fiz tudo, desde apenas aprendendo a sintaxe básica (Ruby) até a conclusão de vários projetos importantes (para mim) que ampliaram minhas habilidades com o idioma. Dada essa variedade (e o fato de realmente aprender um idioma nunca parar), quando posso dizer que conheço (ou aprendi) um idioma?

SomeKittens
fonte
12
Acho que a palavra que você procura é "dominar" uma linguagem, "aprendida" nesse contexto, é um pouco estranha.
Pieter B
7
"Palavras são para significado: quando você entende, pode esquecer as palavras." - Zhuangzi
jfrankcarr
9
quando você não tem que fazer esta pergunta, você terá aprendido o que você precisa saber ...
11
@JarrodRoberson Esse Zhuangzi também disse isso?
Jadkik94
2
De acordo com o LinkedIn, há uma barra muito baixa para colocar uma linguagem de programação em seu currículo de habilidades ... De acordo com meu pessoal do LinkedIn que já viu o código Java antes, aparentemente se sente confortável em listá-lo na seção de habilidades.
22412 Chris Dale

Respostas:

70

Em que momento você pode dizer que "aprendeu" um idioma como inglês ou francês? Acho que a maioria das pessoas aceita que você aprendeu um idioma quando pode usá-lo para se comunicar. Você não precisa conhecer todas as palavras ou entender todos os idiomas, mas deve conhecer a maioria do subconjunto (bastante pequeno) do idioma que as pessoas usam nas conversas diárias. Tendo "aprendido" um idioma nessa extensão, você pode continuar aprendendo mais ao usar o idioma diariamente e se expor a cada vez mais. Quando você morre, você ainda não sabe tudo o que há para saber sobre o idioma, mas ninguém dirá que você nunca "aprendeu" o idioma.

Acho que é assim com linguagens de computador. Você pode dizer que "conhece" uma linguagem como C ++ ou Ruby quando pode escrever programas úteis nela. Se você precisar quantificar o grau em que conhece o idioma, use os mesmos termos que usaria para um idioma humano. Diga "Conheço um pouco de C ++" ou "Conheço C ++ de conversação " ou "Sou fluente em C ++" para dizer que você sabe o suficiente para entender, o suficiente para realizar tarefas úteis ou que é um especialista, respectivamente.

Caleb
fonte
15
Os termos conversação e fluente são bastante subjetivos e, embora adequados à linguagem natural, é difícil ver o que eles significam quando aplicados a uma linguagem de computador. Embora ainda subjetivo, funcional e idomatic podem funcionar melhor. Funcional implica que você conhece a sintaxe bem o suficiente para escrever construções úteis, enquanto ter um conhecimento idiomático implica que você não apenas sabe escrever na linguagem, mas também a conhece o suficiente para usar os idiomas da linguagem, como usingem C # ou b, a = a, bgeradores em python. Caso contrário, +1.
Mark Booth
13
@ MarkBooth Qualquer descrição abaixo de uma pontuação em um exame será um pouco subjetiva. O objetivo é usar a familiaridade que a maioria das pessoas já tem com os níveis de conhecimento das linguagens humanas como um guia aproximado para o conhecimento de uma linguagem de computador e fazê-lo de uma maneira amigável, que convida a uma investigação mais aprofundada. C ++ conversacional é uma abreviação de "Estou familiarizado com o básico, mas você pode precisar me ajudar com código avançado, obscuro ou complicado".
Caleb
3
Embora eu ache que você esteja certo, acho que muitas pessoas assumem erroneamente que aprenderam uma língua natural quando ainda têm um nível miserável. E isso também se aplica a pessoas que dizem que aprenderam linguagens de programação.
585 haylem
Eu acho que sua resposta é perfeita, até mostra o quanto é impossível quantificar o conhecimento da linguagem. De fato, embora fluente signifique que você pode falar sobre quase tudo, com tantas explicações quanto um falante nativo exigiria, isso não aborda o fato de que a maioria dos falantes nativos não possui um décimo do conhecimento da língua que bons escritores antigos possuem (não , não harry potter ou dan brown, estilo antigo muito difícil de ler). Como você abordaria isso quando, na verdade, ninguém se preocupou em abordá-lo para idiomas? e quando de fato afeta fortemente a produtividade na programação?
Morg.
11
@Morg. Que lixo total. A programação é tanto para se comunicar com futuros programadores (inclusive você) quanto para dizer ao computador o que fazer. Claro, a simples gravação de um código pode não precisar ser bem comunicada, mas no mundo real deixar suas intenções claras para os futuros mantenedores do código é muito mais importante do que fazer com que o computador faça a coisa certa. De qualquer forma, esses comentários não servem mais para ajudar a melhorar esta resposta, por isso sugiro que o levemos ao Chat de engenharia de software, se você quiser discutir mais sobre isso.
Mark Booth
25

Depende de quem está perguntando

A pessoa que pede propensamente tem uma certa idéia de qual nível de habilidade é esperado de alguém que diz que "aprendeu um idioma".

Basicamente, encontrei duas escalas arquetípicas, pelas quais as pessoas julgam a resposta à pergunta "você aprendeu X?"

Para a maioria dos nerds, é uma questão complicada eliminar os posudos. Isso já é demonstrado pelas outras respostas à sua pergunta;). Se você diz que aprendeu, falha ao ver o escopo da tarefa, que é implicitamente "perfeição" e, muito pior: falha na humildade.

Para a maioria dos chefes, você "aprendeu", se conseguir resolver os problemas deles , um critério muitas vezes já será atendido se o código for compilado. Responder sua pergunta de maneira humilde o levará a atribuir a tarefa a um posudo que também pode ser um parente.

Então, qual é o seu público?

keppla
fonte
4
Nas entrevistas, você sabe se sabe. No local de trabalho, você sabe se o Google sabe.
asfallows
3
Nas entrevistas, é "eu sei" se o entrevistador usa gravata e é "por favor defina 'saber'" se ele não usar;). Para ser justo, a maioria dos entrevistadores perguntam se "tem experiência com", para o qual eu sou mais facilmente inclinado a responder com "sim"
keppla
18

Eu acho que as pessoas estão se concentrando na finalidade da palavra "aprendido" sendo tenso perfeito, significa que você terminou de aprender. E como todos observaram, as linguagens de programação são entidades vivas, assim como as linguagens faladas. Por exemplo, alguém que tivesse domínio completo do C # 2 examinaria o C # 3 com LINQ, Lambdas, varpalavra-chave, inicializadores de objetos / coleções e métodos de extensão e descobriria que muita coisa mudou em relação ao que aprendeu na versão anterior. O mesmo está acontecendo com o C # 4 com await, asynckeywords e outras novas construções de linguagem.

E estamos apenas falando de sintaxe aqui. Esquecemos que a maioria dos idiomas está emparelhada com uma estrutura . O C # possui a estrutura .NET, o Java possui sua própria estrutura, assim como Ruby, C ++, PHP e PERL. Pense na estrutura de uma linguagem como o vocabulário e a própria linguagem é apenas sintaxe. Conhecer o idioma significa que você sabe como fazer uma frase no idioma. Conhecer a estrutura significa que você pode se expressar bem no idioma. Por fim, depois de conhecer a sintaxe e o vocabulário, você precisa aprender os idiomas para escrever o código como um "falante nativo".

Eu diria que existem vários níveis de aprendizado.

  1. Hello World (você pode escrever os programas mais rudimentares.)
  2. Proficiente (você pode escrever programas básicos, mas precisa consultar regularmente a ajuda on-line)
  3. Fluente (você pode escrever programas avançados com alguma referência necessária).
  4. Falante nativo (você pode escrever programas avançados com o mínimo de ajuda on-line, seu código é indistinguível do código de outro falante nativo).
Michael Brown
fonte
3
Nitpick: awaité do C # 5, a principal novidade do C # 4 foi dynamic.
Sv16
Você está certo ... Eu continuo perdendo o controle de qual versão do C # vai com qual versão do .NET
Michael Brown
7

Você raramente pode dizer que aprendeu um idioma. Isso implica que você terminou de aprender sobre isso, o que é ... tolice.

Dizer que você conhece um idioma é bom quando você pode escrever um código que não está quebrando expressões idiomáticas no idioma (talvez depois de uma semana desbotando o conhecimento) sem se referir a uma referência de sintaxe.

Telastyn
fonte
2
Os idiomas mudam, os estilos variam de um lugar para outro e, de fato, os próprios idiomas mudam ao longo do tempo. Se você não pode dizer que "conhece" ou "aprendeu" uma linguagem como C ++ até terminar de aprender sobre ela, então existem muito poucas pessoas que podem afirmar ter aprendido C ++.
Caleb
11
@Caleb exatamente.
Michael Brown
3
Se você aprender como isso, então você não sabe mesmo o seu idioma nativo, o que é tolo demais (pelo menos para a maioria das pessoas)
SuperM
@ Caleb, pior que isso, muitas partes do c ++ são melhores quando ignoradas, como Carmack e Torvalds apontaram - então ... aprender tudo do cpp não é exatamente benéfico.
Morg.
3

Este é mais um fator baseado em opinião. Em todos os termos técnicos, "Aprendido" significaria ter um conhecimento completo, pois é esperado que você conheça TUDO do idioma.

No entanto, no mundo da programação, acredito que é mais sobre se você pode programar fluentemente na linguagem para concluir um objetivo / tarefa. Provavelmente também significa se você está confortável com o idioma. Claro que você pode sair e se formar depois de anos e anos de faculdade, mas isso é apenas para ser notado? Você define quando pode dizer que aprendeu um idioma.

Alec
fonte
2

Quando você começa a perceber suas falhas. Depois que você começa a aprender um idioma, normalmente ainda está ocupado aprendendo agora a fazer coisas ou está muito envolvido nele para perceber onde ele falha (é claro, isso é a menos que você comece a aprendê-lo de um ponto de vista negativo, apenas para ver o quanto é pior (se compara ao seu idioma favorito até agora). Eu diria que você realmente não conhece um idioma até estar ciente das áreas em que ele falha.

Ivan Voras
fonte
Eu não posso concordar com isso. Pode ser verdade para o primeiro idioma ou dois que você aprende - você pode simplesmente não saber o que procurar, portanto, mesmo as falhas mais desagradáveis ​​de design são indistinguíveis da maneira correta de fazer as coisas. Depois de aprender alguns idiomas, você deve começar a ver falhas no idioma logo após começar a aprender um novo. Mas, por um tempo em seu desenvolvimento, você equivocará erroneamente "diferente" com "errado". Até você aprender alguns idiomas de cada tipo principal (processual, OO, funcional, declarativo ...), seus julgamentos imediatos serão suspeitos.
Warren Young
2

Minha resposta pessoal para isso é quando,

  1. Eu sei o básico para escrever um programa simples em nível de produção.
  2. Passei pelo menos três horas seguidas resolvendo um problema que parecia simples, mas não o era.

A partir daí, eu não chamaria isso de aprendizado, mas de domínio.

dukeofgaming
fonte
1

No momento em que seu aplicativo ou componente pode ler e-mails, ou seja, a lei de Zawinski , que declara:

“Todo programa tenta expandir até poder ler e-mails. Os programas que não podem ser expandidos são substituídos por outros que podem. ”Cunhado por Jamie Zawinski (que chamou de“ Lei do Envelopamento de Software ”) para expressar sua crença de que todos os programas realmente úteis sofrem pressão para evoluir para kits de ferramentas e plataformas de aplicativos (o ele diz que é apenas um efeito colateral disso).

Isso foi atualizado quando o RSS se tornou popular em "... pode ler feeds RSS" e provavelmente poderia ser atualizado atualmente em "... pode ler feeds do Twitter". ;-)

dodgy_coder
fonte
0

Eu acho que você aprendeu um idioma quando não o vê. Você não vê os ciclos de acesso e dados, mas o fluxo de trabalho do algoritmo.

Você não faz truques com a passagem de parâmetros e processamento de array, macros mágicas. Você não pensa no seu código como um material de autopromoção para mostrar a seus amigos e professores, mas para expressar sua compreensão de um problema e sua vontade para com o computador da maneira mais legível.

Você tem hábitos que ajudam a evitar muitos erros apenas seguindo-os, como: use {} blocos de código e () em expressões mesmo se tiver certeza absoluta de que "será apenas uma linha" ou "Não sou bobo e sei ordem de precedência do operador ".

Você para de contar quantas classes, padrões e APIs de estrutura você conhece. É para isso que serve o intellisense, as referências e os tutoriais, e o Google. Mas quando você olha para um problema, você sabe imediatamente quais partes ele pode ser dividido e com quais ferramentas e algoritmos você os resolverá.

O que você faz funciona é elegante e pequeno . Você gosta de codificar e encontra facilmente seus erros. Sim, os mestres também cometem erros porque são humanos - mas eles os encontram rapidamente porque sua estrutura de código os leva ao lugar certo.

E finalmente perceba: você aprendeu a pensar, analisar e resolver problemas; comparado a eles, o idioma real é secundário, apenas a caixa atual de regras e ferramentas.

Lorand Kedves
fonte