Friday 5 October 2007

18

En la imprescindible novela 1984 de George Orwell, el "Gran Hermano", un ícono videográfico, controla el pensar y hacer de las masas con dos estrategias:

  • El control del lenguaje a travéz de la obligatoriedad del uso de la "neolengua"
  • El control de la historia antigua, pasada, y reciente a travéz del control de los medios de información.
A continuación un ejemplo bastante cercano a la realidad de cómo ese tipo de controles son ejercidos sobre nosotros hoy en día:

Thursday 27 September 2007

Sanduche Capresa

Como estoy de papá solo, me ha tocado preparar comida por lo menos dos veces al día todos los días. Para ello he buscado preparaciones que, sin dejar de ser ricas y sanas, sean sencillas y rápidas (el tiempo vuela cuando hay que llegar al colegio antes de las 7:00 AM). Esta es una receta que le encantó a los chamines.

Ingredientes para dos personas

  • Una bolita (120g) de queso mozzarella
  • Un tomate perita maduro
  • Albahaca fresca.
  • Aceite de oliva
  • Vinagre balsámico
  • Cuatro rebanadas de pan integral
  • Sal y pimienta
Cortar el queso mozzarella en rueditas delgadas. Cortar el tomate por la mitad, eliminar las partes duras, y cortar en lonjas delgadas.

Mezclar aceite de oliva con un poco de vinagre balsámico en un bol pequeño, y untar el lado interior de las rebanadas de pan con la mezcla usando una brocha o una cuchara.

Armar los sanduches colocando una capa de queso mozzarella, y luego lonjas de tomate en el centro. Añadir sal y pimienta, y un par de hojas de albahaca.

Cerrar los sánduches y colocarlos en una tostadora precalentada hasta que el queso comience a derretirse.

Servir enseguida.

Tuesday 25 September 2007

Permuta

Pienso que el Banco Central de Venezuela (BCV) debería intervenir en el mercado de bonos que genera el valor del dolar "permuta". La razón es que los altos precios del dólar paralelo producen un efecto psicológico que va en contrade las políticas anti-inflacionarias del mismo BCV y del gobierno.

El BCV ya interviene en el mercado a través de la emisión, venta y compra de papeles para controlar la liquidez en bolívares, pagando intereses que resulten atractivos a los inversionistas.

Está dentro de la potestad del BCV participar también en el mercado de papeles denominados en dólares y ejercer política monetaria con ello. Resulta para mi incomprensible el por qué el BCV no lo hace.

El BCV podría, por ejemplo, entrar al mercado comprando y terminar el día de bolsa vendiendo x% por debajo del último precio, día tras otro. Eso llevaría el dólar paralelo a la baja, y las pérdidas, de ser necesarias, serían estimables y justificables.

Saturday 22 September 2007

BsF2

En una nota anterior expliqué las razones por las cuales es conveniente considerar una reconversión monetaria como la introducción de una nueva moneda, y adaptar los sistemas informáticos para el manejo de múltiples monedas.

¿Cómo se hace eso?

En un sistema que maneja múltiples monedas, un monto aislado carece de significado mientras no se sepa en qué moneda está expresado. Por eso los montos deben pasar de ser solo cifras a pares ordenados:

[monto, moneda]
Con eso las capas superiores de una aplicación pueden solicitar valores en una moneda en particular, delegando en librerías especializadas el llevar cuenta de los tipos de cambio, su conversión, su aritmética, y su presentación.

Usando orientación a objetos la interfaz para dichas librerías resulta bastante simple. Las librerías para manejo de fechas localizadas en Java son un buen ejemplo de como lograr ese tipo de abstracción. Uno de los primeros tutoriales para la librería de pruebas JUnit trata precisamente sobre un programa que maneja múltiples monedas. Otra ventaja es que una librería de manejo de múltiples monedas puede escribirse una vez, y se reutilizada indefinidamente, más si la misma es expuesta como servicio Web.

Manejando los montos como pares, las bases de datos antiguas y de solo-lectura pueden quedarse como están, ya que la transformación a pares puede llevarse a cabo solo en las interfases que lo requieran. Así muchas de las interfases entre sistemas "legacy" pueden permanecer inalteradas.

