+ Perl, Java, C, Python, Ruby, Javascript, Scheme, Prolog, Smalltalk, Forth, Mathematica y otros, también escribiendo interpretes y transformadores de fuente a fuente.
+ TCP/IP, programación de sockets, inyección e inspección de paquetes, testing de firewall, SMTP, HTTP, ARP, DNS, CORBA, y 20+ protocolos propietarios.
+ Oracle, MySQL y SQLite, contribuyendo con el ajuste del rendimiento y almacenamiento en algunos casos.
+ Linux/Unix kernel y herramientas, apis Win32, ARM, y muchas bibliotecas.
+ Herramientas de test automatizado incluyendo Selenium y muchas creadas especificamente para aplicaciones, tcpdump, trampas de carga dinámica, debuggers binarios, inyección e instrumentación de código. También automatización de aplicaciones de escritorio como Excel, Photoshop y otras.
+ Usé y enseñé a usar UML, Rational Rose, algunas plantillas de RUP, Erwin, etc. pero en los últimos años los reemplacé por tests automáticos, scripts y herramientas más ágiles.
+ Código fuente de varios proyectos como servidores web (incluyendo Apache, Squid), interpretes de lenguajes, motores de bases de datos, etc.
+ Me enfoco en conceptos de Ciencias de la Computación en vez de las herramientas, aprendo rápido y siempre estoy listo para aprender algo nuevo en este sentido.
Las herramientas siguen a las necesidades
Elijo las mias tratando de resolver los siguientes problemas:
+ Desarrollo ágil de aplicaciones de negocios, las herramientas deben:
- ser fáciles de aprender y usar para varios desarrolladores e incluso adiministradores
- sólo requerir código cercano a la especificación funcional del sistema
- ser muy fáciles de desplegar y testear
- no tener licencias restrictivas o que puedan traer problemas
- ser portables a muchos ambientes de ejecución
- ser verificables y mantenibles
- no requerir del programador la implementación de algoritmos de un nivel demasiado bajo (ej. para hacer una aplicación de negocios, la busqueda de patrones en cadenas debe venir con la herramienta)
- tener una comunidad de usuarios grande y uso documentado en proyectos grandes y que hayan evolucionado
+ Carrera como desarrollador y arquitecto: las herramientas deben
- resolver la mayor cantidad de problemas de un modo consistente
- ser maduras, extensibles y durables (no modas)
- tener una comunidad grande y varios proyectos de varios años
+ Prototipos rápidos y simulación: las herramientas deben
- ser muy expresivas, requerir un mínimo de código
- proveer interfases de intercambio de datos y usuario convenientes
- proveer muchas librerias
Y por supuesto tengo una pasion por los lenguajes (tanto naturales como de programación) y cómo afectan la forma en que nos comunicamos, pensamos, y hacemos.

