Archive for the '7782' Category

Entrevista y Podcast

Saturday, March 23rd, 2013

Hoy paso a comentar dos entregables que se publicaron: una entrevista, y una charla como podcast.

El año pasado, el bueno de @santiagobasulto (desarrollador de software, emprendedor, programador Python, colaborador en proyectos de código abierto) tuvo la paciencia de hacerme una entrevista en persona, acá en Buenos Aires, tomándose el trabajo de viajar desde su La Plata en un día atareado. Estuvimos charlando como dos horas (en un bar histórico de la ciudad, donde se filmó la escena del billete y el mozo, de la película “Nueve Reinas”, les dejo como trabajo para el hogar averiguar cuál es). Justamente, ese bar tiene también algo que ver con la entrevista, porque he pasado por él varias veces en las décadas que llevo de programar.

Santiago la pasó en limpio, la pueden leer en:

http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html

Algo más de contexto, lo escribí hace algo más de cuatro años:

http://msmvps.com/blogs/lopez/archive/2008/12/31/treinta-a-241-os-en-desarrollo-de-software.aspx

Visiten el blog de Santiago:

http://charliedontcode.com/

Muy buena la escena de cine de donde toma el nombre (ya me imagino a @santiagobasulto cruzándose con Robert Duvall, acá en Buenos Aires, supongo que en otro bar histórico, La Biela ;-).

Y también tuve una charla, esta vez a distancia, con los buenos @roundcrisis @dvilchez, publicada hoy como podcast:

http://www.32minutos.net/?p=106

Ah! Pusieron una foto mía, debe ser la “clásica” 😉 (no me saco muchas fotos). Tratamos temas de desarrollo de software, algo de desarrollo ágil, insistí bastante sobre el tema TDD, también sobre generación de código como sistema experto, y “ver la luz”. Y hasta apareció algo de Anglish ;-).

Vean que han producido varios podcast en:

http://www.32minutos.net/

como el de Programación Funcional con el bueno de @martinsalias, o el de Node.js con @woloski, @jfroma y @theprogrammer. Hace unas semanas grabamos otro podcast, esta vez con Martin, para 32 minutos, y se conversó bastante sobre agilidad. Veremos si queda publicado en estos días. Estén atentos.

Les agradezco a los tres haberme permitido conversar y expresar algunas ideas, que pueden servir o no.

Pero lo bueno que están haciendo, es dejar entregables consumibles. Eso es importante. Internet (y la Web en particular) está permitiendo la generación de contenido y compartirlo con todos los interesados, de una forma accesible. Pienso que es una revolución tan grande como la de Gutenberg, y los primeros libros de Manuccio.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Computación en el Recuerdo (1) Requisitos de un Lenguaje de Programación

Friday, December 21st, 2012

En un mundo con Internet, tablets, lenguajes funcionales y cloud computing, es bueno volver la vista atrás y ver todo en perspectiva. Hoy, en mis lecturas, me encuentro con este fragmento:

…definimos ahora los requisitos de un lenguaje de programación para problemas originados en los campos de la economía y de la administración.

1. Debe ser posible indicar cómodamente en qué unidades periféricas se encuentran los diferentes archivos, y cómo los registros se almacenan físicamente en el medio de almacenamiento, por ejemplo cuántos registros forman un bloque en cinta magnética.

2. Debe ser fácil describir la transferencia de registros entre la memoria central y las unidades periféricas, por ejemplo la lectora de tarjetas perforadas, la impresora de líneas y la memoria auxiliar.

3. Debe ser posible referirse a los datos individuales de un registro. Por lo tanto, debe ser posible describir las propiedades de los datos incluidos en el registro y cómo se agrupan para formar un registro.

4. Debe ser posible presentar los datos de salida, de modo que sea fácil su lectura.

5. Es necesario que se puedan describir operaciones aritm^ticas con números y operaciones lógicas, por ejemplo comparación de números. Además, también debe ser posible trabajar con datos no numéricos, por ejemplo nombres.

Concluye:

El COBOL satisface todos estos requirimientos

Fuente: Sección 2.3 del libro “COBOL” de Torgil Ekman y Kenneth Nilsson, publicado acá en Argentina por la editorial El Ateneo. Lo leía a fines de los setenta, principios de los ochenta. Y encontro guardadas, dentro de algunas páginas, algunos de mis primeros cursogramas 😉

Estoy por comenzar un code-kata (espero que este fin de semana): un intérprete/compilador a JavaScript (browser y Node.js), de COBOL. Cosas veredes, Sancho!

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Microsoft MVP (Most Valuable Professional) otro año más, y el futuro del software

Saturday, October 10th, 2009

El pasado 1ro. de Octubre, me confirmaron que nuevamente, en este año que sigue, soy Microsoft MVP. Pueden ver detalles del programa en:

