The way engineering entered my life is very unconventional and likewise I am going to present it in a rather unconventional way. Instead of writing a long unexciting list of the hundreds of projects –big and small– that I worked on, I will only write about a few peculiar projects and how they affected my engineering maturity over the years.


My journey with software started when I began programming on a Commodore 64 at the age of five. The Commodore 64 was a remarkable machine for its time; it could display colorful graphics and produce 8 bit sounds when most other computers were monochrome and silent.  Most people bought the Commodore 64 to play games and –of course—I did play games too, but what I felt was extraordinary about it was the creative possibility of being able to make my own.

That same year, Pixar released their now famous short Luxo Jr. That short was truly inspirational! I knew that it was made with computers; I knew that it was made with same intellectual tools I was beginning to learn. So I thought that maybe someday I will be able to make amazing computer graphics too...

The early, innocent fascination for graphics that Pixar inspired in me back then has persisted throughout my life and evolved into a mature love for science and engineering as I grew up.


One of the applications that I remember best from my early days in programming is a visualization of the Mandelbrot set. I diligently typed the code I found in a computer magazine, checked it several times to make sure it was right, and sat there for over twenty minutes watching the fractal being drawn pixel by pixel on the screen. It is no wonder that I am still greatly fascinated by the mathematics of fractals.

In 1987, when I was six, my parents bought an absolutely amazing computer for its time, a machine that in many ways changed my life -- the Commodore Amiga 1000. That very first Amiga model could display advanced graphics, it had incredible sound capabilities, and its operating system, the Amiga OS, could do pre-emptive multitasking, which is feature that other home computers will support much later.  The Amiga, although long gone by now, still remains my favorite computer of all time. My first programming language on the Amiga was Amiga Basic.


One of my best friends in elementary school introduced me to the board game Othello. He owned the physical game, but I did not. Needless to say I decided to implement an electronic version of that game. After a few weeks I had a fully functional game and, from that moment on, it became a tradition for me and my friend to play progressively improved versions of my Othello game every time we met. Although I had already filled a lot of cassettes with my own games, Othello was a game I was particularly proud of.


At the age of nine, I started working in C. Everything on the Amiga was programmed in C and I knew it was difficult to learn, but somehow I felt ready for the challenge. My first compiler was bizarrely called Aztec C. One of my first major projects in C was to write a loader for the IFF image format. The IFF image format was developed by Electronic Arts and it was the primary image format for the Amiga. I had to have an IFF loader in order to display anything interesting in my games. On the Commodore 64 I used to enter image data by hand, but on the Amiga I had this cool program called Deluxe Paint that –you guessed it—saved graphics in the IFF format only.

Of course, today you can simply Google a few keywords and find a ton of open source libraries to load all kinds of media files, but back then it wasn’t so simple. We actually had a thing called BBS where you could connect and [slowly] download files in the public domain, but I was not able to find any working code for this task. Getting an IFF loader to work was difficult; especially because I didn’t have much documentation available. Yet it was a good lesson in reverse engineering, which has become a very valuable asset for me today as an engineer and a researcher.

Indeed writing games in C was a real pain, but it gave me a rather good sense of satisfaction to know that I was using the same tool as the pros. At the same time, the Amiga was a playground for little clever hardware optimizations and hacking my way through difficult computer problems is something that I enjoyed for quite some time. Today I would favor principled, well-thought, and well-engineered solutions, but having had that experience gave me a strong sense of practicality, which is an important asset for any engineer. That year I also started looking at an ancestral flavor of UNIX called XENIX that was running on a 8086 PC that I had at home. To be honest, the PC was very inept in graphics at the time and for that reason felt that it was rather inferior to my beloved Amiga.


In rapid succession two PC workstations made it to my home: a 286 and a 386. That year, I switched to PC for a short while and I started using two old IDEs by Microsoft: QuickBasic and QuickC. QuickBasic was pretty cool, but still way less capable than Amiga Basic in terms of graphics. Fewer programmers still know about QuickBasic, but those who do will certainly remember that fun sample game called Gorillas. That was for me a fun detour to the PC world, but I soon came back to the Amiga.


