miércoles, 25 de noviembre de 2009

Los 10 mayores logros en la historia de la programación de ordenadores

Reflexionando sobre los 10 mayores fracasos en la historia de la informática y los 10 momentos más influyentes de la década en internet, me he decidido a publicar mi propio listado sobre los que para mi son los diez mayores logros o inventos en la historia de la programación de ordenadores. Incluyo entre ellos los avances que a mi entender han revolucionado de una u otra manera el mundo del desarrollo de software.

  • La creación del lenguaje de programación C: Supuso un antes y un después en la historia de la programación. En mi opinión, el lenguaje C ha sido el lenguaje de más repercusión en la historia de los ordenadores, y su sintaxis ha servido como punto de partida para muchos de los lenguajes de programación actuales como Java, C++ o C#. Hoy en día sigue siendo muy utilizado en multitud de aplicaciones, incluido el sistema operativo Linux, cuyo núcleo está escrito en su mayor parte en lenguaje C.
  • La creación del paradigma de programación orientada a objetos, con sus primeros representantes puros como smalltalk.
  • La invención de los repositorios de código compartido (como cvs subversion, o los más modernos distribuidos como Git), que permiten colaborar a multitud de programadores sobre el mismo código.
  • El movimiento Open Source Software Libre con Richard Stallman a la cabeza (incluidas la cantidad de aplicaciones de código abierto que existen actualmente).
  • La creación de los lenguajes realmente independientes de la plataforma, como el lenguaje Java.
  • El compilador gcc, migrado a infinidad de plataformas, incluido Linux ya que se utiliza para compilar su kernel.
  • El entorno de desarrollo Visual Studio, espina dorsal del desarrollo sobre plataformas Windows.
  • La creación del entorno de desarrollo Eclipse, y su liberación por parte de IBM al mundo del código abierto.
  • La refactorización de código, y el impulso dado por Martin Fowler a su evolución.
  • La invención de las pruebas unitarias de código, y herramientas para automatizarlas como jUnit.
¿Piensas que alguno de estos logros no se merece estar en esta lista?
¿Incluirías tú algún otro?

40 comentarios:

Anónimo dijo...

muy buen post un saludo

Anónimo dijo...

Ojo con la relación de Richard Stallman con Open Source.
Richard Stallman es el credor (?) del concepto de Software Libre que en algunos caso hasta contrasta con el de open source. El concepto de Open Source fue impulsado por Eric Raymond y si ves algunas de las tantas entrevistas y exposiciones que ha hecho RS sobre que piensa del Open Source verás que son dos cosas conceptualmente distintas, aunque tengan (o al menos parezca) puntos en común.

Saludos.

Anónimo dijo...

Open Source y Software Libre son, a efectos prácticos, exactamente lo mismo. La única diferencia es su filosofía de existencia, cómo enfocan de qué va el tema. Mientras que la gente de Open Source se centra en las ventajas industriales de ese modelo, la gente del Software Libre se centra en la libertad que supone de cara al usuario ese modelo, así como las ventajas como medio de difusión de información.

Eric S. Raymond decidió cambiarle el nombre porque decía que a una empresa sería no podías hablarle de cosas como "Software Libre" porque no sonaba "adecuado". Pero a efectos prácticos, no hay diferencia alguna.

Daniel Rodri­guez dijo...

Hombre, la lista es un poco excesivamente moderna. No hablo ya de que quizá habría que incluir Fortran o Cobol, sino que ni siquiera está la invención de Babbage, aunque nunca la implementara, de la programación mediante tarjetas perforadas, y la implementación de un algoritmo por parte de Ada Lovelace...

Anónimo dijo...

Yo encuentro a faltar una entrada con el hito que supuso el cambio de paradigma al pasar a programación estructurada, el Pascal y Wirth, más importante a mi entender que el que ha supuesto la OOP.

Anónimo dijo...

Stallman, como mucho, sera importante para la abogacia, porque el es recordado por escribir una licencia, que es un documento legal.

Quita ese punto y pon, no se, cualquier cosas que hayan hecho Von Newman, Dijkstra, Floyd, Knuth...

Y si vamos a admitir que VStudio o Eclipse son un hito en la programacion...

Anónimo dijo...

Linux no es un sistema operativo, es un núcleo. Puedes decir GNU/Linux si te refieres a un S.O. :D

Juan Lanus dijo...

