How to Become a Good C# Programmer, Part 2
- by Scott Whigham on September 1, 2009 9:17 AMThis is Part 2 in my series on How to Become a Good C# Developer. You can find Part 1 at TechUrbia.com here.
Let's Get Started
My "system" is easy - it's 13 steps with an optional "bonus" 14th step (to be revealed later). If you need to reference the full list of steps, you can find those here.
Step 1: Pick a Language
This is the most obvious first step and, since you're reading an article titled, "How to Become a Good C# Programmer", it's safe to assume that you've chosen your language. And it's a good choice incidentally - C# developers in the US in 2009 made anywhere from $60,000 - $120,000 on average according to payscale.com.
Step 2: Pick a Pet Project
The idea here is that you find some little project that you want to build and you build it. At the end of building it, you have given yourself some practical programming experience and learned quite a bit along the way. It's not quite "trial by fire" but there's an old computer programmer axiom: "The compiler doesn't lie." Your program either compiles or it doesn't.
"But Scott - what should I choose?"
Easy question actually - something that is "moderately ambitious." Oh sure, you could start with a console application (and a later suggestion will intimate you do just that) but I suggest you be go for more: pick a pretty, well-made application that, if you were asked during a job interview to talk about the architecture and show it to the interviewer, you would feel a sense of pride. In fact, they will often ask you to bring/share copies of software you have written (or at the very least show example code). You see, since the dawn of computer programming, all newbies (that's you) pick a pet project and build it. And you'll find that many folks pick similar pet projects for their first "real" application. Here are a few suggestions to get you started:
- Password manager
- Contact Manager
- FTP App
- RSS reader
- Font viewer
- MP3 player
- Note tracking app
- Chat client
- Time tracking app
Notice I didn't say, Hello World should be your pet project. You'll need to do such an app but it is far below the standard of a pet project.
Your App Will Suck
Here's something you should know early on: you will do it wrong. The architecture will be wrong. It will not be fast. It will be buggy if put to the test. And, if you follow all the steps of my system, you'll look back at this app and laugh at how silly it is a year from now. But you know what? All beginning programmer-level pet projects are that way and, since you have to start somewhere, this is just what you do. Don't get intimidated by the sheer magnitude of what you need to learn in order for this pet project to become "great"; chances are that, by the time you know all the things it takes to build great apps, your mind will be on to much more exciting applications. Just consider it a rite of passage. As Guy Kawasaki so famously said, Don't worry, be crappy.
Learning About Scope
Another thing you should start learning early on is the concept of scope and how important deadlines and prioritization are to software engineering. Scope out your project like this:
- Get a pen and paper and write down the top 25 features your app should have
- Spend some serious thinking time away from the computer here to come up with critical features
- Next, load up (or review) some similar apps and see what you've forgotten or where you have added value with your feature list
- Pick a date that you'd like to have your application finished by
- You want to give yourself enough time to finish the app but not so much time that you lose interest in the app because you have advanced beyond it
- If you can devote 2-4 hours per day five days a week, it should likely take you 2-4 weeks to complete
- Decide what to cut out of your list of Top 25 features
- Separate the items into three categories:
- Critical - must exist for the app to be considered a [insert type of app] app
- Important - these features generally exist in most of these types of apps
- Like to have - would love to have them but, if they aren't there, then it's okay
- Assign timelines to each task in the "Critical" category
- Have you met your date from #2 above? If so, that's it - go to the next section
- If not, assign timelines to each feature from the "Important" category and go through the same routine
The key takeaway from this exercise is that you need to learn how to design and implement features in applications. Generally speaking the first version of an application has far fewer features than version 2.0. Most of the time, the main features in version 2.0 were originally thought of prior to shipping version 1.0 but, due to prioritization, they got bumped to version 2.0. And don't worry - you'll get this wrong too (we all do and even seasoned pros get this wrong after 10+ years as professional developers). I'm terrible at this personally!
Learn to Ship On Time
One of the most famous and oft-quoted lines regarding developers was penned by Steve Jobs (of Apple fame): "Great artists ship." In other words, you can draw up the most elegant of applications but if you don't release it (i.e. ship) then it's nothing. Have a deadline and work like #### to make that deadline. There may be delays - there are almost always delays in software - but ship quickly. Again: you will mess up and it won't be pretty. Get over it and just ship it!
Databases Are Everywhere
You'll notice that, in most of my suggestions, there is persistent data storage required - i.e. each time you execute the app, you want access to the data/state you previously entered. Do not shy away from this! It's hard to write applications today that do not, at some level, just persistent data storage whether it be in the form of cookies, XML files, or a database of some kind (like SQL Server, MS Access, Oracle, etc). Step 3 will help you with this...
One Final Suggestion
Although you could make your pet project a web application, I'd advise against it for the time being.
Next up
Let's take a look at Step 3! Of course, you are welcome to go ahead and dive into my C# training course online at any time!
Article Index:
- Part 1 - Overview of a System for Becoming a Good C# Programmer
- Part 2 - Steps 1 and 2: Picking a Language and Picking a Pet Project
- Part 3 - Steps 3 and 4: Picking a Book or Class to Get Started
- Part 4 - Step 5: Implementing Your Pet Project
- Part 5 - Step 6: Minimizing the Trough of Disillusionment
- Part 6 - Steps 7 and 8: Finish your Book/Class and Start a New One
- Part 7 - Steps 9 and 10: Begin Answering Questions and Pick a New Project
- Part 8 - Steps 11 and 12: Review more apps and Start Contributing!
- Part 9 - Steps 13 and 14: Write a few articles and the Bonus Step
- Part 10 - Next Steps and What Does It Take to Be a Great C# Programmer?




There's good info here. I did a search on the topic and found most people will agree with your blog. Keep up the good work mate!
Ich bin hoch zufrieden, will jedoch keinesfalls gedanklich folgen. Das ist genau richtig. ich meine es ist so, seit meine Mutter gebrauchte Autoersatzteile fuer unser KFZ bestellen kommen wir mit unserem Geld besser aus