[London] Digital Technology Apprenticeship Expo – Mon 5th March 4-7pm, FREE + Teacher CPD session

Monday 5 March 2018, 4-7pm, FREE

Ada. National College for Digital Skills
Broad Lane
Tottenham Hale
London
N15 4AG

Haringey Council has teamed up with the Ada National College for Digital Skills to create this digital focused event and bring apprentice-hiring companies, such as Google, Deloitte Digital, and EY among others to open up opportunities in this growing sector to tech enthusiasts.

Who Should attend?
A fantastic and unique opportunity for those with a passion for technology. You may be in school seeking to know your next steps, a career changer looking for the next challenge or someone just interested to understand the tech roles available.

More details and free tickets at their Eventbrite page.

The Digital Technology Apprenticeship Expo will have something of interest for everyone

CPD sessions
There will be a CPD event for Computer Science teachers – “Pete Kemp will be hosting a session on an introduction to data science or 3D animation for the computing curriculum (Topic TBC) as part of the event we are running with Haringey Council.” – more details and free ticket registration at Ada National College for Digital Skills’ page. See below for a separate CPD event for Careers Adviosors.

  • Between 4-7PM, our industry partners presenting their apprenticeship opportunities to students. This is ideal for Y10-Y13 to attend so they can start exploring their options. Parents are welcome to come too.
    Students can register at https://www.eventbrite.co.uk/e/digital-technology-apprenticeship-expo-tickets-42313777648
  • Between 4-5:30PM, we will be hosting a free CPD session for careers advisors to demystify the apprenticeship recruitment process. Companies like Deloitte, IG and Which? will be talking about the applications process, assessment centres, and the different qualifications that students receive

List of sessions at the CAS London Conference 2018 – Sat 24th Feb

Updated 6 Feb 2018, v6

The CAS London Conference 2018 will be held on Saturday 24th February at Gladesmore Community College in North London (South Tottenham, N15 6BF). It’s an all day event with an opening keynote from Jon Nixon from Ofsted, and talks, workshops and demos exploring different aspects of Primary and Secondary Computer Science. Download a flyer.

There are four session blocks (2 in the morning, 2 in the aternoon) and you can pick one from each. The full list of workshop and talks is below the ‘plan for the day’.

Doors at 9.10am, opening keynote is at 9.40am, first morning session at 10.20am. There will be other activities and networking opportunities at lunch.

Eventbrite - CAS London Conference

CAS London Conference – plan for the day

Start End Session
09:10 09:35 Delegate registration and morning refreshments
09:40 10:15 Opening keynote John Nixon, Ofsted National Lead for Computing
10:20 11:20 Session 1
11:25 12:25 Session 2
12:30 13:30 Lunch & Drone Demonstration (Staggered lunch start 12:30 and 12:45)
13:35 14:35 Session 3
14:40 15:40 Session 4
15:45 16:15 Plenary: Cyber Schools Programme – Michael Heering (TBC) & Fireflies!

Session 1

  • Primary – Smelly code and primary programming pedagogy with Jane Waite
    In this hands of session, you will mark code and create a practical student checklist of what makes sweet code! Bring along code for marking! We will also look at two very practical methods to review your planning to reveal what pedagogy you already use. We will look at instructional approaches to scaffold learning as well as ideas for encouraging independence and mastery.
  • Primary – iPads Tried and test apps for classroom impact with Gillian Arnold
  • Secondary – pedagogy with William Lau
  • Secondary – AQA exam board session with  Chris Swan
  • Primary –  Using tangible programming to support SEN children with the computing curriculum with Jody Carter
  • Primary/Secondary – Minecraft (using virtual worlds and programming) with Simon Johnson (CLC Cimon)
  • Secondary – Python Introduction with Jon Feleppa
  • Creative projects with the micro:bit (python focus)
  • A level – Databases in Python with Hardip Mothada
  • A level – OOP with William Marsh

Session 2

  • KS2/3 – FastForward. Machine Learning & Big Data including digital identity With Paul Curzon and Jane Waite
    Are driverless cars fact or fiction? Can machines make better AI than humans can? How is our data used? Can we support our young people to understand their online (and real life) persona? Practical ideas for starters, plenaries and projects. 
  • Secondary – Algorithm writing with pseudo code and flow charts with Trevor Bragg
  • Secondary – Edexcel exam board with Atif Khan
  • Primary – Physical computing pedagogy session – not what to teach but how to teach physical – including use of spheros, microbits, bluebots, drones with Nic Hughes
  • Primary – Google classrooms/G Suite – Darren Murphey & Wendy McLeod
  • Secondary – Creating websites with HTML
  • Secondary – Stride (a framebased editor to transition from blocks to text) with Michael Koelling
  • A level – Teaching embedded systems with Arduino and Linker with Michael Jones
  • A level – Teaching Boolean Algebra & Karnaugh Maps with Eliot Williams

