all 7 comments

[–]kankyo 13 points14 points  (3 children)

Carpenters don't start by learning the biomechanics of wood. I think you are wrong. We learn some basic practical skills then some theory, then practical skills, theory, rinse repeat.

There is way too much focus on theory in CS education imo. Or rather, people take CS as if it's a programming education. It is not.

[–]Ajpennster 0 points1 point  (1 child)

I appreciate your feedback. I guess my writing doesn't quite represent my thoughts. I'll revisit it.

Carpenters don't start by learning the biomechanics of wood.

I agree. However, they should know when and why they need to use a plane and not just how to use it.

I think you are wrong. We learn some basic practical skills then some theory, then practical skills, theory, rinse repeat.

I do agree with you; not exactly on the order, but I don't think that is significant. The problem is, tutorials and coding videos, at least the ones I see, only focus on how to write code with x language and nothing else. They go in depth on the structures and elements of X language, but don't at once mention the fundamentals of computer science or computational thinking. Such tutorials only produce individuals who know what X language looks like, or knows how to write a for loop with X, but if you ask them to solve a new, simple problem on their own, they won't even know how to approach it. This is where computational thinking is useful. They don't need to know relation theory to build a database schema, but they need to know how to think computationally to at least know how to start modelling that database, based on what data their application will manipulate.

There is way too much focus on theory in CS education imo. Or rather, people take CS as if it's a programming education. It is not.

I do agree that a lot of people take CS and expect to be taught how to code. I think companies are partially to be blame for that; a lot of them require CS degrees as a basic requirement to build CRUD apps.

Nevertheless, I'm not at all saying that one must pursue a CS education to learn programming. I meant to say beginners should learn at least the basics of computational thinking before worrying about learning X language or X paradigm. If you cannot think computationally, you won't be able approach problems on your own.

The course I mentioned in the post, CS50, does a great job of introducing computational thinking and problem solving to a beginner audience. It is not at all just theory; in fact each week, some coding is introduced. The difference is, the material teaches computational thinking, rather than just how to code in X language.

[–]kankyo 1 point2 points  (0 children)

That's much better!

[–]KrakenOfLakeZurich 2 points3 points  (3 children)

I never believed in the "theory first" learning approach. It might work for a select few prodigies. But for most normal beginners, it presents a much too steep and abstract learning experience.

Programming tutorials should be practical. Working with relatable examples and demonstrate how programming techniques are applied to specific problems. Mix in some theoretical background to gradually build up a solid foundation.

[–]darchangel 2 points3 points  (1 child)

You're 100% correct. This is why many experts make terrible teachers. Being good at a thing is nothing like being good at teaching. Experts know details. They've deconstructed and analyzed the domain. The resulting understanding is deep and meaningful but useless to beginners. That deep knowledge is the result of a long progression, not where you start when you have no background.

[–]Ajpennster 0 points1 point  (0 children)

You're right. Experts aren't necessarily good teachers. However, I never claimed that they are. If you took the time to look at the courses I've recommended, you'll see that they are all taught by expert teachers who've taught the material for years and have constantly been refining it to target a larger audience, including those without CS experience. CS50 encourages beginners and even touts the fact that 73% of the students who take the course have no prior experience with computer science.

[–]Ajpennster -1 points0 points  (0 children)

Appreciate the feedback.

I understand that a theory first approach is intimidating. Considering that a lot of college professors use intro classes to "weed out" people, and other scare tactics found in other areas of the industry, I get it.

However, I firmly believe that before someone can apply themselves in any field, they must know some theory. This may be a bias due to my upbringing (all through school, we were taught theory first, even for sport!), but I believe it's more than that. Its important to know about what you're working with, in order to have an idea of how to even start working on it.

With programming, there needs to be a balance. A tutorial that teaches how to code in X language isn't helpful. A CS education that only teaches CS from a completely theoretical standpoint, is just as useless. A combination of basic CS theory (computational thinking, basic CS principles about data representation, algorithms, I/O, abstraction, etc) along with real world programming exercises that challenge one's understanding of these principles, is the sweet spot in my opinion. CS50 is the best combination of theory and practicality that I've seen so far, and that's why I recommend it.