Geeks With Blogs
ArchitectNow Kevin Grossnicklaus' Blog

Lately I've had a few people approach me after speaking engagements or conferences and ask for some advice on becoming a .NET developer.  Sometimes this has been moving into IT from an unrelated field or other times it's just been a transition of existing development skills into .NET.  Now if you have been in this industry for awhile (and had any success) you have apparently demonstrated at least some capability to migrate your skills from one newly released technology to the next.  In 2009 it's hard to remember an environment where we, as an industry, weren't in constant "learning mode".  I've done my best to embrace the changes and keep challenging myself to keep learning more and more about technologies I find interesting.  Heck, I've come to enjoy playing keep-up on some of this stuff as it keeps things interesting and I'm never bored (and I'm also never really caught up :).   But, what I have found is that this constantly changing landscape is a bit difficult to find a way into from the outside.  If you are new to .NET (or programming in general) how can you dive in and start down a path that will (hopefully) lead you towards the achievable goal of being a competent software developer?

I'm a big proponent of anyone's ability to learn whatever they set their mind to if they put in the time and effort and use some common sense about how to keep getting better.  As an example, I've become a halfway passable guitar player by (at one point in history) simply taking the plunge and buying a guitar and book and convincing myself I could learn.  I was 18 years old and I knew absolutely no one who played guitar.  Did it happen overnight?  Heck no!  It has taken me 15 years and countless books, magazines, websites, etc.  I've played in 10 or so bands with some great musicians who have taught me a lot...and, most importantly, I've put in countless hours in a bedroom (or basement or bathroom or studio or wherever) making a horrendous noise while practicing...(many people around me suffered a lot during the early years)...but, today, I can actually entertain people with a guitar.  Did I do it all on my own?  Nope, I quickly sought out people with the skills I was interested in who were willing to share their knowledge and I asked them to point me in the right direction.  I asked what I could do to be better and then I listened to their advice and put in the effort to act on it.  I'm nowhere near perfect and still consider myself a hack...but I learned a lot on my own by chasing a dream and having a realistic expectations of what I was capable of...and asking for a lot of help.

What does this whole guitar thing mean to people wanting to be a software developer?  Well, first off, I think learning to be a software developer (like anything) is actually a very achievable goal for those willing to work for it.  Is it easy and will it happen overnight?  HECK NO!  But there are TONS of resources available (and many at no cost) to help people get started.  Most importantly, I've found there are a ton of people on the Internet and within local development communities who are willing to provide guidance and direction to those entering our industry.  We're not exactly a stingy fraternity who hoard knowledge....instead I'm proud to say that I find our industry to be very open and accepting of newcomers.  The biggest hurdle I see people having is building up the nerve to ask for that first bit of guidance to help them get started down the right path.  Once the ball is rolling and people have some resources to help them build a good foundation of knowledge, then they "learn how to learn" and jump on this big technology ride with the rest of us.

So, with this post I wanted to share some of my recommendations to anyone looking to start learning .NET.  I'm sure I'll miss a ton of great resources but hopefully I'll stir the pot and others can pitch in and add their own ideas.  One of things that got me thinking along these lines (in addition to a number of requests), was this post which I found to cover a lot of the steps I take to learn technologies BUT was focused on someone already familiar with .NET in general who is just trying to prioritize and learn newer stuff as it comes up.

Before diving into the meat of where to start, it's important to point out that everyone learns differently  I teach .NET courses for a living and I see students with many different skill levels who each excel through different learning styles.  Some just need a web browser to absorb information, others crave a good book recommendation and will read every line and work every exercise.  I have students who love the classroom experience and ask tons of questions and follow up with insightful questions via email while others are only there because their boss is sending them and will do their true learning at home online.  Some students enter every exercise and answer textbook questions while others just skim the text and absorb the knowledge.  So, the first step in learning anything is figuring out the BEST WAY FOR YOU to learn based on how you have been successful in the past. 

