Los conceptos básicos de la mayoría de los lenguajes de procedimiento son más o menos los mismos.
Ellos ofrecen:
- Tipos de datos escalares: generalmente booleanos, enteros, flotantes y caracteres.
- Tipos de datos compuestos: matrices (las cadenas son casos especiales) y estructuras
- Construcciones de código básico: aritmética sobre escalares, acceso a matriz / estructura, asignaciones
- Estructuras de control simples: if-then, if-then-else, while, for loops
- Paquetes de bloques de código: funciones, procedimientos con parámetros.
- Ámbitos: áreas en las que los identificadores tienen significados específicos
Si entiendes esto, tienes una buena comprensión del 90% de los idiomas del planeta. Lo que hace que estos idiomas sean un poco más difíciles de entender es la increíble variedad de sintaxis extraña que la gente usa para decir las mismas cosas básicas. Algunos usan notación concisa que implica puntuacion impar (APL es un extremo). Algunos usan muchas palabras clave (COBOL es un excelente representante). Eso no importa mucho. Lo que importa es si el lenguaje es lo suficientemente completo por sí solo para realizar tareas complejas sin causar que te arranques el pelo. (Intente codificar algún hackeo de cadenas serio en el script de shell de Windows DOS: es capaz de Turing pero realmente malo en todo).
Oferta de lenguajes de procedimiento más interesantes
- Ámbitos anidados o léxicos, espacios de nombres
- Punteros que permiten que una entidad se refiera a otra, con asignación dinámica de almacenamiento
- Empaquetado de código relacionado: paquetes, objetos con métodos, rasgos
- Control más sofisticado: recursividad, continuaciones, cierres.
- Operadores especializados: operaciones de cadenas y matrices, funciones matemáticas
Aunque técnicamente no es una propiedad del idioma, sino una propiedad del ecosistema en el que viven dichos idiomas, son las bibliotecas a las que se puede acceder fácilmente o que se proporcionan con el idioma como parte de la herramienta de desarrollo. Tener una amplia gama de servicios de biblioteca simplifica / acelera las aplicaciones de escritura simplemente porque uno no tiene que reinventar lo que hacen las bibliotecas. Si bien se cree que Java y C # son buenos lenguajes en sí mismos, lo que los hace realmente útiles son las enormes bibliotecas que vienen con ellos y las bibliotecas de extensiones fácilmente obtenibles.
Los lenguajes que son más difíciles de entender son los no procesales:
- Lenguajes puramente funcionales, sin asignaciones ni efectos secundarios.
- Lenguajes lógicos, como Prolog, en el que se produce la computación simbólica y la unificación.
- Lenguajes de coincidencia de patrones, en los que especifica formas que coinciden con el problema y, a menudo, las acciones se desencadenan por una coincidencia
- Lenguajes de restricción, que le permiten especificar relaciones y resolver ecuaciones automáticamente
- Lenguajes de descripción de hardware, en los que todo se ejecuta en paralelo
- Lenguajes específicos de dominio, como SQL, Redes de Petri de colores, etc.
Hay dos estilos de representación principales para los idiomas:
- Basado en texto, en el que los identificadores nombran entidades y flujos de información están codificados implícitamente en fórmulas que usan los identificadores para nombrar las entidades (Java, APL, ...)
- Gráfica, en la que las entidades se dibujan como nodos, y las relaciones entre entidades se dibujan como arcos explícitos entre esos nodos (UML, Simulink, LabView)
Los lenguajes gráficos a menudo permiten sublenguajes textuales como anotaciones en nodos y en arcos. Los lenguajes gráficos más extraños permiten recursivamente gráficos (con texto :) en nodos y en arcos. Los lenguajes gráficos realmente extraños permiten que los gráficos de anotación apunten a gráficos anotados.
La mayoría de estos lenguajes se basan en un número muy pequeño de modelos de computación:
- El cálculo lambda (base para Lisp y todos los lenguajes funcionales)
- Sistemas de correos (o técnicas de reescritura de cadenas / árboles / gráficos)
- Máquinas de Turing (modificación de estado y selección de nuevas celdas de memoria)
Dado que la mayoría de la industria se enfoca en los lenguajes de procedimiento y las estructuras de control complejas, está bien servido si aprende bien uno de los lenguajes más interesantes en esta categoría, especialmente si incluye algún tipo de orientación a objetos.
Recomiendo encarecidamente aprender Scheme, en particular de un libro realmente maravilloso:
Estructura e interpretación de programas de computadora . Esto describe todos estos conceptos básicos. Si conoce estas cosas, otros idiomas parecerán bastante sencillos, excepto la sintaxis tonta.