See for yourself: http://cs.leanderisd.org/current/cs1/assignments.html
See for yourself: http://cs.leanderisd.org/current/cs1/assignments.html
Anyway, the "Swing" assignments are there in the sequence for four reasons:
1) To break up the monotony a little bit. 2) To give them more practice copying details accurately. 3) To make them say, "That was kind of cool." 4) To explain why we're not doing "real" programs (a.k.a. GUI) yet. "It takes that much code just to display a blank window on the screen? Guess I can live with the command prompt a while longer."
I've done a lot of pondering about how to teach programming because I tried to learn several times myself, both on my own and in classes.
I bounced off each time, until finally sticking. I always wonder what made it different that last time, and if it applies to others.
===
Have you considered starting with something with less conceptual overhead than java-in-a-shell? There's so much you need to understand before you can even get to writing code that way. You need to learn how to start and navigate a shell on your computer (different on each type, and depends on your system configuration). You need to learn about paths, and java versions, and sdks, and what 'compiling' even means, and the concept of source code vs a binary.
This doesn't seem like much to people in the field, but I remember it being really intimidating.
In contrast, I really love codecademy.org:
You're writing code within seconds. You can access it on any computer and it always works the same way. Which is to say, it works like any other web site. You start seeing things happen right away, and you don't need to understand all the infrastructure initially.
===
I feel like getting people to that first high where they see their code generate output is really important. If you can get them quickly to feeling a little bit of that power that comes from software, that starts the fire, and they'll have more motivation to figure out terminals and paths and verisons and OSes and everything else.
We install the JDK, do a basic DOS primer, type in our first program (in Notepad), and compile and run it on the command line in a single 90-minute period, like the 3rd day of class.
Getting to the "bang" as quickly as possible is HUGELY important.
I do wonder if your most able students might appreciate more opportunity to "play" and be creative, but in all honesty, they just need to stick with it into the Project Euler stuff at the end.
Is this a whole-year course?
Yes, this is a whole year (36 weeks).
The material you're seeing is only the intro material, though. I teach three other courses, including video game development. The faster students are encouraged to skip assignments if they're coding something they already understand, and they get bonus points if they do something creative with an existing assignment.
I've tried to optimize for the normal case: the weak-to-average student. The great ones however, don't need much help from me to learn a ton very quickly.
I'm a bit disappointed to be honest.
I am very glad I already have been coding for years because our teacher and the planned curriculum seems to confuse people even more.
I think I will refer some people to your assignments, if that's okay? Hopefully someone can learn more from this :-)
I've always thought programming classes should start with reading and understanding a program that has some loops, assignments, etc. Maybe a program that draws some shapes or parses/prints some strings. Then have students modify it some. Then afterward, start writing your own stuff from scratch.
I think you remember things much easier if you write them out (and have to make them compile/execute) yourself. If I read some code in a language I haven't encountered before, I find I don't absorb any of the little details of syntax.
Moreover, I think it makes sense to expose learners to the fun of programming early. And to me that means seeing something that you wrote running.
Perhaps you don't write well until you've read a lot - but nobody expects you to write well as a novice.
I have 75 kids in three sections, and I'd have 100 kids in four sections if they'd open up a fourth section. And all of my students except maybe the bottom 5-10% are moving confidently through the material at their own pace.
I'll bet your school either has 1) a lot fewer students 2) a much more hand-picked set of kids, or 3) is leaving a much higher percentage of kids behind, who are either lost or cheating.
My school is a small (~130 per grade), but renowned international school in Shanghai, China. Your first two guesses are very much spot-on, but I'd have to disagree with the third. Those of us that are ahead help out with the one's who are struggling and in the end, I'd like to think that it all works out well.
With that in mind, however, your numbers are indeed more impressive. Because our class size is so small, we're constantly involved in face-to-face interaction with our instructor and with our peers. I doubt our pace would translate into the same success in your school. Is your course designed for the AP exam?