O debate sobre a primeira linguagem de programação: a decisão final

Alguns dizem respeito ao debate sobre a escolha da primeira linguagem de programação, algo assim:



Eles dizem que um milhão de fatores afeta a escolha e não há sentido em discutir isso. No entanto, os holivares continuam.

Vitaly Bragilevsky decidiu por um fim e apresentou a decisão final na Saint AppsConf . Depois de ler o artigo (ou visualizar o relatório), você saberá como responder adequadamente a parentes ou conhecidos que aprenderam quanto ganham em TI e que o controle remoto não é um obstáculo e agora estão se perguntando por onde começar.


Vitaly Bragilevsky trabalha na JetBrains e ensina na Universidade Estadual de São Petersburgo, na Faculdade de Matemática e Ciência da Computação, membro do Comitê de Padronização da Linguagem de Programação Haskell e do Comitê de Desenvolvimento de Compiladores Haskell Glasgow Haskell, autor do livro Haskell in Depth.

Então, vamos descobrir como começar a aprender programação, quais ferramentas usar? De fato, esta é uma questão importante.
Dijkstra escreveu em 1972: "... as ferramentas que estamos tentando usar e a linguagem ou notação que estamos usando para expressar ou registrar nossos pensamentos são os principais fatores que determinam o que podemos pensar ou expressar!"
Freqüentemente, uma linguagem de programação (e a linguagem em geral) simplesmente não nos permite fazer o que queremos, ou não do jeito que queremos. A linguagem é uma ferramenta importante e sua escolha deve ser levada a sério.

Se você cometer um erro nessa escolha (ou com mais frequência alguém fizer uma escolha pelo aluno), as consequências poderão ser graves. É assim que os programadores apareceram:

  • mimado por Fortran;
  • afetado pelo BASIC;
  • C ++ esmagado;
  • Java estrangulado.

Daí as piadas de que um programador Fortran real pode escrever um programa Fortran em qualquer idioma. Ou histórias sobre caras que estão no primeiro ano atormentado por C ++, e então eles já são impossíveis de se tornar programadores - só eles sabem <, e >para escrever.

Como vemos essas pessoas, é lógico supor que a primeira linguagem de programação de alguma forma influencia .

Eu tenho uma história pessoal a esse respeito. Minha primeira linguagem de programação foi o Fortran, exceto a viagem malsucedida a uma aula básica, na qual o professor falou sobre matrizes e, como iniciante, tudo era incompreensível para mim e me desencorajou a continuar. Depois fui à biblioteca, peguei um livro de Fortran e comecei a realizar exercícios de programação em um pedaço de papel. Para ser sincero, foi ainda mais conveniente para mim - mas o compilador não jura.

fundo


Vou começar com o chamado problema de Richard Vekselblat. Este homem é conhecido por ser seu primeiro PhD em Ciência da Computação. Em 1980, ele escreveu um artigo sobre as conseqüências da escolha da primeira linguagem de programação ( Richard L. Wexelblat. As conseqüências da primeira linguagem de programação. Procedimentos do terceiro simpósio da ACM SIGSMALL e do primeiro simpósio da SIGPC em sistemas pequenos, 1980 ).

Tudo começou em 1978, quando Richard escreveu uma carta para a revista com a provocadora manchete "Erros da Juventude, ou é Básico e Básico faz mal à sua saúde?" As respostas a esta carta serviram de material para o artigo.


Com base em pontos de vista recorrentes, Richard Vekselblat fez as seguintes conclusões:

  • , (Pascal, PL/C) , (COBOL, FORTRAN). .
  • , . — , .
  • , , . .

Certamente, este foi um estudo muito ingênuo, sem levar em consideração fatores sociológicos, e nos permitiu tirar algumas conclusões.

Tendo estudado a história do assunto mais profundamente, eu estava convencido de que havia centenas de estudos dedicados à escolha de uma linguagem de programação. Existem até trabalhos resumindo o trabalho sobre a escolha de armas nucleares, por exemplo: Kevin Parker, Bill Davey. A história da seleção de idiomas de computador. (Em Arthur Tatnall. Reflexões sobre a história da computação: preservando memórias e compartilhando histórias, AICT-387, Springer, pp. 166-179, 2012, IFIP Avanços em Tecnologia da Informação e Comunicação (PESQUISA)) .