Session 3

  • Early Years and KS1 – Cubetto and Early Years with Helen Cheung & Eleni Vasileiadou
  • Drones with the Royal Academy of Engineering (KS3 focus but may be of interest to KS2) with Scott Atkinson & Ivan Gutowski-Smith
    This session will explore how drones work and how they can be used for civilian, humanitarian and commercial purposes. This resource is designed as an introduction to the uses of drones, aimed at dispelling the myth that they are just weapons or toys. In fact they have wider ranging practical civil, humanitarian and commercial applications. We will also explore how drones can be reverse engineered, exploring ways in which enquiring minds can build their own functioning quadcopter. All the resources are also available on our website at: https://www.raeng.org.uk/education/schools/teaching-and-learning-resources/curriculum-resources including Engineering in the Movies and RAF100 ‘Aiming for Awesome’ which will be demonstrated during this session.
  • A level – NEA project assessing/ standardisation with Garfield Godon
  • Secondary – OCR exam board with Vinay Thawait
  • Primary – Scratch Maths (Year 6 resources) with Pier Saunders (UCL)
  • KS1 to KS4 – Networks with Duncan Maidens (back by popular demand)
  • KS4 – Teaching data representation (with practical activities that involve manipulating images and sound in Python) with Alex Hawden-Bennet
  • KS3/4 – Pedagogy for programming – PRIMM with Sue Sentence
  • A level – C# with Martin Richards
  • KS4/5 Data Analysis with Jupyter Notebooks –Michel Wermelinger and Clifford French
    Michel Wermelinger will demonstrate how to use Python in Jupyter Notebooks, running in a browser, to analyse data on world diseases. Jupyter notebooks provide an intuitive, easy to use environment that integrates explanations, exercises and the output of the code so that students program incrementally and get immediate feedback. Teachers will be able to use what they learn both in computer science lessons and in Science or Geography at KS4 (or higher) with no need to install software.

Session 4

  • Primary – Assessment with Phil Bagge
  • KS3/4 – Embedding Computational Thinking with Rob Heathcote (PG Online)
  • Primary – Unplugged programming and programming with Scratch
  • Primary – LGFL cross curricula with VR with Bradely Dardis
  • KS2/3/4 – Cybersecurity with Duncan Maidens
  • KS4 – CraignDave – Challenges of teaching GCSE and flipped classroom solutions.
  • KS4/5 – Sorting and Searching Algorithms in Python with Demetrios Skamiotis
  • A level – Advanced Python e.g. Web Development Frameworks and Python with Sue Sentance
  • A level – Big O notation with Python with Ramzi Ramzi
    This session will cover what Big O is, explaining O(1), O(N), O(N^2), and O(log N). Practical online activities will get you  coding each example in Python using variously sized datasets (whilst hopefully not crashing all of computers!) By the end of the session, you will feel more confident explaining and showing students, what Big O is using Python.

Eventbrite - CAS London Conference

[London] Primary computing CPD events coming up this Spring

Obviously there’s our CAS London Conference on 24 February 2018 (for both primary and secondary teachers) but the following may interest too.

1 Feb 2018: How to use Scratch at KS2 with Nic Hughes – two afternoon sessions, one from 1.30-3.30pm and one from 4-6pm, both £40.

7 Feb 2018: BBC micro:bit in computing, 1 day – ENTHUSE funding available to make this a FREE course.

10 Feb 2018: Makey Makey – 1 day course –  only £15 with Tom Heck from the US Makey team, includes a free Makey Makey

28 February 2018: Teach Algorithms and Data Structures to A-Level using Python 2018 – 5 week twilight course for teachers of A level computer science.
Course now FULLY BOOKED. Contact Jo for a place on the waiting list.

from 5 March 2018: Diving deep for Primary Programming with Jane Waite – only £100 and FREE for Master Teachers, CAS Hub leader and NoE University Contacts. Three day course over two months. [5 March, 19 March and 16 April]

15-16 March: Assessment and progression in primary computing with Phil Bagge – 2 day course – ENTHUSE funding available to make this a FREE course.