That said...here is what I would do if I was just starting out and wanted to bootstrap myself with as much information as I could on .NET with no prior knowledge.  It's not perfect and I'm not an expert in all things .NET...but it's a good start, it's all free, and it's available to whomever wants to take advantage of it to learn.  (NOTE: These are in psuedo order)

 

  • Prepare for some work and plan on investing some time.  Plan on studying, writing code, making mistakes, asking questions, etc.  No one can learn this stuff that quickly without help and without investing some time and headaches.  If you get in the mind set from the beginning that you will have to work to bootstap yourself up as a developer through hard work and perseverance you will succeed without a doubt.
  • Get an environment prepared for which to work and learn.  There is only so much you can learn from reading books or content on the internet.  At some point you will need to sit down at a computer and hack out some code.  So the first step in becoming a developer is getting the software loaded on which you will work.   If you are not familiar with them, Microsoft has provided free versions of Visual Studio.NET and called them the Express versions.  They can be found here.  You can pick one version or load them all.  I'd recommend starting with the Visual C# Express version of the Visual Basic.NET Express version.  So, download one of these and load it onto your home computer, your laptop, or whatever other computer you think you will be working on to learn.   When prompted, make sure you load the MSDN Library.  This will be a lifesaver in learning to program and I'll discuss it later.  Also, it is important to note that these versions of Visual Studio.NET are the same tool that the "big boys" use.  As you grow and potentially get your first development job, this is the tool you will be using (most likely).  So the skills you gain using this version will go to work with you on that first day.  I would also consider loading the SQL Server Express version that is available at the above link and including data access in your later list of necessary development skills.
  • Prepare a plan for organizing information.  There are a TON of resources available to help you start to learn to write .NET applications.  The trick is really to organize and keep track of it all so another first step (after loading Visual Studio.NET) will be to get a plan for tracking information.  Remembering how to find something you find important or keeping up on articles, sites, blogs is key.  New information is available every day and, if you want to learn as much as you can, you need to keep track of what you find.  Obviously you can keep notes in a notebook or follow another manual process but I like to take advantage of technology where possible and use some electronic means to keep track of stuff.  Here are a few free tools I use:
    • Delicious - As most electronic information is located via a URL, I use Delicious to keep track of all my links to information.  As I come across a new site or blog I add it to Delicious and tag everything with a keyword that will help me organize it cleanly.  By using Delicious and not my browsers favorites, I can get to this information from anywhere I happen to be and it can be organized in a logical fashion.
    • Google Reader - I'll include more information on this next, but, if you are not accustomed to using an RSS reader to aggregate content on the internet, this would be a great time to learn.  More on this in a bit.
    • Microsoft Office 2007 - OneNote - This isn't a free tool and I have no idea how many of you have it, but I use it constantly as a place to keep track of ideas, notes, links, etc...  If you have it, use it.
  • Start to gather resources to get support when starting out and to eventually go beyond the basics.  This needs to be done up front as well.   Once you have a plan for organizing information, you need to start keeping up on the content you find.  New content and new resources are added to the internet every day through new articles, blogs, newsgroups, etc.  Once you dive into learning these technologies you are going to need to have some "go-to" places for support and information.  
    • Here are a few links I commonly use personally to get support.  I'd start by adding these links to your favorites (or Delicious) and add more as you find them.  Go to these sites and look around at the type of information they contain and make a note of things that interest you.  Sites like StackOverflow and CodeProject have very active forums where you can ask ANY .NET question (however advanced or however simple) and get support from a large community of great developers.  This will be a HUGE help as you are starting out...and we'll talk about it in a bit.  Here are the links:
    • Learn to use Google Reader (or any RSS aggregator but I'll use Google Reader as an example) and start adding sites and blogs to your own feeds.  This will be an indispensable help in keeping up on content and support from various sources.  If you've never done this start here with their "Getting Started" information.  This will give you ONE PLACE where you can keep up on all the information on all your favorite sites, blogs, forums, etc.  Once you sign into Google Reader go to all the links I shared above and add feeds to their information.  Then add any other RSS feeds to blogs, etc as you find them.  For example, you could add a feed to my blog ;)  Here are a few RSS feeds I highly recommend to get started (and some are from the above sites) but hopefully this post will draw some feedback of other recommendations:
    • Gather a list of trusted friends, advisors, and/or mentors and add them to you IM client (MSN, Yahoo, or whatever).  At worst, gather their emails.  Let them know that you are starting to teach yourself .NET and ask if they'd be willing to answer a few questions as you hit some stumbling blocks.  Prepare them to help out as necessary.  Anyone who is worth a darn as a developer (or a friend) should gladly agree to be utilized as a resource this way.  We all started somewhere and many of us were lucky to have people to answer our silly newbie questions :)
  • Start at the beginning and learn a core .NET language like C# or VB.NET.  Finally, we have some resources ready, VS.NET loaded, and it's time to learn something.  Many people want to skip this step and want to jump into writing games or fancy websites or nifty WPF applications.  You will have a heck of a time picking up a new .NET language through learning an advanced technology like WPF or WCF and will be better served by starting with the constructs of a language and learning VS.NET in the process.  Those advanced technologies will come later and you will pick them up much quicker if you know VS.NET and C# (or VB.NET)  like the back of your hand.  So, how do I learn a language?
    • Here is one of the few places I'd recommend a book (and thus something that costs $$$).  When I teach introduction to programming I use a set of textbooks by Murach's.  They have a C# version and a Visual Basic.NET version.  So why do I recommend these books over the 1000's of other books out there?  These books are written from the standpoint of LEARNING TO PROGRAM.  I'm sure there are others but I've had great success with these (thus the recommendation...since I make no money if you buy them :)  I would recommend picking either C# or VB.NET as a language to learn....as to my recommendation on which is better...I don't have one.   I spend most of my time coding in C# so learn that one if you need a reason to choose.  What do I do once I have this book?  Sit down, open to page one, read and do the examples.  These books have tests and projects to complete at the end of each chapter.  You will actually have to write code to complete them.  They step you through everything you need to build up a decent foundation and get your hands dirty.  If you get stuck on a section, use Mr. Google to find some answers.  I personally think 80% of being a great programmer is the ability to find answers when you are stuck (the other 20% IMHO is common sense :).   I wouldn't skimp on this step and would instead walk through every chapter in order and do the work.  There is no substitute for hard work and this is where it starts.  I'd pay special attention to all the object oriented concepts these books cover.
    • Once you complete the basics of C# and/or VB.NET I would also recommend getting their ASP.NET book (if you are interested in web programming) or their ADO.NET book (for those interested in data access).  These are still relatively beginner books and you get a good foundation in ASP.NET or ADO.NET which are both great technologies every .NET developer should be familiar with.
    • As you start to dive into VS.NET and a new language take full advantage of the built-in help resources available with Dynamic Help.  Just click the Help->Dynamic Help menu and a dock-window will appear that will provide context sensitive help about ANYTHING you may be doing or typing (assuming you have the MSDN library loaded).  More info on this can be found here.  This is a great resource when you are starting out and the first thing I teach new developers to use.
    • Once you are working through the basics of a new language and a new tool, feel free to stop and review web sites, ask questions of friends or peers, post questions to news groups, or take advantage of any other support mechanism you have.  Don't go past a concept if you don't understand it and if you have any questions on it, now is the time to get clarification.  My one recommendation would be to keep a realistic expectation of how fast your total comprehension will come and to take all the time necessary to grasp the core concepts first.  Like anything, focus more time on the areas you feel you struggle the most at and not just doing the things you are already good at.
    • CODE! CODE! CODE!  Don't just stick to what this book (or any book) says.  Write little applications to test your skills.  Play with the sample projects from the book and add new features.   Play with the various project types in VS.NET to see what they do.  Look at (and edit) some sample projects you find on the internet.  Anything you do in VS.NET is just building experience to be a better software developer.  So dig in and play!
  • Get involved in an online community and ask questions. As mentioned above, there are a ton of online newsgroups and forums with GREAT developers who actively answer questions on a wide array of topics.  StackOverflow.com is a great example.  Take advantage of these resources to either search existing answers or to ask new ones.  Don't get stuck for too long without getting some support.
  • Get involved with the local development community.  Many cities have .NET user groups or special interest groups (SIGs) on more focused topics like C#, SharePoint, etc, etc.  Find these groups in your city and make it a point to begin attending meetings.  Not only is this a great way to keep abreast of technologies but it is also a networking opportunity to mingle with other developers.  Here is where to pepper some experts with questions or two talk about the latest job openings.  In St. Louis we have an active .NET user group that meets once a month which draws between 80-100 developers from all over the region (more info about our group can be found here).  If you are struggling with learning a new concept, pop into a local user group meeting and ask around for where other developers might find out the answers you are looking for.
  • Go to Amazon.com or Borders and begin researching books.  I spend many lunches either in a book store or on Amazon.com looking through the recently released books just to see what technologies are out there and what interests me.  I don't buy them all but, if I see a highly rated book with good reviews that is on a topic I might want to know about, then I'll add it to a wish list to buy when I get the funds. 
  • Subscribe to magazines.  Again, this is something else that isn't free but its a cheap and easy way to get support and keep up on new technology.  I recommend MSDN Magazine and/or Visual Studio Magazine or CoDe Magazine.
  • Decide on your next area of focus.  Once you feel pretty confident in VS.NET and the core language (i.e. you can open VS.NET, create projects, debug simple applications, etc, etc) then it's time to begin to grow your skills.  It is here where you have some options and need to prioritize between a number of possible paths.  These paths will dictate what books, resources, and other means of support you will use but there is obviously no hard and fast rules here.  You can focus on everything, or pick and choose the most interesting pieces from each.  It's up to you what direction you take your skills but you should be ready to devote more time and effort to learn them.  Also, as many of us experienced guys already know, you will never know everything and something you spend a lot of time becoming strong on might change significantly in the near future and your level of knowledge will be knocked back down to that of everyone else.  So be warned but keep working.
    • Do you want to be a web developer?  Then you have to focus more on web server based technologies.  For these technologies I'd focus on ASP.NET books and sites.  One of the best starting points is Microsoft's own http://www.asp.net/ and especially the learning section (http://www.asp.net/learn/).  Click that link and look through all the available (FREE) support for getting started to learn to program browser based applications in ASP.NET (please realize that you will still use the same C# and VS.NET skills you should have previously became comfortable with :)  Also, AJAX, web services, ADO.NET, and possibly WCF are also technologies that could fall under this category and worth researching.  Also, if this is going to be your focus then you'll need the ASP.NET version of VS.NET Express.  Go to Amazon.com and search for ASP.NET and you'll see a HUGE selection.  Do a bit of research or ask around for which books work for people you trust.  I like the WROX books on ASP.NET (Bill: You owe me some commission :) but I'd find what works for you.
    • Do you want to develop WIndows applications that are NOT browser based?  Then focus on WPF or WinForms technologies.  Find books and other resources focused on these topics.  Again Microsoft has a great site to get started at http://windowsclient.net.   It also has a HUGE getting started and learning section here http://windowsclient.net/learn/.   There are videos, podcasts, articles, and sample projects plus a ton of other content.  You should definitely be able to grow your skills in this area here.  There is also a nice WPF bootcamp site here that has complete videos and walkthroughs.  ADO.NET and WCF are also technologies you might want to beef up on.
    • If neither of the above cover your ultimate goals as a developer, then what do you want to do?  Database design?  Many books and sites are out there to help.  SharePoint development?  Again, tons of online support.  Game development?  Search for XNA and start there.  Anything else?  Ask around to see where to start, use the internet, post on newsgroups...I promise there is a community or sites out there ready to help you get started no matter what your interest.  The key is to never stop learning.  Pick what you want to learn and make a list and keep gathering information and resources and studying.  That is the nature of our industry.
  • Work as a developer.  This is something else I can't stress enough.  If you love developing software...you should be working as a developer.   If you are just starting out, take an internship, volunteer to work on charity projects, develop small projects for friends, or contribute to a community project on the internet.  Whatever gets you coding and writing software is a great start.  The most important thing here is to find an environment where you will grow.  Work with the best teams you can find and (this is important) find an environment where people give you the support to learn and contribute.  Even if you are just starting out, people tend to take chances with eager developers who want to learn and grow and contribute.  Writing high quality software is a science that goes well beyond one person writing code.  Becoming involved in an environment where you can be a part of that process is the most valuable thing you can do to grow as a developer.  Working alongside other coders, designers, DBA's, project managers, testers, or any other technical resources all with the common goal of delivering a quality software product is the ultimate goal of most developers...so do what you can to put yourself in that situation.
  • NEVER STOP LEARNING! Never quit trying to keep up with technology.  I read through my Google Reader feeds every day and focus on specific areas that interest me (making note of the others).  I keep a list of technical books I want to read in a priority order (and read them).  I always track new sites.  I try to always put myself on projects or near smart people I can learn from.  I encourage people to challenge every technology decision I make.  All this just so I keep learning.  At this point you can refer back to this post and put yourself in a cycle to keep learning.  Ask a lot of questions of your peers or on forums...if you want to know a good "next technology" to learn based on your skill sets...ask someone.
  • GIVE BACK! At some point (sooner than you would imagine) you will find yourself in a position to start giving back to other developers (both new and more experienced).  So instead of just asking questions on sites like StackOverflow.com take the time to answer a few.  Help out peers or coworkers who are stuck on a problem.  Start a blog and write about your successes or failures.  Volunteer to present at user groups or company training events.  Find some way to keep our industry growing by helping out the "new guy".

 

