Happy birthday to the .NET Framework that turned 20 years old earlier this month.

My first introduction to .NET was a rocky one. I remember hearing about it in 2001, shortly before its release, and learning about it in 2002 shortly after. I was working as a consultant at a Microsoft partner in Cincinnati that staffed me at the local gas and electric utility company, where I spent my days writing Oracle stored procedures.

One Saturday, my company put on a full day of training to introduce all to .NET; but I found the training confusing and got little out of it. It was delivered remotely at a time when remote online training was suboptimal, and it was delivered by people with little training experience. To further complicate things, Microsoft had not yet released an IDE for the product, so we were typing into a command prompt and wondering about the results.

A few months later, we secured one .NET project, but I was needed at the utility, so I watched from afar with a bit of jealousy for my colleagues who were learning something new.
 
My first real project came after I rolled off the Oracle project and was assigned to work on an ERP system a customer was building entirely in .NET. The customer was 160 miles away and their slow Internet connection made it very difficult to learn a new technology while working effectively on a project. Refreshing and building my source code each morning took over an hour; builds were long and often timed out; and it was difficult to tell if an error was caused by my code, by a network error. It was not uncommon for a developer in the other city to break an interface by checking in only some of their code. The client grew frustrated with my slow performance and removed me from the project.

I asked some of my colleagues to suggest a good book to help me learn .NET and several of them recommended Jeffrey Richter's "Applied Microsoft® .NET Framework Programming". This turned out to be the wrong choice for a novice. In his book, Richter spent far more time explaining the inner workings of the Intermediate Language and Garbage collection than he did on building a web form or connecting to a database - the more practical skills I was seeking. This was a book for someone already familiar with the basics - not for a beginner like me.

Resolved to learn the alchemy that was .NET, I bought a domain name and began working on a personal website devoted to Michigan State University athletics. It was a good project because I was an MSU fan then and now; and it was a great opportunity to learn and apply ASP.NET, create a site with templates and dynamic content. Soon, I had a site that automatically refreshed when I updated a database. I enhanced the site's features and content for 10 years until the domain name expired (I made the mistake of registering it with a work e-mail. A rookie error)

This is how I learned .NET and it was not long before I was passing certification examines and working on real-world projects and successfully helping customers. Within a year, I was teaching classes on building .NET applications. In 2011, I even co-authored a book on the topic.

Fast forward 20 years. .NET is still around. Its latest incarnation can run on Linux and Mac as well as its original Windows home. I have worked on dozens (maybe hundreds) of projects using this platform. I have built a solid career around it. I don't know how long it would have taken me to get started if I had waited for a good project or good training from my employer, instead of building something on my own to force myself to learn.

Here are the lessons I learned from that experience:

- Learn to recognize which technologies have a chance at making an impact. To me, it was clear early on that .NET was the future of software development on Windows. Sometimes, it is not as obvious. Listen to others, read what is written in journals and influential blogs, and see who is adopting a new technology.
-Do not be discouraged if your first attempts are unsuccessful. I was able to rebound from a frustrating beginning.
-When something new comes along that you think will be relevant for years to come, find a way to learn it. Don't wait for an opportunity - create one!
-Most important: Maintain a passion for learning! Continual learning is the best and worst part of this career I have chosen.