El C es importante por que creo que fué el pimer lenguaje no-assembler que se usó para compilar si propio compilador. Esto es muy importante por que es la llave para que sea multiplataforma, un objetivo de la época.
La sintaxis de C es inspirada en la de Algol, un lenguaje arcaico para expresar algoritmos, no necesariamente para computadoras.

Anónimo dijo...

"...mi propio listado sobre los que para mi son los diez mayores logros o inventos en la historia de la programación de ordenadores. Incluyo entre ellos los avances que a mi entender han revolucionado de una u otra manera el mundo del desarrollo de software."
Es solo eso, la opinión de alguien.

DuKKoN dijo...

¿gcc fue portado a Linux?
Corregirme si digo alguna burrada, pero acaso gcc no es un compilador de C/C++, parte del proyecto GNU?

Y ya que GNU nacio como un sistema operativo propio e independiente, pero el nucleo (hurd) no estubo listo a tiempo y usaron el nucleo de Linus.

Eso nos lleva a que gcc fue ejecutado con exito por vez primera en un nucleo Linux. Y, en todo caso, se habria portado a los demas, sistemas, pero seria nativo y originario del conjunto GNU/Linux.

Carlos M. dijo...

No estas dejando fuera *verdaderos hitos* como ser la creacion de FORTRAN y el pasaje del ensamblador al alto nivel.

Me parece que esto es mucho mas recordable y fundamental que Visual Studio.

Anónimo dijo...

por poner podemos poner las alfonbrillas ortopedicas para el raton. mas que richard stallman hacen.

Casiva Agustin dijo...

Estoy muy de acuerdo con el comentario de Daniel Rodriguez, falto toda la prehistoria de la informática que definió los lineamientos al día de hoy.

No estoy de acuerdo con lo que comentaron de Stallman, el no solo creo una licencia, el ha desarrollado por mas de 30 años, software para el proyecto GNU y muchas cosas de las que usamos en nuestros GNU/Linux fueron creadas por el. Fue el gestor de la idea, le dió el marco, definió pautas y motivó gente para crear GNU, sin GNU no tendríamos ningunos de los distintos sabores de "Linux" que tanta gente usa. Durante casi 30 años trabajó y batallo incansablemente por una lucha conocida como el movimiento del Software Libre, lo tildaron de loco y delirante, de hippie y comunista, pero y hoy es un movimiento fuerte y respetado, que pelea por el prosperar de la comunidad y el conocimiento de la sociedad, muchos la gozan de estos beneficios sin saber lo dura que fue esta batalla y sin visualizar todo lo que falta. Personalmente no soy un seguidor de Stallman y no estoy de acuerdo con muchas de sus ideas, pero reconozco su gran trabajo sin discutirlo.

No me parece que la aparición de las IDE's se un logro en la vida de los desarrolladores. Creo que son una herramienta mas, hoy en día hay mucha gente que sigue programando con un editor de texto y la linea de comandos.

Ya que nombras a Fowler, me parece que la formalización de los Patrones de Diseño y la Aparición de los Frameworks son también verdaderos logros.

Mr Blogger dijo...

El penúltimo anónimo se olvida de emacs... (que tenga que decir esto un vim-ero de toda la vida...)

Anónimo dijo...

Creo que te has dejado alguno importante como la programacion orrientada a aspectos, es el último gran logro

Anónimo dijo...

Estoy de acuerdo, con lo de la programacion estructurada. Creo que la lista es incompleta, al menos.-

elQuique dijo...

Muy buena lista, aunque siempre insisto en una cosa:

"La creación de los lenguajes realmente independientes de la plataforma, como el lenguaje Java."

eso es falso, por el simple hecho de que si llevo un programa Java de Windows a Linux no funciona, además por algo existen las versiones para Windows, para Linux, para Mac, de software como Eclipse, Open Office entre otros.

Lo que indica que Java no tiene independencia de plataformas.

Anónimo dijo...

¿Que hay de AJAX (que ha revolucionado la web 2.0)? ¿Que hay de COBOL? ¿y de FORTRAN?

Peor aún, no citas nada de metodologías de desarrollo ¿Nada de XP por citar una metodología de desarrollo ágil? ¿Que hay más importante en la historia de programación de ordenadores que la estabilidad proporcionada por las metodologías? ¿Conoces desarrollos anteriores a las metodologías? ¿Conoces la crisis del Software de los 90? Sin metodologías, el 99% de los desarrollos software se entregaban tarde, mal y nunca (por no decir que de 3 a 4 veces lo inicialmente presupuestado). Lo que más gracia me hace, es que te citen en barrapunto, y vea en un apunte anterior que estás contra las grandes metodologías de desarrollo. Supongo que esto se deberá a una frustración personal con ellas. ¿Has probado a presentar un proyecto a las administraciones públicas españolas no soportado por métrica v3? ¿Conoces Merise? ¿Crees que algo que se podría hacer con Metrica v3 estaría mejor con una metodología menor? ¿Como garantizarías entonces su calidad y seguimiento?


