Creating a C++ class for Highschoolers

So I just got hired to become a highschool teacher at my local highschool.

I have to make 5 classes and I made the other programming classes with my old notes and exams from those classes I took in college.

Now I am on C++ and I don't know where I should start.

First all the students use Chromebooks so everything has to be online.

They also gave me no textbooks for anything but I can request one.

Do you guys know any courses I could buy and use for my class? I remember one of my old professors used an online thing where it had all his exams, homeworks, and slides online.

Otherwise I am just writing all these slides from scratch. (Which isn't fun)
I don't know of any online course material to buy, but I just want to say there's this website called piazza.com, it acts as a private discussion forum where students can ask questions to the teacher/professor/other students instead of having to go to their office hours or whatever. </salespitch> I think you can have a syllabus that you can link homeworks in, I remember my professor used a wikia.

So the students are learning C++? Is this class a requirement that students must take or do people choose to sign up for this ( like theater or art?). C++ can definitely be a daunting first language compare to something like Python.
Last edited on
Does it have to be a traditional class? My high school CS professor just gave us goals to accomplish and let us spend our time researching things for ourselves. In effect he taught us the important skill of how to research and learn new things about programming from the internet.

I think if you point people to online resources and just walk around and help them during class, you could have the entire class be project/goal driven. I'm no educator though, so I don't know how viable that is. I just know it worked well for me and my class.

Some need-to-know resources:
http://ideone.com/
http://coliru.stacked-crooked.com/
http://www.cplusplus.com/reference/
http://en.cppreference.com/w/cpp
http://stackoverflow.com/

I'm not sure if there are any online environments where you can write graphical C++ code, but if you find one you should use it.
Last edited on
If you have materials for several other programming courses then why not just adapt them for C++?

Another thought: The AP Computer Science test used to be in C++. If you can find the course description then you might use it as a model. Warning: I looked at this several years ago and found that the AP course was very broad but paper-thin. Students got a broad based survey of computer science but so little detail that I suspect they'd have to start at the beginning of the college track anyway.
C++ is a difficult one to do this with. I used python and pygame in my High School experiment.

Keep it as dumb as you can. High School != university. THe project should be as unambitious as you can handle.

The more straight-forward the code, the better. Your goal should be teaching the kids to make stuff happen, not necessarily get them to understand setting up the compiler and #including all the right files. They don't need to care about the difference between vector and deque and list etc. Give them a class they can modify (very very very very very simple!) and store everything using std::string (forget char*s) and std::vector, if necessary. Oh, and std::map if necessary. Don't care how it works. Just care that they can use it (basic use!).

Make each thing you do have a purpose -- so each unit has an immediate and useful result.

I recommend doing something they can see.

Sorry for the ramble.
Yea but lets also consider, highschool != elementary school.
I'm sure their more capable of understand some deeper level of c++ rather than just making stuff happen.
I can't highlight what axtyax said enough. The point of school is to try and teach people as much as possible, not to make everyone think that they know everything, just postponing the time when they realise they don't. This does of course depend of the high school and the year of the students doing this. Teaching sixth forms students of a grammar school very very basic code and not expecting them to want/ need to know how things work is insulting.
I don't think either of you know anything about pedagogy.

And, as always, my words were twisted, but heh, I should expect that on the internet by now.


My middle school experiment was to help the children implement a simple turn-based, networked video game (Pente). The intern I was working with bailed on me, so the best we got was playing around with graphics, but the kids learned something of:

    - flow control
    - event driven programming
    - creating GUI windows
    - using graphics
    - transforming graphics
    - classes and RAII

I used Python+pyGame, which made it exceedingly easy for them to pick it up and get running with it.

It would be foolish to believe that they gained any "deeper level" of understanding in an introductory course. Even simple programs like the ones they were doing require much more than your standard Hello World; I had to do a lot of programming so that the basic harness was in place for them.

The best learning happens when it is fun.
Make sure each thing the children do provides an immediate, positive feedback by the end of the class (or two) so that they can keep interest and understand that all this stuff does actually get them somewhere useful.

Oh, and BTW, first grade teachers have kids writing sentences and even short (three sentence) stories, even though they can't often spell their own names correctly. Wow, too bad elementary teachers don't know as much about doing things right as some forum members here. Said kids could have been studying the minutiae of spelling, grammar, sentence structure, etc for years before putting it to good use... Alas!

It isn't insulting to teach people to use a technology.
But it is demoralizing to expect them to understand how everything works before anything interesting happens. Especially for teenagers.
axtyax wrote:
I'm sure their more capable of understand some deeper level of c++ rather than just making stuff happen.

Am I the only one that is going to acknowledge the fact that the deeper level stuff of C and C++ is exceedingly boring? Kids don't want to spend their time memorizing every trick and gotcha in the language, that kind of knowledge will come to them eventually after years and years of poorly thought out decisions coming back to bite them in the ass like it did with the rest of us. What they do want is a minimal viable product that they can show off to their friends and to understand just enough of it so that the ones who are really interested in the topic can start hacking it apart.

@ OP: If I had to guess I'd say that those Chromebooks are going to be your first major problem. Although I do not have much personal experience with that OS, I got the impression that developing anything in C++ would be like pounding in nails with a screwdriver; it's simply the wrong tool for the job. If you can't get a different set of equipment allocated to you then try to get a server setup and give them remote access to well supported platform like Ubuntu or something. That way you have a fully functional and well supported OS (development environment wise).

Also, you haven't said what you plan to do. But if you do go with making a game then I would suggest pre-fabricating the art assets. That way you can spend 10 mins of class time encouraging them to modify what exists on their own time instead of an entire week waiting for people to come up with their own and draw what doesn't.

The only other thing that I would mention is to have a rigid lesson plan. This may seem like that opposite of what you want, but in a class like this you are bound to attract a larger number of the "creative types" who will inevitably try to overreach their ability and become frustrated\discouraged with the whole thing.
Last edited on
Computergeek01 + 1

Each lesson should have a specific goal to make something interesting happen, with room for those who can go more quickly to play with it.

For example (and assuming the video game), making your sprite jump from one surface to another. That's an entire lesson!

But it has room for quicker students to play with the animations that can happen during the jump.
I was just reporting on my experience of being taught these things where you just got the sense that you were being forced to do boring (supposedly fun but too limited to be) work and any attempt to actually learn how and why things work is brushed off as not important. All I'm really saying is there will be some people who don't want to learn and won't put any effort in. Dumbing everything down so the people who don't try can do things is detrimental to the people who actually want to learn things.
All I'm really saying is there will be some people who don't want to learn and won't put any effort in.

I agree and that will always be the case; think of this phenomenon as the educational version of 'inventory shrinkage'. It is an unfortunate occurrence that should be minimized by using reasonable measures but it is ultimately unavoidable.

Dumbing everything down so the people who don't try can do things is detrimental to the people who actually want to learn things.

This would likely be an elective class. OP should not have any guilt about failing those who really don't care and in fact it would do him good not to give off the impression that his class is a "seat credit". Not to downplay what he is trying to do here, but I don't know anyone who was ever held back for failing Home-Ec.

Disclaimer: I am not a teacher, but I have dated a few TA's! :D
I completely disagree with Duoas. These people aren't in elementary school, they're in high school. Dumbing it down will save some time, but they wont be learning as much as they could be.
+1 @ Duoas and Computergeek.

The problem with most educational courses is they don't make effort to make the material interesting or engaging. Yes a teenager in high school is able to slog through boring, tedious language rules with little payoff to learn core concepts -- but that doesn't mean they should. Nor does it mean that's an effective way to teach them (it absolutely isn't).