Os autores, contando com uma extensa bibliografia, identificam fatores que afetam a escolha do idioma, não apenas para o ensino, mas também para a implementação de projetos:

  • : , ( ). , .
  • : ( 150 «Hello world!» 500 IDE); problem-solving, ; .
  • : (, 2000- ); .

Muitos especialistas estão envolvidos na comparação de idiomas, em particular no que se refere à adequação ao estudo inicial. Linda Mannila e Michael de Raadt, em seu artigo “Uma comparação objetiva de idiomas para o ensino de programação introdutória”, formularam grupos de critérios para avaliar o PL:

  1. Aplicabilidade no treinamento.
  2. Ambientes de linguagem e desenvolvimento.
  3. Suporte e disponibilidade.
  4. Use fora do curso introdutório.

Armado com esses critérios, Linda Mannila e Michael de Raadt compilaram uma tabela de comparação de idiomas.



No original, cada critério possui características adicionais que não são tão importantes para nós. Estamos interessados ​​no fato de que os líderes na pontuação final dos autores são Python e Eiffel , uma linguagem que dificilmente pode ser chamada de popular.

No começo, eu esperava classificar o YP de acordo com esses critérios e tirar minhas próprias conclusões, mas, olhando a coluna Haskell, encontrei mentiras sobre todos os itens! E ele decidiu que a tabela não tem nada a ver com a realidade - essa é uma comparação "objetiva".

Após reflexão, cheguei à conclusão de que essa comparação não faz sentido. Suponha que eu adicione uma coluna ao Kotlin e marque cada item, ou não. Isso não significaria absolutamente nada.

Então eu decidi ver o que é usado para o treinamento de fato. Aqui a imagem é diferente.


Fonte de dados .

O fato de que os dados de 2014 não devem confundi-lo, porque os sistemas de ensino superior estão mudando muito lentamente e o quadro geral não mudou muito até agora.

O Python ainda está em primeiro lugar, o Java - reflete solicitações da Oracle, Sun Microsystems e outras empresas para aprender esta linguagem. Entre as universidades que começam a ensinar programação em C ++ estão provavelmente a Universidade do Texas - Björn Straustrup lê o curso inicial lá e, acho, os alunos o fazem bem.

Muitos idiomas de interesse da comunidade acadêmica não se enquadravam nessa classificação, em particular:

  • PLs funcionais com tipagem estática de Haskell e ML, populares entre os pesquisadores.
  • Amplamente utilizado no desenvolvimento web, com digitação dinâmica de JavaScript, Ruby, PHP.
  • Linguagens industriais específicas da plataforma Objective-C e C # / Visual Basic.

Com o último, é compreensível que historicamente as universidades não desejem laços rígidos com nada.

Voz das pessoas


Tendo estudado a história do problema, decidi descobrir a opinião dos desenvolvedores modernos por meio de uma pesquisa no twitter . A pergunta foi formulada da seguinte forma: "Que propriedade de uma linguagem de programação você considera mais importante ao escolher a PRIMEIRA linguagem para o ensino de programação?" E ele propôs opções de resposta que são razoavelmente fáceis de correlacionar com idiomas específicos.

Dadas todas as características técnicas das pesquisas no twitter, os resultados são os seguintes.



Mais da metade dos entrevistados disse que a simplicidade é o principal. Aparentemente, 25% dos que responderam à prevalência pensam que devemos pensar imediatamente na demanda do mercado. Uma alta porcentagem de pessoas que pensam que você precisa lidar primeiro com os indicadores é alarmante. E o fato de que apenas 8% para um rico conjunto de bibliotecas mostra que o primeiro idioma ainda não deve ser projetado para fazer algo real.

Respostas da pesquisa


Darei algumas opiniões interessantes a partir da discussão da pesquisa.

Dmitry Kovanikov ( @ChShersh ) - um desenvolvedor e professor experiente - expressou uma série de considerações importantes, com as quais concordo plenamente: “ Alto nível e interatividade. Para obter o resultado do programa e poder vê-lo, foi possível com um número mínimo de etapas. Programar não é criar variáveis, loops ou recursões, é resolver problemas com os meios de PL. ”

Artyom Pelenitsyn ( @ ulysses4ever ) observou o componente metodológico: “A presença de ferramentas metodológicas especializadas (livros didáticos, livros de tarefas, tutoriais, fóruns de perguntas e respostas) e técnicas (IDEs simples e inteligíveis com uma interface minimalista, steppers / debuggers com GUI)”.

