My first programming language for the web was PHP, more than 10 years ago. I was a freshly graduated mechanical engineer with several books in my room and starting a master degree in computer science. The only logical conclusion was to build a small site for academic books exchange with PHP, MySQL, pure HTML and pure CSS. Of course it never saw the light. How I, as an engineer, would be able to deploy and support a website? I was terrified the site would be broken, the style would suck, or the security would be so bad that all the books would be lost. 10 years into the future I design, build and support web systems for a living.

What I get for my past decade in web systems development is that it takes time to master, but it is completely achievable. Now I am in the verge of starting or continuing three journeys related to computer science and sometimes I feel like ten years with systems development.

Swarm intelligence, distributed systems and multi-agent systems

For my master degree I did a small research with swarm intelligence applied to video games. I tried to pursuit this same topic into my PhD but it was not possible at the time. I moved to multi-agent systems applied in soccer simulation. I currently continue working in this research area, although now I am focusing more in simulations for multi-agent social systems.

On other hand, professionally I work with distributed systems in web systems. Almost all the web services you use are backed by a distributed system, even if you are not aware. Actually, that is one definition of distributed system: a single system running in several computers.

These three areas have something in common: all runs in several units, agents or computers, trying to solve a single problem. Even an autonomous agent in a multi-agent systems or swarm, can be running in a distributed systems, or a swarm being simulated on a distributed system.

Abstract algebra and category theory

For many years before I started my bachelor degree, I learnt and practiced math in the fields of Euclidean Geometry, Number Theory and Combinatorics. In the present I work mostly with object oriented programming languages but in my spare time I use functional languages for personal (or academic!) projects. Toying with Scala and Haskell I've learnt about category theory, a field I see similar to abstract algebra.

I don't see right now how abstract algebra or category theory can help me in software developer or academia, but for sure will expand my problem solving ability and will help me with the next third area of development.

Programming language design

In the same line that the last area, one of my desires is to design and implement my own programming language. I've played previously with small imperative languages for automation, similar to C but closer to assembly, embedded in my research experiment programs. Since then, I've wanted my own programming language in which I can add any feature I need.

Other reason behind developing my own programming language is that I enjoy building tools to help me (and possible others) to build stuff. I spent several hours building classes in C++ to automate experiments with soccer simulation using genetic algorithms, fuzzy logic and particle filters, and enjoyed every bit of them.

I know it is a gigantic task because it is not only the specification I need to develop, but an implementation, a compiler or interpreter, standard libraries, tooling, etc. And with high probability it will not be commercially viable, but hey! I would be able to say that I have my own programming language.

Addendum: I also enjoy learning and studying natural languages, my mother tongue is Spanish, I know English, and right now I am practicing German. Another area of development, although not related to software, is to have my own constructed language, and why not? maybe also write about fictional cultures like Tolkien and his legendarium.