Para bases de datos activas es necesario agregar una columna paralela que indique la moneda para cada columna que contenga un monto; una tarea fácil, rápida, e inocua si es realizada antes de la fecha de la reconversión, y la cual evita los riesgos de discrepancia con contrapartes en físico (en papel) y las inconsistencias con sistemas que no deben ser modificados. Para los sistemas sujetos a actualización, las consultas a bases de datos específicas en las capas de persistencia de una aplicación deben extraer el par completo (ambos valores), y dejar lo demás a las librerías correspondientes.

Manejar los montos en las transacciones como pares [monto, moneda] es suficiente para atender los requerimientos de la introducción del Bolívar Fuerte inmediatos y para siempre, ya que la tasa de conversión de Bs. 1000/Bs.F. jamás va a cambiar.

Para hacer que un sistema maneje múltiples monedas internacionales hace falta agregar una dimensión temporal a los montos debido a que las tasas de cambio varían constantemente. Ese será el tema de otro artículo.

Huso Horario Venezolano en Ubuntu

  • Actualizado para el cambio de huso horario en 2007/12/09 03:00.

En otro post expliqué como y por qué lidiar con el cambio de huso horario en Venezuela. Aquí explico cómo hacerlo sobre Ubuntu Linux.

Para lograrlo en una distribución Ubuntu 7.04 hice lo siguiente:
  1. Respaldar el archivo /usr/share/zoneinfo/America/Caracas
  2. Crear un directorio de trabajo y cambiarse al mismo (mkdir work; cd work)
  3. Obtener el archivo ftp://elsie.nci.nih.gov/pub/tzdata2007*.tar.gz
  4. Descomprimir el archivo (tar xvzf tzdata*)
  5. Editar el archivo llamado southamerica, ir al final del archivo, donde dice "Venezuela", y cambiar las últimas líneas para que aparezcan como las resaltadas:
    # Venezuela
    # Zone NAME GMTOFF RULES FORMAT [UNTIL]
    Zone America/Caracas -4:27:44 - LMT 1890
    -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
    -4:30 - VET 1965 # Venezuela Time
    -4:00 - VET 2007 Dec 9 3:00
    -4:30 - VET

  6. Compilar el archivo así:

    sudo zic southamerica

  7. Eso es todo.
Para comprobar el resultado se puede ejecutar:
zdump -v America/Caracas

Wednesday 19 September 2007

Nuevo Huso Horario para Venezuela

vo.2 Agregada nota sobre nueva fecha para el cambio de horario.

NOTA: El cambio de huso horario será el 9 de diciembre de 2007 a las 3:00 AM.
El anunciado cambio de huso horario en Venezuela tiene una aplicación sencilla en la mayoría de los casos: atrasar el reloj media hora.

En el caso de las computadoras el cambio de hora es un poco más complejo debido a que redes como la Internet se rigen por el Tiempo Universal Coordinado (UTC) , el cual se matiene en consistencia con el Tiempo Medio de Greenwhich (GMT), y compensan las horas indicadas en mensajes y otras comunicaciones de acuerdo al huso horario indicado en la configuración. Si solo cambiáramos la hora en la computadora, la misma calcularía la hora GMT incorrectamente. En vez de calcular que un mensaje que acabamos de escribir a las 20:00 hora de Venezuela fue escrito a las 00:30 GMT del día siguiente (20:00 + 4:30 = 24:30), calcularía que el mensaje fue escrito media hora antes (20:00 + 4:00 = 24:00), y eso seguramente causará problemas.

Para el caso de los sistemas operativos Windows, Microsoft ha publicado instrucciones detalladas sobre como cambiar o definir nuevas zonas horarias. El método más sencillo es éste:
  1. Descargar tzedit.exe de la página de Microsoft.
  2. Ejecutar el programa para descomprimirlo (por defecto a C:\Program Files).
  3. Ejecutar C:\Program Files\TZEDIT.EXE.
  4. Oprimir el botón New (Nueva) y agregar una zona horaria como esta:
  5. Finalmente, el domingo 9 de diciembre en la mañana, escoger la nueva zona horaria y colocar la nueva hora (media hora menos) usando la aplicación de Fecha y Hora del Panel de Control (Control Panel).
Los usuarios de Linux pueden usar el programa zic para compilar una nueva zona horaria. Existen instrucciones para las distintas distribuciones en la red.

Los usuarios de celulares, agendas electrónicas, y localizadores geosatelitales probablemente tendrán que esperar a que una actualización adecuada del software para el dispositivo se haga disponible.