Andrei Miskov ( @andreymiskov ) lembrou outro fator importante: “ Previsibilidade : não se distraia com nulo / indefinido e 0,1 + 0,2. Aumento gradual de oportunidades: sem POO e mutações até você dominar os dados e funções. Como em Racket / HtDP ou Pyret / PAPL. "

Os defensores de C foram encontrados: “Pessoalmente, acredito que C foi e continua sendo o melhor para um estudo mais fundamental. Na minha opinião, a sintaxe é simples e bastante intuitiva , e existem muitos conceitos diferentes (memória, ponteiros, pilha, alocações). Apenas um MAS, de modo algum C89, pelo menos C99, mas melhor C11. ”

Havia referências a Scala e Rust - e no contexto de digitação e simplicidade. O que nos faz pensar que, infelizmente,linguagens de programação como seitas totalitárias . Eles têm adeptos que, apesar de tudo, promovem seu idioma favorito e não querem ouvir críticas (e, em geral, as opiniões de outras pessoas).

Um exemplo vívido desse "sectarismo" é o debate sobre como designar a tarefa "=" ou ": =". Esta disputa já tem mais de 40 anos, existem artigos dedicados apenas a esta edição. E esse é apenas um dos motivos de centenas dessas "questões importantes".
Não holivarite - popularize seu idioma, mas não atue como adeptos de seitas totalitárias.

Diferenças entre linguagem industrial e educacional


Quase chegamos a encontrar a solução final no problema de escolher o primeiro idioma. Resta apenas determinar como a linguagem educacional difere da linguagem industrial.

Primeiro, em uma linguagem industrial, sempre há muitas maneiras de alcançar o mesmo objetivo.

Em segundo lugar, as mensagens de erro em idiomas industriais visam garantir que o profissional entenda rapidamente qual é o problema e o corrija. Como resultado, eles contêm muitas informações técnicas úteis para um especialista, que um iniciante pode assustar e confundir. Este aspecto às vezes torna impossível o uso de uma linguagem profissional para o ensino. Se você já viu mensagens de erro em C ++, entenderá do que estou falando.

E, finalmente, os objetivos são diferentes. Por exemplo, a velocidade é importante na operação industrial, mas não importa muito quando você domina a programação.
Aprender YP quando você sabe programar é fácil. No problema com o primeiro idioma, você precisa aprender a programar, e isso é mais difícil.
Sobre a questão do ensino de programação como tal, também existem livros, por exemplo.



Em um livro muito clássico (basta olhar para a capa) “A Estrutura e a Interpretação de Programas de Computador”, temos a impressão de programar como uma atividade mágica e de programadores como assistentes com habilidades excepcionais. Isso, é claro, é uma mentira completa.

A capa do segundo livro, Como criar programas, reflete uma abordagem completamente diferente - a engenharia. Gosto muito mais e acredito que você precisa aprender a programar como qualquer outro negócio de engenharia.

Existem vários princípios importantes em Como criar programas que você precisa aprender ao aprender a programação:

  • Como ler a declaração do problema e identificar em quais componentes a solução deve consistir.
  • Como transferir uma tarefa para a estrutura do programa.
  • , , .
  • , .

Beginning Student Language


Para implementar esses princípios, o autor do livro Matthias Felleisen surgiu com a idéia de idiomas para a aprendizagem. São idiomas que estão gradualmente expandindo seus recursos.

Tudo começa com o BSL - Beginning Student Language - no qual há apenas o mínimo necessário: definição de função, chamada de função, operação condicional, aritmética. E, em seguida, juntamente com as tarefas, o idioma aumenta gradualmente, são adicionadas construções como listas, recursão e funções de ordem superior. Gradualmente, com a ajuda do idioma, já SL, torna-se possível resolver problemas mais complexos. Essa cadeia termina com a linguagem Racket da família Lisp, que é o fechamento de todas as anteriores e permite ao programador implementar qualquer coisa.

É assim que um programa básico no ambiente DrRacket se parece com um aluno iniciante.


Pyret


Outra abordagem para o ensino da programação foi proposta por Shriram Krishnamurthi et al. Eles criaram a linguagem Pyret e publicaram o livro Linguagens de Programação e Programação, porque, repito, ninguém aprenderá a língua sem material de treinamento.

Preste atenção aos títulos de alguns capítulos deste tutorial:

  • Introdução aos dados tabulares (4)
  • Jogos interativos como sistemas reativos (11)
  • Exemplos, testes e verificação de programas (12)
  • Gráficos (19)
  • Processando programas: Analisando (23)
  • Raciocínio sobre programas: uma primeira olhada nos tipos (27)
  • Objetos: Interpretação e tipos (32)

