Re-Education Action Plan – The Lessons
In my last post, I wrote about my next life phase, which is mainly a return to my former self – software developer. In order to get back in sync, I need to develop an action plan. Thankfully, I’ve kept a very close eye on the stack I’m most familiar with (the Microsoft development tools), thanks to the user groups, code camps, podcasts (I listen to nothing else in the car these days; two hours per day), books, magazines, Twitter, blogs, StackOverflow (read-only until now), my co-workers, and everything I discussed in my infamous blog post from last year.
In addition, I’ve dipped my toe in non-MS technologies (Ruby, PHP, Python, Objective-C and Cocoa Touch (for iPhone development). But since I’m most comfortable in the .NET stack, I’m going to focus on that first, for the quickest entry back into full time development. If you find yourself in a similar situation, you may want to consider the following (or suggest changes to the list).
One very important point – and this may be the biggest obstacle of all. Do NOT follow every shiny object! It seems like something new and interesting is coming out every day in our field. It’s way too easy to get caught up in everything and want to learn and play with it all.
This may be one of the biggest reasons people in our field are saddled with ADD symptoms. We can’t focus on anything long enough to become proficient at it, much less expert. You should see my bookshelf – bookmarks about 50 to 100 pages into almost every technical book.
The key to succeed (this is a message to myself as well as anyone else reading this) is to focus, focus, FOCUS! Read an article or go to a user group meeting on that new technology to be aware of its existence as a tool. But the rest can come with “just-in-time learning,” if and when you actually need it.
C# and .NET 4.0
I came from a BASIC background (yes, in the days when it was spelled in all caps). It was the first real language I learned, and aside for some experimentation in Z80 Assembler, and PL/C in school, it was the only language I used the first five years I coded. I developed on the job in several other languages since then, but when I got involved with VB5, it was back to Basic. I was definitely a VB.NET fan when .NET hit. Heck, six years ago I even got this license plate:
Of course, a couple of weeks after getting this, my company standardized on C#. And although there’s plenty of lip service from Microsoft about VB being on equal terms with C#, from what I’ve seen, you are more marketable as a C# developer. That’s just the way it has played out. That’s not to say that you should ignore VB, and I definitely won’t (and I’m keeping the license plate). But with a short action plan, my focus has to be a refresher on C#, and I’d recommend the same to others. My main focus will be on some of the more useful C# 4.0 and .NET 4.0 features.
Visual Studio 2010
Obviously, if I’m going to be productive, I’m going to be using the most powerful IDE in existence. So I have to review the features that add a tremendous amount of productivity, especially the new debugging features for VS2010. Luckily, since I’ve remained in charge of automating builds, and continued to be called upon for some investigative debugging despite my management role, I’m still pretty comfortable here.
Design and Architectural Patterns
I’ve been using techniques such as design patterns since before they were called “patterns.” They were known as “code that made sense to borrow or steal from” or something like that. I guess that’s why they’ve gotten labels over the years. But it’s always good to review these. Patterns provide a good framework, and tightens technical discussion with other developers. Which leads to a popular framework supporting a common architectural pattern…
Despite the sexiness of Silverlight, purely web-based apps are still king. And I already have a side project (for musicians) to work on which will be ASP.NET MVC-based, so despite the widespread use of WebForms apps in the wild, I’d much prefer focusing my attention on MVC. Although our team will be using MVC 3, my lessons will focus on MVC 2, mainly because the vast number of learning resources make use of version 2. We’ll all be learning version 3 features as we go, anyway.
I’m not going to dive into TDD right away. It’s more of a development process anyway, and to start with I’m going to leverage the process I’m most familiar with. But I’ll definitely explore this sometime next year. For now, I will use some level of unit testing. Not sure yet if I’ll use Microsoft’s built-in version, because nUnit is so easy to hook in, and I’ve had some experience with it in the past.
Yes, I could focus on NHibernate, but I have to draw the line somewhere, and with such an aggressive schedule I’d rather start with a single stack where possible. I’m sure some ALT.NET folk out there may want to pounce on this, but no need. First of all, I completely understand and agree that the Microsoft way is not the only, nor the best way. This is a starting point. Secondly, from what I understand, you’d have a much stronger argument against EF1 than EF4. And my next lesson is an example of straying from the MS stack when needed…
I’ve got SQL down pat. As a matter of fact, I spend every day in SQL for one reason or another, in between my management duties. So it’s time to dive into something a bit different that seems to be taking the industry by storm these days – NoSQL. MongoDB is one of the most popular open source NoSQL implementations (and in case you’re wondering, there is no standard yet). NoSQL does not require fixed schemas, and is a departure from the ubiquitous relational database we’ve somehow come to treat as the “only way” to do data storage and management. Apparently, there are popular examples of how well NoSQL scales, although if Twitter really is such an example, I wonder. Yes, it may be a temporary fad, and it has its detractors, but we’ll be using it for that site we’ll be working on.
Before you know it, you’ll be either consuming or serving out web services, no matter what binding you use, and whether you use SOAP or REST (now that REST has been incorporated into WCF 4.0). WCF is Microsoft’s solution for web services, and I’ll be focusing on REST. But once you know the concepts, it doesn’t really matter.
Designing loosely coupled software has become more a necessity for creating robust systems than almost any other development technique used in the past several years, and is a must for creating truly independent unit tests. IoC and Dependency Injection libraries abound, and you can go absolutely crazy trying to choose. My initial exposure was Spring.NET’s implementation, but that was several years ago, so again I’m going to default to Microsoft’s offering (Unity) for my reboot.
This may not be a tool I’ll use up-front for developing, but from what I’ve seen and played around with for automating tasks, PowerShell will be absolutely invaluable. I’m adding this here, because PowerShell has fascinated me since it was code-named “Monad.” I experimented with it a few times, but I may have to save diving into this for last.
Microsoft Certified Professional Developer (MCPD) Certification
I’m not a believer in certifications for qualifying for a job in this field. I don’t believe it proves much more than showing you can take tests. I’m not looking to debate that here. But I do think it has value as a goal for learning this stuff. The 2010 material doesn’t seem to be available yet, but I’m going to keep an eye on the Microsoft Learning site until it does.
This is already a significant list of tools to revisit and/or learn. I only have a handful of months to get to a productive level again, so I’m going to stop at this point. The above list is not a strict order, and may change a bit as I go. There will also be overlap out of necessity. In my next post, I’ll put together a list of learning resources for each, consisting of some I’ve already started using, and of some that look promising. I’ve also included some starting points in this post’s links.
Again, if you have any comments or other ideas, please let me know.