My first computer was a .386 (12MHz) with 2MB of RAM running MS-DOS in 1994 when I was about 9 years old.

My first experience of programming started with building text animations using MS-DOS .BAT files. Lots of echo commands followed by cls. The need for more advanced tools led me to QBasic which allowed me to start writing simple but real programs, such as simple games with basic physics engines at “SCREEN 13” mode, stupid malware, and of course slightly more useful applications such as contact manager.

After a year of playing with Basic, I became aware of other programming languages such as C, Pascal, VB, FoxPro, C++, Assembly, etc. Learned a bit about each and realized that C is my favorite. This allowed me to discover more about low-level programming to the point of creating a bootloader linking Assembly and C. I even found the memory address of the video screen (0xA000) by trial and error. After that, I was able to create faster animation rendering compared to INT 10H!

The first real programming job that I was paid for, was developing a cutting optimization software using C++ (MFC) in 2003. I wrote my first web application in PHP around 2004 and immediately moved to C# and .NET 2.0 and started building my career on top of Microsoft platforms. Over the next decade, I developed tons of applications using almost all MS technologies, from Desktop to Web.

In Dec 2013, I made a big decision! I moved to the wild and free world of the open source and completely moved my career to the open source ecosystem and never looked back. Scala helped me a lot in this journey; not only it offered me all C# features but also introduced me to a deeper level of Functional Programming paradigm.

For the majority of my career, I worked as a contractor or a part-time employee. It gave me the chance to work with various technologies and platforms at different scales using Scala, C#, C/C++, Java, Ruby, Python, Javascript, etc. Check out my resume (or older version but with more data: cv.amirkarimi.me).