I am a student at an Italian "technical institute" where we're taught industrial subjects, with a degree of flexibility over the topics covered in class.
Our school is a mix between college and high school and its rigid structure does not allow us to decide on which classes we'd like to take but instead we're forced to take the "full pack" which includes IT, Electronics and Systems (which consists in the study of low-level hardware and software infrastructures), even when we might not be interested in one of them but just in the other two.
This question is about the way we're taught IT.
I'd like to make it clear that I come from a background of self-taught programming, so I already know about most of the topics discussed in class.
In our first year (the one before the current) we've been taught the Java programming language, in particular:
- UML diagrams
- Basic I/O
- If statements, cycles, switches, etc.
- Classes, private/public class attributes and methods
- OOP techniques such as encapsulation, polymorphism and inheritance
- How to create, write and read files
We have around six hours a week of IT class, which last 52 minutes each. Half of these hours are spent covering theory in the classroom, the other half in our lab trying to apply the theory by executing exercises on a PC (not building actual programs which could come up in a real-life situation, just exercises on specific parts of what we've been taught in theory).
The teaching process is very schematic, and does not focus on the application but rather on the theory of the subject. We're not taught how to search for solutions on our own, but rather we're spoon-fed the "pieces of the puzzle" and expected to repeat what we've been taught like monkeys, without paying much attention to whether we actually know what we're talking about or we're just repeating blindly what has been written on the blackboard a few lessons earlier.
Tests are mainly carried through in two ways:
- We have tests on paper, which often require us to write the code of one or more complete programs or parts of them entirely on paper, and more rarely to answer quiz-like questions. These tests usually last 102 minutes (two hours of 52 minutes) and we need to complete them and hand them in before or when the time ends.
- We're also tested in the lab, where we're required to write the code of (most often) two exercises using an editor, with the ability to test it but without the ability to search for something on the internet in the case that we need to clear anything up. Again, we're usually given 102 minutes and the handing-in rules are basically the same.
Our marks work on a scale of 1 to 10, 1 being the "unprepared" mark (the student basically has no clue about the topic in question), 6 which is the threshold of sufficiency, and 10, which is given to the students who know what they're doing, are able to tweak what they've been taught to fit their own needs, have a knowledge of a subject based more on logic than on memory and whose knowledge spans out even further than what's explained in class.
The situation in our class is problematic. Most of my classmates can't keep up with the subject and are not interested in what they're being taught because lessons are very one-sided , technical and theoretical: our teacher is not a bad teacher, but his teaching methods are just based on drawing a few schemes on the blackboard, telling us the names of properties, methods, etc., without telling us much about the reasoning which lies behind them, nor the reasons why they exist or are used (which, in my opinion, are the most important things to know). We're also very rarely told about a practical use we can make of what we learn and the main focus seems to be on what we learn and not why we're taught it.
The students perform very poorly in tests, and on average the only positive marks are received by the few students who don't really study, but rather are involved with the subject in their personal life (I believe myself to be the only one in my class) or who study a lot (of which there are very few examples). The rest of the students don't have a clue about what they've been taught and would not be able to build anything from scratch without any help if ever required to.
I personally think that our school system is very flawed right now (and the results achieved by most of the pupils seem to prove it). The students are not motivated to work on or learn anything new by themselves because they find no passion in what they're doing, have no concept of programming for fun or personal enjoyment and act as if they're unwillingly imposed the subject just as they would with Mathematics or other theoretical subjects.
They're also not being challenged to think with their own head or come up with and bring their own ideas to reality, and instead they're spoon-fed the concepts and the exercises to do for the next lesson (which are by themselves quite boring and uninteresting).
They also usually end up not paying attention to lessons until a test is scheduled, which is when they begin studying (again learning all by memory, without much thought being put into it), usually on the last day before the test. Some of them actually just don't study and prefer to cheat the tests directly.
What could be a better way to spark motivation and interest in the students and at the same time provide them with the basic notions of something and introducing them to new and interesting challenges break out of the usual scheme "Do X, complete Y" and push them to come up with their own ideas and build (or seek for) solutions on their own?