A Coding Club

This year, I decided to launch a program at my school, the Coding Club.
My goal for this club is to create an environment where students can use their creativity, and create whatever they want. My goal is to ensure that the students are inclined to teaming up and helping each other out.

Most of the enrolled students do not know programming. During the first meeting, we decided, through a poll, that we would like to focus on C++ and move onto Java, Python, etc.

I am almost done getting the equipment set up. We will be using Linux in a virtual machine for portability and to isolate the code from the school computers to prevent us from getting in trouble for breaking something.

I would like to have some sort of short and fun icebreaker at the beginning of each meeting. Please let me know of any good icebreakers, and and feedback in general about this program.

I think you’ll find that youll get more interest from students if you give them more of a goal than to just create whatever they want. A project that you can all work on together gives them motivation to work hard.

I do have some goals for them, actually. My teacher has asked me to try to teach middle-schoolers programming, so as these students progress at learning how to code, they will start tutoring programming to those who need help. Many of these students also have a great chance of joining our FRC team next year, adding to our programming team!

Also, this club is built into a program that our school runs, the Center of Research in Engineering, Science and Technology. These students will be getting a lot of ideas for automation and to improve technology, which they can bring back to this club and work on in groups.

I ran a programming camp for middle school students this summer. We played a couple of different ice breakers with them.

  1. Everyone sits in a circle. The first person says their name with an adjective that starts with the same letter. The second person reintroduces the first person and then says his/her name with a different adjective, and so on.
    For example:
    Person 1: “Hi, my name is Nice Nandeeka.”
    Everyone: “Hi Nice Nandeeka.”
    Person 2: “Hi, my name is Amazing Alisha, and this is Nice Nandeeka.”
    Everyone: “Hi Amazing Alisha.”
    Person 3: “Hi, my name is Silly Sarah, and this is Amazing Alisha and Nice Nandeeka.”
    Everyone: “Hi Silly Sarah.”
    …and so on.

  2. Everyone stands in a circle with their places marked (with chairs, shoes, water bottles, etc) except one person who stands in the center. They introduce themselves and say something they enjoy. Everyone else who also enjoys that thing has to move to a new spot. Since there is one less spot than person, someone else is in the middle and the process repeats.
    For example:
    Person 1: “Hi, my name is Nandeeka and I like programming.”
    Everyone who also enjoys programming switches places and Sarah ends up in the middle.
    Person 2: “Hi, my name is Sarah and I like to do math.”
    Everyone who also enjoys math moves to a different place and someone else ends up in the middle.
    … and so on.

We also played games like Human Knot, Pictionary, Hangman, Charades, and Telephone as team building activities. Please let me know if you have any other questions.

1 Like

I’ve found “never have I ever” a good icebreaker game. Similar to #2 on nandeeka’s list, everyone but one person is in the circle. The person in the middle says something they’ve never done such as “Never have I ever travelled outside the United States”. Everyone who has done that thing the middle person hasn’t done (such as everyone who has travelled outside the US in my example) moves to a new spot. This continues until you want to stop. Everyone gets a chance to see what they have in common with others, and they get to be creative trying to make everyone move at the same time.

1 Like

In my experience, the key is to find the right combination of openness and guidance. If you give too little guidance, some/many of the students will not find the forest for the trees. Too much guidance, and it can start to resemble homework.

I think there are three topics that many people find motivating – graphics, games, and robots. If you can rotate through these topics, I think you can keep people motivated and introduce programming and other STEM concepts quite easily.

The other thing to keep in mind is the length of challenge before there is some form of reward or feedback given. For smaller children, this needs to be every few minutes. If three year olds are stacking blocks, they want to have someone clap and smile about their accomplishment every five minutes or less. For kids in elementary school, they want someone to comment on how good their coloring book looks every ten or fifteen minutes. I’m not a psychologist, but for high school students, I’d start with projects that take an hour or less and lengthen them as people’s motivation seems up to the task.

STEMy sorts of things I’ve done with teachers involve using a microphone and FFT function to discover what your cell phone’s tones are. Once you understand the system, you can build an autodialer or send codes to one another – for background, look up DTMF. Another one we did involved taping an accelerometer to your cell phone and having the alarm go off so that it buzzed. At what frequency does it buzz? In which axes? Are all cell phones the same?