1993 was a very eventful year for me as far as computers go. I was twelve. My parents bought me an Amiga 600 HD, my first Amiga with a built-in hard drive! Ironically, that same year, after prolonged financial troubles, Commodore filed for bankruptcy and with it the Amiga suddenly became history. That was a harsh reality check for me. Commodore’s demise meant that I now had to transition to the PC for good.

I had already some pretty good experience with MS-DOS, but it was the first time I had to program in Windows. Back then the latest and greatest version was Windows 3.1. Windows 3.1 was indeed much more similar to the Amiga desktop environment than MS-DOS, but its graphics capabilities were still quite inferior. Despite that and almost paradoxically, PC hardware had already a much higher clock rate and more advanced hardware than the Amiga. I started learning to program for the Win32 API and notably that was also my first experience with C++. I was using a very old version of Microsoft’s Visual C++ then. That year, many computer magazines were praising a new language by Microsoft called Visual Basic, but I did not want to use it because I felt somehow that BASIC belonged to my past. I was then a capable C/C++ programmer and proud to be so!

Back to the Amiga, I started learning a very cool programming language called Amos. Amos was remarkable because it made graphics programming very easy compared to C and its performance was also very good. Actually several commercial applications and games on the Amiga were made in Amos, including the impressive Flight of the Amazon Queen (you can still play it today with ScummVM and its freeware). Amos was for me in programming then what Python has become today. Interestingly, loading an IFF file in Amos was just a single function call and that always reminded me of the pain of loading IFF images into my C programs whenever I used it. There was also an extension to the language called Amos 3D for programming simple 3D graphics, but 3D graphics on home computers was more of a programming exercise that something visually attractive in those days.

That year another important technology entered my life. My parents bought me a musical keyboard and music would soon become my other great passion. I started learning how to play music, but at the same time I became extremely interested in music synthesizers (in fact the Amiga was a capable FM synthesizer) and MIDI technology.


I was finally thirteen, my first year as a teenager. I got my keyboard to exchange MIDI data with my shiny Sound Blaster 16 on the 386, but what I really wanted was to run MIDI on my Amiga. Unfortunately the only device that I was able to purchase for this task was a little nameless box that connected to Amiga’s serial port and had a bunch of MIDI inputs and outputs on it. I also had a lot of MIDI songs in DOS format on the PC that I had to move to the Amiga. First challenge: how to transfer large MIDI files that were originally stored on a CD-ROM to the Amiga which only had a floppy drive. Second challenge: how to convert the files to a format readable by the Amiga. Third challenge: how to use that serial box that came with no software or documentation.

I soon came to the conclusion that there was no way to transfer those “large” files to the Amiga with floppies, so I had to write a program that transferred files directly from the PC to the Amiga through the serial port. Anyone that has written code for a serial port knows what a pain this is. The Amiga 1200, which I didn’t have, came with a little tool that did the conversion automatically, but for my Amiga 600 I had to write one myself by hacking together some software I found on Aminet. It would have not been difficult if I had good documentation about the Amiga file system format, but again we didn’t have Google back then! So I had all the files on the Amiga! The only thing left was to make that MIDI box work. In some cases, like this one, the word ONLY is a big word. It took me some time to figure it out and luckily I was able to use some source code from a BBS. As you can imagine the excitement of hearing the first notes streaming on my keyboard was enormous! This was another successful challenge of reverse engineering (Google these last four words for a surprise) for me.

That year I also collaborated on a couple of professional projects with my father. He was working on DSP technology for a system that would later become the Olivetti Envision. That was a good opportunity for me to learn about Fourier Transforms, signal processing, and speech recognition. We did a lot of our wave processing and synthesis experiments in this very cool shareware application called GoldWave, which is still around. Signal processing also lies at the heart of sound generation in musical synthesizers and, given my growing passion for music, I soon fell in love with this subject.

Later that year, my father started working on a rather different project: an image browser similar to today’s Adobe Bridge. The real challenge was to populate the browser with images as quickly as possible. On Windows 3.1 and given the computing power of home computers at the time, it wasn’t easy. We worked very hard to achieve our goal, but it was very exciting to explore all kinds of little optimizations to perfect our implementation. Engineering and software require patience and dedication; tuning the performance of software is a good way to learn these skills. Among other things, working on the image browser also showed me how bad Windows GDI was for graphics


