Dal's Programming Course

About This Course

Developed by Dal Brandon
January 2005

This programming course is designed to take someone who knows the basics of C programming and help them progress to be comfortable with C++, Object Oriented Techniques, and Windows programming. Along the way, the programmer will be taught how to program in a professional manner.

Background

College programming courses tend to focus on the basics of programming -- after all, you have to start somewhere. However, there is a lot more to programming than getting something to work. Real software products have to be written in such a way as to allow many different people to interact with the code. Also, for truely commerical products, the code has to be bullet proof -- as the marketplace is becoming less and less tolerant of bugs in software.

College professors are experts on computer theory. And they may be experts in real-world programming. What happens to students, however, is that their projects are graded on the end result: whether it works or not. Students are not graded on the actual implementation. To make matters worse, students are graded by teacher assistants, who typically have little experience in industry -- and have no regard for how code is implemented.

By implementation, we mean the the overall design, the coding style, the robustness, the maintainability, the accompanying documentation and so forth. In the industry, getting something to work is elementary. These other attributes are what contributes to success and teamwork. Teamwork is the new reality of programming -- there is way too much to do to rely on autonomous programmers.

A word or two on style: all good programmers have a style or convention that they follow. Most professional programmers develop their style over many years of experience. Programming style is akin to a religious issue. Attempts to force a style on programmers is almost always met with vigorous resistance. However, successful programming teams adopt a style that is agreed to by the group (or at least, by the senior members of the group). Style and convention are an important part of team work, because modern languages provide way too much flexibility for everyone to go at it alone.

This course presents a style -- in fact, a lot of the course is about my style. Although I do not submit that my style is the best there is, I think it is important for beginning programmers to begin with a style. Later, as a programmer gains experience, or the environment changes, they are free to diverge from what is presented. The idea is to start with a good foundation.

Another reason for teaching my style is that I want to train programmers with whom I can work.

How To Use This Course

This course does not try to be comprehensive. There is already very much material on how to program. In particular, you should buy "C++ Programming Language (Third Edition)" by Stroustrup. Any serious C++ programmer has this book. Start reading it as you work through this course.

There are two aspects to this course. The first aspect is online reading material that presents many of my ideas, styles, and conventions. The second aspect is a series of lessons that lead you from writing a very basic program to enabling you to be comfortable in programming in windows. You should begin by reading the Course Material, and other docs that I have listed on the front page. Then start with Lesson 01.

The lessons are designed to build on one another. These are very "hands on". The lessons ask you to do various programming tasks. These tasks will require you search and read the Windows documentation. Each task should be completed in full before you begin the next task. A estimated time for each task is given. Normally a task can be completed much faster than the stated time. But, as any programmer will tell you, there is always the possibility of getting stuck on some small issue or bug. If you find yourself stuck for more than the stated time, you should consider asking a knowledgeable human on how to proceed.

At the beginning of each lesson, the completed code for the previous lesson can be downloaded. This enables you to start the lesson at the point that I assume you are at. This also enables you to see how I would have accomplished the previous lesson. Try not to "look ahead" to see how a lesson is done, since a lot of learning is accomplished in the struggle to properly finish a lesson. However, if you are really stuck, be my guest.

After, say three or four lessons, your code and mine will diverge to the point that you should begin a new lesson by downloading my code. Another approach, is to download my code for the next lesson after you complete one, and compare results. You can then update your code to keep in sync with me.

Good Luck.