http://mvp.support.microsoft.com/

Quiero agradecer a Néstor Portillo (@nportillo) y Fernando García Loera (@ferglo) por su apoyo en todos estos años. También, a Carlos “Billy” Reynoso, quien me propuso como MVP en 2002 (vio la luz!! :-), luego de haberme convocado también en los 90 para participar de charlas y reuniones. Y a la gente del Microsoft User Group, del que participo desde hace casi 15 años, por el constante trabajo para armar una comunidad en la que podemos participar todos.

Me gustaría que otras empresas tuvieran un programa similar a los Microsoft MVPs. No sé si hay programas como éste en Oracle/Sun, IBM. En Argentina, la empresa que más se ha preocupado (con altibajos, hay que reconocer) ha sido Microsoft. Recuerdo los tiempos de Sun lanzando Java por estos lares, en los noventa. Estaba más preocupada por captar periodistas que a programadores. Si alguna vez me invitaron a una charla en los noventa, fue porque escribía para una revista, sino, ni enterados la gente de Sun de que hay programadores de este lado del ecuador.

Recuerdo mis primeros contactos con la tecnología Microsoft, al leer la Dr.Dobb’s Journal, donde se comentaban algunos productos. ¿Recuerdan Lattice C? Microsoft lo compró para ser su primer Microsoft C. ¿Alguien recuerda el Lisp de Microsoft? Creo que se lo habían comprado a una cía de Haway. Conocí más de la historia de esos tiempos en varios libros; en especial, recuerdo “Fire in the Valley”. También ahí aprendí de Apple, MITS y demás pioneros en la microcomputación. En esos tiempos, había multitud de “computadoras personales”, con distintos sistemas operativos y lenguajes. En muchas de ellas, Microsoft tenía software para ofrecer. Pero todos conocemos que el mercado despegó con la llegada de la IBM PC. Recuerdo que para editar con el edlin, booteaba con un diskette, lo retiraba, y ponía el segundo, porque ahí estaba el editor de línea. Como diría Olmedo: “Eramos tan pobres…. ” :-). Si bien llegó Apple a mi país, Argentina, en aquellos años había que ser descendiente directo de los que desembarcaron en el Mayflower para poder acceder al programa de desarrollo de aplicaciones de la empresa de la manzanita. Algunos detalles más de esos tiempos, en

Treinta años en desarrollo de software

