I’m often asked how to become an expert programmer. Here are the questions the last person sent me and my answers. (And plugs for a few of my books that make great stocking stuffers!)
- What’s the best way to acquire and retain programming knowledge?
- How does one quickly and effectively get through all the programming books out there?
- How did you come to know and later write about multiple programming languages?
- It’s all so interesting, but can be overwhelming if one does not know what they are doing and how to accomplish programming goals.
I’m a strong believer in learning programming by doing it. I would get a book at the level you prefer. My book Stephens’ C# Programming with Visual Studio 2010 24-Hour Trainer (and my Visual Basic book Stephens’ Visual Basic Programming 24-Hour Trainer) is a beginner’s level book. It starts from scratch assuming you have no previous programming experience and introduces programming slowly and painlessly. There has been a new release of Visual Studio since those books were written, but the new features Microsoft added are very advanced and wouldn’t be covered in those books anyway, so you can start with them without missing out on anything.
If you’ve done some programming before, you may want to use a bigger book such as my C# 5.0 Programmer’s Reference. It covers a lot more material in much greater depth.
Don’t overreach initially, though. It’s better to start slow and easy so you don’t get discouraged.
Work through whichever book you pick. Experiment with as many of the examples as you can. Type them in and modify them to see what you can make them do. This is a great way to get practice while reinforcing what you learn from the book.
Another method of learning is to join a few discussion groups. When someone posts a question, see if you can answer it. Even if someone beats you to it, try to work out a solution (even if you don’t post it). This is a good way to see what other people are doing and what they find confusing. These things also usually focus on more advanced topics and niche topics that may not be covered in books.
For example, very few books say much about printing because it’s not core to the language, so it’s hard to fit in a book. But it is an important task and it’s pretty interesting, so you may find questions about it.
Finally, you can browse web sites looking for interesting examples. My C# Helper web site has more than 1,000 examples. (Unfortunately WordPress mangled a bunch of them. I’m working through them all and rewriting them as I go, but it’s taking a lot of time. The Index page lists the ones I’ve redone so far.)
I figure it takes about a year of steady plugging away to get really good at a new programming language, so you have to take it slow and steady.
You probably don’t have to go through them all. Is you start with an intro-level book, you’ll definitely only need one of those.
Then you can get something bigger that’s still general. For example, my C# 5.0 Programmer’s Reference, an O’Reilly book, or a “Professional” series book. (My Visual Basic book at this level is Visual Basic 2010 Programmer’s Reference.) That will fill in most of the gaps left by the beginner’s book.
After that you may want to look at a few other books of that same level to see if any have extra chapters about something particularly interesting. For example, some books do a better job with asynchronous programming. Others might do better with databases. Check the tables of contents carefully because there’s a lot of overlap among those books so you’re only looking for a few new chapters. If you get 2 or 3 new chapters out of one of those books, you’ve probably gotten your money’s worth. (You may want to go through the whole book anyway, just to cement what you already know.)
If you take a class, it can probably get you through the beginner’s book level and halfway through a more advanced book in one or two courses.
You can also start poking at harder topics online. Lots of web sites have examples and tutorials. Microsoft also has a huge amount of material. Web sites are rarely as well-organized as books, so they can be harder to figure out, but all of the information is out there somewhere. Once you’ve advanced to an intermediate level, it becomes a lot easier to figure out the fragmentary web sites.
Finally, when you start to realize you have particular interests, you can get books and look for web pages that focus on specific topics. For example, WPF, XAML, database, algorithms, graphics, 3-D graphics, cryptography, cloud, tablet, phone, touch, etc. It’s a huge list these days.
I have a few books in those sorts of categories, including:
- Essential Algorithms: A Practical Approach to Computer Algorithms
- Beginning Database Design Solutions
- MCSD Certification Toolkit (Exam 70-483): Programming in C#
- WPF Programmer’s Reference
Above all and throughout everything, practice, practice, practice.
One day at a time 😉
I learned Pascal, assembly, and FORTRAN in school. I moved to GTE Laboratories and used FORTRAN and then later C++ (VAX and Unix) there. Later while using C++, my brother recommended that I try Visual Basic (VB) and it was amazingly easy and productive so I switched to that. Most of Microsoft Office uses Visual Basic for Applications (VBA) as its macro language, so I picked that up.
Then C# came out. The development environment is the same as the one used by Visual Basic and the language is very similar to C++, so it was easy to start using that, too. Java is also very similar to C++ and C#, so I gave that a try. Visual Studio used to support J++, Microsoft’s version of Java, although Microsoft eventually dropped J++.
At one point, I was writing magazine columns in VB, VBA, and Java all at the same time. It was pretty confusing to switch back and forth.
I’ve also dabbled in a few other niche languages like ReGIS (a graphics language) and PostScript (it’s not just a file format, it’s actually a language), but haven’t done too much with them.
Right now the book market for C# is stronger than the market for Visual Basic (I don’t know why) so that’s what I’m mostly doing.
It’s all so interesting, but can be overwhelming if one does not know what they are doing and how to accomplish programming goals.
You’re absolutely right about that! Try not to think about the whole picture too much. If you take it one day at a time, it’s not too bad. Depending on how much time you have, you can probably go through a beginner’s book in a couple of weeks. Then if you get a bigger book and keep with it, you can get a decent education in a language in a few months and probably gain mastery within 6 months or a year.
Good luck! If you have other questions, about the book, C#, or whatever, feel free to let me know.