There are quite a few similar challenges, mostly built around NXT and LEGO sensors on the TUFTs CEEO website.

For game challenges, pick a relatively simple game – something like angry birds, but perhaps with your own theme. Maybe you have pirate ships lobbing parrots at each other, or Roman army legions flinging farm animals. These simple games can them be made multiplayer and expose networking, can be given some AI so you can play against the computer, etc.

The other day I posted one I did with my kids over the summer. It was a virtual Spirograph. Figure out the math and choose a small step size so that linear approximations make smooth curves. We added multiple pens at once, decided to show the wheels, had a button for screen shots, etc.

Greg McKaskle

1 Like

I agree with project-based learning. It is the most effective.

The very first project, just so everyone understands the build/parse/compile/deploy/run cycle (or whatever it is called) would be to display “Hello World” on the screen.

I think every one of us has done this once.

Also, I applaud your decision to start with C++. Once you understand a language, the rest come easier. C++ is darn near universal. Also consider touching on plain old C (or BASIC?), just to see a non OOP language and to know such things exist.

I will show them the “Hello World” application in plain C (printf) because it is much simpler than I/O streams in this concept.

I will go through the C++ basics before diving too deep. Using streams actually is quite complex in the background.

Most of the middle schoolers that I am working with already have ideas in mind with what they want to do. They range from simple problems like writing a disabled student aid program, up to programs, capable of calculating the height of an object by taking a picture of it with a phone (seems impossible because you only have the angles of the triangle, no sides)!

I do not think I will dive into game design too quickly because that requires
A) A lot of math
B) OpenGL and it’s alternatives require a ton of pointers and stuff that I am not very fluent with

Oh? Without even knowing what OpenGL is, I’ve coded a game. In C++. Without using very much math at all.

Admittedly, writing the code for Yahtzee in a text window isn’t as nice-looking as something like Solitaire, or something similar. But coding a game (or a vote-counting program, or something similar) can actually be a fairly simple exercise. In my introductory (OK, college-level introductory) programming class, we had three major class projects and some labs. I’ve mentioned two of the three major projects above; I’ll have to dig out the third one if I can find some time and the files.

I have written a couple games without OpenGL. However, they were crappy
Brick Breaker with one level
Yahtzee, one computer, multiple players rotating. Comes with bugs too! :smiley:
A couple more crappy games.
Also, all my games were written in Java, using the ACM library, so it is quite pointless to use those in class. I guess that maybe I could switch back to Windows and get used to it’s display manager.

I am learning a library, DLib, which comes with cross-platform display tools, like a widget-based window system.

It is quite simple to use this in conjunction with OpenCV, so maybe I may dive into these much deeper.

As good as HighGUI is, it lacks many essential components, such as threading to prevent your display from freezing. It is also not easy to implement a button or similar.

I still haven’t been able to figure out QT. It changed significantly with QT5 so I cannot find any of the headers used by the tutorials I go by! It would be much more in my plate if I were teaching what I am learning.
I have experienced that where I volunteer, where I had two training sessions and I was training someone else! I do not want to do the same thing with these middle schoolers and have them develop a scorn for coding!

OpenCV: I just may begin with OpenCV because it isn’t TOO hard, but allows you to do extremely neat things!

I too have started a coding club at my school this year. Our goal is to make software and apps, which will be worked on as a team using Git, and then we will publish them.
On our team, it’s kind of a prerequisite that you know some Java I’m order to be of help with the code. I don’t suspect that we’ll be teaching the basics of java, but we’ll talk about the more advanced aspects of software development, like for android apps.
However, we’re having some trouble convincing the school to let us publish the software… I dont fully understand their reasoning, but I think they’re afraid of offensive content and such that could poorly reflect on the school. Quite absurd in my opinion.

Anyway, icebreakers… I can’t really help you with that; we didn’t do any such thing at the first meeting. We just went through an introductory presentation about the team, collected information about the new members (8 total including myself), and then went right to brainstorming ideas for our first simple project. Took about an hour overall.