As Duoas said.... people, including teenagers and adults, learn best when they're having fun. When they're interested. When they're engaged. At that point it stops being a chore and becomes something they want to learn, rather than something they have to learn.



The best example of this in real-life (that I can think of) that even adults can relate to is to play a new Euro-style board game with a group of friends. Those games get pretty involved and usually have pretty big rule books. For this example, let's say that one friend knows how to play the game already, and effectively is filling the role of teacher for everyone else in the group (the students).

In this scenario the teacher has 2 general ways to teach this game:

1) The teacher can open the box, have all the students set up their player card and get whatever tokens they need, etc. Then explain the rules.

or

2) Teacher presents the game already set up, gives a brief explanation of the ultimate goal (get the most victory points or whatever).... then says "let's do a round so you can see how it works", and the students just dive in and learn as they go.


One of these ways is clearly more fun and much more effective at illustrating the game mechanics.
Last edited on
The difficulty is that most of the students will likely not be capable to do well in programming. Even those who may one day become great programmers will likely have a lot of difficulty doing some trivial things in high school if they have no prior experience. You don't want to scare people away by making it overly difficult and by making it a huge risk to their GPA. Also, you don't want to hurt people who are curious about programming, but do not have the skill.

The grading should be mostly based on effort, and attendance. The projects should be such that all of the students can do at least part of them and those parts should be fun, yet there should be room for more advanced students to do much more, as well as possibly optional project suggestions and maybe some small rewards (e.g. best 3 completed projects will be shown to the class).

