Entrevista a Catherine Heller


Catherine Heller, de la división de evangelismo .NET en RedmondCatherine Heller es una "evangelista" nata, como ahora las llaman. Lo suyo es explicar en lenguaje claro, conceptos, que - a veces- no admiten lenguaje claro. Por eso se la llevan a Redmond, para que continúe allí la labor que ha realizado en España durante más de 10 años. De estas cosas y de su visión de las tecnologías nos habló en un descanso en el pasado Tech-Ed 2003 de Barcelona. (A la entrevista asistieron Eladio Rincón, MVP de SQL-Server, e Iván González de la Universidad de A Coruña, que, además, hicieron las veces de improvisados fotógrafos. Gracias a ambos)

 

M. Posadas: Gracias, ante todo por concederme esta entrevista. Tu hablas un perfecto español, pero tu apellido no lo es...

C. Heller: Bueno, mi padre era norteamericano y mi madre es española. Mi segundo apellido es Del Riego.

M. Posadas: Por eso hablas así de bien castellano, aunque acabas de comentarme que te marchas a Redmond...

C. Heller: Sí, he conseguido sacar una oposición en Redmond, en el grupo de Evangelismo, dentro de .NET Framework. En realidad, yo empecé desarrollando con tecnologías de Microsoft desde el año 91, con Windows 3.0, algo muy novedoso para la época, con interfaces gráficas y demás. Empecé con C (Visual C 6.0), el API de Win16, los SDK's etc.

M. Posadas: Recuerdo que eran los tiempos en que Charles Petzold sacó el primero de sus libros "Programming in Windows"

C. Heller:  En efecto. Y que luego ha seguido hasta los tiempos actuales con .NET.

M. Posadas: El tema de la bibliografía me ha interesado siempre especialmente. Y tengo mi grupo de favoritos como desarrollador ¿cuáles son los tuyos?

C. Heller: ¿Los esenciales? El libro de Don Box, "Essential .NET", es magnífico y creo que va a haber un segundo volumen. Y uno que me ha servido mucho es "Inside the .NET Framework", de Jeffrey Richter, por cómo explica el funcionamiento interno de Framework, el código administrado, el Garbage Collector, etc. Da una visión muy amplia de lo que es el Framework.

M. Posadas: El año pasado entrevisté a Nick Hodapp, Product Manager de Visual C++ y le pregunté si C# representaba una amenaza para los programadores de C++. ¿Cuál es tu opinión al respecto?

C. Heller: Yo misma he estado muy metida en la programación con C++ y todos sus recursos asociados y veía como compañeros que trabajaban en Visual Basic eran más productivos que yo, pero lo que sucede es que yo no quería perder el control. VB es un entorno que funciona como una caja negra: facilita muchísimas cosas, ha sido el entorno RAD por excelencia, pero había muchas cosas que no podías controlar. No quiere decir que una siempre tenga que tener ese control, pero sí cuando lo necesitas. De hecho, creo que el problema para que muchos no quieran meterse desde el principio en C++ es que hace falta saber bastante para empezar a hacer algo productivo. Por eso .NET me parece tan atractivo, por que la jerarquía de clases está diseñada de forma que una puede entrar en el nivel de abstracción que desea, y eso es la diferencia fundamental respecto a lo anterior. Si quieres desarrollo rápido, lo tienes, pero en cuanto necesitas potencia, tienes todas las posibilidades.

M. Posadas: Precisamente eso me recuerda las dificultades que existían antes para hacer "subclassing" en Visual Basic, que no era nada trivial en un principio, mientras que ahora resulta tan simple como reescribir el método WndProc, o utilizar una interfaz como IMessageFilter...

C. Heller: Es que en VB6 no había una herencia real. Recuerdo el caso de la herencia de interfaces y esa interfaz por defecto que creaba... Digamos que hacía demasiadas cosas por tí y no se podían hacer de otra manera. De todas formas, volviendo a lo de C++ vs. C#, yo sigo pensando que C++ tendrá su hueco, por que habrá cosas donde la gente necesita hacer código nativo, por ejemplo controladores de dispositivos, u otras cosas muy cercanas al metal (a la máquina), pero para las aplicaciones corporativas C# parece más productivo. Puedes hacer código manejado en C++ pero tienes un pie en cada mundo (el nativo y el CLR), y a veces no es sencillo determinar donde te encuentras. Tiene un uso interesante para conseguir muy buen código de integración, por ejemplo. Pero, para mí C# es un lenguaje más elegante que el propio C++, dice lo que tiene que decir con el mínimo número de elementos. Quizás VB es demasiado "verbose" (prolijo). Y luego con C# tienes toda la ventaja (igual que con VB) de toda la potencia del Framework.