So, at the end of my life's longest blog posting...all describing how to get started in .NET...what have we learned?  Hopefully, some of you out there (especially the newbies) will get some ideas on how to start your own journey to be a developer.  Like anything there are no hard and fast rules and sites which I find useful might not work for everyone and other people might have additional recommendations on this or that.  The important thing to realize is that support is out there and asking for guidance is a great thing.  Don't expect overnight results and plan on immersing yourself in technology for a long time before coming out with the ability to be considered a good developer.  Is it hard?  That depends on how much you want to learn...but the help is there.

Finally, after writing all of this, I'm left feeling curious about what I missed.  If you know of other sites, books, resources, etc for new developers I'd love to know about them.  I get asked about this stuff a lot as an instructor and an architect and it's pretty easy to accumulate info to pass on to others.   Drop me your ideas at kvgros@sseinc.com or just comment on this post.  Anything I get I'll slowly start to put back into here.

Thanks for reading all this and I hope someone gets some use out of it...

-Kevin

Posted on Tuesday, January 6, 2009 10:13 PM | Back to top


Comments on this post: Breaking Into .NET (from scratch)

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
Great Work Kevin. Its a quite interesting blog especially for the newbies to .NET (myself being one of them ). Recently I have lost my job due to recession and while looking for a new job I realized that I need to Upgrade my Skill Sets in order to get a Job. So I decided to move onto .NET platform from current C and C++ for mobile software development, but I was not able to understand from where do I start learning .NET technology. Your blog helped a great deal to answer many of the questions I had in my mind.

