If you’ve been using WebMatrix as a springboard to software development with Visual Studio you’ll at some point wonder what steps you’ll want to take to get there. Visual Studio is meant for more complex applications and tasks than WebMatrix/Razor. Applications written in VS tend to be enterprise or larger apps that would benefit from separation of concerns, unit testing & TDD, and needing management like Agile practices. I’ve written a blog post with the list of technologies/languages for getting up to speed with WebMatrix, regardless of your development background. These same skills are needed when developing with Visual Studio, but there’s a few more things to know before diving in, that will make your life easier as a developer using Visual Studio. The skills listed here, as well as those highlighted in my earlier post on the learning path to WebMatrix, are “must haves” when working in ASP.NET Web Forms, ASP.NET MVC development or really most any project type available in Visual Studio.
Source Code Control/Versioning
You’ll likely feel the pain of not using a good SCC to host your code long before entering development with Visual Studio. A good SCC app can help you keep your code controlled, allow team access without stepping on each other’s work and provide ways to roll back to a previous version of a file or set of files if things should go wrong. WebMatrix doesn’t have built in source code control (at this time), but many SCC software apps and open source projects are available and two great examples are SVN and Git.
I’d recommend having a firm grasp on these SCC basics:
- file management
- check-ins, check-outs
- working folders
Here’s a great series by Erik Sink on source code control basics that are tool agnostic: Erik Sink's SCC Basics.
And what if you’re a solo developer? Then you can use these tips from Erik Sink to boost your productivity.
Object Oriented Principles/Software Design
The “must have” OO principles you need before you crack open Visual Studio (or any OO language editor) are listed below:
You need to be solid in what these concepts mean, when they’re needed and if so, how to write code that puts these four principles into action.
Here’s a Wiki Article explaining the concepts.
The Code Project also has a nice explanation on an Introduction to Object Oriented Programming Concepts (OOP) and More
Univ of Arizona’s Center for Integrative Modeling & Simulation’s OOP tutorial [pdf].
Software Development Methodologies
You should be familiar with Agile, Scrum (a subset of Agile practices) & Waterfall methodologies, but you won’t need a deep understanding of this when starting out with software development using Visual Studio. This is because these methods of controlling software projects are often best learnt on the job to get that deep understanding of the processes and journey of writing software. Daily stand-ups, sprints, sprint retrospectives and knowing team member roles are just some of the essentials needed to run a successful project. In the meantime, it’s a great idea to do some reading and learning about these methodologies (and others!).
Take a look at the Agile manifesto; you’ll see it’s loaded with those very important soft skills that folks in software really need if they want to keep projects on schedule and within budget. The great part about learning Agile, Waterfall or other methodologies is that it’s not heavy technical reading, and when you combine your off-hours learning with on the job training, it’s a great bang for the buck in experience and resume points.
Here’s the list of the top 20 books on Agile Software Development http://agilesoftwaredevelopment.com/blog/jurgenappelo/top-20-best-agile-development-books
Knowing how HTTP works is essential if you take software development on ASP.NET seriously. Although Web Forms abstracts much of the HTTP layer away from you, it’s still important to know how the request/response system works, and how the ASP.NET pipeline works. If you’re moving to ASP.NET MVC development, you really don’t have a choice, as HTTP is not abstracted away and your code is much closer to the “metal”. However, your experience creating ASP.NET Web Pages with Razor should give you a heads up on HTTP as you tap right into the Request, Response & Server objects to hand craft the HTML output that’s rendered.
Here’s an older but still relevant article on how HTTP works.
HTTP isn’t likely to change anytime soon, and it’s everywhere, so it’s a skill that will go with you for a long time to come no matter what you code in.
The MVC Pattern
If you’re moving from ASP.NET Web Pages with Razor syntax then using ASP.NET MVC is a no brainer. MVC, or Model View Controller, is a user interface pattern to help you break your app into “concerns”, which are various aspects of an app that have a specific purpose; in this case model, view or controller. By keeping things separated and modularized, your units of work are smaller and therefore easier to develop and maintain. Patterns have been around for a long time, and the MVC pattern is no exception. ASP.NET MVC happens to be the Microsoft implementation of the pattern using our tools and frameworks, many others are out there - for example, CakePHP, WebObjects for Java, Spring framework, and Django for Python.
Knowing the concepts and how to implement the MVC pattern in ASP.NET is a great start for ASP.NET developers wanting to join ASP.NET development teams, or those in teams migrating from ASP.NET Web Forms. MVC also makes it very easy to do unit testing and Test Driven Development (TDD), which are certainly considered best practices in software.
The best place to get started using ASP.NET MVC.
Martin Fowler’s writings on GUI Patterns/MVC Pattern. Fowler’s books are must haves for any developer’s bookshelf.
Here’s guidance from our Patterns & Practices team on MVC.
Once you’re up to speed, what’s next?
Once you’ve been putting some (hopefully all) of the above concepts & technologies to use, and feel comfortable using Visual Studio as a development tool, you’ll want to bump up your knowledge yet another notch. The easiest way to do this is to go another level deeper into topics that you’ve already invested time into, as you can draw from your existing knowledge base. The above list of concepts represent cross-platform, language agnostic, skills so they’ll travel well with you, no matter what code you write.
SCC: Learn about and use merging, branching, forking, and more advanced SCC principles. Start at this WIKI site and follow the links to external sites to get a good frame of reference.
OOP: There’s much more to be learnt about designing classes and putting into practice OOP techniques.
Methodologies: Read about making your projects lean, and taking Agile to the next level. Scrum is a popular practice in many development shops, as it features great techniques for managing software project schedules and balancing business needs with expected milestones.
Other Patterns: You definitely should have a good understanding of other patterns that appear in software development, and how to implement some of the more popular ones. The most important skill needed for working with patterns is the ability to recognize them in the first place. This means that you need to not only read & learn book concepts about patters but also analyze all the code you and others write in order to effectively recognize and implement good, solid, patterns .
More??: Yes! Of course there’s so much more to learn about software – great things like TDD, BDD, DDD, unit testing, IoC & DI, and the list goes on. Keep in mind that nobody can master everything right away so hopefully this blog post will help you structure your path to getting up to speed with ASP.NET development with Visual Studio 2010. In the near future, I’ll post yet another article on what to learn after you’re comfortable with the principles listed here.