Uno de los ejemplos que nos muestra claramente la productividad es la clase String. Hacer algo con cadenas en C++, es una auténtica lata, mientras que en eso C# es una delicia.

M. Posadas: En el evento de Microsoft Research donde coincidimos como ponentes el pasado mes de Mayo, tu hablabas de arquitectura de aplicaciones, cambiando y añadiendo bastantes cosas a lo que se había venido viendo hasta ahora, incluyendo los Servicios Web. ¿Cuál va a ser para ti el impacto de los Servicios Web, tanto en el mundo de la arquitectura, como en el del desarrollo?

C. Heller: Es curioso, por que tecnológicamente hablando, es un salto evolutivo, diríamos que estamos usando cosas que ya teníamos, como XML, HTTP, así que definir una gramática XML como SOAP parece un paso pequeño, pero, tal y como lo explicó esta mañana Don Box, estamos pasando a arquitecturas orientadas a servicios, y quizás, la potencia de este tipo de arquitecturas es que permiten que diferentes implementaciones de un software en el que es muy difícil estar de acuerdo pueden comunicarse entre sí gracias a esos contratos (especificaciones XML) que todos ellos implementan.

M. Posadas:  ¿Se puede considerar entonces que los servicios Web pueden ser una especie de convergencia de COM+ y CORBA?

C. Heller:  Yo diría que es una solución a un nivel superior. A mi me gusta pensarlo de la siguiente manera: hace muchos años estaba la programación monolítica, luego pasamos a organizar el código en subrutinas, con la programación estructurada, y luego la programación orientada a objetos, para poder hacer las cosas más manejables, y complejas. Los objetos se implementan en términos de subrutinas, al final, añadimos datos, los encapsulamos, pero al final, usamos métodos para su acceso. Después, con el desarrollo basado en componentes lo subimos un nivel más: hablamos de protocolos binarios, de independizar el lenguaje de programación con el que estaban desarrollados, y conseguir cosas de más alto nivel: podrían ser distribuidos, remotos, etc.

En los Servicios Web, me parece que es subir un poco de nivel, también. Exponemos hacia fuera una serie de interfaces de servicio, pero seguirán estando implementados en términos de objetos y elementos que ya existían. Más que reemplazar componentes, es subir una capa más que nos permite hacer cosas mucho más complejas. Don Box hacía un símil con los circuitos integrados, que me pareció muy interesante. Lo reutilizable no van a ser los circuitos mismos, sino que los servicios es lo que vamos a querer aprovechar. Si tenemos que reemplazar algo a lo mejor reemplazamos el mecanismo de funcionamiento del servicio mientras mantenemos su estructura y su esquema de cara al usuario. Creo que es más viable, al no requerir tantos detalles de implementación en los que diferentes elementos deben de estar de acuerdo.

M. Posadas:  Respecto a la empresa española y hablando en general, ¿dirías que usa buenas prácticas de programación? Por que uno de los problemas con los que me suelo topar todos los días en mis clases, no es ya que no se utilice bien una arquitectura, es que hay un porcentaje enorme de alumnos que no conocen la programación orientada a objetos, por ejemplo, y eso en .NET te requiere una vuelta a los orígenes para poder progresar...

C. Heller: Yo diría que hay de todo, aunque lo que más se nota en España es la falta de inversión. Los empresarios son reacios a las novedades tecnológicas. Yo recuerdo que cuando vine a España en el año 90, ya había estudiado objetos y para mi eso era lo natural, y cuando comentabas eso por aquí, te decían que eso de los objetos no valía para nada.

M. Posadas: Y hablando de orientación a objetos, me gustaría conocer tu opinión de cómo es la que se ha implementado en .NET. A mí en algunos aspectos me gusta más que la del propio Java.

C. Heller: Hay aspectos comunes, como el no soportar herencia múltiple, que sigue siendo un punto de discordia, como defiende el profesor Bertrand Meyer. Yo prefiero la implementación de herencia simple, y múltiple de interfaces, como ahora, que no imponen una relación semántica de lo que es intrínsecamente, sino que tiene una funcionalidad que puede ser común a muchas familias de tipos.  En cuanto a herencia hay muchas cosas que me gustan y que son diferentes respecto a C++: me encanta que lo de poder sobrecargar un método sea tan explícito, por que en C++ tu puedes sobrescribir cualquier método sin haber marcado su antecesor como virtual. Aquí te encuentra incluso con clases sealed (selladas) por que comunica la intención del que ha diseñado la clase antecesora.

Por cierto, tu me comentabas antes algo que sí te gustaba especialmente en al implementación del .NET Framework. ¿no?

