New Year's Resolutions for Programmers

Happy New Year! I hope you had a good time celebrating 2005. Now it's time
to get back to business. But before you do, take some more time for
programming. Whatever your level, we've got some suggestions for you to try
over the next twelve months.

Beginner

Understand something about C or C++ that you didn't before. Find
something you use a lot (such as the main function, or "using namespace
std;"), but don't fully understand. For instance, why does main() return an
int? What are the two arguments to main(), and when do you use them?

Spend some time reading the comp.lang.c FAQ. You
won't understand all of it, but pick out a few sections that you feel
uncomfortable with and learn the real answers. Reading the answers to other
people's questions might seem silly, but a lot of the time, they're questions
you might not have thought to ask (yet).

Advanced

Learn a new language in a different programming style. C is great, but
it's only an imperative language. C++ is great, but it only adds an
understanding of object oriented programming to your arsenal of techniques.
Why not branch out and learn Scheme, a functional
programming language? While you might not use it all the time, it will change
the way you think about programming. It's also popular in the AI community
and taught to all incoming CS majors at the Massachusetts Institute of
Technology.

For something a bit more practical, try Ruby, an
appealing language for its structure (fully object oriented) and ease of use
(it has a lot of the same syntactic sugar as Perl). Mr. Neighborly has a good Ruby tutorial.

Do some research. Coding is great, but there's as lot that you can
code that isn't just fun -- it's new. With sites like Google Scholar, cutting edge research
questions are available to everyone. Interested in performance programming?
Just last year, a grad student at Harvard wrote his dissertation on tuning
database parameters using machine learning techniques. Interested in
music? Why not try writing a program that can learn genres or composers and
then identify their pieces? A hidden Markov model is one option; what else
can you do?

Finally, I have a New Year's resolution of my own: to regularly add new
content to Cprogramming.com. I've got several new articles and tutorials that
will be coming out the pipe, so check back soon!