Saturday 1 September 2007

BsF

Al revisar la literatura producida en torno a la adopción del Euro en la Unión Europea llama la atención la relativa poca importancia que se le da a los retos informáticos en comparación a otros temas como el efecto neto sobre el negocio por los posibles cambios de percepción en clientes y proveedores. Más aún, muchas de las recomendaciones se enfocan no en los problemas sino en las nuevas oportunidades que la introducción de la moneda común podría traer.

Ese enfoque sobre un cambio aparentemente tan grande se debe a que la formación de la Comunidad Económica Europea y luego la Unión fue un proceso gradual añadido a siglos de intercambio comercial a través de las fronteras. La mayoría de las empresas de mediano tamaño en adelante ya manejaban múltiples monedas en sus transacciones y su contabilidad (una empresa inglesa comercializaba productos franceses que se producían con insumos españoles, y se vendían en Alemania; ese tipo de cosas).

Para el empresariado europeo, la introducción del Euro significó desde el punto de vista técnico solo la introducción de una nueva moneda entre tantas otras. Por eso el énfasis sobre las percepciones y las oportunidades.

Hay cosas importante que aprender de la experiencia europea. En Venezuela tendemos a pensar en que la adopción de la nueva moneda, el Bolívar Fuerte (BsF o VEF), significa una (re)conversión, cuando la perspectiva adecuada es tratarla como la introducción de una nueva moneda.

En ese sentido el reto es el de hacer los sistemas informáticos y los procesos capaces de manejar múltiples monedas, con ello abriendo la oportunidad de manejar de forma transparente y simple transacciones en, por ejemplo, dólares de EEUU, pesos colombianos o argentinos, reales brasileros, o, por que no, en la moneda común de un mercado suramericano.

Nadie en su sano juicio propondría que la manera de acometer la introducción del BsF en cuanto informática es hacer un paseo por las bases de datos para ubicar los registros que figuren montos en Bs para dividirlos por mil.

Para comenzar, una estrategia tan ingenua quebraría la consistencia entre los números en las bases de datos con los documentos físicos (facturas, recibos, cheques,....) que se les corresponden, así como aquella con los registros digitales de clientes y proveedores.

Es por eso que el problema de la introducción del BsF debe ser manejado como un reto de adaptación de sistemas y procesos al manejo de múltiples monedas, y jamás como uno de transformación de datos existentes.

Continuará...

Thursday 2 August 2007

Los Profetas Chimbos

El Banco Central de Venezuela (BCV) reportó ayer que la inflación del último mes fue de 0.5%, un aumento cónsono con la meta de inflación para el año.

Sin esperar un instante, ya los profetas chimbos (ellos se dicen economistas) sacaron sus bolas de cristal también chimbas para predecir (como lo han hecho por años sin acertar predicción alguna) que, a pesar de las cifras recientes, estamos encaminados hacia un pronto desastre económico.

Uno de ellos apareció esta mañana en la tele contando que la inflación promedio de los últimos ocho años, los del gobierno actual, ha sido de 19%, y que su bola de cristal decía que la de este año va a cerrar en 21%, como mínimo.

Es cierto que en los últimos ocho años los precios se han multiplicado por cuatro (400%).

Pero lo que no cuentan estos profetas chimbos es que, según el mismo BCV, en los ochos años anteriores, los de los "Chicago Boys", los de los "IESA Boys", los de Teodoro Petkoff en el Ministerio de Coordinación y Planificación (CORDIPLAN), los de ellos mismos estableciendo la política económica nacional... los precios se multiplicaron por veintiseis.

Hubo DOS MIL QUINIENTOS NOVENTA Y SIETE POR CIENTO DE INFLACIÓN en los ocho años durante los cuales nos dejamos guiar por estos "economistas" de "estamos mal pero vamos bien".

¿Hasta cuándo van a seguir dándole tribuna a estos charlatanes?

Wednesday 1 August 2007

Ser mejor

Es difícil de por sí, y más difícil aún por las actitudes que a veces despierta en otros. Por eso a veces hace falta explicarlo así:


No estoy buscando ser mejor que tú. Lo que pasa es que estoy poniendo todo mi esfuerzo en ser mejor que ese quien fui ayer.

Tuesday 31 July 2007

Quién va arriba?