Creo que hay 10000000 cosas que deberían ir antes de Visual Studio en la lista para darle un poco más de rigor a esta entrada (que leo desde barrapunto). No obstante si la lista es personal, es tan válida como cualquier otra.

Daniel C. dijo...

Daniel, te olvidas que el precursor de las tarjetas perforadas como sistemas para almacenar la información de procesado fue Jacquard (aunque lo destinó a un telar automatizado).

diego dijo...

Creo que la invención de COBOL es trascendental, ya que supuso el principio de la programación como la conocemos hoy. Después aparecieron lenguajes que son hasta el día de hoy referentes, como el C, pero COBOL es indispensable en cualquier historia sobre el software. Me gusta el blog.

Pepe Ramirez, Ingeniero de Soporte Informático. dijo...

Ciertamente, no estoy de acuerdo con poner a Stallman en el tema de hitos de la programación, pues, como dice otro comentador, él está más vinculado con el tema de las licencias y el derecho informático.

Anónimo dijo...

Seguro eres programador en windows, tu post apesta...

LosHermanosCarlos dijo...

Felicitaciones por el blog, llegue a el por medio de twitter y me gusto mucho. ya me hice seguidor para leer los feeds. Si necesitas alguna ayuda con el diseño de tu blog www.loshermanoscarlos.blogspot.com

Anónimo dijo...

yo pondria la maquina de turing, ya que fue el origen de todo esto, y fue el concepto original de usar maquinas programables.

Anónimo dijo...

Creo que hizo falta la inclusión de la implementación exitosa de los sistemas manejadores de bases de datos relacionales, por allá en los años 80.

Anónimo dijo...

Visual Studio ??????????? juaaaaaaaaaaaa, te afloró la naques carnal !

Truesaeta dijo...

Varios comentarios sobre vuestras opiniones:
1) Por supuesto se trata de mi selección personal, cada uno tiene la suya y lo más probable es que no coincida.
2) Estoy de acuerdo en que la lista es bastante moderna, no hago referencia a COBOL, ni la máquina de Turing, ni a las tarjetas perforadas... si que los menciono en este articulo sobre la historia de los lenguajes de programación.
3) Respecto a la programación estructurada, es un hito muy importante pero en mi opinión lo fué más la POO, y sólo tenía 10 para poner en la lista ;-)
4) Sobre visual studio, quiero dejar claro que soy Javero hasta la médula, pero no por ello dejo de reconocer los logros de los demás. Y en mi opinión Visual Studio es el mejor entorno de desarrollo de todos los tiempos, le lleva varios años a los más sofisticados entornos para desarrollo en Java (como Eclipse o Idea).
5) Sobre si Java es independiente de la plataforma no voy a discutir, en un hecho y millones de programas lo abalan.
6) Sobre los que estarían en las posiciones 11 y 12... probablemente hubiese puesto el XTreme Programming y Ajax (para los que mencionáis estos temas).
Insisto en que esto sólo es una opinión forjada con muchos años de desarollo, cada uno tiene la suya.

Gux dijo...

Yo echo de menos en esa lista el Ensamblador, y el paso a programacion estructurada.

Cierto que las pruebas unitarias mejoran bastante la productividad, pero no en ordenes de magnitud, que fue lo que estas dos invenciones consiguieron.

Casiva Agustin dijo...

El kernel de Linux fue/es construido con gcc, este ultimo funcionaba antes del kernel Linux dado que fue una de los primeras herramientas del proyecto GNU.

Solo para el registro, este fue desarrollado en gran parte por Stallman. Si no me creen deben ver la lista de contribuciones en ggc.gnu.org

