The main difficulty with taking a class in a area that is already understood (for varying degrees of understanding) is that there are numerous bad habits that have to be unlearned before it is possible to move forward.

Following the instructions of a particular project or assignment should not be a question if the person assigning them is a high school teacher or project manager at a company. It is not expected for these people to have a deep understanding and grasp of the internals of a complier or low level of a computer. However, it is expected that they are able to look at the output and algorithm of a program and determine if it is doing the correct thing.

If the purpose of the program was to demonstrate knowledge of the proper use of variables and constants and that was not correctly done, it is just as bad if the program is to use a particular method for analyzing the input and producing the result. Sure, you may come up with one that is faster, more efficient, and right 95% of the time - but you didn't follow the instructions (yes, I have gotten my wrist slapped in a real job for this).

Similar situations arise in foreign languages also. There are many people who have a familiarity with a language (say you lived in France for the first 5 years of your life) and then later take an academic course on the language. The individual may have a firmer intuitive grasp on the language than the instructor, but that is not the point. It is the instructor's job to lead the student upon a particular course of study that has been set down to reach a particular end point.

This is the difference between a formal class and independent study - and the exact reason that they are graded differently. Independent study is often restricted to those who have demonstrated that they have cast off the bad habits of old and are willing and able to take advice from a guide rather than being led by the hand and learning the proper way to walk.