Hace unas semanas compré un computador de escritorio con todos los hierros que el presupuesto predeterminado podía lograr: Pentium D a 3.0 GHz, 1 Gb de RAM, 160 Gb en disco, etc., más un monitor de 19" a 1990x1400.

Una de las razones por las cuales compre desktop es porque estoy harto de las laptops, las cuales se han convertido en artículos desechables al cabo de año y medio de uso; pero eso es tema para otro post.

Mi otra intención (ya que estoy decidido a mantenerme alejado de Windows Vista el mayor tiempo posible) era la de correr Windows XP (todavía necesario) sobre Linux en la nueva compu. Esto es lo que aprendí:

  1. KVM, el sistema de virtualización imbuido en el kernel de Linux solo corre en compus cuyo chipset y bios tienen soporte para virtualización asistida por hardware. Descubrí tarde que no todos los motherboards se prestan para eso.
  2. Otras opciones de virtualización sobre Linux, como VirtualBox, funcionan en forma excelente. Con el doble CPU, Windows XP corrió sobre Linux con el mismo o mayor rendimiento que en mi laptop con un Centrino de 1.8 Ghz.
  3. Hacer que Linux reconozca el hardware que uno tiene a la mano sigue siendo un reto inmenso no tanto de hackeo sino de tiempo disponible para investigar, jurungar, y luego documentar el cambio de configuración que funcionó. Como no tengo motivación para esas cosas, instalé Windows XP, que tiene drivers para todo, para luego virtualizar Linux sobre XP (lógico, no?).
  4. No he probado VMWare en la nueva compu, pero tanto VirtualBox como VirtualPC funcionan bastante bien virtualizando Linux sobre XP, pero con un rendimiento considerablemente inferior al de correr XP sobre Linux.
Conclusión:

Hay que adquirir harware pre-certificado para Linux (al menos mientras los fabricantes terminan de montarse en la onda) para evitar el tipo de regresiones que yo tuve que hacer. Linux es el SO que toma mejor provecho del hardware base, y es la elección obvia por muchas razones, incluso cuando es necesario seguir corriendo Windows. Pero hay que emplear el tiempo de investigación necesario para asegurarse de que el hardware disponible va a subir en Linux en unas pocas horas de configuración en vez de en semanas hacking.

Thursday 26 July 2007

Comida Privativa

El excelente chef venezolano Sumito Estevez bloguea sobre los horrores de los derechos de autor y patentes sobre lo que el llama "intangibles populares". Aquí y aquí.

Saturday 16 June 2007

Panchromatic pixels in sensor arrays

A friend pointed me to a Kodak announcement about new filter-array patterns for digital camera sensors. In short, what they do is to add panchromatic pixels to the filter array patterns.

I don't see a breakthrough because adding specialized pixels (for luminosity in this case) is an obvious evolution when you have increased pixel densities in sensors and lower prices. Previously, in contrast, a lot of thought had to go into designing filter array patterns to capture both luminosity and color resolution with many less pixels.

Today one can have 16 mega pixels in a 35mm sensor, which is the resolution of 35mm film. Each additional mega pixel can be used to capture more and more specific information, and nothing prevents manufacturers from using sensors lager than 35mm.

The days of film as the paradigm of captured image quality are over.

Thursday 14 June 2007

La Vida

Para los hermanos Mazzei y Jetty mamá

Hace unos meses hablaba con un amigo quien estaba sufriendo de una de esas enfermedades crónicas que cuando no es una cosa un día, es la otra. Yo le dije que, a pesar de que estaba entero, seguramente las épocas de alto "estrés" en su vida (que fueron intensas) habían cobrado lo suyo, y que dejara de levantarse a las 5:30 de la mañana, y recorrer tanta carretera. Que a sus sesenta y dele se podían tomar las cosas con más calma.

Su respuesta me dio a entender que encerrarse en su casa no era para él descanso sino prisión, y una manera de renunciar a la vida y acercarse a la muerte.

¿Qué es la vida?

John Lennon dijo que "La vida es eso que te pasa mientras estás ocupado haciendo otros planes".

¿Qué es la vida?

¿Es el trajín diario del tráfico caraqueño, las doce horas de trabajo, los chamos al colegio, vuelta a la casa y otra cola, demasiado cansado para conversar mejor veo tele hasta que me aburra y me duerma?

La máxima común a todas las filosofías de vida (incluidas las religiones) parece ser que la vida consiste en "experimentar este día como si fuera el último". ..