[London] Makey Makey Workshop at King’s – 10 Feb (£15)

Happy New Year everyone!

We have a new one-day CPD event for teachers on Saturday 10th February taking place at King’s College London from 9.30am to 5pm, £15 (this includes a Makey Makey to take home).

Eventbrite registration: https://www.eventbrite.co.uk/e/makey-makey-workshop-with-tom-heck-from-the-makey-team-tickets-42037489262

Screenshot 2018-01-10 16.31.41

This is a fabulous opportunity to learn about making with the Makey Makey from Tom Heck. A train the trainer event for educators who expect to teach others on introducing STEM through physical computing with the Makey Makey.

Welcome and afternoon tea/coffee will be provided but to keep costs down please bring your own lunch. Please also bring a laptop! (See further info on lunch and laptops below)

PROGRAMME

  • 9:30 – 10:00     Registration and Refreshments (tea/coffee & breakfast pastry)
  • 10:00 – 12:00   Morning Session
  • 12:00 – 1:00     Lunch – please bring your own, or pop out for a sandwich
  • 1:00 – 5:00       Afternoon session (includes a tea/coffee break)
  • 5:00                  Close

Really important bit about laptops
Please bring your own laptop. Everyone needs to bring a laptop and their charging cable. The following computers work well: Chromebook, Mac, Windows, Linux. Do not bring tablets because they will not work. Regardless of the kind of laptop used, it must have the ability to plugin a USB “type A” plug – these are the most common type of USB plugs and it’s how the Makey Makey is connected to a computer. Some new laptops don’t accept a USB type A plug so the user must supply their own adaptor (“dongle”).NOTE: If you have a school issued laptop please check with your IT people to make sure your laptop will work with a Makey Makey!

Lunch options
Waterloo station is full of snack places, Benugo upstairs, M&S downstairs, outside the station there are Sainsbury’s and Tesco types of mini-supermarket.

Shaping poems: Generalisation with methods

by Paul Curzon, Queen Mary University of London

Methods are an important way that computer scientists practice generalisation when programming. Whether you call them methods, routines, functions or procedures, they give a way to write generalised solutions to a problem rather than a one of solution that is no good for any other problem. I recently wrote a little method that was really just for fun, but illustrates some of the main ideas. It is all about printing a poem in a shape that matches a number sequence…

A Fibonacci Poem

BrianBilstonFibonacciPoem

Twitter recently doubled the number of characters allowed in tweets to 280 characters. Some think that this destroys the whole charm of tweets and the way they force conciseness. Brian Bilston tweeted this poem as a response which increases the number of words in each line according to a fibonacci number sequence. It is a famous sequence found often in nature such as in the numbers of petals on flowers and in bee breeding.  (See this cs4fn article for more) The sequence runs 1,1,2,3,5,8,13,21, … with each number obtained by adding the previous two. Brian’s poem made me think that shaping poems is a nice way to explore number sequences, so I started to play with a program.

 

I ended up with a really general program that could take different poems and different number sequences, but to start with I just tried to write a program that could simply print out Brian’s poem with line breaks following the fibonacci  sequence as he intended it to be formatted. Here is what I cam up with (using Python)…

First I needed to write a method that given a number n returns the nth fibonacci number. This is really easy using recursion as what you write corresponds closely to the way we described what it does in English. If n is 1 or 2 then the answer is 1, but otherwise it is the sum of the previous two fibonacci numbers. It works out those previous two fibonacci numbers using recursion – just calling the method fibonacci itself but with smaller numbers, so earlier positions in the sequence.

def fibonacci(n):
    if n == 1 :
        return 1
    elif n == 2 :
        return 1
    else :
        return (fibonacci(n-1) + fibonacci(n-2))

I can then write a method that calls that method and has the poem built in. The details of how this works don’t matter so much here as I’m focussing on generalisation – so ignore the detail if you wish.

Essentially what it does though is take the poem, and split it into a list of separate words. It then goes round a loop printing a line at a time. To do that it calculates the fibonacci number (I’ve made that bit bold below so you can see) for the line number we are up to and splits off that many words from the front of the list, joins them back in to a string and prints them. It then increases the counter that is keeping track of which words have been used, so that it is now pointing beyond those words. It then goes round the loop again to print the next line and the next …