Creo que, como entonces, vivimos tiempos fascinantes en el tema de desarrollo de software. Me gustaría escribir acá algunos puntos a estudiar, a seguir de cerca, en estos años que se vienen (espero que para mí, sean otros treinta años… 🙂

Primero, quiero destacar la existencia de dos plataformas de desarrollo: Java y .NET. Entiendo por plataforma de desarrollo a lenguaje(s), librería de clases extensa, soporte de desarrollo de distinto tipos de aplicaciones (desde consola a web a distribuidas). En el 95, comencé a conocer Java, y desde entonces, me ha parecido una de las mejores cosas que ha pasado en la historia del desarrollo de software. Con todas las críticas que se le pueden hacer (EJB una terrible cosa que aún me dá escalofríos (antes de acostarme, veo abajo de mi cama a ver si hay algún Entity Bean escondido), Sun como karma, empresa que no supo mover a la comunidad de desarrollo, que en muchos casos se tuvo que arreglar sola (Hibernate como ejemplo?)), Java ha sido lo que hizo que las máquinas virtuales, clases y objetos, frameworks, threads, serialización, modelos de dominio, salieran de lo académico o del nicho, y pasaran a la corriente principal de desarrollo. Desde fines de los noventa, no he pasado casi una semana, sin dar algún curso o charla sobre Java, y tecnologías asociadas. Es un “must be know” para cualquier desarrollador de software de este milenio.

Y Microsoft, vió la luz, y se reinventó a sí misma: abandonó VB, VBScript, ASP, C++ con la infame MFC (Microsoft Foundation Classes), ATL, COM (que nunca despegó para multiplataforma, como hubiera querido Don Box, y aún Miguel de Icaza con el proyecto Bonobo), y cambió como empresa, por lo menos en las herramientas de desarrollo. Parecía como si hubiera hecho todo por otra empresa: no más COM como tecnología necesaria; teníamos al fin una máquina virtual (un empleado de Microsoft morirá en la tortura antes de llamar “máquina virtual” al CLR, pero, es lo que es.. :-); plétora de lenguajes nuevos, totalmente montados sobre esa máquina virtual. Realmente, es como si hubiera habido otra empresa que creó todo eso. Un gran movimiento por parte de Microsoft, que ha sabido adaptarse a los tiempos que le tocan: como ejemplo, recuerden el giro a Internet que dió la empresa, a finales del 95.

Así que tenemos dos temas para seguir con atención: Java y .NET.

Otros temas: el desarrollo de aplicaciones, ¿dónde va? Veo que sigue habiendo aplicaciones de escritorio. Pero preveo que la lucha y la innovación vendrán en otras áreas (enlaces al final):

Aplicaciones Web: dentro de la empresa, los sistemas de gestión serán migrados a todo web. Si bien la interfaz web no es la mejor, la aparición de Ajax, librerías maduras de Javascript, tecnologías en el servidor (ASP.NET, ASP.NET MVC, veremos hacia donde va Java, luego de no haberse adoptado JSF por todo el mundo, Ruby y Python con desarrollo web), hoy no es descabellado ver cada vez más aplicaciones internas, expuestas en el browser.

Rich Internet Applications: usar JavaFX, Silverlight, Air, o lo que aparezca. Pero crear aplicaciones, que mediante algún plugin liviano en el cliente, permitan tener la experiencia de usuario del tipo de aplicaciones locales que tenemos ahora.

Software as a Service, tanto aplicaciones web (Google Apps) como RIA, el software de gestión y otros tipos, que hoy consumimos localmente, veo que estará cada vez más ofertado directamente en la web. Habrá que ver quienes serán el target: ¿las pequeñas empresas que no tienen un equipo de IT? ¿las medianas y grandes, que están cansadas de soportar un equipo de IT y desarrollo semi a a medida?

Desarrollos Web2.0: la interconexión de aplicaciones mediante protocolos livianos (desde REST hasta cualquier otra cosa, olvidando los pesados Web Services, especificación que veo que se encamina a la over-complexity), modelos pubsub montados sobre Twitter o similares, la aparición de Service Bus online.

Cloud computing: lo veo de dos formas: como una forma de virtualización as a service, y como una forma de aplicación escalable hacia afuera. La primera será más fácil de programar (es como venimos hasta ahora, pero “hosteando” en otro lado). Nos ahorramos el setup de la máquina, licencias, mantenimiento del equipo. Lo de escalable hacia afuera, más cercano a la idea de “cloud”, ejecutando en varias máquinas, habrá que estudiar cuán de difícil o fácil es el cambio de modelo de programación. Ejemplo: sharding de base de datos, ¿será lo suficientemente transparente para como venimos programando?

Mobile: o debería llamarlo, la aparición del software en múltiples dispositivos. Esto es una rama que tenemos que estar atentos. La industria de desarrollo está por dar un salto, o ya lo está dando: tal vez, el mayor desde la aparición de la computadora personal. La cabeza de playa son los teléfonos móviles. Pero lo que veo es: sistemas operativos para pequeños dispositivos (Android, Windows Mobile) con soporte de desarrollo (Android SDK, .NET Compact Framework), que harán que podamos escribir software para casi cualquier cosa, cualquier “widget” que tengamos (teléfonos personales, otros dispositivos, aparatos inteligentes), comunicados por Internet. La convergencia de: dispositivos inteligentes, Internet, herramientas de desarrollo maduras, es “the next big frontier”.

Lenguajes dinámicos: podrá haber lenguajes aislados (como los originales Ruby y Python) pero veo que cada vez más se montarán sobre las dos plataformas, .NET y/o Java. Veremos que pasa con esto: lo que veo, es que tienen comunidades fuertes, que impulsan nuevas cosas, nuevas ideas (o reimplementaciones frescas de otras ideas), que en otros ecosistemas más maduros es difícil de que prendan. Recordemos Ruby On Rails como un ejemplo.

Web Semántica: ahí afuera hay un mundo de información, que por primera vez está disponible, no sólo para seres humanos, sino para nuestras aplicaciones. La aparición de formas de aprovechar inteligentemente esta montaña(cordillera diría) de información, es un camino que veremos donde llega. Las iniciativas de web semántica son lo más promisorio. Pero también puede que “la liebre salte por otro lado”: desarrollos aislados, que encuentren una forma de comunicarse o de aprovechar lo existente.

Aplicaciones distribuidas: los que leen mi blog (yo, y mi tía Carlota), saben de mi interés en aplicaciones distribuidas. Habrá que seguir de cerca el tema message passing, o el más prometedor y flexible, agentes. Multithreading, multicore, son simplemente una antesala a Multimachine. Ese es el camino a al escalabilidad, y superar el bloque de la Ley de Moore: multicore está bien, pero multimachine is the solution (pregúntele a Google). Sharding de base de datos, escalabilidad, datos y objetos en memoria distribuida en máquinas (más barata y rápida que los discos).

Memoria: El último párrafo me trae a cuento esto que siempre nombro: el uso intensivo de memoria. La memoria cada vez es más barata, y más accesible. Pensemos en qué tipo de aplicaciones podemos lograr. Me imagino una base de objetos o de datos, totalmente en memoria, en máquinas distribuidas, donde el file system sea solamente otra forma de backup.

Concurrencia y Paralelismo: un tema a estudiar. Vean lo que va surgiendo con Clojure, Software Transactional Memory, hasta NetLogo. Vería de cerca paralelismo distribuido, como MapReduce, High Performance Computing, y alrededores.

Lenguajes funcionales: recuerdo APL, pero no con cariño. Pero vean el surgimiento de Erlang, la forma en que se usó para el desarrollo de aplicaciones, el “revival” de Lisp con Clojure y cía, F# por parte de Microsoft, Haskell, algo mixto con Scala en Java. Sumaría a los declarativos, como Prolog. ¿Será el siglo del lambda? Para mí, es hermoso que esos temas vuelvan a estar en el tapete. Todo desarrollador de software debería sumergirse en estos temas, en lo que podría llamar, los lenguajes de los dioses.

Modelos de aplicaciones: las aplicaciones cada vez son más complejas. Encarar el desarrollo basado prácticamente en lenguajes de tercera generación, sin haber elevado el nivel de abstracción, con tecnologías de base que van cambiando año a año, mes a mes, es un camino lleno de piedras y espinas. Yo apuesto a la aparición de modelos, Domain Specific Models, Domain Specific Languages, herramientas relacionadas (el camino más cercano es la generación de código), para hacer más fácil el domino de la complejidad y el cambio.

Desarrollo ágil: en los tiempos que corren, el trabajo en equipo es indispensable. La cantidad de tecnologías, detalles, y requerimientos que precisa un software más o menos normal, implican que va desapareciendo el desarrollador de garage, en solitario. Las limitaciones de desarrollo en cascadas, el cambio en los requerimientos, porque hasta el ambiente externo cambia, éxitos cosechados por el programación extrema y disciplinas relacionadas, todo apunta a que tenemos que ir adoptando más y más el modo ágil de construir software.

Inteligencia Artificial: como decía más arriba, es tiempo de que agentes. Incorporar lógica, razonamiento, modelos del mundo, inferencias, objetivos, ontologías, algoritmos genéticos, redes neuronales, en todo lo que se viene.

(ahora entenderán un poco más, a que van los códigos de código abierto que publico, como una especie de ejercicio personal para entrenarme en varios de los puntos de arriba).

No he dejado enlaces en el texto, pero muchos de estos temas, como verán, me interesan desde hace un tiempo, y estos son enlaces que he coleccionado:

http://delicious.com/ajlopez/distributedcomputing
http://delicious.com/ajlopez/artificialintelligence
http://delicious.com/ajlopez/agile
http://delicious.com/ajlopez/codegeneration
http://delicious.com/ajlopez/dsl
http://delicious.com/ajlopez/dsm
http://delicious.com/ajlopez/functionalprogramming
http://delicious.com/ajlopez/cloudcomputing
http://delicious.com/ajlopez/mobile
http://delicious.com/ajlopez/saas
http://delicious.com/ajlopez/ria
http://delicious.com/ajlopez/dynamiclanguages
http://delicious.com/ajlopez/semanticweb
http://delicious.com/ajlopez/hadoop
http://delicious.com/ajlopez/lisp
http://delicious.com/ajlopez/clojure
http://delicious.com/ajlopez/messaging
http://delicious.com/ajlopez/esb
http://delicious.com/ajlopez/scala
http://delicious.com/ajlopez/concurrency
http://delicious.com/ajlopez/parallel
http://delicious.com/ajlopez/stm

Tendría más para comentar, pero es hora de tomar mi medicación…:-)… Sí, ya sé, es la pastilla roja, no la verde.

