O básico da maioria das linguagens processuais é praticamente o mesmo.
Eles oferecem:
- Tipos de dados escalares: geralmente booleanos, inteiros, flutuantes e caracteres
- Tipos de dados compostos: matrizes (seqüências de caracteres são caso especial) e estruturas
- Construções básicas de código: aritmética sobre escalares, acesso a matriz / estrutura, atribuições
- Estruturas de controle simples: if-then, if-then-else, while, para loops
- Pacotes de blocos de código: funções, procedimentos com parâmetros
- Escopos: áreas nas quais identificadores têm significados específicos
Se você entende isso, tem uma boa compreensão de 90% das línguas do planeta. O que torna essas línguas um pouco mais difíceis de entender é a incrível variedade de sintaxe ímpar que as pessoas usam para dizer as mesmas coisas básicas. Alguns usam notação concisa envolvendo pontuação ímpar (APL sendo um extremo). Alguns usam muitas palavras-chave (COBOL é um excelente representante). Isso não importa muito. O que importa é se a linguagem é completa o suficiente por si só para executar tarefas complexas sem fazer com que você arranque os cabelos. (Tente codificar alguns hackers graves no script de shell do Windows DOS: ele é capaz de Turing, mas é muito ruim em tudo).
Oferta de linguagens procedurais mais interessantes
- Escopos aninhados ou lexicais, namespaces
- Ponteiros que permitem que uma entidade se refira a outra, com alocação dinâmica de armazenamento
- Empacotamento de código relacionado: pacotes, objetos com métodos, características
- Controle mais sofisticado: recursão, continuações, fechamentos
- Operadores especializados: operações de string e array, funções matemáticas
Embora tecnicamente não seja uma propriedade do idioma, mas uma propriedade do ecossistema em que esses idiomas vivem, são as bibliotecas que são facilmente acessíveis ou fornecidas com o idioma como parte da ferramenta de desenvolvimento. Ter uma ampla variedade de recursos de bibliotecas simplifica / agiliza os aplicativos de gravação simplesmente porque não é necessário reinventar o que as bibliotecas fazem. Embora Java e C # sejam amplamente considerados boas linguagens por si só, o que os torna realmente úteis são as enormes bibliotecas que os acompanham e as bibliotecas de extensão facilmente obtidas.
As línguas que são mais difíceis de entender são as não processuais:
- Linguagens puramente funcionais, sem atribuições ou efeitos colaterais
- Linguagens lógicas, como Prolog, nas quais ocorrem computação e unificação simbólicas
- Linguagens de correspondência de padrões, nas quais você especifica formas correspondentes ao problema e, muitas vezes, ações são acionadas por uma correspondência
- Linguagens de restrição, que permitem especificar relações e resolver automaticamente equações
- Linguagens de descrição de hardware, nas quais tudo é executado em paralelo
- Linguagens específicas do domínio, como SQL, redes de Petri coloridas etc.
Existem dois estilos representacionais principais para idiomas:
- Baseado em texto, no qual identificadores nomeiam entidades e fluxos de informações são codificados implicitamente em fórmulas que usam os identificadores para nomear as entidades (Java, APL, ...)
- Gráfico, em que entidades são desenhadas como nós e as relações entre entidades são desenhadas como arcos explícitos entre esses nós (UML, Simulink, LabView)
As linguagens gráficas geralmente permitem sub-linguagens textuais como anotações em nós e arcos. Linguagens gráficas mais estranhas permitem recursivamente gráficos (com texto :) em nós e arcos. Linguagens gráficas realmente estranhas permitem que os gráficos de anotação apontem para os gráficos que estão sendo anotados.
A maioria dessas linguagens é baseada em um número muito pequeno de modelos de computação:
- O cálculo lambda (base para Lisp e todas as linguagens funcionais)
- Sistemas de postagem (ou técnicas de reescrita de string / árvore / gráfico)
- Máquinas de Turing (modificação de estado e seleção de novas células de memória)
Dado o foco da maior parte da indústria em linguagens processuais e estruturas de controle complexas, você estará bem servido se aprender bem uma das linguagens mais interessantes desta categoria, especialmente se ela incluir algum tipo de orientação a objetos.
Eu recomendo o esquema de aprendizagem, em particular de um livro realmente maravilhoso:
Estrutura e Interpretação de Programas de Computador . Isso descreve todos esses conceitos básicos. Se você conhece essas coisas, outros idiomas parecerão bem diretos, exceto pela sintaxe pateta.