Thanks a lot for providing with your valuable suggestions.
Left by Nitin Gupta on May 28, 2009 4:46 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
HI Kevin,
It wouldn't be wrong to say that this blog would change my life...I have a developer for 2 years now without much success in a IT services company. I have been doing a lot of "Cleaning" jobs and not very hardcore development coz my PM's din't have confidence in me and nor I in myself. I have been thinking of doing an MBA and leaving IT for good.I have exp in silverlight,sql server,ajax,asp.net,c# but in 2 years no project which i can say have made a killer contribution.reading your blog I realizec what i have been missing and yes instead of the GMAT books I am busy going throughing the books you suggested.Murach is great and even after 2 years I realized I am still a novice.There is a lot to learn....Thanks Kevin...
Left by anukit on Dec 01, 2009 1:17 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
Hello Kevin,

Thanks for the great information. I worked as a mainframe developer for 4 yrs and din't work for the past 2 yrs. I want to update my skills and be a developer again. I started looking for .net information and landed in your blog. This article is very helpful.

Thanks
karmit
Left by KARMIT on Mar 30, 2010 1:44 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
Really, it's a nice post... I got the confidence of learning after seeing this post.
Left by Ganesh on Apr 11, 2010 12:53 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
Hi,

Is there a typo in your sentence: "I'd recommend starting with the Visual C# Express version of the Visual Basic.NET Express version." That is very confusing. Do you mean: "I'd recommend starting wtih the Visual C# Express version OR the Visual Basic.NET Express version." Every time I start again to try to learn this stuff, I get put off by something small like that that confuses the heck out of me. Just want to know if it is a typo this time.