The world of real-time 3D was emerging on home computers, driven by Doom and the Sony Playstation that started flooding the market that year. The Playstation is not technically a home computer, but developers and consumers were looking highly at it for its capabilities in 3D graphics. It was about time for me to let go of bitmap graphics and embrace the world of 3D. So I started learning DirectX, and a little OpenGL. In fact, I actually had a somewhat older book on 3D graphics for the Amiga, but as I noted before I wasn’t too interested in 3D before and that book was already full of dust…

1995 was also the year of Windows 95 and 32-bit computing on PCs. Even though Windows had been around for quite some time already, I would still write a lot of graphics code in MS-DOS. With Windows 95 I started programming in Windows more exclusively.

I was fourteen and that was my first year of high school. Gradually the time I could devote to programming and to computer use in general became less and less.

In high school we started studying a little Pascal and the course was offered by a very kind math teacher. She soon realized that I knew more about programming than she did and I was given the quite embarrassing task of helping out the rest of the class on our lab projects. One of the things that I did for our teacher on the side was to develop a program that would solve a system of linear equations using Cramer’s rule. Later that year, that same math teacher offered me to work on a little project to prove Morley’s theorem. I did not know that it was a solved problem, so I treated it as a novel math challenge. Today with Google it would have been much different! Among other things, I wrote a couple of little programs for Derive , Cabri Geometry, and my shiny new TI-92 calculator to visualize the theorem. Our work won a regional medal in mathematics.


In the summer of 1997 at the age of 16, I took on my first professional software project by myself. I took that job, because I wanted some money to buy a fantastic music synthesizer called Korg Trinity. My work was an extension of a large scientific visualization package meant for the Italian market. The general application was largely inspired to another piece of software called ABC Flow Charter and it was in many ways a precursor of Microsoft Visio. I developed an image processing tool similar, but more powerful than the kind of tools you find in Microsoft Office. My tool allowed the user to select any image in the main application and apply various filters and image enhancing operations on it. You can think of it as a sort of miniature Photoshop in a dialog box. As a side note, that was also my first experience with dreaded MFC. I completed that project successfully and one memorable day I went with my father to the music shop to buy the synthesizer I dreamt about for a long time. Obviously I did not sleep that night!


For the next couple of years, I was incredibly busy studying for school and I had almost no time for programming. I still wrote a decent amount of code over that period including a mod for Quake 2, but I feel there is nothing worth writing about.

In 1999, at the age of 18, I had to apply for university and I decided to major in electrical engineering. A lot of people ask me why I chose electrical engineering over computer science and the answer is not simple. Yet to put it simply, I was highly fascinated with electronics and –frankly– I wanted to learn something new. Looking back at it now, I realize that it was a very wise choice. Although I am now a researcher in computer science, my education in EE gave me a solid foundation in mathematics, physics, and engineering which is absolutely invaluable for me now as a scientist.


In the winter of 2003, university requirements forced me to take a couple of introductory programming classes in C++. After a few lectures in the first course, the professor offered me to petition and skip the class altogether. However, he was such a remarkable teacher that I thought it could be fun and I stayed in the class. He had a PhD in mathematics and many students complained about him, because his lectures were too difficult and abstract, but I found his teachings very enlightening, because he shed light on the deep interconnection between math and software, which is a kind of insight that I had not had yet.

Unsurprisingly I aced both classes. Still, I think I learned a lot and I walked out from those courses with a new kind of intellectual maturity about programming. It wouldn’t have been the same with another professor. After those classes were over, the professor asked me to join him on a research project on VLSI floor-planning and from that point on, research became a driving force in my life and –as they say—the rest is history…which you can explore by reading other sections of the web site.

Final Thoughts

It is strange to reflect about my past–though only about a thin slice of it– so early in my life. Yet I feel very fortunate to have already a lot to talk about, having discovered my passion for engineering essentially in Kindergarten, while most people learn about this subject much later in college. I am also very fortunate to have had the opportunity to turn what was essentially a compelling game in my childhood into a profession. What can be better than doing in your career what you love doing the most in life? Engineering to me is not only about making things work, not only a good excuse to learn about science, but also a powerful medium for expressing creative ideas.

Those who know me in person know how passionate I am about science, math, and above all engineering and software. This short story about my lifemay show why.