5 free resources for improving your programming skills

Full article

There are two truths about programming that didn’t sink in (for me) for several years:

  1. We have to be life-long learners.
  2. There are a lot of people who will help us along the way. (And eventually, we can return the favor!)

Okay, we don’t have to keep learning. No one’s going to force you or me. The number of small businesses running legacy apps is only going to increase as time goes on, so chances are many of us can just keep on keepin’ on. Programming the next GUI interface using Visual Basic to track IP addresses.

skeleton programming

OTOH, with a little self-motivation, learning has never been easier. The problem is no longer finding a source, but finding a good source. Motivations vary (for profit or magic internet points, building a personal brand or pushing the limits of online education, or just starting conversations), but the opportunities are now as limitless as the Internet itself.

Here are some free resources I’ve found useful in continuing to learn from others, and I hope you do too!


If you’ve ever completed an online course, or attended an online university, then a MOOC is basically that… except way cheaper (free), and with more desks. I recently completed a course that had over 60 thousand students by the final week (people kept enrolling as the course progressed). Truly massive.

They combine the structure of a university class – coursework spread over several weeks or months, deep dive into a given topic, lectures, quizzes, and (somewhat limited) opportunity to interact with the instructor and other students – with the convenience of completing it from your living room on your schedule.


So where do you find them? A search will turn up schools and companies hosting their own, as well as sites that host hundreds of courses from multiple sources.

If you’re just starting out, I’d suggest check out one of these “host” sites, like edX or Coursera. They offer a consistent experience, no matter what subject you’re trying to learn, which makes it easier to find out about new courses, as well as track your progress, submit your work and converse with other participants or the instructor. They’re a one-stop shop. Here’s a fairly complete list of providers.

My favorite one right now is edX. They display ratings from other students, and are providing quality material from partners like Microsoft and the W3C.

Oh, and when you sign up, there is absolutely no obligation to go further than you want. Jump in late and try to catch up, or just skim the material. Leave early if you decide it’s not for you. I imagine they’ll find more ways to monetize this in the future (hosting these has got to be expensive), so find something now that sounds interesting and go for it!

So what’s out there?

I’m not endorsing any of these courses (though the HTML5 one was pretty cool), but here’s a few random ones being offered.  The quality of any individual course can vary considerably based on the instructor, so checking the ratings (when available) from other students could save you a headache (or steer you towards an exceptional course).

At edX, you can Learn HTML5 from the W3C, get an intro to jQuery or Functional Programming (highly rated… I may be taking this next), learn Programming in F#, or go more general with The Beauty and Joy of Computing (CS Principles).

At Coursera, there’s R Programming (being offered every month) and C++ for C Programmers, or have a try at Beginning Game Programming with C# or Functional Programming Principles in Scala.

There are hardware courses too, if you look for them, like Hardware Security, Smartphone Emerging Technologies and Fundamentals of Electrical Engineering Laboratory.

Have you taken any MOOCs you really liked? Hated? Are there sites other than edX or Coursera that you prefer, or some other way you find out about good MOOCs?

Please let me know in the comments – I’d love to check them out!


If you’re looking for more interaction and face-to-face time, and something to do in an evening instead of over several weeks, consider checking out user groups (aka meetups, thanks to meetup.com) in your area.

kinect user group

I had this inexplicable negative impression of them when I first started programming, as if the only people who’d go were those looking to schmooze or sell something. Why would I want to get off work, then go somewhere to simply discuss more work?? But I formed an opinion before I ever tried one out.

When I did start going to one, hosted by a company in my hometown (you may have seen their handiwork), I realized how wrong I was. It’s a chance to hang out, learn something new, discuss things that bore your significant other to tears, and maybe grab a beer afterwards.

You can find tech groups (or groups of any kind) with meetup.com. See what’s available in your area. You may have to increase the radius if you live out in the sticks. When you find one you’d like to try, check out their description and recent meetings. Members can review individual meetings, so you may want to read those too.

Meetups are as varied as the individuals and groups hosting them. Some are straight-up lectures on a given topic. Some focus on code katas (more on those below). Others are very loosely organized, and discussions just happen. Whatever the format, you’ll connect with amazing people in your community. Remember, if they didn’t want to meet you, they wouldn’t bother organizing a meetup to begin with!

Get out, talk to people, and form some new relationships.


When you find someone who is insightful, or who challenges you, or is knowledgeable in your chosen field, or just posts good technical content you’re interested in… you shouldn’t let that site go at a single post!

Following someone’s blog is a great opportunity to step inside the experiences of someone you respect. When you find someone like that, I’d challenge you to do two things:

  • Leave a constructive comment explaining how their post helped you. It takes effort to post a quality post, or to format a bunch of code or diagrams that explains something technical, and one nice comment might make their day.
  • Consider following their blog. If they posted one article that you found interesting, odds are good that they’re going to post more content you’ll find interesting.

I let Feedly collect all those great articles in one place, so I don’t have to remember to visit them individually. This is especially important for those bloggers that only post once or twice a month, that I might forget about otherwise.

