NCSS Challenge with a twist

I mentioned in my previous blog post (April 2020) the intent to share more resources to help computing teachers challenged with the uncertainties brought by the COVID-19 pandemic. Months later, the uncertainties are still there and I have yet to share more resources!

One day I’ll share my year 10 Data Science project and year 11 Software project. What I’d like to share now is my year 10 coding project because it incorporates Grok Learning’s NCSS Challenge. I’ve been using the challenge for years and always as part of an assessment. Nowadays, teachers can even claim participation as accredited training. That means doing the NCSS Challenge in Term 3 is accredited PD, covers teaching/learning/assessment of software programming unit (IST) with 24/7 tech support, and good for face-to-face as well as off-campus scenarios. That’s a WIN-WIN-WIN-WIN !

Here’s what I’ll be doing with year 10s.

 

Computational thinking is an approach to solving problems: designing solutions or algorithms that can be implemented using code. Are you good at understanding problems and creating logical solutions? Can you automate solutions by writing code?

Task:

Technical skills in focus for this task are algorithm design and representation, error correction, as well as coding solutions. The twist is that you will code and evaluate someone else’s design.

 

Part A – NCSS Challenge

NCSS Challenge begins on Monday 27 July 2020. You can choose either the Intermediate or Advanced stream. Completing the challenge constitutes training for algorithm design and coding. Completion rate will be marked accordingly.

The first three weeks of NCSS challenge will be used to practice for Part B of this task. That is, before our third lesson of the week, you must share to the class pool at least one of your algorithms for an NCSS Challenge problem that week. Algorithms should be desk-checked and represented either as pseudocode or flowchart. It should also have a test plan comprising expected output for test cases, including an educated guess of what the hidden test case(s) could be.

On the third lesson of the week, you will choose someone else’s algorithm to write python code for. You will also evaluate the quality of their solution design and test plan.

Timeliness and completeness of submissions will be marked. Quality of submissions will not be marked as you refine assessable skills. Use every opportunity for formative feedback to do well in Part B.

Part B – Algorithm design and coding challenge

  1. On 17 August 2020 (week 4 of NCSS Challenge), you will be given a list of Problems with 3 levels of difficulty to choose from. Choose one problem to design an algorithm for.
    1. Represent your algorithm as pseudocode AND flowchart
    2. Create a test plan with test cases and expected output
    3. Desk-check your algorithm
    4. Submit in Canvas Class Tasks designed solution by Wednesday 26 August 2020

You can submit earlier or do multiple submissions. For example, you may attempt several problems of increasing difficulty as you gain confidence and competence.

  1. From the list of available algorithms other than yours, choose one to code. It can be the same problem you designed for. The teacher will give you the documented design.
  2. Evaluate the design. Was it accurate or did you have to deviate from the documented algorithm to solve the problem? Were all test cases provided? Were the expected output appropriate? Was the desk check accurate? Substantiate your evaluation with specific details.

 

For both design and coding, difficulty level impacts marks. You may choose different levels for design and development, e.g. if you are more confident designing algorithms versus writing and testing code. Excellent completion of simple problems could still earn an ‘A’.

 

SUBMISSION: 

Weekly Part A submissions will be in our Microsoft Teams site where it is easy to share documents.

Design for Part B should be submitted in Canvas Class Tasks by 26 August 2020.

Submit the following Part B components to Canvas Assessments for marking:

  1. Algorithm solution and test plan
  2. Python code
  3. Evaluation of algorithm solution

 If you attempted several levels, please submit the highest level completed.

 

I’m still wondering what to do with year 9s but it will also involve NCSS Challenge. I really liked what I did last year which culminated in a feature post on Grok Learning blog (!!!!!). I have keen coders in this cohort so it’ll be a different experience again.

For more on how I use NCSS Challenge, check this post. Or you could always contact me here or on Twitter if you’d like to discuss further. I’d love that!

How I teach computing with Grok Learning + ACA and python (mostly)

It’s no secret that I’m a huge fan of Grok Learning; it’s great that the Australian Computing Academy (ACA) is also using Grok as a platform to deliver some of their resources. My students have even asked me if I’m on Grok’s payroll 😀 (I’m not). This post aims to highlight how I use Grok in curricular and extra-curricular settings.

