How To Become A Good C# Programmer
How To Become A Good C# Programmer
How to Become a
Good C# Programmer
by Scott Whigham
In this whitepaper, LearnItFirst founder Scott Whigham talks about how you can be-
come a good (or better) C# programmer. This whitepaper is long - 15 pages - but it in-
cludes both a step-by-step system to follow as well as an in-depth discussion of each step.
If you follow this 13-step system (with a bonus 14th step), you can’t help but become a
good C# developer!
© Copyright 2004-2009 LearnItFirst.com LLC. All rights reserved. All trademarks remain the property of their respective owners.
TechUrbia: A LearnItFirst Blog
How to Become a
Good C# Programmer
By Scott Whigham
I get questions through email (through the LearnItFirst.com website) all the time from people who watch my .NET training
videos asking things like this recent email:
Hi Scott -
I really like your C# training course and would like to ask you if you have any tips on how can I become
a better C# developer?
Along with this type of email, I also commonly get questions like this:
I’m a student at university and would like to know how to become a good programmer. What’s the
best way to learn to be good C# programmer?
I think I can help - and in a pretty standardized way that just about anyone with any aptitude for computer programming can
follow.
1. Pick a language
2. Pick a pet project
3. Buy a few starter-level books or take a few online classes that are on your chosen language
4. Begin reading the book/taking the class
5. Implement your project while you are reading/taking the class
6. Post your questions in an online forum dedicated to the language
7. Find some sample apps written in your language and review how they did things differently
8. Finish your book/class and buy another book/class that is specific to your language of a beginner/intermediate level
9. Begin answering other people’s questions in forums
10. Pick a new pet project and implement it
11. Review some open source apps written in your language
12. Contribute to open source apps
13. Write a few articles on subjects you enjoy
14. (Mystery bonus step listed at the end)
And while I’m sure that any sufficiently advanced developer could add several items to this list, in my opinion as a pro-
fessional developer and educator of developers that, if you follow this system, you will be able to start from scratch and
become a highly paid, successful C# developer.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 3
What You Do Not Need
A lot of people think that they need to have a Computer Science degree to be a good programmer but I disagree. I don’t have such
a degree and I fancy myself a more-than-able developer. Computer Science degrees are wonderful things but they aren’t required
to be a “good developer”. Will it help you be a better developer? Yes, I think that having such a degree would make anyone a bet-
ter developer. But I don’t think it’s a requirement to be a good or even a great programmer. Now don’t misunderstand me: I think
it’s great to take computer science classes but I don’t think that, in 2009/2010, having a computer science degree automatically
makes you a “good programmer.” You could, I suppose, make the case that a Software Engineering degree would fill that gap and I
might be more inclined to agree.
I also see people wondering about whether they have to be math gurus and again I say, “No.” It helps to know complex mathemat-
ical structures but I’ve made a career out of being a programmer and I failed Trigonometry three times (well, “failed” is perhaps
the wrong word - “dropped out”, “stopped going to class”, “couldn’t get up in time” all might be more appropriate).
“Yes, but Scott you don’t need Trigonometry to be a good programmer; you need to know Calculus!” Oh. Okay, if you say so. I’ve
never taken a Calculus class so I wouldn’t know.
Easy question actually - something that is “moderately ambitious.” I suggest you be go for something substantial: after completing
your pet project, you want to have 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). 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.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 4
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.”
1. Get a pen and paper and write down the top 25 features your app should have
o Spend some serious thinking time away from the computer here to come up with critical features
o Next, load up (or review) some similar apps and see what you’ve forgotten or where you have added value with
your feature list
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 and time constraints, they got bumped to ver-
sion 2.0. And don’t worry - you’ll get this wrong too (even seasoned pros get this wrong often). I’m terrible at this personally!
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 5
Step 3: Buy a few starter-level books or take a few online classes that are on
your chosen language
As the founder of the web’s greatest video training company, I’m obviously biased towards video training classes. In fact, I have
what I believe to be a very good C# training class for Visual Studio 2005 (and a Visual Basic version as well) over at http://www.
learnitfirst.com/. However I also love, love, love reading books. So pick up a video class or a book - just one for the time being
though. I’ve found that if I buy too many books when I’m first learning a language that I get overloaded and it makes the process
of learning a language more difficult. However, what works for me may not work for you so don’t just do what I say because I said
that it works for me!
• Building GUIs
• Working with persistent data storage
• Working with files and folders
• Basic architecture
• Basic object-oriented architecture and design (OOAD - also referred to as “class design” in certain places)
• Chapters that can be digested individually
o You don’t want a book/course that, if you skip an early chapter (say, Chapter 5 for example), you can’t finish the rest of
the book.
1. I’ve never once finished one of these long, multi-chapter sample projects despite reading more than ten books of said type
2. I think that you will learn faster and retain more by having to learn how to implement your own application without anyone
there to “hold your hand” (i.e. by giving you the code files and step-by-step instructions)
Sample projects have their place but intricate, multi-chapter sample projects can be detrimental to the learning process in my
opinion. Again: look for books/courses that have decoupled chapters (i.e. chapters that can be taken independently).
Just Because They Are the Expert Doesn’t Mean They Know Everything
Speaking as both an “expert” and an educator, I can tell you the inside truth: experts are experts in what they know. I know that
sounds simplistic but it’s true: you can ask me tons of questions about things I know and I will dazzle you (maybe?) with my intri-
cate knowledge of this or that particular piece/function/method/facet/property/etc. But ask me questions about complex topics
that I have no real-world experience in and I’ll fumble around like anyone (and I’ll look very little like an expert).
Whenever someone tells you about a “best practice” or you hear phrases like, “That’s the way everyone does it”, it’s a good idea
to have a reality check and verify what they are telling you is true. At this stage of your development, you likely won’t have the
knowledge to ask smart questions so it’s important to keep notes of topics/areas that you’ll want to cover later in your develop-
ment. You may find that you will learn things later on in this system that go completely against what you learn in Steps 3 and 4.
You know what? You will also misinterpret many things and completely gloss over incredibly important topics. This is normal.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 6
Keep a Notebook and Code Manager
Speaking of keeping notes, you will have so many questions at the beginning of your adventure to become a better C# program-
mer that you need a way to organize them. I’m a huge fan of OneNote and I think it’s cut down the time it takes me to learn and
master a new language. Check it out: http://office.microsoft.com/en-us/onenote/default.aspx
In your notebook, you’ll want to have sections/categories similar to:
• Questions I Have
• OOAD
• Data types
• To-do List
• Working with Databases
• Working with Files and Folders
• Code Snippets
• Tips & Tricks
• Best Practices
In each section/category, you’ll take notes and maybe even reference page numbers, videos, specific concepts, etc.
Tip #1: A good technique for learning is to take notes on a sheet of paper and then transfer them to One-
Note later. This allows you to physically participate in the learning process three times: (1) when you
read/heard the material [i.e. aurally], (2) when you physically wrote it down, and (3) when you physically
typed it in.
Tip #2: Use good SIPs (statistically improbable phrases) in your notes to make it easy to find topics later.
Step 5: Implement your project while you are reading/taking the class
Don’t wait - get started quickly. I don’t expect that you’ll have the knowledge to begin until you are a few chapters in at the earli-
est though so don’t just start with no knowledge; wait until you have enough knowledge of C# OOAD to intelligently start. Gener-
ally OOAD is covered pretty early on in any compendium on a .NET Framework-based language so that shouldn’t be a problem.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 7
How to Design a GUI
While everyone has their own way of doing this, let me offer a suggested system for designing your first GUI:
1. Start with a pen and paper and write up what it should look like (i.e. where the icons and buttons go)
2. Continuing with pen and paper, write up what menu items should be
3. Once finalized, move to a graphics editor and create a mockup. You can use fancy tools like Photoshop or Illustrator if
you have the budget or free tools like Paint.NET to create your mockup.
o Although graphic mockups are not a necessity, I find them helpful. Others find tools like Balsamiq (http://balsamiq.com/)
or Mockup Screens (http://mockupscreens.com/) more helpful. To each his own!
4. Once you have the mockup, now it’s back to the Visual Studio to create it! Use your book/class for reference on how
to accomplish this.
Tip #3: It’s okay to skip ahead/around in your book/class (from Step 3) to the section that talks about how
to create GUI elements!
After completing the GUI design, you will have a pretty application (if you did the graphic design well) that doesn’t do anything.
• What the app does when something loads or unloads (i.e. appears on the screen and leaves the screen)
• What the app does when a user clicks a button or menu item
• What the app does when the user clicks Maximize, Minimize, or closes the application
As a C# developer, you’ll spend much if not most of your time determining what happens when an event occurs. Events, as your
book/class from Step 3 will teach you, are what happens in response to something occurring (like what happens when a user clicks
the “Submit” button). Go ahead and get your events in place - you can add the actual functionality later on.
After completing this step, your application will respond to events (i.e. clicks) but won’t perform any actual work.
After completing this step, your application will still respond to events (i.e. clicks) but won’t perform any work since you’ve only
designed the classes, not implemented them.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 8
After the Class Design, Implement Method Stubs
Method stubs are a way for you to “kind of” get your program working. When you create in this manner, you will go ahead and
create your objects along with the methods and properties for each. What you won’t do, however, is to finalize the method/prop-
erty code; you’ll put a stub in place instead. Think of a method stub as a placeholder for work to be done in the future. In most
cases, you won’t have the necessary knowledge to write each method/property yet so go ahead and create the stub as a place-
holder.
Tip #4: Use exceptions to help you remember what is a method stub and what has been implemented
Tip #5: Use comments in your code to tell Visual Studio that this is a TODO list item:
// TODO: This is a method stub!
You know what? It’s all normal for you at this stage. Your life as a C# programmer will likely follow the Gartner Hype Cycle:
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 9
In the graphic describing the Garner Hype Cycle:
If you have a friend to ask for help, then your life is made just a bit easier. Most newbies aren’t so lucky - they may not know any
programmers or, if they do, the programmers may be at their job and if the newbie lets on how much they don’t know, they could
get in trouble at work. That leaves the internet!
Step 7: Find some sample apps written in your language and review how they
did things differently
Chances are that, while completing your class/book (from Steps 3 and 4) and your pet project (from Step 5), you will come across
at least one sizable sample project written in your chosen language. Let me offer a bit of advice:
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 10
For the Microsoft community, CodePlex.com is generally the hosting site of choice for “sample” apps and general release apps
alike. For many applications, you can download both a compiled version and the source (often in both C# and Visual Basic). There
are literally hundreds of high quality sample applications to choose from - here are a few that have C# source code included:
Just Be Wary
Just because the code works and has pretty graphics doesn’t mean that it is well-written code...
• How did they create the solution: one project or multiple projects?
o If multiple projects, why?
• How did they handle class design?
o It’s often handy to pick a problem and try to decide how you would’ve designed the OOAD and then compare it to
how the authors did it.
• Do you get any compiler bugs?
o Can you fix them?
• Did they do things the way that your book/class author (from Step 3) showed you?
o What is different?
Don’t be surprised if you have much difficulty answering the above questions - after all, the people who contributed to the sample
app you just downloaded probably have several more years of experience than you do. But that’s okay - you’re well on your way
to becoming a good C# programmer!
Step 8: Finish your book/class and buy another book/class that is specific to
your language of a beginner/intermediate level
You have two choices for continuing your education after you’ve completed your pet project and first C# book/class:
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 11
Personally, at this stage, I think you’re better off going with option #1: getting a C#-specific book/course. I know there are tons of
folks who would disagree - and you might should listen to them! - but I think that, at this point in your career, it is quite difficult to
wrap your head around abstract concepts for months at a time; instead I’ve found that people learn better when they can apply
what they are learning to their language of choice. There are plenty of Software Engineering cum C# books and courses out there
that combine the two as well (“Head First C# Design Patterns” is a great one BTW).
However, I would suggest you pick a next-level book that helps you acquire specific skills that you can use to get a job. Learning
design patterns in C# is great but they won’t open files, make web service calls, do type conversion, or teach you boxing/unboxing.
Right now you should be 1-2 months into your C# career and, in my opinion, you still need to learn more of the basics of C# before
getting into topics like design patterns and OOAD specific topics.
So focus on finding a beginner/intermediate level book that helps you accomplish something that you can get paid to do:
I’m sure that this advice is just “crazy” to some people but look: I’m just one guy who knows C# and knows training. By no means
does that mean I know how to train everyone because not everyone learns the same way or at the same pace. Take my advice
with a grain of salt. Does it make sense to you? Then I hope it helps. If it doesn’t make sense, don’t do it!
Now that you know a little, you can start helping others. One of the most proven ways to learn is by teaching others. You may
think you know how things work but trying to explain a tough topic to someone who knows less than you when you don’t fully
understand the topic is tough for anyone! So help others - look for the newbies and try to guide them along. Make suggestions
that reference books/courses/authors/trainers - people love that stuff. Just follow good forum etiquette!
Now’s the time to move into ASP.NET, Silverlight, WPF, or whatever technology you want to work on. This should be an application
that you take with you on job interviews and that, if it’s good enough, you release as open source software yourself (maybe on
http://codeplex.com). Take your time, find something interesting to work on, and make sure that it highlights things you like. You’d
be surprised at how often employers find job candidates in forums and in the open source community.
• Take it seriously
• Use high quality graphics (spend a few bucks to get them a la carte from a place like http://istockphoto.com/)
• Embed your name on each source code page
• Have friends test it out
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 12
Learn About Usability
Software developers are not renowned for creating great, usable applications by default; we have to work really hard to make our
applications usable by people who didn’t write the code. Two book suggestions:
• Steve Krug’s seminal work, Don’t Make Me Think
• Janice Redish’s Letting Go of the Words
Step 11: Review some open source apps written in your language
This is similar to Step 7 in which you reviewed several sample applications. The difference here is that you want to go with a little
more “upscale” applications - more fully implemented apps and more apps written by a community. Here are a few:
You can’t just be a leech (i.e. someone who takes but provides nothing in return) - now it’s your turn to help out. Contributing to
open source applications has many benefits:
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 13
Also, you want something that you care about. Look - we’re all volunteers in the open source world. If you don’t care about bug
tracking then don’t join a bug tracking application - you’ll end up quitting or getting booted out because you aren’t spending the
time. Also, that road map I mentioned earlier is important - if you see that the application is due to take a turn into a technology
that you don’t care to learn, then don’t join.
I also would like to see that the tasks needed to be performed would interest me. If the task list is, “Provide documentation for
all classes” well, I might skip that one... Sure it needs to be done but I’m not likely to learn as much performing that task as I am
performing a task like, “FTP download routine has a bug - find it and fix it”.
Remember back in Step 9 when I suggested that you start answering other people’s forum questions because it helps you learn?
Well this is similar: writing an article about a difficult topic will force you to spend a good deal of time on areas that you thought
you knew but, upon delving into them, you realize that you’ve only scratched the surface. Pick topics that you like - don’t worry
if the topics have already been covered by others; your goal is to help yourself learn to become a good C# programmer, right? So
write articles that force you to learn and that force you to simplify complex topics.
“Any fool can make things bigger, more complex, and more violent. It takes a touch of
genius-and a lot of courage- to move in the opposite direction”- Albert Einstein
You want to do one thing: make complex topics seem simple to the reader. Why? Because if you can do that, you have shown you
have a deep understanding of the topic. Another great quote is from one of my musical heros:
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 14
Other Reasons to Write Articles
At this point in your career, you likely either have a decent programming job or are eligible to get one. If you want to move up the
career ladder as quickly as possible, you need great communication skills. Just like being a good C# programmer takes practice, be-
ing a good author (or trainer) takes practice. Writing comes naturally to some but is difficult for others. Here’s the truth: develop-
ers who have “the knack” for creating readable documentation, succinct emails, and who can empathize with their audience will
generally move up the career ladder faster than those who can’t. By forcing yourself to write articles, you’ll not only learn things
about C# and programming but you’ll learn how to communicate complex topics quickly and succinctly - and that will pay divi-
dends over your entire career.
Writing articles also gives you a public persona which can be a positive thing (provided that your articles are quality). Potential
employers will do a quick Google search (ahem - or a Bing search) to see what you’ve written, what you’ve posted online, and
generally to see what they can find out about you. Make it easy: provide them with links to your articles in your resume. I’ve seen
people who go so far as to put their forum user names in their resumes so that potential employers can see their participation!
• You can create your own blog and host the articles there (employers *love* this)
• You can find popular blog aggregation sites and post them there
• You might even be able to post them here (just ask us over at LearnItFirst)
• You could publish them in printed magazines.
Personally I favor creating my own blog and posting things there. I’ve always been that way although I’m not sure its the best thing
for you. Check out some of the popular blog sites and see what it takes to have your blog hosted by them. You’ll give up certain
publishing rights yet you’ll be given an audience (and that’s important).
If you’re still wanting to know what it takes to be a good C# programmer, the final bit of advice I can offer is to start your own
business! Whether you want to sell commercial software, have an advertiser-supported ASP.NET website, or do consulting, having
your own business is a great way to get better. It forces you to listen to your users - if you don’t, they won’t pay you. And you don’t
have to start full-time; most developers have side projects in addition to their day job.
So start your own business - if you’ve followed the previous thirteen steps I outlined, you’ve got enough experience to design apps
and to help others. You likely don’t have the experience to be considered a “great” programmer but hopefully that will come with
time for you!
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 15
Now You Have the System
I believe that, if you follow the thirteen steps that I outlined in this article, you will become a good C# programmer. You just can’t
help but become a good programmer when you do things like learn from people with tons of experience (i.e. reading the right
books, taking the right video classes, and reviewing quality developer’s code). It will take you time to become a good C# developer
but, like all things worth doing, you will have a sense of pride once you’ve gone through these steps. And if you do Step 14 - the
one where you create your own business - you might even be one of those people who makes their living from writing their own
software (and that’s a great feeling - trust me).
I wish you luck and I hope that you will share this article with others so that, together, you and I can make someone’s life a little bit
better.
Inevitably everyone wants to know, “What now? I’ve followed the system and I’m doing well - where do I go from here?” Really it’s
just more of a “Rinse and Repeat” mantra: find some books/classes, contribute to more open source projects, develop more pet
projects, read more books, take more classes, etc. You need time and “seasoning” to go from “good” to “great”. The good news is
that even good programmers can write great programs, enjoy programming, and make a great living. In fact, it’s quite easy to just
be a “good programmer” for your whole life. I hope you’ll go on to become a “great programmer” though!
Whew - big question! It certainly takes years of experience - I think everyone can agree on that point. What else though? I think
most people who list these attributes:
• High intelligence
• Training on the right things (i.e. “perfect practice” as opposed to “practice makes perfect”)
• Exposure to many systems and styles
• Passion for learning, developing
• Creativity
• In-depth knowledge of internals
• Ability to make complex topics simple
• Unit testing knowledge
• Knowledge of patterns
• Ability to quickly solve problems
• Ability to accurately scope projects and provide accurate timelines
• Ability to hit deadlines
• Ability to debug quickly and efficiently
There are many more attributes and skills, of course, but these are definitely in the ballpark.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708
How to Become a Good C# Programmer Page 16
TechUrbia: A LearnItFirst Blog
How to Become a
Good C# Programmer
By Scott Whigham
I’ll give you a few books that will allow you to help yourself (look them up in your search engine of choice):
• The Pragmatic Programmer - a must for anyone serious about becoming a great developer
• Code Complete - techniques, design patterns, “life as a programmer”
• Head First Design Patterns - I think most developers have this book!
• The Mythical Man Month: Essays on Software Engineering - You just thought you knew programming...
There are many, many more books worth reading - I’ve only focused on pure programming-related books. There are books that
change your outlook on life, books that motivate you, and inspirational biographies that can make you feel like a small, insignifi-
cant ant - all of which most great developers enjoy. The one thing I’m sure of is that it takes a desire to learn and improve. With-
out that, the rest will not follow.
http://www.techurbia.com/scott-whigham.html
http://twitter.com/ScottWhigham
About LearnItFirst.com: LearnItFirst is a leader in the online video training for the Microsoft community. With
nearly 400 hours of classroom-quality video training online, LearnItFirst has one of the largest online training video libraries on the
web today. LearnItFirst’s online courses are a cross between a “live” instructor-led class and a “how to” book. Customers get the af-
fordability and portability of a book and the “Watch and Learn” of having a live instructor. All courses feature full-screen resolution
videos with high quality audio to ensure the very best possible training experience. LearnItFirst.com LLC was founded in 2004 and
is based in Dallas, Texas.
http://www.learnitfirst.com/
Sales & information: (877) 630-6708