def printpoem():
    poemtoprint = """I wrote a poem in a tweet but then each line grew to the word sum of the previous two until I began to worry  about all these words coming with such frequency because as you can see, it can be easy to run out of space when a poem gets all Fibonacci sequency"""
    splitPoem = poemtoprint.split(" ")
    line = 1
    startword = 0
    endword = 0
    
    while endword < len(splitPoem):
        currentlinelength = fibonacci(line)
        endword = endword + currentlinelength
        thisline = splitPoem[startword:endword]
        thislinetoprint = ‘ '.join(thisline)
        print(thislinetoprint)
        line = line + 1
        startword = startword + currentlinelength

    print()

All this method can do is print that one poem, as the poem is built in to it. We call the method

printpoem()

and that one poem gets formatted the right way… It can’t do any other poem.

I
wrote
a poem
in a tweet
but then each line grew
to the word sum of the previous two
until I began to worry about all these words coming with such frequency
because as you can see, it can be easy to run out of space when a poem gets all Fibonacci sequency

Generalise over data

That’s fine but its a bit restrictive. I’d quite like to be able to write my own poems and turn them in to fibonacci poems. I don’t want to have to write a method for every poem I write. We need to generalise the method to work for any poem we give it. Most programming languages provide a way to do this. You provide the data they need to do their job in the form of arguments to the method. You pass the data to the method and it stores it in its own local variable, but otherwise does exactly as it did before. For my method to format poems, the data is the poem. I generalise the method over all poems, by making the poem an argument. I get rid of the assignment to the variable poemtoprint at the start and instead put the variable poemtoprint in the brackets of the header line of the method to show it is an argument. It will be given a new value each time the program calls the method.

def printpoem(poemtoprint):
    splitPoem = poemtoprint.split(" ")
    line = 1
    startword = 0
    endword = 0
    
    while endword < len(splitPoem):
        currentlinelength = fibonacci(line)
        endword = endword + currentlinelength
        thisline = splitPoem[startword:endword]
        thislinetoprint = ‘ '.join(thisline)
        print(thislinetoprint)
        line = line + 1
        startword = startword + currentlinelength

    print()

 

With that small change, this new version of the method works for any poem to print. The poem is no longer hardwired in to the method. To get it to print the original poem, we provide the poem when we call the method by placing it in the brackets in the call as follows:

printpoem("""I wrote a poem in a tweet but then each line grew to the word sum of the previous two until I began to worry about all these words coming with such frequency because as you can see, it can be easy to run out of space when a poem gets all Fibonacci sequency""")

This prints the poem exactly as before. The change means, though, that if I write my own poem (ok, I know its not as good as the original) I can pass it to the method instead as follows:

printpoem("""My poem began well, completely under control. But it got carried away. Lines grew longer, how long I couldn’t say. They took on a life of their own, until I realised at last. They were following fibonacci’s sequence which meant that once they were expanding they just kept growing in length so, so fast.”"")

It gets formatted in the fibonacci way too – no new code needed!

My
poem
started off
completely under control.
But it got carried away.
Lines grew longer, how long I couldn’t say.
They took on a life of their own, until I realised at last.
They were following fibonacci’s sequence which meant that once they were expanding they just kept growing in length so, so fast.

The poem could be stored in a variable, then we just put the variable in the call eg

mypoem = """My poem began well, completely under control. But it got carried away. Lines grew longer, how long I couldn’t say. They took on a life of their own, until I realised at last. They were following fibonacci’s sequence which meant that once they were expanding they just kept growing in length so, so fast."""

printpoem(mypoem)

This gets the value of mypoem and passes it to printpoem.

Getting more advanced: Generalise over methods

At this point I start to get carried away. Why stop at Fibonacci poems. Why can’t we have Factorial poems, that get bigger really, really fast, or arithmetic ones, or triangular shaped poems, never mind, your common or garden rectangular shaped ones. Why should I write a new method for each! The only difference between any of them is the  number sequence. We need to generalise over the number sequence too.

In many modern languages, Python included, this isn’t a problem. You can generalise over methods. Methods themselves can be thought of as data and you can pass them as arguments to other methods. All I need to do is add another argument to the method that I will call numbersequence. It is just a variable, but one that can hold a method. The type of method it holds is one that, given a number representing a position in a sequence, returns the number found at that position in the sequence. We just need to replace the call to fibonacci that we had before with a call to whatever is stored in this variable:

def printpoem(poemtoprint, numbersequence):
    splitPoem = poemtoprint.split(" ")
    line = 1
    startword = 0
    endword = 0
    
    while endword < len(splitPoem):
        currentlinelength = numbersequence(line)
        endword = endword + currentlinelength
        thisline = splitPoem[startword:endword]
        thislinetoprint = ‘ '.join(thisline)
        print(thislinetoprint)
        line = line + 1
        startword = startword + currentlinelength

    print()

 

To call this method, you give it a poem such as Brian’s and a method that gives a number sequence and it formats the poem according to the method.

If we call it with Brian’s poem and our fibonacci function…

poem = """I wrote a poem in a tweet but then each line grew to the word sum of the previous two until I began to worry about all these words coming with such frequency because as you can see, it can be easy to run out of space when a poem gets all Fibonacci sequency”""

printpoem(poem, fibonacci)

We get his poem formatted as before. However, as we now have a generalised function to solve the problem, not a specific one, we can do lots more. We can pass it other functions defining different number sequences and so print it out in different ways. For example, if I want to make the poem’s lines just increase by one word at a time in a simple triangular shape, I just need a method that returns the length of each line. That is easy as all it requires is the nice simple number sequence 1,2,3,4, … It just returns the number it is passed, as the line number gives the required length of that line.

def righttriangle(n):
    return n

We can pass our general method my poem and this method.

printpoem(mypoem, righttriangle)

and the poem is automatically formatted a different way:

My
poem started
off completely under
control. But it got
carried away. Lines grew longer,
how long I couldn’t say. They
took on a life of their own,
until I realised at last. They were following
fibonacci’s sequence which meant that once they were expanding
they just kept growing in length so, so fast.

Of course we should really write poems that match the number sequence we are using so here is my first attempt. Writing the method was easy. The poem was a bit harder, but here goes…

trianglepoem = "I like triangles of all types, but square cornered ones are especially right for me."

printpoem(trianglepoem,righttriangle)

I get my formatted poem …

I
like triangles
of all types,
but square cornered ones
are especially right for me.

Getting REALLY advanced: Currying favour

We can now print out poems in any pattern we can write the number sequence for. The simplest shape of all, where all lines are the same length, raises a new problem, though, and to solve it we will need to be more sophisticated than ever in the way we think of methods. We need something called currying, which gives an amazing amount of flexibility.

Lets suppose we want to print out a poem in a rectangular way with 5 words per line. That is easy we just need the method that takes the position n and always returns 5 whatever line we are on.

def rectangle5 (n):
    return 5

However, we’ve just spent a lot of time praising the idea of generalisation so of course what we want really is to pass it the number of words in a line too. That’s easy. We just need two arguments.

def rectangleN (side, n):
    return side

The trouble is this doesn’t work with our poem-printing method. It expects a single argument. Remember, how it appears in the method is:

currentlinelength = numbersequence(line)

Ours has two arguments. It doesn’t fit. It has the wrong type.

What we need is a way to pass arguments to a method one at a time. That is called currying. You give a method one argument and it gives you back a new method that takes the next argument. Some languages give nice easy ways to do that. You can do it in Python, but it looks a bit convoluted as there is no nice syntax. In fact its doing exactly as described above. You define a method inside the method.

In our case we want a method that, when passed an argument that says the number of words you want to fix each line length as, gives back a method of the kind we need. It should return a method, rectangleN, that when passed a number always returns the same number – that fixed side.

def rectangle (words):
    def rectangleN(n):
        return words
    return rectangleN

So this method has a method defined in it, rectangleN, that is the specific method we want. Whatever value is passed as the first argument is the value the created method will return when called. The method as a whole returns the new method, rectangleN.

We then get the method to give to our printpoem method by calling this method with just one argument so, for example,

rectangle(5)

creates the specific method  we need to give the number sequence 5,5,5, …

We really need a poem about rectangles to try this out on, but my poem-writing skills are running  out of steam. So calling it on the original poem

printpoem(poem,rectangle(5))

gives us a more boring version of that poem (though at least this one fits on the page):

I wrote a poem in
a tweet but then each
line grew to the word
sum of the previous two
until I began to worry
about all these words coming
with such frequency because as
you can see, it can
be easy to run out
of space when a poem
gets all Fibonacci sequency

OK so it loses the point of the poem. We have at least solved the programming problem, though. Currying means we can now even pass generalised methods to a generalised method.

What’s the point of all this? Probably none, but I enjoyed myself writing poems and programs, so maybe you will. It’s possibly a fun way to explore number sequences by writing number-sequence programs with linked poems to visualise them. Or just take a favourite poem and visualise lots of number sequences using it. It does, however, show what generalisation in programs is all about  though. That aside we definitely should mix poems and computer science more. Roll on National Poetry Day