Since I started learning to code formally at university, I always have doubt on programming class. Before enrolling into university, I learned to code through books and the Internet. But the programming classes during my bachelor degree were comprise of 4 hours of programming lecture on theory and 2 hours of programming tutorial per week. The classes were utterly boring especially for the lecture. I do not know how effective is the format for others but I personally felt I learn less than 10% in lecture and 40% in tutorial class. To master the basic of that language, I normally refer to the Internet and have my own exercises. Learning through building a practical application is more rewarding and definitely you learn faster. Being resourceful is a part of problem solving too.
Programming has its root coming from the field of mathematics and engineering, therefore programming class are naturally taught that way (with lecture and tutorial). However, the more you programs the more you realized that programming is a combination of art and logic. Eventhough a same problem can be solved by applying the same algorithm, but there are more creative ways to solve a single problem. A piece of codes often contains programmer's signature just like an author writing a novel. A matured programmer often admires and appreciates the beauty in one's code just like a piece of painting. These 'artsy' aspects of programming shows that one may approach the teaching of programming differently.
Nowadays, learning to code has been never been easier with the expansion of the Internet. We can learn from the examples on the Internet and also MOOC (e.g. Coursera, Codeacademy). But, I strongly believe one need to approach an experienced programmer as mentor to further elevate his/her coding level. Mentor not only teaches techniques and also recommended tools/stack to create a better application. Most importantly, the invalueble experience are passed down. Learning programming is like a craftmanship. The master passes down techniques from generation to generation. Besides, through teaching master learn to understand the subject more and also apprentice can give back some insights to keep master constantly fresh. The relationship is symbiosis. I hope programming classes can be improved to include menthorship as part of the process.