Anyone for a game of 'Code Golf'? - FORE!
Like this lesson? Share it with your followers by clicking on the image below.
KS2:
- Design, write and debug programs that accomplish specific goals; solve problems by breaking them into smaller parts. Select, use and combine a variety of software on a range of digital devices to design and create a range of programs.
- Use sequence, selection and repetition in programs; work with variables and various forms of input and output
- Use logical reasoning to explain how some simple algorithms work; detect and correct errors in algorithms and programs
KS3:
- Use two or more programming languages, at least one of which is textual, to solve a variety of computational problems.
STUDENT: COMPUTATIONAL THINKER:
- 5a: Students break problems into component parts, extract key information, and develop descriptive models to understand complex systems or facilitate problem-solving.
- 5c: Students break problems into component parts, extract key information, and develop descriptive models to understand complex systems or facilitate problem-solving.
- 5d: Students understand how automation works and use algorithmic thinking to develop a sequence of steps to create and test automated solutions.
EDUCATOR: COMPUTATIONAL THINKING COMPETENCIES:
- 4b: Design authentic learning activities that ask students to leverage a design process to solve problems with awareness of technical and human constraints and defend their design choices.
COMPUTER SCIENCE EDUCATORS:
- 2a: Plan and teach computer science lessons/units using effective and engaging practices and methodologies:
i. Select a variety of real-world computing problems and project-based methodologies that support active and authentic learning and provide opportunities for creative and innovative thinking and problem solving
ii. Demonstrate the use of a variety of collaborative groupings in lesson plans/units and assessments
iii. Design activities that require students to effectively describe computing artifacts and communicate results using multiple forms of media
iv. Develop lessons and methods that engage and empower learners from diverse cultural and linguistic backgrounds
v. Identify problematic concepts and constructs in computer science and appropriate strategies to address them
vi. Design and implement developmentally appropriate learning opportunities supporting the diverse needs of all learners
vii. Create and implement multiple forms of assessment and use resulting data to capture student learning, provide remediation and shape classroom instruction
CSTA K–12 CS Standards:
- 1B-AP-08: Compare and refine multiple algorithms for the same task and determine which is the most appropriate.
- 1B-AP-09: Create programs that use variables to store and modify data.
- 1B-AP-10: Create programs that include sequences, events, loops, and conditionals.
- 1B-AP-11: Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.
- 1B-AP-13: Use an iterative process to plan the development of a program by including others' perspectives and considering user preferences.
- 1B-AP-15: Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.
- 1B-AP-17: Describe choices made during program development using code comments, presentations, and demonstrations.
- 2-AP-11: Create clearly named variables that represent different data types and perform operations on their values
- 2-AP-12: Design and iteratively develop programs that combine control structures, including nested loops and compound conditionals.
- 2-AP-15: Seek and incorporate feedback from team members and users to refine a solution that meets user needs.
- 2-AP-16: Incorporate existing code, media, and libraries into original programs, and give attribution.
- 2-AP-17: Systematically test and refine programs using a range of test cases.
- 3A-AP-14: Use lists to simplify solutions, generalizing computational problems instead of repeatedly using simple variables.
- 3A-AP-15: Justify the selection of specific control structures when tradeoffs involve implementation, readability, and program performance, and explain the benefits and drawbacks of choices made.
AREA OF LEARNING AND EXPERIENCE: Science and Technology:
Computation is the foundation for our digital world.
Progression step 3
- I can use conditional statements to add control and decision-making to algorithms.
- I can identify repeating patterns and use loops to make my algorithms more concise.
- I can explain and debug algorithms.
Progression step 4
- I can decompose given problems and select appropriate constructs to express solutions in a variety of environments.
- I can select and use data structures that efficiently manage data in algorithms.
- I can plan and implement test strategies to identify errors in programs.
Progression step 5
- I can identify, define and decompose problems, choose appropriate constructs and express solutions in a variety of environments.
- I can use file-handling techniques to manipulate data in algorithms.
- I can test, evaluate and improve a solution in software.
Overview:
Anyone who has taught Computing / Computer Science will know that the 'coding and programming' strand can sometimes feel like a very dry topic, especially for young children. One way to inject some fun into your coding lessons is to gamily them!
For those new to the concept, gamification is the process of introducing game-like elements into a traditionally non-gaming contexts to make them more fun and engaging. Gamification strategies include elements such as gamifying grading, incentivizing students with rewards and adding competitive elements such as leaderboards.
One strategy that exemplifies the concept of gamification in the teaching of coding is a game called 'Code Golf'.
What is 'Code Golf'?
I came across the idea of Code Golf at a Computing At School (CAS) conference last summer and have been experimenting with it ever since. The idea is simple, participants are given a problem (or working solution) and are challenged to solve it using the fewest lines of code.
The term Code Golf is derived from the similarity of its scoring system to that of conventional golf, where participants aim to achieve the lowest score possible.
Why Code Golf?
The idea behind Code Golf is to encourage efficient use of code. At GCSE / A-Level, students are required to make efficient use of code in order to access higher grades / mark bands. Efficient code also uses less RAM, compiles quicker and uses up less storage space. Students can use a combination of features such as loops (For, While, Repeat) or sub-routines to achieve their optimised code however, readability and usability must not be sacrificed at the expense of code optimisation therefore, white space and comments do not count as lines; we still want to encourage students to break up and comment their code so that it is comprehensible to others, easier to debug and easy for others to re-use.
Types of Code Golf
There are two main ways to play Code Golf. The first way requires students to solve a given problem using the fewest lines of code. The second method, which requires a little more preparation from the teacher, requires the students to optimise a given working solution. In both methods, the challenge is for the students to create a solution using the least amount of code. To add a little extra challenge, the teacher can add a Par value (or target number), with the Par being the optimal number of lines of code. This Par value can be altered for different levels of ability (similar to the 'handicap' system in conventional golf) thus allowing the teacher to differentiate the lesson.
Example:
The following is an example of a simple 'Par Challenge'. In this example, students are challenged to create a square using the Python turtle library using 6 lines of code (Par 6).
Example Lesson
- Understand and use sequence in an algorithm
- Understand and use iteration in an algorithm (FOR and WHILE loops)
Curriculum Mapping:
KS2:
- Design, write and debug programs that accomplish specific goals; solve problems by breaking them into smaller parts. Select, use and combine a variety of software on a range of digital devices to design and create a range of programs.
- Use sequence, selection and repetition in programs; work with variables and various forms of input and output
- Use logical reasoning to explain how some simple algorithms work; detect and correct errors in algorithms and programs
KS3:
- Use two or more programming languages, at least one of which is textual, to solve a variety of computational problems.
What you will need:
- Python 3 (Click here to download the latest version - FREE)
- Mark Clarkson's introduction to Python booklet (For instructions on using the Turtle library)
Challenge
Instruct students to open Mark Clarkson's introduction to Python booklet (See link above) and ask them to attempt the Turtle tutorials. Once the students have got the hang of turtle, explain to them that they are going to compete in a game of 'Coding Golf'. Hand out the challenge (See PowerPoint below) and explain to students that challenge is to solve each of the tasks using the fewest of lines of code possible.
Resources
coding_golf.pptx |
scorecard.xlsx |
Rules
- Blank lines don't count as lines of code.
- Comments don't count as lines of code. (We want to encourage the students to comment their code).
- Import turtle, import random etc. do not count as lines of code.
- Everything else counts.
Useful Links
Book of Programming Challenges - Book of programming challenges, ideal for Code Golf , courtesy of Stuart Lucas (Requires sign up to Computing At School - FREE)