Questão fascinante; Eu gosto da sua ênfase em critérios objetivos. Queremos que os calouros aprendam:
conceitos de programação : A primeira linguagem de programação deve suportar: chamadas de função, iteração, recursão
idéias fundamentais : A primeira linguagem de programação deve suportar matrizes (para os primeiros passos de uma introdução suave a como a memória realmente funciona e como os ponteiros funcionam)
habilidades práticas de programação : como usar o depurador, como usar o criador de perfil, como resolver problemas grandes (uma linguagem de alto nível), como montar sistemas grandes, como decompor problemas (decomposição de problemas), como evitar a escrita código complicado, como comunicar aos seres humanos a intenção por trás de uma série (muitas vezes enigmática) de instruções executáveis.
o fato de existirem bibliotecas pré-escritas para coisas como sort () e como usá-las - ou seja, o fato de que não é necessário escrever tudo do zero.
Outros critérios para um primeiro idioma :
interpretado (feedback rápido ajuda no processo de aprendizagem).
um ambiente interativo que acelera o aprendizado, o teste e a depuração.
código-fonte de alta qualidade está disponível para os alunos lerem nesse idioma
"fácil de ler", "sintaxe que se aproxima da linguagem natural" (para facilitar a leitura e a classificação do SourceCode)
portátil (roda em Mac OS, Windows, Unix). Pelo menos uma implementação de software livre da linguagem.
rápido para ensinar, "poucas dicas" - por exemplo, "[Pode] ser mais rápido ensinar primeiro para iniciantes Python e depois para Java, em vez de Java como o primeiro OOPL". - "Comparação de linguagens de programação orientada a objetos" e TelescopeRule
Matthias Felleisen desenvolveu uma linguagem de programação com mensagens de erro personalizadas para um público iniciante. Ele enfatiza que a escolha de um idioma específico não é tão importante quanto ensinar uma boa metodologia de design. De fato, ele vê o primeiro curso de CS como uma aula de artes liberais, ensinando pensamento crítico, resolução de problemas e atenção aos detalhes.
critérios para uma segunda linguagem de programação
Coisas que queremos que os alunos aprendam, mas talvez isso possa esperar pela segunda linguagem de programação:
uma linguagem "relevante" que "não seja muito esotérica"; algo "popular na indústria"
Teoria da complexidade: como reconhecer tarefas impossíveis com a tecnologia atual.
coisas de nível superior: como escolher a ferramenta certa para o trabalho , como usar um compilador, estruturas, programação orientada a objetos, programação funcional, programação lógica, programação lógica, design do compilador, funções de composição e manipulação (no sentido Lisp / ML), programação concorrente e distribuída,
coisas de baixo nível: aritmética de ponteiros, arquitetura de computadores. gerenciamento de memória, quadros de pilha, programação de montagem, arquitetura da máquina, drivers de dispositivo e design do sistema operacional (para que a máquina não "pareça uma caixa preta assustadora que não pode penetrar")
EDIT: Acho decepcionante que postar um resumo de algo que escrevi, em colaboração com muitos outros, "possa não ser um post legal".
Portanto, estou adicionando uma citação mais formal ao meu link informal anterior, tentando cumprir com o uso justo e outras questões de direitos autorais do wiki.
Esta resposta é um resumo da Primeira Língua do Calouro (Anon 2011) no Repositório de Padrões de Portland.
(Anon 2011) Muitos autores anônimos e vários outros. "Primeira língua de Freshmans". Repositório de Padrões de Portland. 27 de setembro de 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .