Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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

This year we're being taught JavaScript, later moving on to jQuery and in the final part of the school year we're covering Java GUI.

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?

share|improve this question
By "cycles" do you mean loops? –  compman Nov 9 '11 at 22:03
Why the hell is UML the first thing on that list? –  missingno Nov 9 '11 at 23:34
Hi Gabriele, I'm sorry your question was migrated here unnecessarily, but open-ended hypothetical discussions based off what amounts to a very long rant about your school isn't a good fit for Stack Exchange: we're looking for questions that ask about practical problems we can actually help solve. –  user8 Nov 10 '11 at 0:39
add comment

migrated from stackoverflow.com Nov 8 '11 at 23:32

This question came from our site for professional and enthusiast programmers.

closed as not constructive by Mark Trapp Nov 10 '11 at 0:37

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

2 Answers

It might be more engaging if the lessons were taught using more interesting subject matter. Games would probably be popular. I think it'd be neat if assignments were to use the things learned in class to make a game character do things. There could be different levels that get progressively harder with each class. The first level might be something like a character going through an obstacle course and the student has to use conditionals to avoid them. Second level might be the same thing, but now you have to go around the obstacle course x times and stop or else the character is disqualified from the race. Another level could be an introduction to classes and inheritance where the student can customize their own character to wear different clothes, have different base stats, override the default character's Jump() method to launch them 100 ft into the air, extend the class by adding special abilities, etc. A lesson in polymorphism, arrays, and loops again could be taking multiple characters that have been derived from the default character class and have them run one after the other. Making class assignments into a game could present a fun challenge. Might kick it up if the teacher makes it a little bit of a competition too by giving extra credit or recognition to whoever's character can complete the obstacle course in the fastest time.

share|improve this answer
That's a very nice idea, thanks. –  Gabriele Cirulli Nov 9 '11 at 0:19
add comment

The programming classes I found most helpful generally went through iterations of the same steps:

  1. Learn a concept or problem (iteration, sorting, organizing data, interface design, etc.)
  2. Learn how to approach the concept in the language.
  3. Solve a real problem in the language using what was learned in steps 1 and 2.

After a series of individual assignments, students would form groups to work on a project requiring them to put all of it together. These projects were fairly open-ended, with just a core set of requirements that had to be met, and creativity was encouraged. Lectures and labwork were often combined so we could use things as we learned them.

It sounds like you have already recognized it, but students are generally more interested and involved when there's room for creativity, and emphasis on applying concepts to various situations rather than memorizing and repeating. The problem is that it takes a very knowledgeable instructor to deal with all of the different ways students might approach the same problem, and be able to explain to them why one might be better than another. That's not always a reality, depending on how the school is structured and what subjects the same instructor might be asked to cover.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.