Me parece suficiente para este post, ¿no les parece?

Lo que quería trasmitirles, es que aprovechen este tiempo. Hace treinta años, yo no tenía todo esto disponible: comunicación instantánea, acceso a recursos a un costo razonable, contacto con la comunidad, herramientas maduras, ideas bullendo. Y ahora está todo acá, servido para la próxima revolución.

Muchas de estas ideas, las comento en mis cursos, aunque no sé cuán bien pude trasmitirlas, o si se entendió algo del mensaje. Siempre veo que la gente pide cursos de un tema en particular, me gustaría en este post (como en otros anteriores) haber dado una visión más amplia de lo que hay en el mundo del desarrollo de software, hoy, y que sirva de ensayo futurológico, sin mayores pretensiones, de lo que puede venir como importante.

De alguna forma, en estos años, se decidirá el tipo de software que se ejecutará en las próximas dos décadas. Y como en las anteriores, el software seguirá cambiando la historia humana.

Pero el software no se hace solo. Como decía Alan Kay: “la mejor forma de predecir el futuro, es inventándolo”. Sean parte de todo esto.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

La madre de todas las demos, de nuevo

Wednesday, September 9th, 2009

El año pasado ya había escrito sobre el tema:

La madre de todas las demos

La historia es relatada en más detalle en la entrada de Wikipedia:

