# Programação como "língua estrangeira" Faz um bom tempo que uso a analogia entre aprender a programar e aprender uma língua estrangeira, não é uma ideia nova essa, abaixo algumas referências e conclusões minhas, a principal talvez seja: Qualquer pessoa, com a motivação e os recursos adequados, pode aprender razoavelmente uma língua estrangeira, ou programação. Leva um tempo razoável para se sentir confortável, fluente, e você continua aprendendo a vida toda. Mas não se desespere ou desanime, mesmo sem fluência, sem conseguir 'falar' muito, pode ser muito útil saber mesmo só um pouco de uma língua estrangeira. Ler é mais fácil que escrever, no começo é difícil se expressar, você precisa se esforçar para continuar lendo, adquirindo vocabulário e repertório das construções e idiomatismos. Aprender uma segunda língua estrangeira frequentemente é mais fácil que aprender a primeira. Algumas línguas são mais úteis em certos contextos específicos, para certas especialidades, e mesmo em uma língua que você conhece é preciso aprender o vocabulário específico de um domínio. Francês para alta costura tem um vocabulário, francês para gastronomia tem outro. Francês para negócios empresta palavras do inglês. Se você fala sobre gastronomia em inglês acaba usando um vocabulário do francês, mas com a sintaxe do inglês. Com linguagens de programação é parecido. A próxima linguagem pode ser mais fácil que a primeira. Certas linguagens são mais usadas para certos domínios. Se você usa uma biblioteca que foi desenvolvida em outra linguagem está pegando vocabulário específico emprestado também. Faramarz Amiri falando sobre ensino de programação para artistas e designers: >Há uma diferença fundamental entre ensinar programação para alunos de ciência da computação e para alunos de arte e design. Espera-se que os estudantes de ciência da computação se tornem programadores profissionais que poderão programar aplicações de missão crítica no futuro. Estudantes de arte e design, por outro lado, são usuários de programação que precisam da programação para criar seus artefatos exploratórios, experimentais e artísticos. Não estão necessariamente interessados nos meandros da linguagem por si só. Talvez uma boa analogia seja a diferença entre ensinar uma língua estrangeira a um linguista e a um viajante. O viajante precisa da linguagem para poder se comunicar com as pessoas, explorar o novo ambiente e para sobreviver. O linguista precisa entender a sintaxe, a semântica e a pragmática da linguagem, mesmo que nunca precise se comunicar com um falante nativo dessa língua. (AMIRI, 2011, p.205, https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1476-8070.2011.01680.x) Trecho selecionado por Patricia Oakim do Reas sobre letramento em software, e mencionando o Alan Kay: >Na minha opinião, todo artista utilizando software deveria ser alfabetizado em software. O que alfabetização significa no contexto do software? Alan Kay, um inovador no pensamento sobre o computador como um meio, escreveu: A habilidade de ‘ler’ um meio significa que você pode acessar os materiais e as ferramentas criadas pelos outros. A habilidade de ‘escrever’ em um meio significa que você pode gerar materiais e ferramentas para os outros. Você precisa dos dois para ser alfabetizado. Na escrita, as ferramentas de que você precisa são retóricas; elas demonstram e convencem. Na escrita computacional, as ferramentas que você gera são processos; elas simulam e decidem — Casey Reas, em tradução de Patricia Oakim no livro [*Arte feita em código*](https://www.bookfinder.com/isbn/9788584991426/?st=sr&ac=qr&mode=basic&author=&title=&isbn=978-8584991426&lang=en&destination=br&currency=BRL&binding=*&keywords=&publisher=&min_year=&max_year=&minprice=&maxprice=) Allen Downey no livro Pense em Python compara e contrasta linguagens formais e naturais: > As linguagens naturais são os idiomas que as pessoas falam, como inglês, espanhol e francês. Elas não foram criadas pelas pessoas (embora as pessoas tentem impor certa ordem a elas); desenvolveram-se naturalmente. > > As linguagens formais são linguagens criadas pelas pessoas para aplicações específicas. Por exemplo, a notação que os matemáticos usam é uma linguagem formal especialmente boa para denotar relações entre números e símbolos. Os químicos usam uma linguagem formal para representar a estrutura química de moléculas. E o mais importante: > > As linguagens de programação são idiomas formais criados para expressar operações de computação. > > As linguagens formais geralmente têm regras de sintaxe estritas que governam a estrutura de declarações. Por exemplo, na matemática a declaração 3 + 3 = 6 tem uma sintaxe correta, mas não 3 + = 3$6. Na química, H2O é uma fórmula sintaticamente correta, mas 2Zz não é. > > As regras de sintaxe vêm em duas categorias relativas a símbolos e estrutura. Os símbolos são os elementos básicos da linguagem, como palavras, números e elementos químicos. Um dos problemas com 3 + = 3$6 é que o $ não é um símbolo legítimo na matemática (pelo menos até onde eu sei). De forma similar, 2Zz não é legítimo porque não há nenhum elemento com a abreviatura Zz. > > O segundo tipo de regra de sintaxe refere-se ao modo no qual os símbolos são combinados. A equação 3 + = 3 não é legítima porque, embora + e = sejam símbolos legítimos, não se pode ter um na sequência do outro. De forma similar, em uma fórmula química o subscrito vem depois do nome de elemento, não antes. > > Esta é um@ frase bem estruturada em portuguê$, mas com s*mbolos inválidos. Esta frase todos os símbolos válidos tem, mas estrutura válida sem. > > Ao ler uma frase em português ou uma declaração em uma linguagem formal, é preciso compreender a estrutura (embora em uma linguagem natural você faça isto de forma subconsciente). Este processo é chamado de análise. > > Embora as linguagens formais e naturais tenham muitas características em comum – símbolos, estrutura e sintaxe – há algumas diferenças: > > **ambiguidade** > As linguagens naturais são cheias de ambiguidade e as pessoas lidam com isso usando pistas contextuais e outras informações. As linguagens formais são criadas para ser quase ou completamente inequívocas, ou seja, qualquer afirmação tem exatamente um significado, independentemente do contexto. > **redundância** > Para compensar a ambiguidade e reduzir equívocos, as linguagens naturais usam muita redundância. Por causa disso, muitas vezes são verborrágicas. As linguagens formais são menos redundantes e mais concisas. > **literalidade** > As linguagens naturais são cheias de expressões e metáforas. Se eu digo “Caiu a ficha”, provavelmente não há ficha nenhuma na história, nem nada que tenha caído (esta é uma expressão para dizer que alguém entendeu algo depois de certo período de confusão). As linguagens formais têm significados exatamente iguais ao que expressam. > > Como todos nós crescemos falando linguagens naturais, às vezes é difícil se ajustar a linguagens formais. A diferença entre a linguagem natural e a formal é semelhante à diferença entre poesia e prosa, mas vai além: > > **Poesia** > As palavras são usadas tanto pelos sons como pelos significados, e o poema inteiro cria um efeito ou resposta emocional. A ambiguidade não é apenas comum, mas muitas vezes proposital. > **Prosa** > O significado literal das palavras é o mais importante e a estrutura contribui para este significado. A prosa é mais acessível à análise que a poesia, mas muitas vezes ainda é ambígua. > **Programas** > A significado de um programa de computador é inequívoco e literal e pode ser entendido inteiramente pela análise dos símbolos e da estrutura. > > As linguagens formais são mais densas que as naturais, então exigem mais tempo para a leitura. Além disso, a estrutura é importante, então nem sempre é melhor ler de cima para baixo e da esquerda para a direita. Em vez disso, aprenda a analisar o programa primeiro, identificando os símbolos e interpretando a estrutura. E os detalhes fazem diferença. Pequenos erros em ortografia e pontuação, que podem não importar tanto nas linguagens naturais, podem fazer uma grande diferença em uma língua formal. > https://penseallen.github.io/PensePython2e/01-jornada.html