9 and 10 IST (Information and Software Technology)

NCSS Challenge – python + Intro to programming courses

I’ve been using NCSS Challenge since 2013 to teach the Software development and programming option. This python programming challenge runs in Term 3 (like, right now!) and goes for 5 weeks.

When I introduced this annual challenge to IST in 2013, I embedded it into the teaching and assessment program. In a nutshell, I allocated lesson times to complete the challenge and discuss syllabus topics. The associated assessment typically included engagement and achievement on the challenge and then application and/or reflection piece. The range of ability streams within the challenge facilitated differentiation. As students work independently, I monitor and track their progress such that when a student stays too long at a particular problem, I go over and offer to help. When there are 3 or more stuck, I hold a small-group teaching session. I get them to help those who need help later and I listen just in case.

Generally, I get students to do both Beginners and Intermediate streams in the first two weeks. By this time, students and I know which stream best suits their ability…as I kept saying, ‘Easy is boring.’ Occasionally, I got students to also attempt Advanced. So far, I’ve only had one student complete Advanced and that was last year.

This year, colleagues (yes, I have colleagues which is highly unusual for a computing teacher!!) and I agreed to exclude challenge achievement in the assessment. Assessments will instead look at application of what they learned through a coding project, reflection piece, and some problem-solving activities…on paper. I’m quite excited about this change. The Advanced stream this year is VERY different focusing on learning some AI concepts creating a card-playing bot. I hope to get ’round to sharing how I enthused students on another post (yeah, right).

Before or after the challenge, as well as during the challenge for early finishers, I get students to go through the Intro to Programming courses. Sure there’s repetition of concepts but that’s a good thing. The problems are different so students get to do more practice problem-solving with code.

web comp – html/css + new JS courses

Web comp runs at the start of the year. It’s a good way to learn web design as part of the internet and website development option topic. We’ve been using this for 2 years now and each time, the comp served as a platform for learning consequently applied in an assessment task… you guessed it – a website. The task was a ‘choose your problem to solve’ project which involved algorithm design (another story and resource worth sharing in its own right…eventually).

This year, I have some really keen programmers and I told them they could use JavaScript to enhance their sites. My students were clamoring for a JS tutorial in Grok…alas, it didn’t come till after the fact.

Anyway, after the task, I stumbled through teaching basic JS (I’m a beginner learning with the kids)! It’s like ‘where do you start teaching PhotoShop‘, right? I decided to set some JS programming challenges (thank you 101computing.net – this book is gold – no, it’s not Grok) because some kids can fly and they do. At some point, ACA released via Grok their Cookie Clicker JS course which I personally found helpful and really went a long way to help those who struggled to make sense of other online tutorials. Admittedly biased, there is a reason why my students and I love courses in Grok – the scope and sequence, language, pace, challenges, and whole delivery are very good. I’ve yet to check out the space invaders JS course by ACA, also in Grok.

SDD(Software Design AND Development)

I get students to complete Intro to Programming, and preferably also course 2. My main focus here is to strengthen their computational thinking as well as exposure to a range of problems that can be solved with code. There are risks as there are discrepancies between their programming experience and the syllabus. To name a few:

  • fixed length arrays
  • python has no built-in post-test repetition -> though conversion from pre to post is a good skill
  • python multiway selection means students often use ELIF in their pseudocode
  • array indices could start from one (1) in the syllabus, not the usual zero
  • dictionaries are not part of the syllabus

I’m like a broken record on discrepancies. On a good day, it means good discussions on evolution of hardware and software which are also syllabus content. On a bad day, we all just feel the syllabus needs updating (which, by the way, is in the works).

I love how python is easy to learn and has much to offer – or as we say in schools: low-floor/high-ceiling. I use it to demonstrate a lot of SDD concepts including precision in floating points (a series of division by 3s), boolean algebra, ASCII (ord and char), data types, control structures, standard algorithms.

During the NCSS Challenge, I allocate at least one lesson a week for students to participate. It’s a great opportunity to live and talk about the syllabus, i.e. error detection techniques, maintainability of code, internal and intrinsic documentation, test plans (what do you think the hidden test case is?). Fabulous!

extra-curricular