I think that the lectures should involve a lot of discussion, and interactive demonstrations of the material, like compiling and running code in front of the students to show the output. Also it's good to think of interesting relating stories to make the class more engaging, e.g. famous disasters caused by bad use of types ( integer overflow, floating point inaccuracy, etc ). In addition, the students should be exposed to various interesting domains of computer science to draw their interest and so that they can start thinking about what they might want to do in college and as a career.
Last edited on
fabtasticwill wrote:
I completely disagree with Duoas. These people aren't in elementary school, they're in high school. Dumbing it down will save some time, but they wont be learning as much as they could be.

You misunderstand.

Elementary school kids don't have the brains to do this. (They don't! Their brains are not physically developed enough to handle it!) High school kids have only just developed the brains to do this.

This is basic psychology that every teacher (is supposed to) know, but of which some people on the forums here, with overinflated brains and tons of only their own personal experience, seem wholly ignorant.

The injunction to "dumb it down" isn't to prevent them from "learning as much as they could". It is to avoid overloading them with more information than they can take.

High School, at least here in the US, is often where children get their first experience in programming -- whether through the school or at home. Some districts try to do it in Middle School, but it is less effective because you hit an actual barrier in the children's minds.

They can't take tons of intricate details about a programming language.

You and I can, because:
- our brains are more fully developed
- our first experiences are (far) behind us
- we've had years of training to be able to absorb boring technical information in one sitting
- we know how to query more information, struggle through difficult learning steps (stuff
  that would be 'impossible' to a child), and ask for help.

To think that you are going to be able to teach all the glorious intricacies of even basic C++ in a 40-minute period every other day of the week is foolhardy. Even full-time university-level courses don't pretend to be able to do that. They expect their students to go home and literally spend hours studying the things they were introduced to in class. On their own.