No capítulo 11 - no final do primeiro mês de treinamento - eles ensinam a escrever jogos interativos como sistemas reativos. O programa inteiro é projetado por cerca de seis meses e os objetos e sistemas de tipos são introduzidos quase no final.

A linguagem Pyret é construída de tal maneira que é possível seguir o plano sem olhar para o futuro. De fato, você pode programar tudo o que ocorre antes do capítulo 27, sem saber que existem tipos na linguagem. E no capítulo 27, verifica-se que há digitação estática e você pode usá-la. Essa linguagem foi criada especificamente para passar do começo ao fim, introduzindo gradualmente novos conceitos em circulação.

Abaixo está um exemplo de programa em Pyret e o ambiente no qual esse idioma.


Por exemplo, testes incorporados a um programa (bloco where:) são uma parte essencial da sintaxe. A documentação também é incorporada na sintaxe ( doc:). Tais construções úteis são de nível superior no idioma e seu uso é inculcado no processo de aprendizagem.

Codeworld


A idéia de uma implementação gráfica simples é implementada no ambiente do CodeWorld. Ele tem seu próprio idioma, mas você pode usar o Haskell e obter imediatamente algo bonito - para iniciantes, é atraente.


PascalABC.NET


Nossa resposta BSL e Pyret estão sendo desenvolvidas na SFU em Rostov-on-Don Stanislav Mikhalkovich e seus alunos.

Este é um Pascal que não está desatualizado. Ele contém, por exemplo: foreach, descrições de variáveis ​​intra-bloco, caso por linhas, números inteiros longos, classes e rotinas generalizadas, interfaces, sobrecarga de operação, expressões lambda, exceções, coleta de lixo, métodos de extensão.

Algumas coisas do .NET aparecem lá ainda mais cedo do que em C #. Ou seja, no familiar invólucro de sintaxe Pascal, é um superlíngua com acesso total aos recursos da plataforma .NET. Implementa conceitos modernos do ponto de vista do desenvolvimento de armas nucleares.


Acima na captura de tela, o programa de 120 linhas lindamente e com animação recolhe as torres de Hanói.

Decisão final


O leitor astuto já adivinhou que não há solução final para a questão de escolher a primeira linguagem de programação. Nem eu nem mais ninguém o tem. E isso é bom: nós, na ciência da computação, não precisamos de livros de história uniformes que digam o único ponto de vista correto.

No início do artigo, descobrimos o que é mais importante, como aprender, do que em que idioma. No entanto, existem maneiras de começar a estudar a programação mais corretamente do ponto de vista do desenvolvimento futuro.

Melhor começar com uma linguagem mais adequada para isso: Racket, Pyret, Python, PascalABC.NET. O principal é que o estágio inicial - esse primeiro idioma - lançou as bases para o desenvolvimento futuro.



A partir das linguagens de primeiro nível nesse esquema, será fácil alternar para algumas das linguagens industriais ou acadêmicas básicas: JavaScript, C, C #, Java, Haskell, OCaml, F #. Mas se você começar imediatamente com JavaScript, terá um programador Fortran de uma nova maneira, que escreverá em todos os lugares como no JS, e será terrível. E se for um segundo idioma, essa deformação não ocorrerá.

Além disso, quando a fundação é lançada em uma determinada área, um milhão de oportunidades se abrem. Apenas alguns deles são mostrados no diagrama.

Você pode não precisar conhecer muitos idiomas no momento. Especialmente se você é um desenvolvedor de dispositivos móveis. Mas todas as plataformas, mais cedo ou mais tarde, ficam desatualizadas e, quando isso acontece, acontece que aquela com maior experiência e que conhece mais idiomas de diferentes áreas se beneficiará.

Se você passar pelos idiomas do nível mais baixo do esquema e representar aproximadamente o dispositivo deles, isso fará de você o melhor desenvolvedor em qualquer idioma.

Se (e de que outra forma, você leu no Habré) você já iniciou uma carreira de desenvolvedor com sucesso, se aprofundou em qualquer área e agora quer saber o que está acontecendo fora dela e onde mais direcionar sua atenção - participe do festival RIT ++ Online . Lá, em dois dias (25 e 26 de maio), você pode obter uma fatia de todo o setor de TI e, nas master classes de 27 a 10 de junho, pode desenvolver habilidades individuais.

All Articles