# An Argument Against Tutorials

It seems like every time someone requests help, they are looking for a tutorial on the subject. Are tutorials really the solution to their problems? Do they really learn what they need to know through tutorials? Are tutorials appropriate for beginners?

Often enough you will find yourself in a situation where you need to use something that you've never encountered before. More often than not, when someone requests my help with such situations, they are looking for a tutorial on the subject. The problem with tutorials is that they are incomplete. They do not cover the material to a sufficient extend to be considered a replacement for documentation. Tutorials also have a relatively short TTD (Time to Death), as APIs usually change faster than the tutorials can. This makes tutorials a relatively poor choice when you need to garner experience in an unfamiliar situation.

Tutorials are usually a hodgepodge collection of partially correct information, deceptive simplifications, and relaxed correctness. The idea of a tutorial is to quickly demonstrate a concept such that the concerned parties can use the information. However, due to the generally terse and incomplete information presented, one who uses such a tutorial cannot effectively utilize the information without turning to other resources first. A good example is that of the standard containers. Most tutorials will not tell you about the performance constraints placed upon the various containers; hence you do not know when it would be best to apply each. When should you apply a list vs. a vector? If all your tutorial has shown is how to interact with the interface (about 90% of the ones I've seen), then you won't know when it would be appropriate to use a list vs. a vector. A further problem crops up when you start looking at APIs like OpenGL. The majority of OpenGL tutorials will start by teaching you the glVertex* functions, and their friends. This is fundamentally flawed as those functions are NOT what you should use. You should be using the glPointer* functions, and should be taught those first. People who learn the glVertex* functions tend to take longer in adopting the glPointer* functions, and often find other APIs like Direct3D (which has no immediate mode functions) hard to learn, even though it is an extremely simple API.

The people who most commonly are looking for tutorials aren't professionals. They aren't people with experience. They are the beginners, those looking for a quick and easy solution. Since the tutorials appear to be the fastest way to get from point A to point B. However, they do not learn the theory behind what they are doing, hence they cannot appropriately apply what they "learn" from the tutorial to different problems that can be solved the same way. This industry isn't one of innovation, but one of adaptation. When you learn from a tutorial you cannot adapt to new situations, because the tutorial cannot adequately prepare you for those situations. A common example of this is a tutorial demonstrating a matrix class. How often have I seen a simple matrix shown, with all the usual operations, but none of the theory behind the mathematics involved. Oh yes, you'll see a brief mention that matrix multiplication is not commutative (This is technically false. A true statement would be: "Matrix multiplication is not commutative in the general case.") Even when they do include the mathematics, is usually on the most basic of concepts. This doesn't help the person who ends up needing to calculate the determinant of a matrix.

This is not to say that there aren't good tutorials out there, but by the very nature of a tutorial, it is extremely limited in its focus. As such a tutorial cannot teach one who does not have experience. The only thing that will be produced from a union is a copy-and-paste coder, which we already see all too often on these forums. A tutorial in the right hands can point someone with the appropriate experience in the correct direction towards solving their problem. Furthermore, someone with the appropriate experience will have the ability to take the solutions laid forth in the tutorial and turn them into solutions for new problems.

Often enough you will find yourself in a situation where you need to use something that you've never encountered before. More often than not, when someone requests my help with such situations, they are looking for a tutorial on the subject. The problem with tutorials is that they are incomplete. They do not cover the material to a sufficient extend to be considered a replacement for documentation. Tutorials also have a relatively short TTD (Time to Death), as APIs usually change faster than the tutorials can. This makes tutorials a relatively poor choice when you need to garner experience in an unfamiliar situation.

Tutorials are usually a hodgepodge collection of partially correct information, deceptive simplifications, and relaxed correctness. The idea of a tutorial is to quickly demonstrate a concept such that the concerned parties can use the information. However, due to the generally terse and incomplete information presented, one who uses such a tutorial cannot effectively utilize the information without turning to other resources first. A good example is that of the standard containers. Most tutorials will not tell you about the performance constraints placed upon the various containers; hence you do not know when it would be best to apply each. When should you apply a list vs. a vector? If all your tutorial has shown is how to interact with the interface (about 90% of the ones I've seen), then you won't know when it would be appropriate to use a list vs. a vector. A further problem crops up when you start looking at APIs like OpenGL. The majority of OpenGL tutorials will start by teaching you the glVertex* functions, and their friends. This is fundamentally flawed as those functions are NOT what you should use. You should be using the glPointer* functions, and should be taught those first. People who learn the glVertex* functions tend to take longer in adopting the glPointer* functions, and often find other APIs like Direct3D (which has no immediate mode functions) hard to learn, even though it is an extremely simple API.

The people who most commonly are looking for tutorials aren't professionals. They aren't people with experience. They are the beginners, those looking for a quick and easy solution. Since the tutorials appear to be the fastest way to get from point A to point B. However, they do not learn the theory behind what they are doing, hence they cannot appropriately apply what they "learn" from the tutorial to different problems that can be solved the same way. This industry isn't one of innovation, but one of adaptation. When you learn from a tutorial you cannot adapt to new situations, because the tutorial cannot adequately prepare you for those situations. A common example of this is a tutorial demonstrating a matrix class. How often have I seen a simple matrix shown, with all the usual operations, but none of the theory behind the mathematics involved. Oh yes, you'll see a brief mention that matrix multiplication is not commutative (This is technically false. A true statement would be: "Matrix multiplication is not commutative in the general case.") Even when they do include the mathematics, is usually on the most basic of concepts. This doesn't help the person who ends up needing to calculate the determinant of a matrix.

This is not to say that there aren't good tutorials out there, but by the very nature of a tutorial, it is extremely limited in its focus. As such a tutorial cannot teach one who does not have experience. The only thing that will be produced from a union is a copy-and-paste coder, which we already see all too often on these forums. A tutorial in the right hands can point someone with the appropriate experience in the correct direction towards solving their problem. Furthermore, someone with the appropriate experience will have the ability to take the solutions laid forth in the tutorial and turn them into solutions for new problems.

0

Sign in to follow this

Followers
0

## 9 Comments

## Recommended Comments

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account## Sign in

Already have an account? Sign in here.

Sign In Now