Y yo me pregunto: si me aseguraran que sin lugar a dudas mañana va a ser el último, ultimito día ¿Qué haría mañana?

Creo que llamaría a varias personas para decirles cosas que no les he dicho, como que las amo desde siempre y para siempre. Me iría a cortar el pelo donde el Sr. Lino, el italiano, no por el corte, sino por la conversa (hablamos muy poco con los viejos). Me comería una reina pepiada y me tomaría un batido de mango sin azúcar (o tal vez un mondongo con mucho picante y una cervecita). Jugaría una partida de dominó con mis amigos. Haría el amor, mucho. No se.

Si se que antes de hacer todo eso probablemente me levantaría bien temprano en la mañana a correr, a escuchar el despertar de los pájaros, oler el rocío de la mañana, y sentir el amanecer.

Wednesday 6 June 2007

Sobre la Revisión por Pares

Van algunos comentarios en torno al artículo que mi amigo Pedro escribió sobre "peer reviews".

[versión 0.1]

En el mundo del software una revisión por pares no es solo una oportunidad para mejorar la calidad del producto (el "código fuente") a través de la detección temprana de defectos, como errores de programación, o desviaciones de la especificación, de la arquitectura, o de las buenas prácticas.

Es también una importante oportunidad de aprendizaje para los participantes, y en ello una opotrunidad de mejorar el entorno.

Una revisión por pares enfocada solo en encontrar anomalías, o "el qué", pierde la valiosa oportunidad valiosa de analizar también el "cómo" y el "por qué":

  • Falta de conocimiento.
  • Herramientas inadecuadas.
  • Tareas repetitivas y proclives a equivocaciones.
  • ...
Y de aplicar mejoras con efectos permanentes como:
  • Entrenamiento.
  • Obtención o creación de mejores herramientas.
  • Automatización.
  • ...
Por ejemplo, la automatización de las revisiones particularment porque provee a tanto revisores como a autores de más tiempo para ocuparse de lo verdaderamente importante.

Al final importan el entendimiento de los conceptos y de las buenas prácticas, y el buen criterio. Frente a una desviación de las normas o la arquitectura el autor debería ser capaz de argumentar sbore por qué su decisión fue adecuada y no un capricho o un error. A veces ocurre que la arquitectura tiene defectos u omisiones, o que una norma no es aplicable en todas las situaciones.

Durante una revisión por pares buscamos que el código sea "bueno".

Un código que no es de calidad puede pasar una primera inspección ser todavía vulnerable a la ocurrencia de cientos de defectos en una siguiente iteración.

Mucho se ha discutido sobre la "estética" en software porque, en general, la informática se considera una cosa objetiva, mucho más cercana a las matemáticas que a la música (algo bien discutible).

La verdad es que la calidad estética del software puede determinarse con criterios bastante objetivos. Criterios que tienen que ver fundamentalmente con cuan entendible por otros mortales es una pieza de código. Lo subjetivo está en que quien adquiere experiencia en escribir buenos programas adquiere también un sentido intuitivo (o "estético") .
  • Modularidad
  • Separación de responsabilidades
  • Alta cohesión
  • Bajo acoplamiento
  • Minimalidad
  • Comprensibilidad
  • ...
Hay toda una tradición en libros por autores famosos sobre estos temas: Software Tools, Programming Pearls, Code Complete, Design Patterns, Pragmatic Programmer, y Refactoring, entre otros.

Por ser tan importantes el aprendizaje, el entendimiento, y el criterio, los acercamientos ágiles al desarrollo de software incorporan varias prácticas particularmente relevantes a este tema:
  • Programación en pares que cambian, con lo cual la práctica de revisión por pares se lleva a cabo constantemente.
  • El código es la documentación, con lo cual se afianza el concepto de "tener criterio" y se resuelven los conflictos con documentación de diseño obsoleta, incompleta, o errónea.
  • Automatización, no solo de las pruebas unitarias, sino de toda tarea que sea repetitiva y con ello proclive a errores.
Una revisión por pares no es solo una oportunidad para detectar y corregir los errores de hoy, sino para aprender, y así poder hacer del trabajo de manera más fácil y mejor en el futuro.

Tuesday 15 May 2007

Why not Python

