This is a long and hard process. Not for the faint hearted! It takes years to build a team.
I’ve used the term “team” as opposed to club. Depending on your school the two words can have very different connotations. A team is a group of students who have the following things in common:
- they had to “audition” to get into the team
- they practice regularly
- team building skills are necessary and will be developed
- they must learn skills necessary for their “sport”
- they are competing in some way
Whereas a club is a group of students who share a common interest.
The advantage of calling it a team is that everyone involved will be focused on learning how to solve computer programming problems. It also gives you, the teacher, the ability to be selective about team membership.
You have to do some prep work. You need to build a repository of computer problems. You will also need to sort the problems in order of difficulty based on your students.
I suggest starting with math problems. Organize them based on level with increasing difficulty so they are scaffolded. Then move on to string problems.
The next thing you’ll have to do is investigate how different competitions work:
- can your team participate in local/regional competitions?
- are there any online competitions that meet your needs?
- is the competition individual or team based?
- if team based – how many students are on a team?
- what languages are supported?
- do students upload source files?
- is there a time limit?
- does the site have good feedback system if a solution gets a zero – especially if it’s an upload/format issue vs the wrong solution
- how often do competitions occur?
You know your students best but remember the team will need definitive and regular goals otherwise you run the risk of losing interest and everything falling apart.
A starting point
Start with your best students. Invite them to join your team. Find a common time and location to meet.
Work in pairs to begin with sharing 1 computer. This will build student confidence and skills. Many team competitions only allow 1 coding computer between 4 students (maximum). This means that only 1 student can code at a time. Division of labour within a team must be learned and practiced to avoid conflict. Better to do that in school than when the points count!
At first you will need to keep all the team records: attendance, team names & membership, emails, problems solved etc.. Eventually, your team can elect its own executive to run things. This will take the pressure off you and develop their leadership skills.
Your team doesn’t have to just be programmers. Think about your school’s best math students and even chess club members. These students have valuable problem solving skills that would be an asset on your team. You may even persuade some of them to enroll in your courses!
I’ve created a document that summarizes this process and more. Check out:
Sounds easy, right? NOT!
Coding doesn’t teach problem solving.
Kids have to be taught how to solve problems. One step at a time. They need examples, modelling, practice, feedback, suggestions, nudges and sometimes even walk throughs with support. Depends on the kid.
Coding is a language like English. You can learn the words, punctuation and sentence components but that doesn’t mean you can publish a best seller or write poetry.
The best way to teach problem solving is to break everything down step by step. Make them think about it, tear it apart, practice it. Learn the next step…same process. Then see if they can put the two steps together to create something new.
Some will get it quickly, some won’t.
A programming course should teach problem solving right from the beginning. When you understand how something works you can transfer that knowledge into new situations. This may be a slow process to start but once you get used to approaching learning in this manner it does get easier over time.
The programming language, that is! It was created and programmed by Rick Holt to entice kids into the world of programming. It is now in the public domain and still available and taught as a first year programming language in many high schools. There is even an open source version on GitHub.
Unlike newer languages, Turing has very simple syntax. It can easily do colours (albeit limited to 256), import graphics and music, create GUI buttons, read and write to files, resize and position its application window as well as create and control sprites. Surprisingly enough it even has the ability to create network connections for multi-player games.
It doesn’t have any of the conventions and rules that other programs are known for so it has a chameleon-like ability to mimic their conventions (like identifier naming etc) so kids can learn some of these things before moving on to Java or C/++. It definitely can make the transition much easier in the next course.
Although it is a top-down language, it does have the ability to forward a subprogram which subverts its top-down limitations. And, if memory serves, there were originally two versions: an Object Oriented version and a simple Turing which have been combined into one. So it is possible to use the OO version of most commands so drawbox is also available as Draw.box which could be used to introduce the “dot” operator.
Since most kids aren’t familiar with this language it is ideal in a school setting. Kids who have prior programming experience tend to know Python or HTML. So if they are taking a course in one of these languages they will be bored rather quickly. If Turing is the language then regardless of their programming abilities all kids will be starting from scratch together thereby leveling the playing field.
So don’t dismiss Turing as possible entry level language for your program. It might surprise you!