Coding as a stepping stone … This is the full version or the MEGA version of this Blog post I wrote for Grok Learning – So you are teaching coding which explores more of the issues behind teaching coding.
The push for STEM, STEAM, STREAM has seen a huge interest from industry, government and the technology community to get students to code.
Coding is not STEM. STEM is not coding. This post is in no way a bashing of learning to code, quite the opposite, it is a bashing of coding at the expense of …. well everything else STEM related.
Stem is not coding… but there is huge overlap.
There is huge benefit of using coding to teach STEM Skills (what ever they are!), but teaching coding as the end goal of a STEM program and to tick a STEM box is doing a disservice to industry, government and the students that are learning.
Ask the question: what is your end game with teaching your students to code? What skills do they need to take their coding to the next level? How do you assess the Critical (?) skills students need for the future (http://www.edudemic.com/new-skills-world-looking/ , https://globaldigitalcitizen.org/21st-century-skills-every-student-needs for example) ; Communication (Collaboration) , Leadership, Digital Literacy, Problem Solving, Ethics to name a few.
What are these skills: According to EU Skills Panorama (2014) (http://skillspanorama.cedefop.europa.eu/sites/default/files/EUSP_AH_STEM_0.pdf) they include:
numeracy and the ability to generate, understand and analyse empirical data includ- ing critical analysis; an understanding of scientific and mathematical principles; the ability to apply a systematic and critical assessment of complex problems with an emphasis on solving them and applying the theoretical knowledge of the subject to practical problems; the ability to communicate scientific issues to stakeholders and others; ingenuity, logical reasoning and practical intelligence
Why do we need to teach them?
Demand for STEM skills is anticipated to increase in the short and medium term. Whilst the numbers of STEM students and graduates are both increasing, some employers report that they are not ‘job ready’ and do not possess the ‘right’ skills, especially soft skills.
Now we have an idea of the end goal / big picture how do we transition there?
Leverage coding to teach these skills within a broader STEM umbrella.
Why do students need to learn to code? What are the advantages and or disadvantages? How do you teach technology agnostic skills to avoid jumping on a short lived silver bullet that will not be around when students finish school? How do you teach students transferable skills that are not just follow recipie / remix. (Hint: Teacher training is important, as is having a longer term view, rather than a “I use robots, I have taught STEM” mentality.)
Teach principals not specific tools where possible.
- This is where computational thinking comes into play.
- Thanks Google: https://computationalthinkingcourse.withgoogle.com/unit
- Decomposition: Breaking down data, processes, or problems into smaller, manageable parts
- Pattern Recognition: Observing patterns, trends, and regularities in data
- Abstraction: Identifying the general principles that generate these patterns
- Algorithm Design: Developing the step by step instructions for solving this and similar problems
If you read the above and understand them you are doing better than most teachers?—?these are just big words that reflect what we do nearly every day.
- Decomposition: not something that happens to dead stuff. Not somthing Motzart has been doing for the last few hundred years, think about it?—?break something into smaller manageable chunks. Big Picture stuff becomes smaller picture?—?Building a house is big, getting the plans for the house is more manageable.
- Pattern Recognition: is there stuff that is repeating? Can I chunk data / processes together? Building a website?—?there are patterns (standards) for each page. Loops in code. Stuff we do over and over become design patterns.
- Abstraction: take the patterns and try to create rules / templates for them. Find the underlying rules or simplest forms for the data or processes. For our website, we can abstract it to a site map, where each node / page in our map represents the actual page. If we draw a person, stick figures are abstracted forms of humans.
- Algorithm Design: Create the recipe for the process / problem. The more detail the better. Make me a cup of tea https://web.archive.org/web/20140811033029/http://www.rsc.org/pdf/pressoffice/2003/tea.pdf
A nice bunch of steps that can be followed?—?A recipie?—?An Algorithm!
(to really stretch yourself and students on this ask them how it scales; how would you make 2 cups of tea? 10 cups? 100 cups? What about all at once?)
For a really great take on algorithms see; https://www.youtube.com/watch?v=2zVpWu1i5qM
Teach skills that are transferrable across technology
- Explicitly teach a problem solving methodology (In IB Design we use the Design Cycle, in Victoria (Australia) VCE IT they use the PSM (Problem Solving Methodology)
- Most sane methodologies / frameworks follow the same general steps:
Step 1: What the hell are we doing ,why are we doing it, who the hell are we doing it for and is it really important?
- ask questions,
- clarify information,
- set constraints,
- does the problem need solving? (Are there existing products / solutions?) Is the time / resources worth the solution?
- Who are the major stakeholders?
- how important is it really?
Step 2: How the hell are we going to do it?
- can we solve it the problem?
- what skills / tools / time / money / people / resources do we need?
- what are we actually going to deliver to our client / person who asked us?
- how and when are we going to deliver it?
- If you skip past step 1 and 2 is the problem a problem or are you just building a solution? Is the problem clearly defined?
Step 3: Lets do this thing.
- break it down so we know where to start.
- Make the plan so we know who is doing what and when.
- Do the plan
- what changes need to be made to our plan.
Step 4: Did actually do what we said we were going to do?
- if we said it was going to be red is it red?
- could it have been done better? (The answer is YES)
- are our stakeholders / audiences happy? (Why / Why not?)
- does our solution make the world a better place?
- ** can we make money from it???
Use real world problems where possible.
- Talk to people and find out what they need done.
- Small simple problems are often easier to find that you would think.
- Make me a cup of tea. Make me a sandwich.
Get code outside of the screen where possible.
- Robots?—?EV3s / Eddisons / BrickPi
- Sensors?—?Arduino / Raspberry Pi (see Grove Pi)
This brings this back to how do you teach coding and transfer skills?
Here is what I am doing and my goal is: (See Grok Learning Post)
My end goal is to have students capable of designing and solving technology problems for other people in Y9–10, and wanting to take Computer Science / Engineering in their senior years, with a future in Science, Technology or Engineering
The challenges faced come from the nature of these drag and drop interfaces, the immediate feedback and the culture of reuse/remix and share. (There are much deeper issues around teacher training, copyright and creativity)
We use Grok Learning, specifically the WiseTech Code Launch 2017 to teach python from Y6–10, and have Y11 & 12s using it in our CoderDojo. (See Grok Learning teacher accounts https://groklearning.com/teachers/australia/). We are using this to get students to a standard level of coding and a standard language?—?this simplifies teacher content knowledge as well as allowing progression. The self paced nature of Grok enables students to work at their own pace and be supervised (Grok has amazing access to resources and student achievement for teachers) as they progress. I have also created a youtube playlist to assist students who need a little extra (And non-expert teachers) support.
Lesson structure is; recap, remind of skills or key words from previous sessions, introduce topic of where they should be, then monitor students to keep pace with a reasonable level of achievement as a classroom process. Our assessment is through an IB Design Cycle task for each year group, where students apply the skills that they are learning. I also reinforce the leaning with Kahoot (for fun) and Google Forms (self marking quizes) to track the overall learning in the classroom.
Practically we are using python as our inital language for Digital Technology. in Y6–8 and in our Year 9/10 electives (Students design and build an IoT device for a client?—?temperature sensor / photo booth / infra-red camera to track animals etc) and to program more real world applications?—?looking at how ATM software might work or how data is moved between systems (sending data to satellites and receiving data back?) In the 6–8 we use Edison robots in Y6/7 Digital Technologies where students use Python (or EDpy) to program the motors and sensors or a simple drag and drop interface (similar to Lego Mindstorm) for those who are still transitioning to Python. On the extra-curricular side of things, some robocup teams are learning Python so they can use a BrickPi instead of Lego EV3.
Grok Learning, as an online, self paced learning platform, has seen us able to embed more code into more lessons in a shorter period of time. It enables non-expert teachers to get up to speed. It covers the basics well and does leave students quickly asking for more (How to do GUIs, how to build games).
If I had one criticism of online coding tutorials and platforms like Scratch, Grok Learning etc, is that they teach syntax but not complexity or the more “boring?” theory. Doing is great, the pace is good, but some more fundamentals or theory in the later more advanced courses would not go astray.
What is missing?
The biggest gap in our overall program and in what we are doing is around Ethics (read https://www.amazon.com/Rethink-Retool-Reboot-Technology-Mattered/dp/1853399051) / Cybersafety / Digital Citizenship and that big can of worms. These are huge areas that need continual embedding into this sort of curriculum, not a one off. It is hard and harder to manage this in a crowded curriculum where you are teaching basic computer skills (sorry no digital natives?—?not everyone knows how to use word well!) as well as Digital Technology content. It is also hard to manage age appropriate across Y6–12 where the home technology environments range from ultra permissive to ultra restrictive and the maturity levels are just as broad.
Platforms like Scratch and Grok Learning are great first steps along the “lets learn to code” path, stepping stones even. A solid base from which to teach more Computational Thinking and Problem Solving by example are needed to keep the current generation of “coders” moving from trivial to meaningful (from want-to-be-game developers to makers and engineers.)
Check out Grok Learning, see my YouTube channel and shout out to me on Twitter – let me know what you think.