(http://gcc.gnu.org/onlinedocs/gcc/Contributors.html)

Resalto esta parte de esa lista:

"Richard Stallman, for writing the original GCC and launching the GNU project."

No he visto muchos abogados que hagan compiladores y sistemas operativos últimamente :P.

Anónimo dijo...

DuKKoN, todas las herramientas de GNU (no solo gcc, las bin-utils, las console-utiles, la libc y demás) fueron inicialmente desarrolladas para UNIX. Es decir, se desarrollaron antes las herramientas que el núcleo del S.O. No hubo ningún acuerdo entre GNU y Linus para combinar esas herramientas con su núcleo; simplemente, la gente de Linux empezó a trabajar con las herramientas de GNU, que eran las que estaban disponibles. Cuando Linux empezó a disfrutar de cierta popularidad fue cuando empezaron las polémicas con los nombres y sobre cuál era la parte importante, etc. Pero no hubo acuerdos ni conversaciones, fue algo que sucedió por si mismo, salió de la comunidad. Empezaron a portar GNU a Linux de forma autónoma.

Respecto a la independencia de la plataforma de Java... Pues no. Yo también he programado un montón en Java y desde bien al principio tuve problemas para hacer funcionar un mismo software tanto en Windows como en Linux. Que sí, que si programas con cuidado se puede hacer, pero también se puede hacer si programas con cuidado en C, es solo que tienes que tener mucho más cuidado (y compilar en ambas plataformas). El caso es que si coges un programa en java al azar, las posibilidades de que no corra en Linux tal cual son bastante elevadas. Hay que evitar ciertas prácticas que llevan a la incompatibilidad y tener otras ciertas prácticas que favorecen la compatibilidad. Mis 10 años de uso de Linux y todos los problemas que he tenido con aplicaciones en Java me avalan.

Anónimo dijo...

Poner a Visual Studio como uno de los mayores hitos en la historia de la programación es por lo menos dudoso...

Yo pondría en su lugar la creación del Turbo Pascal de Borland, antecedente de todos los IDE modernos.

elQuique dijo...

Manuel, coincido en que Visual Studio es sin dudas el mejor IDE, es muy elaborado casi perfecto.

Eclipse avanza mucho y con sus plugins es buenisimo, más siendo gratis, pero no se logra aun una facilidad de uso y potencia como VS, incluso en PHP tampoco lo hace el Zend que es algo especifico.

En cuanto a Java, es muy fácil, si vas a descargar Eclipse u Open Office, te ofrece descarga para Windows o Linux o Mac, eso demuestra que no es multi plataforma como se dice.

Cualquier Java en teoría corre en otro sistema operativo ya que es la maquina Java quien actúa en medio de la aplicación y el sistema operativo, pero bueno eso es solo teoría, un Eclipse, Open Office no funcionan si no bajas la versión especifica, y eso sucede aun cuando programemos con cuidado de compatibilizar una aplicación nosotros mismos.

Java es tan multiplataforma como .net de windows a linux a través de Mono :s, son solo teorías.

Rafael Hernampérez dijo...

La selección es muy buena, y creo que en muchos de los puntos, otros que quisieran hacer esta lista, coincidirían. Pero no en todos, porque todos tenemos nuestro criterios, nuestras necesidades, nuestros gustos...

Yo echo de menos el primer compilador, o los trabajos realizados por cierta mujer militar de la segunda guerra mundial, el XML, el BASIC, el Pascal, ... hay tanto y tanto...

Yo el primero de la lista pondría el logro de que la programación esté al alcance de cualquiera, y no de cerebros, millonarios o de privilegiados.

miguelote dijo...

La lista puede ser inmensa de larga, pero es impensable no incluir la meta inspiradora de toda esta carrera tecnologica, me refiero al desarrollo y logro de la inteligencia artificial. Sin duda es y sera un hito desde que se gesto la idea y la informatica seguira evolucionando para cumplir este objetivo.

Anónimo dijo...

Sin lugar a dudas en la lista falta lo mas importante y es la creacion de los ordenadores personales.

Sin lugar a dudas, sin eso, la programacion como la conocemos estaria al alcance de unos pocos y no seria lo mismo.

En cuanto a la Software Libre, mas que a Stallman lo englobaria en general como Software Libre, GNU / Linux y todos los programas-servicios que se han conseguido gracias a esa iniciativa, como compiladores gratuitos, servidores actuales de internet, etc.. etc..

El resto es a gusto del personal xD

skribi dijo...

Esta lista deja mucho que desear.
El Hito más importante fue sin duda la arquitectura de Von Newman la cual permite usar el mismo dispositivo de almacenamiento (la memoria principal) para colocar tanto los datos como las instrucciones. Luego, encima de cualquiera de las opciones aquí puestas, está la jerarquía de Chomsky, estudio que promovió el florecimiento de muchos lenguajes de programación. Luego el lenguaje C, estoy de acuerdo.

Unknown dijo...

Respecto a poner dos ides como Eclipse o Visual Studio en una lista de logros en la historia de la programación, creo que no está ni de lejos en la misma linea que poner C o orientación a Objetos. En vez de Visual Studio yo pondria como triunfo programación Orientada a componentes de Microsoft, que aunque duela para la gente del mundo de Java, es un gran triunfo. En mi empresa hay un grupo de 5 o 6 programadores Java que los han pasado a .NET y sólo uno quiere volver a Java (todos ellos son bastante buenos en Java, pero en .Net se encuentran muy comodos).
Por otro lado, el tema de patrones de diseño, quizas debiera estar en alguna posición.

Unknown dijo...

Hmm si vamos ala raices el mayor hito seria la logica matematica(Materia Basica.) Si ella nisiquiera una compueta logica (electronica) Funcionaria siendo asi Yo pondria en uno las Compuertas Logicas. Que parese que nadie recuerda. de hay fue el salto a cualquier tipo de programacion en la practica No solo teorias,

Anónimo dijo...

Hola Manuel. Esta es mi opinión, publicada en el hilo de Barrapunto sobre el tema:

En lugar de pruebas unitarias yo hablaría del desarrollo guiado por pruebas y es ahí donde deberías haber mencionado las metodologías ágiles de desarrollo y su manifiesto ágil. Es curioso que hables de la refactorización del código y no menciones otros avances importantes como los patrones de diseño o el lenguaje UML. ¿Por qué escogiste ese precisamente?

Me parece bastante impropio que consideres Java como un hito de los "lenguajes realmente independientes de la plataforma", olvidándote de los intérpretes más populares que también son realmente independientes de la plataforma (o más) y muchos son muy anteriores a Java: La Shell Bourne, Perl, Python, PHP, Javascript, etc. La distinción no debería ser tan sencilla, ya que la gran mayoría de estos lenguajes también necesitan una máquina virtual y se convierten en secuencias de bytecodes antes de ejecutar el programa.

No veo la razón de incluir GCC como un hito de la programación, y me da la impresión de que es sólo para complementar la inacertada (en mi opinión) inclusión del Visual Studio en la lista, igual que la idea de mencionar Eclipse, como para no menospreciar el auge actual del lenguaje Java, que es su principal "cliente". ¿No podrías mejor haber incluido la creación de los entornos de desarrollo gráfico de aplicaciones, en Visual Basic por ejemplo, como un hito (para bien y para mal) de la programación? ¿O el verdadero hito sería ahí el desarrollo de las interfaces gráficas y su modelo de programación basado en eventos y controles gráficos?

Estoy de acuerdo con el lenguaje C y la creación de la programación orientada a objetos como hitos de la historia de la programación, aunque es cierto que sería igualmente justo considerar el paradigma de la programación estructurada e incluso retroceder hasta los tiempos de Turing y Von Newmann... La verdad, no veo cómo encaja en toda esta solemnidad hablar ahí de los sistemas de control de versiones, jajaja, en vez de hablar de pasos imprescindibles como los lenguajes ensambladores, los compiladores y los editores visuales como logros mucho más relevantes.

En resumen, es un buen punto de partida, pero tendríamos que hacer una limpieza, una clasificación, una revisión de los orígenes y seguramente una clarificación de los objetivos que se pretenden con esto...

Unknown dijo...

Hola Pere, llego un poco tarde a la discusión pero... nunca es tarde si el post es bueno.

Te han hecho buenas sugerencias sobre la pre-historia de la informática: máquina de turing y tarjetas perforadas... Yo me aventuro a hablar del futuro, propongo considerar SOA, la arquitectura orientada a servicios, como un hito. El tiempo dirá si acierto.

De acuerdo en que SOA es un concepto un tanto volátil, no es tan contundente ni tan nítido como puede ser, por ejemplo, el lenguaje C. Por eso, para concretar y respaldar mi propuesta te incluyo este enlace

http://www.soa-manifesto.org/

Lo que me ha gustado de este manifiesto son dos cosas:

- Deja claramente escritos los principios de SOA.
- El respaldo que a este documento aportan personas como ¡Grady Booch!.

Y volviendo a tu lista... ¡ambicioso, polémico y muy divertido configurar una lista de 10 hitos!. Estoy de acuerdo con buena parte de los que has puesto (C, Orientación a objetos, Java, Visual Studio). No se pueden comparar a la máquina de Turing.... pero ¡son la leche!

Por cierto ¿Visual Studio?... ¡Pero si tú eres un javero empedernido!...

Rafa