High schoolers and 10 days of programming. How much, how fast?

Started by
8 comments, last by Roof Top Pew Wee 18 years, 11 months ago
Quite suddenly, I've been put in the position to write curriculum for a 10 day Java workshop for high schoolers. I've had considerable experience writing tutorials and teaching people how to program, but I wanted to get the community's view on the subject. So, what kind of topics do you think I should cover? The students are probably 14 - 17 yrs old, and I have 10 classes, each around 70 min. Also, supposedly, the kids have some experience in other languages like C++ or VB. --Vic--
Advertisement
Given their prior experience, I'd say that you'd be best off focusing on what Java does better, ie. networking. I'd maybe take them through opening a socket, reading a web page and displaying it in the console, writing an echo server and client, perhaps making a Hello World servlet. Other ideas might be to do some sort of applet, or show off some very trivial RMI with its implications for executing on mobile phones and the like.
In my first Java course we had a project where we would create a drawing program where you click and drag to draw rectangular objects, with much of the windowing framework already set up for us. We would override the base case Shape with our own Rect, Line, Circle, Star, etc. and override the drawing functions to create our own shapes which would be drawn into that rectangle. Then we would make the whole thing networked so that several client drawing apps could all talk to one server drawing app. It was quite tricky getting all the commands - create shape, resize shape, delete shape - to do the right thing in real time, with clients connecting and disconnecting at arbitrary times, but it got across the most important features of the language (networking, serialization, OOO), and it was fun to play with.
"E-mail is for geeks and pedophiles." -Cruel Intentions
OOP would be my bet. VB people might not be familiar with classes for everything. Show them how to use and design classes. Strengths, weaknesses and compare with known languages (VC++ and VB)

I say OOP for the 1st 5 days, GUIs/swing for 3, networking, etc for 2.
make a small project they slowly build for 10 days to give them a feeling of accomplishment at the end.

just my thoughts. feel free to ignore. [smile]

---------------Magic is real, unless declared integer.- the collected sayings of Wiz Zumwalt
I think that OOP is definitely what I'm going to focus on. Graphics is also a good subject, and I think I may get into 2D stuff. I guess I should have mentioned that if possible, the tutorials should have a gaming spin on them.

Surprisingly enough, I haven't had enough experience with network stuff to write tutorials on it. I have a week to do this stuff, so I don't have enough time to learn it either (like I said, it's quite sudden).

--Vic--
Definitely start with OOP. And talk about the object model, while you're at it. If they have C++ experience specifically (good experience, with the standard library and all - although I'd be surprised if many 14-17 yo students had that these days), they will appreciate some language comparisons - don't be biased ;), but do illustrate what Java arrays do that C++ arrays wont, and similarly java.util.Vector vs. std::vector for example - and also show what they cost at runtime - i.e. what the language "creates for you".
Take into consideration that it's just a 10 day workshop - you're only introducing them to java, and preparing them for their first year of university (or giving them an insight into what programming is all about).

Since university doesn't even touch on networking in java until the 3rd year, I would have to agree with yapposai. I would try to make it as fun as possible, and a small game does sound like a good idea.

But in 10 days cramming their heads full of standards, language comparisons, class structure, memory management etc? Bleh how boring. Keep in mind that some of these peeps are only 14 years old.

Good programming practices can be left for when they go to university or study outside of school.
You may have to design it with contingencies -- if too many have too little previous programming experience, you will be doing programming 101.

Java has enough idiocyncracies to throw off someone familiar with another language
already, and significant lesson time will be spent covering basic language features.

If you have a 'big project' -- one that actually does something 'real', you should have the bulk of it already done and have the student finish one module of it
to make it work.
The first day could be just an intro day where you make sure that they know enoug hof the basics and get to know how to make java programs.

Then, get them to make a pong game.
Make a basic framework that does a lot of initialisation and has a lot of almost empty clases. Each lesson they'll do one bit, like drawing stuff, then animating stuff, then using the mouse coords to move a paddle. Then draw the bricks fancier, and add high-scores.
Then it's on to the networked 2-player version...
Write classes that have just a little in them, but have enough to make sure that it's easier for them to use them than to fight your design.
I think that would make it fun enough to have them eager to learn more.
Of course if you have 10 days then you could do two of these things.

For the last few days you could introduce them to some other large project that already does lots of neat things, and get them to each add different bits to improve it.

Well, I'm sure you'll come up with something.
Oh, and I hope you have some help because you can't keep an eye on everyone's progress by yourself very easily. You either all end up going the same speed as the slowest person, or some people get left behind.

Did I mention that I was once in a very similiar position to you? I taught a class of about 6 some basic pascal programming. Sometimes people surprise you. Other times they only fustrate you.
"In order to understand recursion, you must first understand recursion."
My website dedicated to sorting algorithms
Great replies from everyone. I really like the project at the end idea, and I'm considering even dedicating 2 or 3 sessions purely to that subject. Here are some subjects I've thought up for what to cover:

Projects - Programming environment (prob use Dr. Java, or maybe Eclipse although that's a little "heavier"), creating and saving new projects, compiling.

Basic IO - Std In/Out, and why console apps are important when we're making games.

Variables - types, creating variables, operators

Conditionals/Program Flow - If, While, For

Functions - Return types, naming conventions, Arguments, scope

Objects - Why use them, Reference vs. Value, Class syntax, classes and instances, Assignment and equality, Inheritance, Polymorphism

Arrays - Declaring and using, other options (ArrayList, Vector)

Window - Creating and inheriting, Destroying, Events

2D Gfx - Points, Lines, Shapes, Images

And of course, at the end of it all, a game project. It might seem like a lot of subjects, but again, I've been told the students have had either experience or another workshop with C++ or VB, so some of the stuff should fly by pretty quick, like conditionals, variables, functions, and maybe even some of the class stuff.

Any other thoughts? This is really helpful.

Edit: Oh, and I'll prob write some basic project that initializes a window, takes keyboard input, and sets up a basic game loop.

--Vic--

This topic is closed to new replies.

Advertisement