M. Posadas:  Lo que no me gusta en que hagan "parches" a los sistemas y no me refiero a los Service Pack que nos garantizan que los fabricantes siguen trabajando nuestro producto, me refiero a excepciones de diseño, como la existencia de tipos primitivos. Si todo son clases, pues todo son clases, y un entero o un boolean también debe serlo. Precisamente en el evento de MS-Research, si recuerdas, Jim Hogg nos estuvo mostrando la clase System.Int32, y veíamos cómo estaba implementada, sin "magias" internas...otra cosa es que se sepan usar los tipos por valor o por referencia de forma adecuada para cuestiones de rendimiento.

C. Heller: Sí, a mi también me los parece. Es otra de las cosas coherentes y agradables del Framework.

M. Posadas: Una cosa más sobre el C++, relacionada con la presencia de Stan Lippmann en el equipo de desarrollo de C++. El estaba trabajando para la Disney en el departamento de Imagen de Síntesis, y fue junto a Stroustrup el creador del lenguaje C++. Luego ha publicados varios libros famosos sobre el lenguaje. ¿Cuál ha sido el propósito principal de este fichaje?

C. Heller: Bueno, lo que puedo decirte es que se ha incorporado el equipo de Architects de C++, como gran gurú, y persona con enorme experiencia, entre otras cosas para seguir colaborando en la consecución del ANSI C++, aunque el también está en la onda de C# y ha publicado un gran libro "C# Primer", al estilo del que publicó antaño "C++ Primer".

M. Posadas: Así que podemos decir que tú eres el siguiente gran fichaje: Don Box, Peter Drayton y ahora Catherine Heller...

Con Catherine Heller en uno de los "Labs" del primer piso, tras la entrevista

Con Catherine, al final de la entrevista, en uno de los labs

C. Heller:  No, por Dios, hay un mundo de diferencia entre estos y yo, además yo me veo más en mi labor de evangelismo, de transmisión de esta información.

M. Posadas:  Pero tu eres una persona con opiniones claras sobre las tecnologías, ¿no has pensado escribir algún libro?

C. Heller: Pues hasta ahora me lo estaba planteando. Empecé a hacer mis pinitos con una columna en Dr. Dobbs, y en caso de que encontrara un tema en el que pudiese aportar algo me lo plantearía. No sé si en inglés, porque no quiero perder mis contactos con España, depende.

M. Posadas: Es que uno de los problemas que observábamos (aunque menos en los últimos años) es que algunas traducciones dejaban mucho que desear. El otro día comentaba yo en mi sitio Web que si bien hay necesidad de neologismos como "software" o "hardware", cuando te pones a "swapetar" variables o "arreglos" de variables, o a "salvar" los datos la cosa entra ya en lo absurdo ¿de qué les salvas? En fin...

C. Heller:  (Risas) ...yo también recuerdo haber visto traducido el código fuente: incluso la palabra this traducirla por este o hablar del "archivo diana", por "target file", que son más un problema que una ayuda.

M. Posadas: Parece que se está unificando el lenguaje y en eso el MSDN tiene una gran labor que realizar. Personalmente, creo que Andy González, ha hecho un trabajo genial, y está aportando mucho a lo que la propia Real Academia pueda considerar a la hora de actualizar neologismos informáticos: utilizando los términos matrices o vectores en lugar de "arreglos", o Subprocesos en lugar de "hebras" o "hilos" de ejecución, y así en muchos otros casos. Aunque seguirá habiendo muchos en los que los neologismos son necesarios...

C. Heller: Es algo que siempre me ha intrigado. ¿Cómo traducir? A veces si no pones un término en inglés no hay forma de entenderse. En alguna charla que he dado me refería a Cuadros Combinados o Cuadros Desplegables y la gente no me entendía, había que decir el término en inglés (ComboBox, etc.) A mi me pasa con Remotable, ¿cómo decirlo?

M. Posadas:  Tendrías que usar más de un termino, como "de Acceso Remoto" o similar... En fin, difícil de cualquier forma, aunque el sentido común suele ser lo mejor en estos casos.

En fin, si quieres añadir algo para concluir...

C. Heller: Simplemente deciros que ahí me tenéis en Redmond y que creo que estamos viviendo unos momentos muy interesantes en el mundo de la informática, que se están abriendo las herramientas para permitirnos solucionar algunos de los problemas difíciles que tenemos, aunque surgirán nuevos problemas, de eso no me cabe ninguna duda.

M. Posadas: Pues que tengas mucha suerte en Redmond, y hasta la próxima.

C. Heller: Muchas gracias a ti.