I guess you could try by getting an application ready to deploy, and then use it to prove to the school how there is nothing wrong with it. I can only see that it can start raising money. There’s nothing wrong with that, at least if the school rules are followed.

If I were to put a prerequisite, there would be almost no one in the club. Last meeting, we successfully installed Linux. It was the first time for most of the students!

I wanted to create a coding club in my school but my school would never allow because they’re afraid of it creating new hackers. One of the hackers just graduated last year. The last thing they want is a new one to troll IT. :wink:

That’s a misconception I do not enjoy clearing up about people who program. That we can “hack” anything at the flick of a finger. Most the time the term “hacking” is misused anyways, but people don’t want to say “network penetration.” Yeah, once you know what you’re doing in Kali, it isn’t that hard to get into networks or crack wifi passwords.

If anything, you could maybe have a form all the students in the club have to sign to be in it that they will not cause damage to property. But it’s not like you’d be teaching them Kali linux. At best you’d be able to make a robot follow a line with a group of people who have never programmed before in their life.

Here is an idea for an activity for a coding club.

Operation: Code Clash

You could show some of the documents at sites like collegeboard and other credible sources that show how important CS is for students.

Launching a coding club is FAR cheaper than launching an entire new class for CS. Who knows, if it works exceptionally well, it might get much more funding from the school and maybe even a CS class might be started!

One possibility for an icebreaker would be to play Fizz-Buzz. Go around the group counting off, but if the number is divisible by 3 say “Fizz”. If it’s divisible by 5 say “Buzz”. If both, say “Fizz-Buzz”.

I’ve heard this described as a child’s game, but I remember it as a college drinking game. Screw up, and you take a drink.

For a programming challenge, try writing code that prints out the Fizz-Buzz sequence. This is not really difficult, but it’s a couple steps up from “Hello World”. Implementing it requires students to write a loop, understand conditionals, and how to take the modulus of a number. Students who finish first can help out others who are struggling.

Fizz-Buzz has been used for screening job applicants. Take a look at: http://blog.codinghorror.com/why-cant-programmers-program/

I do agree with the “Hello World” activity, it’s pretty simple and fun and will get your students a quick idea of coding, see if they are going to enjoy it or not, it can be pretty fun, other than that I have another idea, we did this in the beginning of one of our classes and in a couple of minutes we were all laughing and knowing each other. Students sit in a circle with one of them, or teacher in the middle or to the side, when the one leading standing up says “Small Fish”, the students sitting put both fists to their chest, when he says “Big Fish” they put the fists away from their chest, in front of them. You have a lot of flexibility with this activity and can change the words or just say one of them to trick them along with going pretty fast, and if you move your fists wrong you get eliminated from that round. I know it as nothing to do with coding but I hope it helped :).

I’m a little confused about the age range of your group, but I highly recommend having in-house or attending a hackathon or two. Its not a “hack into the mainframe” type event, but a “hack together some sort of project” event. I’m not sure what there is for high school/middle school but its a pretty big community in college with Major League Hacks (http://mlh.io/) and a lot of college hack-a-thons encourage high schoolers to attend.

The cool thing about a hackathon is it forces you to complete a project in a short amount of time and you learn a fair amount doing them, and then if you win, at least in the college ones, there are a lot of cool prizes (items and/or cash) you can win and its good exposure to companies.

As far as activities, in the class I TA for we have labs that focus on using a specific concept: if statements, loops, state machines, arrays, pointers, etc. We use arduinos and try to make it fun (key word: try). Anything with easy access to accelerometer data that you can then drop from a large height makes for a really fun lab where the students have to use accelerometer data to tell if the item is being held, in free fall, or bouncing/landing: and then compute how long it fell (you may have to guide them through the physics/algebra of that).

Sounds like an exciting and fun idea! I wish I had the opportunity to join something like this in High School, I didn’t end up learning how to really program until my first internship after my freshman year in college. I was tasked with the project of creating an interactive program that could parse through a txt file of unknown length. From there I had to convert any binary or hex to something readable and make that searchable. Overall it was a fun and exciting learning experience for me (even though it took me all summer) and I’ll never forget the feeling of completing a project like that (although it will never beat the satisfaction of winning a FRC competition).