2010-03-12 Amendment: After doing the research right, my conclusion is that the tools are available for Python, that Python is an excellent software development platform, and one that allows more productivity than, say, Java.
This article is about programming languages in the context of professional software work. While considering several programming languages with very attractive features for my next project I had to take a pause and think about what the objective choice criteria should be. My conclusion, as argued below is that programming language choice should be dictated by programming pragmatics.
I've been programming for some thirty years now, twenty of them doing it for a living. In my work I've come well acquainted with several programming languages, including Fortran, Basic and Visual Basic, Pascal and Object Pascal, C, C++, Java, and C#. During my university training I had to deliver assignments in Concurrent C, Simula, LISP, and Prolog, among others. I specialized in Computer Languages (compilers) and became a professor of the subject later. I have studied the innards of programming language implementation and have implemented several programming languages from scratch. I've studied every promising programming language I have come upon, including AWK, Perl, Python, CAML, Haskell, Nemerle, Groovy, and Boo, among others.
My experience with compilers in particular has brought me some understanding into what some call "programming language beauty", but that subject is better dealt with elsewhere. Here I want to talk about what makes a programming language work.
By "makes it work" I mean which features of a programming language let you get the job done in an efficient way. By "in an efficient way" I mean in a way that lets you do better than just survive in the ever more competitive field of software development.
It turns out that what makes a programming language work has less to do with the idiosyncrasies of the language and much more to do with how the language allows and provides for a good software writing environment. The first breakthroughs in programming language, in Fortran, LISP, and Algol68, consisted in raising the level of abstraction so programs could be more about the solution space than the machine. But the first breakthrough I remember, at least in the context of programming languages that work, came with the Integrated Development Environment (IDE), the first comercialization of which was provided by Borland for its Turbo Pascal programming language.
Turbo Pascal came with an IDE that included an interactive, full-screen editor, an incredibly fast compiler, and a debugger. It was the first time that a generally-available tool reduced the edit-compile-run-debug cycle to a matter of seconds. Today, IDEs are common-place, and few professional programmers would think of doing any significant work without the aid of one.
But what do IDEs have to do with specific programming languages? Turbo Pascal was a simple, structured, and well defined language, and that allowed Borland to build a very fast compiler that fitted in the few kilobytes of RAM remaining in the machines of the time after having loaded an editor.
By the end of the 1980's Apple's MacIntosh had made the advantages of Graphical User Interfaces (GUIs) for users obvious, and GUIs became not just desireable but a necessity. The common language of choice at the time was C. Programmers spent hours dealing with single event-handling functions (like WindProc) and trying to manage modal contexts through innumerable heap structures and casts, while loading and exiting the GUI environment to run a command-line compiler. The next breakthrough came again in the IDE. GUI designers had been around for a while, but the linking between UI elements and event-handling code had to be handcrafted. In 1991 Microsoft launched Visual Basic. Visual Basic was built around an IDE that was itself graphical and that, besides edit-compile-run-debug allowed hooking UI elements and events to individual event handlers with a few clicks. Writing GUIs suddenly became easy. The language feature that allowed for it all was Visual Basic's component model, a form of object orientation.
As computers became more powerful, the size and complexity of the programs we attempted to write increased. Programmers spent an important part of their time studying and trying to memorize Application Programming Interfaces (APIs) and third party libraries. The next breakthrough came again in the IDE in the form of context-sensitive help, and later in coding assistance. Instead of having to browse over a huge API reference, the press of a key would make the IDE produce the exact piece of documentation pertinent to the context in the editor, or provide assistance in filling out a method call.
The language features that enabled the new IDE functionality were static-typing and object- orientation. They are the same features that today enable automated refactorings, a functionality that is indispensable while we try to tackle even more complex programs with iterative and agile methods.
So, Which are the features a working programmer should look for in a programming language? They are the ones that enable good tool support for the act of programming: static-typing, and object-orientation. But wait... Shouldn't the tools actually be available? Of course! This means that the primary criteria for choosing a programming language is the availability of the tools that make us efficient at writing the programs we have to write. The breakthroughs in programming of today are still happening in the tooling.
Fans of programming languages without those features or without the tools available say that their language of choice allows them to think better and write less code. That criteria is completely a non-issue for the simple reason that modern programming language are converging to include every characteristic that programming experience has identified as useful: first-order and anonymous functions, closures, list and map literals, partial classes and AOP features, type inference, and duck typing. You name it. None of then offset the pragmatic need for a complete development environment that makes us competitive at what we do.