http://en.wikipedia.org/wiki/The_Mother_of_All_Demos

The Mother of All Demos is a name given retrospectively to Douglas Engelbart’s December 9, 1968 demonstration at the Fall Joint Computer Conference (FJCC) at the Convention Center in San Francisco, in which a number of experimental technologies that have since become commonplace were presented. The demo featured the first computer mouse the public had ever seen, as well as introducing interactive text, video conferencing, teleconferencing, email, and hypertext.

La semana pasada, en una lista de correo privada, recibí esta lista de videos. Veánlos, más de 40 años atrás, ya se demostraba muchas de las tecnologías que hoy tenemos. Según la info del usuario de youtube bigkif:

On December 9, 1968, Douglas C. Engelbart and the group of 17 researchers working with him in the Augmentation Research Center at Stanford Research Institute in Menlo Park, CA, presented a 90-minute live public demonstration of the online system, NLS, they had been working on since 1962. The public presentation was a session in the of the Fall Joint Computer Conference held at the Convention Center in San Francisco, and it was attended by about 1,000 computer professionals. This was the public debut of the computer mouse.

Pero no fue solamente el mouse:

But the mouse was only one of many innovations demonstrated that day, including hypertext, object addressing and dynamic file linking, as well as shared-screen collaboration involving two persons at different sites communicating over a network with audio and video interface.