Here’s some tutorials to get you started, but it’s fairly straight-forward. Also, if you’re using Android like I am, check out gReader; it integrates nicely with Feedly to give you content on the go. (Neither of these links are referrals… I personally use them both and think they’re great.)

If you’ve never really followed blogs before, and you’re looking for a few good suggestions…

  • FrazzledDad – Jim Holmes discusses software quality, automation and testing
  • Simple Programmer – Jason Sonmez discusses soft skills and staying fit while achieving your programming goals
  • Bonnie Eisenman – She doesn’t post a ton, but she does some really cool things with hardware
  • Trisha Gee – Also writes about software quality, with a focus on Java.
  • ThinkFun – Company blog, they produce focusing on Focus on kids and STEM
  • Dmitry Lyalin – Posts nearly every day, with links to interesting articles from around the web. Great way to find new people to follow.

There’s so much good material, I sometimes get overloaded. I don’t read every article though. Some are very specific, and intended for a certain target audience, and I can just skip them by looking at the title. Others I may open, read the first couple paragraphs, and move on to the next article.

Often though, I read through a post twice and then bookmark it, because it really struck a chord with me personally. Someone shares some experience in just the right way, and I happen to be in just the right mindset, and it changes my current thinking about something. This happens more frequently with authors who are better at letting their personal experiences and opinions bleed through, like Jason Sonmez and Scott Hanselman.

Here’s a list of the blogs I currently follow, if you care to see it. It’s just a data dump, so it’s not very friendly to look at it. Use it as-is, or rename it with an OPML extension to import it. I hope you’ll find at least one blog in there that strikes a chord with you too!


The term comes from the martial arts, where repetition, practice and discipline leads to eventual perfection. Anyone can wave their arms and legs around and occasionally do some damage, but someone who practices aikido or jiu jitsu will be much more in control of their actions.

Likewise, any programmer can churn out code to make a program do something and fulfill a business requirement, but that doesn’t mean they have to be all that thoughtful about it (reflection and RegEx are a deadly duo).


As a traditional kata is a repetition of some martial arts exercise, so a code kata is a repetition of some programming exercise. You can work on them individually, in pairs, or with a small group, completing the same short exercise in a logical, step-by-step manner that forces you to control what you’re creating, instead of just churning out a quick solution.

I’ve worked on katas that could be solved in a single line of C# code, but that’s not the point of the kata. It’s about the journey, not the destination. I wrote a brief intro to code katas last month, which you may find helpful too.

If you’re just starting out, check out cyber-dojo. They’ve collected dozens of katas, and when you choose a language they’ll provide an editor, setup and ready to go. Personally, I find it easier to just use the IDE or environment of my choice, instead of their setup in the browser window, but it’s nice if you don’t have your development machine. Focus on one language and try out a few, or try the same one in multiple languages.

Some meetups, like the AkronCodeClub, dedicate an evening to katas every few months. Everyone pairs up. It can even be a chance for exposure to a language you don’t normally use, in a setting free of deadlines and expectations.

Online Communities

The vast majority of I.T. people will only reference posts, like those found at Stack Overflow, CodeProject, MSDN forums, and the like. Relatively few in the grand scheme will actually participate and contribute.

I assume the reason is two-fold. First, we’re only looking when we have a problem, and once it’s solved, we’re on to the next thing. Second, what in the world could I have to contribute?

It’s a bit scary at first. You’re contributing your time and talent, and in return you may only earn criticism. You’re offering advice and suggestions that you’re fairly certain of, reflecting practices you’ve used for some time, and then someone else posts an answer or comment that makes you realize how terribly wrong you’ve been. Plus, each community has its own rules, and like any group that involves, well… people, it usually takes time to learn the way they do things.


Once you learn the way a site works, and manage to get over the fact that it’s okay to not know everything and that sometimes you’ll be wrong, it can be quite a rush to help people.

I participate regularly on SO, and it’s a great feeling when someone posts a comment letting you know your answer was great, and it did exactly what they needed after they spent days spinning in circles. Even better, when some bit of knowledge you shared gets tens of thousands of views, and continues to help people years after you posted it. This is where learning, and then being able to pay it forward to others, really pays off.

Conversely, I still occasionally find myself putting time into an answer only to remove it later, when a much better answer comes along. Getting it wrong is not something to be ashamed of – it’s an opportunity to learn just like everything else. If anyone gives you flak for trying to help, they probably drive everyone around them nuts anyway.


I hope these help. There may be something here for the veteran, but I imagined these being more useful to someone just getting into the field and wondering how to keep up with everything.

There are countless other resources too. No one can shove all the great material out there into 5 simple categories, but these are a few of my favorites.

How do you keep up with the fast pace? How do you continue to learn (and help others learn)? If there’s anything you recommend, or that you agree (or disagree) with, let me know in the comments below!

Photo credit: Kinect Users Group, by Michael Kappel, cc2.0


Grant Winney

I write when I've got something to share - a personal project, a solution to a difficult problem, or just an idea. We learn by doing and sharing. We've all got something to contribute.

Comments / Reactions