Grok has free courses, several thanks to ACA. Currently, we have a school subscription so everyone has access to all courses and comps. When we started the coding club, we got students to do the Intro to Programming courses. If a student is referred to me needing extension, I get them to Grok so I see how they think.

It would be nice to see coding as part of other curricular and extra-curricular activities. The above is what I’ve used it for.

 

Hmm, the above seems a bit broad-brush but I thought I’d just capture some thoughts and it’s been so long since I blogged I needed to start somewhere. Maybe I’ll add more in the future.

If you’ve come this far reading this, perhaps you care to comment and add ideas (please do, thanks).

Post has been updated 14Aug  to correctly attribute JS courses to ACA.

 

I love teaching girls to code

Tomorrow, my classes and club will begin participating in the NCSS python programming  Challenge 2014. It’s our second year and I’m quite excited as it’s a really fun challenge.

Like last year, I introduced the software programming and design topic using dance; except this time, I actually linked it to computational thinking straight away – decomposition, pattern recognition, pattern generalisation and abstraction, and algorithm design.  Timing was on my side as the year 9s have been learning new dance steps in preparation for the Year 9 dance. Plenty of inspiration in terms of computational thinking processes, value of coding, control structures and even functions…with parameters!

There is so much hype on teaching kids to code – nearly 12 million views of code.org’s What most schools don’t teach and the rise and rise of many learn to code sites. There’s also the impending implementation of the Digital Technologies curriculum, etc. etc. etc. But for me, it’s far more than the hype – I actually love teaching students to code.

Learning to code is more than just about writing code; it’s the least of it, in my opinion. It’s all the other stuff about computational thinking and systems thinking and critical thinking and creative thinking. That’s a whole lot of thinking – and doing – right there!

With computation thinking, I think it’s important to point out that we all do most of this already.. in real life! Think of all the procedural and component-based stuff like recipes and routines we have, for example. What is less common is algorithm design, especially in school where we teach ‘tried-and-tested’ algorithms. This is true not just in mathematics where we teach (and test) mastery of algorithms but also in humanities subjects like English as we teach the “right way” to write essays, for instance. In schools, it’s rare for students to design their own algorithms, their own way of doing things.  Learning to code provides opportunities for algorithm design, encourages it even. And I love it.

Systems thinking is taught in many subjects. We are surrounded by systems. We’re made of systems. But, it’s rare for students to make their own systems. Learning to code provides opportunities for designing systems.

Teaching kids to code can be daunting and having set “courses” do help. Learn.code.org is a good entry point for beginners (students and teachers alike). I also recommend  NCSS python programming  Challenge . Both are challenge-based and fun.

I also think it’s a good idea to expose students to the experience of learning another language, mapping similarities and differences – the meta stuff. This includes reflecting on problem-solving methods and attitude when faced with difficulty.

I enjoy doing the challenges with the students. Sharing the joy of wrestling with knotty problems and working out solutions. I love that I have a window to how they think. I love it when they come up with creative ways of thinking and solving problems. I love that they don’t ask “when I’m I ever going to use this?” because it’s fun just getting through it.  I love it when they teach each other and work together and share frustrations and wins together. This, for me, is the fun stuff…and I’m lucky I get a chance to be part of it because I teach coding.

The best part is that I get to play along.

print (“NCSS 2014, here we come!”);

Python Revision FUN

With Year 9 exams next week, I spent some time today revising some software development concepts with my class. With the end of NCSS Challenge ending a few weeks ago, it’s been a while since my students last coded in Python.

The focus today was on errors (ha!) particularly desk-checking and variable tracking. So, I wrote this code on the board:

code part 1

I got student volunteers to write out the values for variables: sites, mysites, i, len(mysites) and print.

Short as this code may be, it provided plenty of opportunities to revise a fair bit of content. Anyway, the sites the girls elected to have were Google, Apple and Sony, so print showed:

Option 0 Google

Option 1 Apple

Option 2 Sony

We then went on to editing the code to start printing from Option 1, instead of 0, etc., followed by this bit code (with opportunity to correct syntax errors for relational operator and if statement):google2And thus updating the value of print to show:

Option 1 Google

This is where we’re going

and I kept writing ‘on November 5′

We’re really going to Google?”

Are we really?”

Plenty of squeals and smiles.

To which I can only reply, “Wasn’t that a fun way to break the news?” *do it in code*