[View:http://youtube.com/watch?v=JfIgzSoTMOs]

[View:http://youtube.com/watch?v=a11JDLBXtPQ]

[View:http://youtube.com/watch?v=61oMy7Tr-bM]

[View:http://youtube.com/watch?v=fNXLK78ZaFo]

[View:http://youtube.com/watch?v=7zz1SwCTCEE]

[View:http://youtube.com/watch?v=6dVNxlLYTsQ]

[View:http://youtube.com/watch?v=XiJA7_Sw9aM]

[View:http://youtube.com/watch?v=EI8LZKW5Lwk]

[View:http://youtube.com/watch?v=VYDg2wr2QfI]

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

El programador humilde

Tuesday, May 26th, 2009

Leo hoy este fragmento en el post

Why I’m The Best Programmer In The World*

At the 1972 Turing Award lecture, Edsger Dijkstra delivered a paper titled �The Humble Programmer.� He argued that most of programming is an attempt to compensate for the strictly limited size of our skulls. The people who are best at programming are the people who realize how small their brains are. They are humble. The people who are the worst at programming are the people who refuse to accept the fact that their brains aren�t equal to the task. Their egos keep them from being great programmers. The more you learn to compensate for your small brain, the better a programmer you�ll be. The more humble you are, the faster you�ll improve.

 

Les recomiendo ese “paper” de E.W.Dijkstra:

EWD340.PDF

Algunos pasajes

…. in 1957, I married and Dutch marriage rites require you to state your profession and I stated that I was a programmer. But the municipal authorities of the town of Amsterdam did not accept it on the grounds that there was no such profession. And, believe it or not, but under the heading “profession” my marriage act shows the ridiculous entry “theoretical physicist”!

Era lo que estubia Dijkstra antes de convertirse en el primer programador alemán holandés.

there is yet another circumstance that had a profound influence on the programmer’s attitude to his work: on the one hand, besides being unreliable, his machine was usually too slow and its memory was usually too small, i.e. he was faced with a pinching shoe, while on the other hand its usually somewhat queer order code would cater for the most unexpected constructions. And in those days many a clever programmer derived an immense intellectual satisfaction from the cunning tricks by means of which he contrived to squeeze the impossible into the constraints of his equipment.

Algo que Dijkstra ataca en el resto del paper.

In the beginning there was the EDSAC in Cambridge, England, and I think it quite impressive that right from the start the notion of a subroutine library played a central role in the design of that machine and of the way in which it should be used. It is now nearly 25 years later and the computing scene has changed dramatically, but the notion of basic software is still with us, and the notion of the closed subroutine is still one of the key concepts in programming. We should recognise the closed subroutines as one of the greatest software inventions; it has survived three generations of computers and it will survive a few more, because it caters for the implementation of one of our basic patterns of abstraction.

Nadie sabía bien que se requería de un lenguaje de programación. Lo explica Dijsktra con un caso:

The second major development on the software scene that I would like to mention is the birth of FORTRAN. At that time this was a project of great temerity and the people responsible for it deserve our great admiration. It would be absolutely unfair to blame them for shortcomings that only became apparent after a decade or so of extensive usage: groups with a successful look-ahead of ten years are quite rare! In retrospect we must rate FORTRAN as a successful coding technique, but with very few effective aids to conception, aids which are now so urgently needed that time has come to consider it out of date. The sooner we can forget that FORTRAN has ever existed, the better, for as a vehicle of thought it is no longer adequate: it wastes our brainpower, is too risky and therefore too expensive to use. FORTRAN’s tragic fate has been its wide acceptance, mentally chaining thousands and thousands of programmers to our past mistakes. I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility.

Pero había joyitas apareciendo:

The third project I would not like to leave unmentioned is LISP, a fascinating enterprise of a completely different nature. With a few very basic principles at its foundation, it has shown a remarkable stability. Besides that, LISP has been the carrier for a considerable number of in a sense our most sophisticated computer applications. LISP has jokingly been described as “the most intelligent way to misuse a computer”. I think that description a great compliment because it transmits the full flavour of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.

La aparición de un lenguaje documentado, con conducta definida, y hasta manual, la nota con Algol (recuerdo mi paso por Algol-W):

The fourth project to be mentioned is ALGOL 60. While up to the present day FORTRAN programmers still tend to understand their programming language in terms of the specific implementation they are working with —hence the prevalence of octal and hexadecimal dumps—, while the definition of LISP is still a curious mixture of what the language means and how the mechanism works, the famous Report on the Algorithmic Language ALGOL 60 is the fruit of a genuine effort to carry abstraction a vital step further and to define a programming language in an implementation-independent way.

Pero también sufrí al PL/I, que me pareció en su tiempo que se iba de rumbo, y así lo demostró la historia:

Using PL/1 must be like flying a plane with 7000 buttons, switches and handles to manipulate in the cockpit. I absolutely fail to see how we can keep our growing programs firmly within our intellectual grip when by its sheer baroqueness the programming language —our basic tool, mind you!— already escapes our intellectual control.

Más fragmentos:

the programmer only needs to consider intellectually manageable programs, the alternatives he is choosing between are much, much easier to cope with

as soon as we have decided to restrict ourselves to the subset of the intellectually manageable programs, we have achieved, once and for all, a drastic reduction of the solution space to be considered

Today a usual technique is to make a program and then to test it. But: program testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence. The only effective way to raise the confidence level of a program significantly is to give a convincing proof of its correctness.

We all know that the only mental tool by means of which a very finite piece of reasoning can cover a myriad cases is called “abstraction”; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. In this connection it might be worth-while to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.

the tools we are trying to use and the language or notation we are using to express or record our thoughts, are the major factors determining what we can think or express at all! The analysis of the influence that programming languages have on the thinking habits of its users, and the recognition that, by now, brainpower is by far our scarcest resource, they together give us a new collection of yardsticks for comparing the relative merits of various programming languages.

I could even go one step further and make an article of faith out of it, viz. that the only problems we can really solve in a satisfactory manner are those that finally admit a nicely factored solution. At first sight this view of human limitations may strike you as a rather depressing view of our predicament, but I don’t feel it that way, on the contrary! The best way to learn to live with our limitations is to know them.

Ultima frase

We shall do a much better programming job, provided that we approach the task with a full appreciation of its tremendous difficulty, provided that we stick to modest and elegant programming languages, provided that we respect the intrinsic limitations of the human mind and approach the task as Very Humble Programmers.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez
Primer post desde nueva notebook, gracias a Martin Salias

El origen de mi nickname

Friday, July 4th, 2008

Este año cumplo treinta años con el desarrollo de software, así espero me permitan algunos posts nostálgicos, y algo personales. Hoy me da pie a escribir este post, una pregunta que me hicieron: ¿cómo surgió lo de Angel “Java” Lopez? ¿y por qué “ajlopez”?

Es simple. En los noventa, yo no tenía teléfono (en general no lo uso) en casa. Pero veía que cada vez más aparecían BBS. Mi primera visión de un modem fue en alguna Byte de los ochenta, y en el clásico film “Juegos de Guerra” (que habré visto varios veces en el mismo día). Así que comencé a comprar Boardwatch, contraté un teléfono para mi cubil, alguna placa o algo así para mi PC, y me sumergí en el mundo de los BBS. Recuerdo la FidoNet de aquel entonces. ¿Recuerdan los ASCII art de presentación? ¿Y el ruido del modem conectando? Eramos tan pobres… .;-)

El BBS más popular de aquel entonces para el tema de programación, por aquí en Argentina, resultó ser el de MP Ediciones. ¿Cómo se llamaba? ¿Feedback? Ya no recuerdo. La cuestión que para inscribirme tuve que ir a la editorial misma, en la calle Moreno, acá en Buenos Aires. Me preguntaron el nombre completo, y en aquel entonces, habituaban a poner como nick las iniciales y el apellido del usuario. Así quedó mi código de usuario: ajlopez.

En ese BBS, en 95/96, participaba yo en foros de programación, en general. Yo estaba viendo y estudiando Java, que acababa de aparecer. Para mí, Java fue un avance: un lenguaje que llevaba garbage collector y una librería de clases para las masas. Le faltaba un golpe de horno (AWT era para mí Asqueroso Windows Toolkit…;-), pero pintaba interesante.

De tanto predicar sobre Java en el BBS de MP Ediciones, y al ser firmar como ajlopez, Angel J Lopez, el bueno de Sebastián Barraza, otro usuario activo del BBS, me bautizó Angel “Java” Lopez.

De ahí el origen de ese nick más completo.

A partir de la actividad de MP Ediciones, se formó el Club Byte, que en algun momento se escindió, y se formó el Microsoft User Group, que ya va para los 13 años de existencia, creo.

¿Tienen algún recuerdo de esos tiempos?

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

Entrevista a Bill Gates

Saturday, June 28th, 2008

Ayer fue el último día de Gates como “full time” en Microsoft. Encontré una lista de videos de una entrevista que le hizo en estos días la BBC en:

How a geek changed the world

Veran parte de la historia de MS, la vieja historia de la Altair, cómo Allen viaja a Alburquerque con un intérprete Basic, hecho en Harvard con Gates, sin tener idea de si iba a funcionar en la máquina real. Se mudan ahí (siempre se cuentan historias de Gates visitando el barrio rojo de la ciudad). Veo a Mitch Kapor, a Myriam Lubow, contando cómo confundió a Gates con un intruso en la oficina de Microsoft, no podía creer que fuera el presidente, a Scott Wood, (recién descubro que Marla es Marla Wood ahora), la vuelta a Seattle (Gates viajó en su auto coleccionando multas), el crecimiento del gigante… Encontramos a Steve Ballmer, viejo compañero de noches de poker en los dormitorios de Harvard.

Aparece gente de BurguerMaster, donde varios de Microsoft, incluido Gates, iban a comer hamburguesas (una rutina de manejo de memoria de los primeros Windows se llama así internamente, en honor a este local). Escucharan a Sir Alan Sugar hablando de Gates. Está la aparición de Novell. Está John Batelle describiendo la aparición de la web. Y cómo Microsoft llega tarde a la red, pero luego del memo interno de Gates (1995?) todo comienza a cambiar. Más adelante, Janet Reno comienza el juicio contra el gigante de Microsoft.

Mucho de lo que se muestra, lo viví directamente. Recuerdo haber trabajado con el GWBasic, el Lattice C que compraron, el venerable edlin, el Xenix (antes de MS, trabajé con el CP/M de Kildall, y antes… bueno, eso dará pie a otro post). Recuerdo cuando aparecieron las ventanas, no habia Overlapped (aunque ya estaba la constante definida en los archivos .h). Pero antes, el Multiplan, y el editor de texto que tenían para desplazar a Wordstar…. ooops… ya ni recuerdo el nombre. Pero el Multiplan estaba hecho sobre las interrupciones de DOS, mientras que Lotus trabajaba directamente sobre el BIOS, y la dirección de video 0xb000:0 creo para monocromático, o 0xb800:0 para color (para evitar flicker había que testear una puerta, antes de mandar algo a esa memoria… ;-). No fue lo único que influyó, pero realmente Lotus corría más rápido que el Multiplan.

Excelente documental, acá estan las partes de la entrevista, gracias a Youtube:

[youtube:2gOrWBPt1bA]

[youtube:d_LHBfHrWIo]

[youtube:krFuJhGRwaw]

[youtube:rddm3aHdJp8]

[youtube:5OLgcdgOmsk]

[youtube:2GVCCZY6bYA]

[youtube:PClVHy03vnA]

Veremos que le depara el futuro a Gates: es una persona inteligente, que sabe cómo tomar decisiones con la información disponible, y llevar adelante lo que decide. Esperemos que despliegue esas habilidades en su nuevo desafío.

Para los nostálgicos, pueden encontrar otras piezas de la historia en

Los piratas de Silicon Valley

Gracias al bueno de Ezequiel Jadib por el enlace original.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

La historia de Smalltalk

Thursday, June 26th, 2008

Ayer comenté un libro de conceptos de programación, de actualidad (ver Libro Foundation of Programming, listo para bajar). Quisiera hoy comentar un texto, que me parece un “debe ser leído” por todos los que nos dedicamos al desarrollo de software. Es un escrito del bueno de Alan Kay, sobre la historia de Smalltalk:

Smallhistory.pdf

Es un excelente texto para leer, y que influye más allá de simplemente estar interesado en Smalltalk. Es una historia de cómo algunas ideas fueron surgiendo, dentro de la comunidad de desarrollo americana. Cómo la programación a objetos fue surgiendo, y cómo la forma de interactuar con las computadoras actuales fue tomando forma. Hace un tiempo vimos por acá la demo de Douglas Engelbart. De nuevo aparece en esta historia.

Lean, por ejemplo, cómo Kay detecta algunas ideas germinales (datos junto con conducta) en desarrollos de la Fuerza Aerea, que hoy veríamos muy alejados de la OOP. Lean sobre su contacto con Lisp, y con Seymour Papert. Lean sobre los problemas internos de Xerox, la compentencia con DEC, cómo algunas ideas fueron casi fruto de la casualidad, de que un proyecto siguió adelante aunque otros se oponían. Lean sobre Simula, Euler,  el IPL predecesor de Lisp. Lean sobre el Sketchpad de Evans (que yo encontré por primera vez en alguna revisión histórica de la Scientific American). Es una lectura, por lo menos para mí, deliciosa.

Kay tiene un idea desde hace años, que comparto: la idea de que la máquina, y la computación en general, nos debe servir para expandir las capacidades humanas. Excelente idea. Es lo que de alguna forma también hoy estamos logrando con Internet. Hoy, ramas del conocimiento y del hacer humano, han sido potenciadas por el software, el hardware y todo lo que ha pasado en nuestra profesión en las últimas décadas.

En mi infancia, se pensaba que los viajes espaciales iban a revolucionar la historia humana. Bueno, eso no ha pasado todavía. Pero de alguna forma producto de la guerra fría, y de la carrera espacial, el desarrollo de la computación (recordemos sus inicios modernos en la segunda guerra, y la aparición de la cibernética impulsada por temas militares) y de Internet misma, es lo que ha provocado un cambio, que poco a poco va alcanzando a gran parte de la humanidad.

Leer la historia de Kay es indispensable para ir entendiendo que ha pasado. Alguien que ha dicho “la mejor forma de dominar el futuro, es inventándolo” (frase aproximada, lean el texto, para ver dónde surgió exactamente).

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

La madre de todas las demos

Monday, June 2nd, 2008

Ya que estoy en estos días tratando temas de historia de la computación e interfaces, no quiero olvidarme dela que se ha llamado la madre de todas las demos:

http://en.wikipedia.org/wiki/The_Mother_of_All_Demos

dada en 1968, por Douglas Engelbart, demostrando el primer mouse, pero también mostrando texto interactivo (una novedad para la época), video y tele conferencia, correo electrónico e hipertexto.

Pueden ver un video en:

Doug Engelbart: The Demo

 

 

Estamos en una industria relativamente joven en la historia humana. Mucho de lo demostrado ahí, tardó de 10 a 20 años en convertirse en parte del “mainstream”. Hoy creo que la velocidad de adopción de algo es más rápida, por lo menos en ideas de software, veremos en hardware: tenemos una forma de difusión de ideas más rápido, y aún la aparición de nuevo hardware se acelera ante el potencial mercado que puede alcanzar, prácticamente planetario.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

Los piratas de Silicon Valley

Tuesday, August 14th, 2007

Al fin está disponible la película en Internet:

[View:http://www.youtube.com/watch?v=xflXMZL2stU]

[View:http://www.youtube.com/watch?v=sHM82fF2ta8]

[View:http://www.youtube.com/watch?v=BCgB5fITxA4]

[View:http://www.youtube.com/watch?v=ZYDL_ZHMdvU]

[View:http://www.youtube.com/watch?v=1ZU2ncF2NFw]

[View:http://www.youtube.com/watch?v=DcWjOodAtoE]

[View:http://www.youtube.com/watch?v=wIeSqEBGNHM]

[View:http://www.youtube.com/watch?v=J9GGdsepMGU]

[View:http://www.youtube.com/watch?v=4Vw0QVT40CM]

[View:http://www.youtube.com/watch?v=ETvV4CYkEqk]

(en el comienzo de la película, se muestra la filmación de un famoso aviso de Apple, “1984”) (Gracias a Johnny Halife por el dato)

Yo, como siempre, prefiero el libro, “Fire in the valley”. Ese libro me alimentó durante casi dos décadas, y siempre vuelvo a él a investigar algun tema. Lo veo más detallado que la película, y tal vez, más imparcial, a pesar de estar más cerca de los hechos. Lo interesante de la película es que nos sumerge mejor en algunos ambientes, para nosotros que no lo vivimos (el ambiente de los 70, 80 en EEUU). Igualmente hay que verla con alguna actitud crítica. Habría tanto para comentar sobre los detalles de la historia de la microinformática. Desde la influencia de Popular Mechanics, los clubes de entusiastas, y los aficionados que viajaban medio EEUU para llegar a la sede del MITS para comprar la primera Altair.

Grande recordar a Ballmer jugando póker con Gates, o al Capitán Crunch (luego contratado por IBM para escribir uno de los primeros procesadores de palabras de la IBM PC)… 🙂

Era un tiempo, donde el mundo humano estaba cambiando… Sigue cambiando, ¿somos parte de ese cambio?

Que la disfruten, nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/