The purpose, then, of a secondary level programming class (that's High School!), is not to discover the next great Bjorne Stroustrup.

Among other things, it is to provide a fun experience with programming and introduce them to the basic concepts of CS. Nothing more!

What they get from this is: experience working individually and as a team to do something cool, garner potential future interest in a career in CS, reinforce prior knowledge (of basic mathematics and computer use), and enjoy the results, among other things.

The teacher's job is to guide the students through the experience. High School students aren't so dumb as to believe that there isn't a whole lot more to <making a game> than what they get out of the class. Structured properly, those who have interest in doing stuff on their own will have a foundation to build on later, in their own time. But they will also get the satisfaction of 'solving' something simple and making things happen according to a specific design, with enough flexibility to put some of their own twists on it.

OP needs to spend some serious time coding, so that all the pieces will be in place for the students, each step of the way, so that they can modify and complete things that work.

Here's a reference for you doubters.
http://thebrain.mcgill.ca/flash/i/i_09/i_09_p/i_09_p_dev/i_09_p_dev.html

What we want to see is the child in pursuit of knowledge, and not knowledge in pursuit of the child.
~ George Bernard Shaw
There is no need to insult those who have a different opinion to you. My over-inflated brain may mean that I have something wrong here, but I am in high school at the moment and I'm sick of pepole talking to us like we know nothing, have no potential to learn anything and I'm sick of those who want to learn and try to learn being forced to do menial tasks because those who can't be bothered to learn things don't understand yet. From what I've read of people's messages, all we are saying is just because someone is young, don't patronise them and assume they are stupid.
I'm not insulting you, I'm trying to get you to understand that you don't understand the words coming out of my (fingertips).

I never even intimated that you are stupid or to be patronized, or that the programming class should be menial work.

Menial work is studying technical manuals.

Meaningful work is making fun stuff happen.

But since the fun stuff only happens after reading the technical manuals -- I suggest that the teacher do all the boring, technical stuff so that the students can do a lot of the fun stuff. You don't need to know all the details of the language or the underlying processing to understand how to manipulate code to make Mario jump with sproingy sounds.


Being a student is not sufficient to understand the cognitive and pedagogical processes which best impact students. That's why teachers first have to have college degrees in teaching before they're allowed anywhere near you. (It also explains your really wonky substitute teachers, because they [usually] don't know what they're doing.)

What I keep saying is that learning programming is too big a thing for a high school student. This is a generalization, meaning that there do exist some students for which it is not too big a thing. Being introduced to programming with simple, intuitive examples that have immediate, enjoyable results -- that's a high-school-class-sized thing to do.

You also misunderstand the purpose of your education. It is not to give you in-depth knowledge on any subject (excepting basic language and basic mathematics). It is to provide you with a wide range of introductory experiences so that you can develop an idea for what you want to do with your life, and give you the basic skills to begin learning stuff in earnest -- in university, on the job, and on your own.


You also make one more mistake -- a significant one, unfortunately, empowered by the anonymity of the internet: you equate your opinion on this subject with mine. My opinion is informed by years of very heavy university-level study on the subjects, backed by years and years of research -- your opinion is a subjective idea of how stupid teachers are (in general) because many of your teachers don't see things the way you would like them to.

I'm not defending all your teachers. I've seen a whole lot of crap teaching -- and I think that much of the way we teach is outright wrong. There are a good number of teachers I think are idiots.

You are also unaware of some of the ungodly pressures your teachers have on them to do things a certain way. If ever you go to class and your teacher is in a grumbly mood about a subject matter -- it is likely because he or she is not permitted to teach the material the way he or she would like -- up to and including being required to teach things that he or she knows are wrong!

Hope this helps.
My personal learning style makes it very difficult for me to pay any attention to details that I have no known need for knowing. It isn't until I know why I should pay attention that I am able to. So for me, I would rather the classes be all high level, big picture stuff, mixed with wisdom, and I can learn the details on my own. I know many people have the opposite learning style where they like to learn the details in a bottom up step by step approach. So you have to maybe consider the learning styles of different students and try to cater to each on an individual level while maintaining a good balance for the whole class.

As high school students though, I think the most important things they should get out of the class is learning what's the point, what the industry like, what the careers are like, what are the opportunities/possibilities, etc.

If you focus on the high level concepts and wisdom, then even the advanced students will learn some valuable stuff, and the slower kids won't be overwhelmed, and how stuff works on a technical detail level can be mostly left to self learning with some direction given by the instructor. Technical information is better self learned, directly from a good source, anyways. You can leave this stuff to more or less optional homework.

You should instill some good practices in the students. Teach them about abstraction (black boxes), components, inheritance, and how to build good models, from a high level perspective, with good examples.

One option for dealing with different interests and levels of ambition would be to let students choose their own projects, or choose from a set of preselected project options. Then you can advise them, and they can go as far as they like.


Last edited on
Topic archived. No new replies allowed.