Two birds with one stone. And happy students to boot. Got to love that!

 

Software is poetry

… programming is not really the practice of writing lines of code. It is the art of taking big, intractable problems and breaking them down into ever smaller ones which can be understood, explained and then carefully assembled into a living, breathing work of art.

Software is poetry. It’s the expression of ideas in the most elegant form a programmer can devise.

This is a quote from a piece entitled, Coding. Way funner than you think by @gilfer. It’s a wonderful piece that really gets inside a programmer’s head – the feeling, the buzz, the excitement, the creative process that is software programming. There’s many more I can quote here but hey, go over and read it because @gilfer’s prose is beautifully written.

My chosen quote, however, does capture the essence of my NCSS Challenge experience.  @grubbypandas pinged me about this challenge knowing that I wanted to learn Python as a potential language to teach for Computing Studies (IST and SDD).  Aside, @grubbypandas also told me about pastebin, really useful site, imho (THANK YOU). In other words, I joined the NCSS Challenge to learn Python AND get ideas on how to teach Python, or other programming language – all for $20….bargain!. I haven’t written programs for ages (and I mean ages) so I had my reservations but going into the challenge with  @grubbypandas and @akwc  helped.

I’m proud to say that I finished the challenge – Intermediate level –  and before I forget everything, thought it wise to jot down these thoughts.

Likes

Learn in manageable chunks. Each week, a set of notes were provided that  provided enough information to complete the week’s 6 questions. I skimmed through these and then referred back as needed. Over the weeks, I referred back to more and more – a good indication that I was building on previous knowledge and skills. All these resources are now available to me. yay!

Tackle interesting problems. Just like the quote says above, programming is at its core a problem-solving exercise. It involves looking for patterns (algorithms) and exceptions and then writing/tweaking. Still with the initial nod to the traditional “Hello world” , the challenge then took advantage of opportunities for tangential learning with questions involving Kaprekar’s constant, Aboriginal languages, QWERTZ keyboard (Y and Z swapped in German keyboards), iambic pentameter en route to writing Twitter poetry. I was learning more than Python.

Provide instant feedback and hidden cases. The interactive checker is rigorous and unforgiving chucking out an error for that printed extra space, for example – which is a good lesson in terms of real-world programming; pay attention to the requirements and realise that the computer will only do what you tell it to do. But wait, there’s more. The checker also includes hidden test cases which is a good way to ‘catch’ hard-coding of solutions (I’m not quite sure how else to explain that) as well as promoting extrapolation (higher-order thinking). And those green checks look better than the red crosses.

Have multiple-entry levels and promote community. It was very humbling to note that the challenge was meant for students, some as young as in year 5 (10 or 11 years old?) and that they were tackling the same problems as I was. Truth be told, I struggled more with unpacking the problems (finding algorithms) than in actual coding. The challenge provided a forum for students to help/engage with each other as well as contact tutors for more support.  The forums also showed that there are very capable students out there, already thinking about elegance and efficiency in writing and executing code; these skills rarely have outlets in traditional schooling.

There is more than one solution. As @gilfer noted in his piece, there is no single solution and that every programmer will express his/her style. The checker accepted working code but the challenge also published solutions which provided more opportunities to learn such as new commands/syntax not yet covered. I liked that I could play with different algorithms.

Dislikes (no more, see update)

There was no forum for teachers. Okay, so there are benefits for going in there as a level-playing field (think massivelyminecraft approach). Still, it would be nice to discuss how this challenge can be incorporated into the curriculum or as an enrichment/extension activity. This is partially why I’m writing this post, in the hope that other teachers could extend my thinking here!

…not much else to dislike…seriously. (Update a few minutes later: @grubbypandas has kindly pointed out what I missed… THERE IS A FORUM FOR TEACHERS…and I missed it….gah!)

All up, it was a fantastic 5-week challenge. Sure it got frustrating in parts but ultimately rewarding. I highly recommend doing the challenge with students, not just for Computing Studies, in fact. It’s for anyone who wants to encourage computational or algorithmic thinking. As this challenge has shown, this type of thinking can be promoted as cross-curricular; there are patterns everywhere (I’ve said that in my Algebra classes as well); Python is a tool to help code those patterns.

Besides, as @gilfer said…

Coding. Way funner than you think.