Skip to content

Latest commit

 

History

History

02-history

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
type duration
read
5min

Historia

Paradigmas - Historia

Para tener una idea general de los paradigmas y sus peculiaridades, es útil repasar brevemente su historia.

El primer paradigma en aparecer, primera mitad de los años 50, es el imperativo, que se caracteriza por un nivel bajo de abstracción. Por lo tanto el código está enfocado en las instrucciones que la computadora debe seguir, y no necesariamente en la semántica o lógica de la funcionalidad que estamos implementando (el cómo nosotros pensamos en lo que hace el programa).

Veamos un ejemplo de Assembly, el primer lenguaje "moderno", que apareció en el año 1949, y que sigue vivo a día de hoy, eso sí, para cosas muy específicas, que nos son necesariamente lo que vemos los desarrolladores web, pero que sirve para este ejemplo ;-)

section .text             ;section declaration

                          ;we must export the entry point to the ELF linker or
  global  _start          ;loader. They conventionally recognize _start as their
                          ;entry point. Use ld -e foo to override the default.

_start:

                          ;write our string to stdout

  mov     edx,len         ;third argument: message length
  mov     ecx,msg         ;second argument: pointer to message to write
  mov     ebx,1           ;first argument: file handle (stdout)
  mov     eax,4           ;system call number (sys_write)
  int     0x80            ;call kernel

                          ;and exit

  mov     ebx,0           ;first syscall argument: exit code
  mov     eax,1           ;system call number (sys_exit)
  int     0x80            ;call kernel

section .data             ;section declaration

msg db    "Hello, world!",0xa    ;our dear string
len equ   $ - msg                ;length of our dear string

Fuente: Assembly-HOWTO

El snippet de arriba es un "hello world" escrito en Assembly (una versión moderna, pero muy parecido a lo que hubieras visto en los años 50). Lo único que hace este programa es imprimir el string Hello, world!. El equivalente a todo el código de arriba en JavaScript sería:

console.log('Hello, world!');

En nuestro caso, JavaScript tiene un nivel de abstracción mucho más alto. Con lo cual, no tenemos que preocuparnos de muchos detalles que JavaScript ya abstrae para nosotros, como manejo de memoria, instrucciones del procesador, etc. Esto nos permite expresar de forma más "humana" la intención de nuestro programa, y con mucho menos código.

Regresamos a los años 50. Según la programación va evolucionando, y los programas creciendo, vemos cómo van a ir surgiendo diferentes formas de "abstraer", "organizar" y "reusar" el código. A finales de los años 50 vemos como aparecen Fortran II y Lisp, introduciendo la programación procedural y funcional. Con ambos enfoques pasamos a nuevos nieveles de abstracción y mejora en el reuso de código.

En los años 70 y 80 se da el boom de la programación orientada a objetos, primero con Smalltalk y después C++.

JavaScript nace en 1995, el mismo año que Java, Ruby y PHP. La década de los 90 se caracteriza por los lenguajes multi-paradigma. En ese contexto JavaScript destaca por su dinamismo y su naturaleza funcional. De hecho a nivel conceptual, JavaScript está fuertemente inspirado por Scheme, que es un lenguaje funcional, y los prototipos de Self, aunque por necesidades del mercado, la sintáxis se parece más a la familia de lenguajes de C y Java, que son imperativos. Por esta razón, JavaScript se considera muchas veces el lenguaje más incomprendido, y quizás confuso.

Como referencia, abajo podemos ver una tabla con algunos de los lenguajes más significativos a nivel de cambios de paradigma, y el conexto en el que aparece JavaScript.

Año Lenguaje Paradigma
1949 Assembly imperativo
1957 Fortran imperativo
1958 Fortran II imperativo, procedural
1958 Lisp funcional
1965 Simula orientado a objetos
1972 Smalltalk orientado a objetos
1972 Prolog lógico
1972 C imperativo, procedural, estructurado
1975 Scheme funcional
1983 C++ imperativo, procedural, estructurado, orientado a objetos
1987 Perl imperativo, procedural, funcional, orientado a objetos, orientado a eventos
1991 Python imperativo, procedural, funcional, orientado a objetos
1995 Ruby imperativo, funcional, orientado a objetos
1995 Java imperativo, orientado a objetos
1995 PHP imperativo, procedural, orientado a objetos
1995 JavaScript imperativo, funcional, orientado a objetos, orientado a eventos

Referencias

Otros recursos: