A friend of mine (we’ll call him Bernard) introduced me, via email, to a friend of his (we’ll call him Walt) who is a recent computer science graduate. Walt is examining his career options right now, and is curious about .NET development, so Bernard asked if I would give him an overview of technologies and maybe a little career advice, as someone who has been in the field for a while. Here is my response (edited for fat-finger blunders). If anyone has additional insight they would like to share with Walt, please leave a comment and I will pass it along!
Hi Walt, nice to meet you!
The first thing I would say is that if you are thinking about .NET development (or business development in general), its going to be a bit different than the programming you do in a comp-sci course, or academic programming in general. There tends to be a lot fewer algorithms and data structures, and a lot more “big data”, system integration, and system scaling that happens in business. So if you really enjoy the math, science, and “number crunching” aspects of programming, you might want to consider the financial and/or scientific sector(s), with languages like C, C++, Lisp, Clojure, Scheme, etc. Or maybe even embedded systems or hardware programming.
.NET (and Java) tend to be the big “enterprise” platforms, meaning that they are used to run big line-of-business applications. If this is interesting to you (or you don’t really care), then you can’t go wrong with either of these two platforms. I started doing web development in PHP on Linux, but through a series of unfortunate, er, I mean, unforeseen events, became a .NET developer. I’ve been doing .NET for about 5 years now. One thing I can say is to steer clear of VB.NET, and focus on C#. The syntax in C# will feel much more familiar if you are already accustomed to C/C++/Java. And it gets the most love from Microsoft and .NET devs, has the most language features, and is generally respectable.
If you want to do desktop development, WPF is where its at. Microsoft’s legacy technology, WinForms, is still supported though many new projects are WPF-based. The differences in these technologies revolve mostly around how the user interfaces are constructed, and what capabilities they have. It can’t hurt to learn either, or both — but if you have to make one a priority, make it WPF.
I will mention Silverlight here briefly, just to say that it is kind of the red-headed step-child of Microsoft technology right now. It was supposed to bring desktop-like programming to the browser (this goal, incidentally, always meets with failure, e.g. Java Applets and Flash), but Microsoft has quietly sidelined much of its development in favor of standards-based web technologies like HTML5. The good news is that Silverlight skills are similar to WPF skills, so even if you were on a project where you had to develop in Silverlight, the experience isn’t a loss.
Microsoft has several service-oriented technologies: ASMX which relies on ASP.NET and must be hosted in the IIS web server, and WCF which can be hosted in IIS or in a separate process running on the machine. WCF is the hotness and ASMX is out-of-favor for new development, though you will still find ASMX in the wild in legacy systems. WCF is a beast — don’t approach this until you are somewhat familiar with the .NET framework as a whole.
As far as data access technologies go, Microsoft has three (well, two-and-a-half really) that you should know. ADO.NET is the base data access technology upon which all others are built. Entity Framework is Microsoft’s object/relational mapper (mapping classes to database tables), and Linq2SQL is Entity Framework’s annoying little brother that no actively uses anymore (trivial projects and existing Linq2SQL maintenance are the exceptions). You will definitely need to understand how ADO.NET and EF work to write productive .NET applications.
So these are really the application-specific technologies that you will want to learn, but there is also the framework itself and its core libraries. This brings me to my next section:
If you are serious about .NET, I would highly recommend “Pro C# 2010 and the .NET 4 Platform” by Andrew Troelsen. Do not be frightened by the size of the book — he has chapters that cover most of the .NET framework in a very digestible way (including chapters on ASP.NET MVC/WebForms and WPF/WinForms). He begins with core types like string, int, float, byte, etc., as well as .NET application models, memory management, how the CLR runtime executes .NET code, etc. Its very thorough, and very easy to read. I get an updated copy of this book whenever a new version of .NET is released because I find it that helpful. Another good book is “C# 4.0 in a Nutshell” by Joseph Albahari. It’s not as thorough as Troelson’s book, but you can get a quicker overview of the framework, if that’s what you’re looking for. Also, I would highly recommend browsing through the videos on TekPub’s website. They have in-depth videos on C#, ASP.NET MVC, and WebForms that are all worth the money. The videos are high quality and very informative.
It would also be beneficial for you to get involved in a .NET user group, wherever you happen to be located. There are two in St. Louis: the STL .NET User Group, and the ALT.NET User Group (I run the latter). User groups are a great way to meet people who are already knee-deep in .NET and hear detailed technical presentations. St. Louis also hosts a .NET conference every year called St. Louis Day of .NET, and Kansas City runs a .NET conference called KCDC. Both conferences are reasonably cheap, and you will get a lot of exposure to different .NET technologies. If you’re not in the St. Louis area, check and see if your area has conferences or user groups available. A quick Google search should tell you pretty quickly.
3. The Tools
This is probably going to be the sucky part for you, because while Microsoft tooling is great for .NET, it also costs a small fortune to purchase. Microsoft’s flagship IDE, Visual Studio, can be purchased with an MSDN subscription for about $800 (professional version). Microsoft provides “express” versions of some of its products, and while they are adequate for doing small trivial projects, or just learning C#, they are severely crippled and sometimes even do things differently than their commercial counterparts. (For example, VS Express creates projects a bit differently than VS Pro, which can be confusing if you move from one to the other.) Still, for getting started they are your best option, unless you can get the software through your university, which would be even better. There is an open source implementation of .NET called Mono, and there is even an IDE for it called MonoDevelop, but it does not enjoy wide use and does not support all the framework/language features that VS does. So the Express editions are probably better for learning. There is also an express edition of SQL server, which is actually quite good, and unlike VS Express, it merely lacks advanced features but otherwise performs identically to full-blown SQL server, so it is a great product on which to learn.
4. Getting Work
St. Louis is big contracting town, so there are tons of staffing agencies and headhunters trying to place technical talent at companies in the area. St. Louis is also a huge stronghold for .NET and Java, and right now the .NET market is definitely a developers’ market. Recruiters can typically help “get you in the door” at a company, but most of the ones I have talked to are looking for experienced professionals. This is not to say that there are no entry-level jobs–I just have no knowledge of whether there are or not. I could send you the names of some staffing agencies here in the area, if you would like, and you could start dialogues with them to see what opportunities are available.
I would also highly recommend getting involved in .NET open source projects. Github.com hosts a huge number of .NET open source projects, and allows you to create a free basic account so that you can participate in development. This looks really good on a resume (there is even a website called GitHire that shows which developers in a given area are most active on Github), and you can learn a lot from reading other peoples’ code. This will require you to become familiar with Git, an open-source version control system, but I would recommend that anyway because it is quickly becoming the version control system of choice for many .NET shops.
Ok, so I know this was a long-winded email, but I think I covered the basics. If you have any questions (on technology or your career), feel free to ask. Godspeed, and good luck.