Thanks.
Left by Denise on Jul 21, 2010 2:44 PM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
This blog is really helpful for all .... Thanks
Left by Sukanta on Nov 24, 2010 5:54 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
I found this blog entry after searching how to learn .net... It sounds very good, but the hardest part is the investment of time.
Left by New Developer on May 13, 2011 11:17 AM

# Training For Half Marathon
Requesting Gravatar...
Watch our Team for Life video and learn more about how the work you do supports Lazarex Cancer Foundation. Also, learn about how we'll help you get started by providing training, fundraising tips and most importantly, moral support! No matter who you are, we not only give you the training so you can endure the race, but also to help you fundraise, so you can truly make a difference!

Left by janny on Jun 23, 2011 3:17 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
This is what i've been looking for for weeks, I've just started working in an programming company, I've been working for two years in IT sales and I became a succeful manager then i decided that this is not what i want; i want to be a programmer.
The company welcomed me but i am lost, i don't know how to start i want to give all my time and effort ,but i don't know how to start.
I made my graduating project on VB.net, but i didn't open VS since then, now I know how to start and catch up what i missed ,, thanks to you.
I wish i have your language to give ideas as you did. Thanks

Left by From sales to Programming on Dec 31, 2012 7:40 AM

# re: Breaking Into .NET (from scratch)
Requesting Gravatar...
Thanks Kevin :-)
Left by Rags on Mar 12, 2014 11:26 AM

Your comment:
 (will show your gravatar)


Copyright © Kevin Grossnicklaus | Powered by: GeeksWithBlogs.net