﻿<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="https://blog.codegrades.com/assets/xml/atom.xsl" type="text/xsl media="all"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom">
  <title>The CodeGrades Blog</title>
  <id>https://blog.codegrades.com/feed.xml</id>
  <updated>2022-04-27T16:51:50Z</updated>
  <author>
    <name>Nicholas H.Tollervey</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://blog.codegrades.com/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://blog.codegrades.com/"/>
  <generator uri="https://getnikola.com/">Nikola</generator>
  <entry>
    <title>Hello, World (again)</title>
    <id>https://blog.codegrades.com/posts/hello-world-again/</id>
    <updated>2022-04-26T16:10:00+01:00</updated>
    <published>2022-04-26T16:10:00+01:00</published>
    <author>
      <name>Nicholas H.Tollervey</name>
    </author>
    <link rel="alternate" type="text/html" href="https://blog.codegrades.com/posts/hello-world-again/"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;&lt;img class="outdent" src="https://blog.codegrades.com/images/learn.jpg" alt="Everyone can code!"&gt;&lt;/p&gt;
&lt;p&gt;The COVID outbreak has disrupted our world in lots of different ways.&lt;/p&gt;
&lt;p&gt;For CodeGrades, it meant our face-to-face work with young coders, in London,
had to stop.&lt;/p&gt;
&lt;p&gt;We had been meeting since the Autumn of 2019 to prepare both young coders and
their ever enthusiastic parents for our initial syllabus of Python grades.
Improvised venues included
&lt;a href="https://www.barbican.org.uk/"&gt;the Barbican&lt;/a&gt;, co-working spaces, the
&lt;a href="https://www.tate.org.uk/visit/tate-modern"&gt;Tate Modern&lt;/a&gt;
and the
&lt;a href="https://www.thersa.org/"&gt;Royal Society of Arts&lt;/a&gt;. It was engaging, friendly and
the candidates (no matter their age or level of experience) were a credit to
themselves.&lt;/p&gt;
&lt;p&gt;They had been building all sorts: from games, to websites to mobile apps. It's
such a shame we couldn't complete the courses of study and have folks actually
present their projects for grading.&lt;/p&gt;
&lt;p&gt;We learned a huge amount from this remarkable group of young people and their
parents. Because of their feedback, the syllabus was subsequently refined,
various tools were updated (the &lt;a href="https://codewith.mu/"&gt;Mu editor&lt;/a&gt;, and
&lt;a href="https://pypercard.readthedocs.io/en/latest/"&gt;PyperCard&lt;/a&gt;) and we all naively
looked forward to the soon-to-be-imminent easing of lock-down here in the UK.&lt;/p&gt;
&lt;p&gt;Yet that didn't happen, and two year's later, the world has changed.&lt;/p&gt;
&lt;p&gt;Instead CodeGrades has taken a different direction, and reviving this blog is
evidence of this journey.&lt;/p&gt;
&lt;p&gt;To cut a long story short,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lock-down afforded us the opportunity to connect with many folks in the wider
  Python community, all over the world, who were interested in our crazy
  experiment in coding education.&lt;/li&gt;
&lt;li&gt;They called our bluff about making the work we'd been doing accessible. So we
  put our code where our mouth is, and have a completely new
  &lt;a href="https://codegrades.com/"&gt;web based version of CodeGrades&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The assessment process has changed, but we believe it is actually better as
  a result of this adjustment.&lt;/li&gt;
&lt;li&gt;The new website is completely redesigned, rewritten and feature complete. It
  is currently undergoing technical alpha testing with trusted invited friends
  of the project, and we expect an open beta to be released later this summer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was always our intention for CodeGrades to be accessible to anyone, anywhere
there's an internet connection, and lock-down forced our hand. Every cloud has
a silver lining.&lt;/p&gt;
&lt;p&gt;Finally, this is just the tip of a very large iceberg.&lt;/p&gt;
&lt;p&gt;For instance, here's a sneak-peek of the rough-cut of our "elevator pitch"
video (still in development):&lt;/p&gt;
&lt;div class="wise-iframe-wrapper"&gt;
&lt;iframe src="https://www.youtube-nocookie.com/embed/MFe-HzZfEqQ" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" width="560" height="315" frameborder="0"&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;Now that various pieces in a very complicated jigsaw puzzle are starting to
fit together, expect much more regular updates via this blog, and our
&lt;a href="https://twitter.com/CodeGrades"&gt;Twitter account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See you soon. :-)&lt;/p&gt;&lt;/div&gt;</summary>
  </entry>
  <entry>
    <title>CodeGrades on Podcast.__init__</title>
    <id>https://blog.codegrades.com/posts/podcast_init/</id>
    <updated>2019-08-13T04:00:00+01:00</updated>
    <published>2019-08-13T04:00:00+01:00</published>
    <author>
      <name>Nicholas H.Tollervey</name>
    </author>
    <link rel="alternate" type="text/html" href="https://blog.codegrades.com/posts/podcast_init/"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;CodeGrades was recently on the
&lt;a href="https://www.pythonpodcast.com/codegrades-learn-to-program-episode-224/" target="_blank"&gt;Podcast.__init__&lt;/a&gt;
show where we had lots of fun exploring the links between music and coding
education as a way to explain the concepts behind CodeGrades.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Podcast.__init__" src="https://blog.codegrades.com/images/podcast__init__.png"&gt;&lt;/p&gt;
&lt;p&gt;The host, Tobias, asked plenty of interesting questions, giving us a chance
to explain and unpack the high-level aspects of the project, tell the story
so far and describe the various upcoming milestones. We were also
able to touch upon related projects such as the
&lt;a href="https://codewith.mu/"&gt;Mu beginner's code editor&lt;/a&gt; and
&lt;a href="https://pypercard.readthedocs.io/en/latest/"&gt;PyperCard&lt;/a&gt; GUI framework, also
aimed at beginner developers.&lt;/p&gt;
&lt;p&gt;We were very pleased with Tobias's positive reaction to CodeGrades.&lt;/p&gt;&lt;/div&gt;</summary>
  </entry>
  <entry>
    <title>Why Python?</title>
    <id>https://blog.codegrades.com/posts/why-python/</id>
    <updated>2019-06-03T11:15:00+01:00</updated>
    <published>2019-06-03T11:15:00+01:00</published>
    <author>
      <name>Nicholas H.Tollervey</name>
    </author>
    <link rel="alternate" type="text/html" href="https://blog.codegrades.com/posts/why-python/"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;CodeGrades (initially) targets Python as a language for learning programming.
This post explains why.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Creation of Code" src="https://blog.codegrades.com/images/creation_small.png"&gt;&lt;/p&gt;
&lt;p&gt;The most obvious answer is that the folks involved in CodeGrades are
professional Python programmers. But there are more fundamental reasons why
Python makes a great choice when first learning to write software, especially
when compared to other programming languages.&lt;/p&gt;
&lt;p&gt;A primary strength of Python is its readability. Python uses indentation
to structure code, so &lt;em&gt;how it looks and is presented&lt;/em&gt; tells us something about
how the code works. Python also has remarkably few confusing special syntactic
symbols to organise code.&lt;/p&gt;
&lt;p&gt;Why is this important?&lt;/p&gt;
&lt;p&gt;If, like me, you have taught learners with English as an additional language or
who have a special educational need such as dyslexia, then you will know
that Python's intuitive indentation is something people, the world over, all
understand (no matter their human language background or potential barriers to
educational engagement). A lack of confusing symbols, such as &lt;code&gt;{&lt;/code&gt;, &lt;code&gt;}&lt;/code&gt; and &lt;code&gt;;&lt;/code&gt;
scattered around the code makes Python very easy to read compared to other
languages. Furthermore, the indentation rules guide learners to present and
write their code (no need to remember what all those confusing symbols mean).&lt;/p&gt;
&lt;p&gt;Since you don't have to concentrate that much on how to read and write Python
code, you can put more effort into actually understanding it. Anything that
lowers the effort required to engage with programming in an educational context
is a good thing. In terms of code accessibility for learners, Python is an
excellent choice.&lt;/p&gt;
&lt;p&gt;Another strength is that Python is a mostly obvious and simple language.&lt;/p&gt;
&lt;p&gt;The names of things built into the language make sense (for example, "list"
rather than "array" and "dictionary" rather than "hashtable"), the things
built into the language are useful (the so-called batteries included approach)
and often such features are implemented in a simple and intuitive way. This
puts Python in a rather unique sweet spot: the language has enough features
that it's useful, Python usually names these things in an obvious way (making
them easy to discover) and using such features is often easy. Of course,
there are aspects of Python for which such generalisations are false. However,
when dealing with beginner developers, Python's &lt;em&gt;combined strengths&lt;/em&gt; of
usefulness, clarity and simplicity are an extraordinary advantage compared to
pretty much all other text based programming languages.&lt;/p&gt;
&lt;p&gt;Python also endeavours to do the "expected" thing. For instance, if I try to
add a dictionary and a list Python will complain:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; {} + []
Traceback (most recent call last):
  File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;
TypeError: unsupported operand type(s) for +: 'dict' and 'list'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Python is saying you can't use the &lt;code&gt;+&lt;/code&gt; operand to sum together a dictionary and
a list. This, I would argue, is the "expected" thing to do. When I ask myself,
"what should be the answer to adding a dictionary and a list?" I can't think of
a sensible answer. Summing really only makes when used with numeric values or
as a short-hand way to "add" two strings of characters together (for example,
&lt;code&gt;"hel"&lt;/code&gt; + &lt;code&gt;"lo"&lt;/code&gt; makes &lt;code&gt;"hello"&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Contrast this behaviour with JavaScript. Look what happens when I try the
equivalent operation:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; {} + []
0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Of course the answer is obviously zero..!?!?!? I mean, what were &lt;strong&gt;you&lt;/strong&gt;
expecting it to be?&lt;/p&gt;
&lt;p&gt;Here's some more fun. What happens when we switch around the summed terms?&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; [] + {}
"[object Object]"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you were expecting the same result and got a surprise when things were
different, then you're demonstrating the importance of consistency (especially
in an educational context -- this is an important aspect of building
up internal mental models of how programming languages work).&lt;/p&gt;
&lt;p&gt;Learning, by its very nature, involves making mistakes and &lt;strong&gt;realizing that
mistakes have been made&lt;/strong&gt;. Only then can behaviour be adjusted, mental models
updated and progress made. If you're learning to code with a programming
language that would rather make what appears to be a best guess at what you
mean (like JavaScript), rather than complain about an obvious error, then all
sorts of problems will pass unnoticed. Instead, you'll either continue with
your mistaken or incomplete view of the programming world or you'll have to
learn stuff like the rather tortuous rules used by JavaScript that cause
&lt;code&gt;{} + []&lt;/code&gt; to equal &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;[] + {}&lt;/code&gt; to equal &lt;code&gt;[object Object]&lt;/code&gt; (whatever that
may mean).&lt;/p&gt;
&lt;p&gt;Python, on the other hand, will just (helpfully) complain about your mistakes.
Please don't misconstrue my examples as an attack on JavaScript. The point is
simple: different programming languages have different strengths and weaknesses
(and often what appears as a strength in one context, is a weakness in
another), and Python's preference to complain is (because it helps avoid
misunderstandings) a good thing.&lt;/p&gt;
&lt;p&gt;Such a focus also encourages both learners and professionals alike to create
understandable and coherent code. Such code is easier to maintain and less
likely to contain bugs (because many bugs are caused by &lt;em&gt;misunderstanding what
the code is actually doing&lt;/em&gt; compared to what you &lt;em&gt;mistakenly think it ought to
be doing&lt;/em&gt;). Python is powerful because it allows folks to simply state their
ideas in coherent code. This, once again, is an extraordinary advantage in an
educational context since learners can focus on the problem in hand rather than
having to create, configure and build "boilerplate" code needed before anything
useful can be accomplished (a rather demoralizing activity).&lt;/p&gt;
&lt;p&gt;Python is also a real programming language. By this I mean it is not just some
sort of educational tool such as Scratch and other block based projects. The
skills and knowledge gained by learning Python
are economically valuable and useful in many vocations. Put simply, learning
Python has professional value in many disciplines. The reach of Python is also
an advantage. You'll find Python running on all sorts of different platforms
(from desktop operating systems to server farms "in the cloud") and devices
(from your laptop to an embedded device no bigger than your finger nail) to
fulfil all sorts of tasks (from helping to render state-of-the-art computer
generated special effects in films, or processing data captured from space
telescopes and scripting computer games to, running some of the busiest
websites in the world).&lt;/p&gt;
&lt;p&gt;It turns out that learning Python gives you a useful and widely applicable
skill!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.codegrades.com/images/microbit.gif"&gt;&lt;/p&gt;
&lt;p&gt;Finally, there is the Python community. It has been my happy experience that
many folk in the Python community are welcoming, friendly and work in a spirit
of open, supportive and respectful collaboration. My hope is that CodeGrades
can go some way to help continue such a spirit in new
programmers by engaging with those who share a constructive passion for
programming education in the wider Python community. While not a unique
feature, the focus on and openness to beginner programmers and new community
members is certainly a great strength of the wider Python community.&lt;/p&gt;
&lt;p&gt;However, like all communities, the Python community also contains thoughtless,
ignorant and (alas) nasty folk. Sometimes things go wrong, causing pain for
some or all involved. CodeGrades acknowledges such experiences and views them
as sadly inevitable. We believe it important to foster in CodeGrades
participants a constructive, respectful and honest outlook and promote
expectations of open, safe and friendly collaboration. Such expectations for
the behaviour of code mentors and candidates alike, while preparing for and
taking part in the grading process, reflect our belief that CodeGrades isn't
just about learning technical skills. CodeGrades is a way to cultivate and
foster the social skills and maturity needed to deal with the inevitable
problems that may arise. CodeGrades isn't just about
learning to code, it's also about learning to flourish in a technical
community.&lt;/p&gt;
&lt;p&gt;So, why Python? In conclusion: we know it already, it's a powerful language,
it's a valuable skill and it has an amazing community which is fertile for
promoting the flourishing of beginner programmers.&lt;/p&gt;
&lt;p&gt;Finally, all of the Python positives described above demonstrate the
thoughtful efforts and formidable technical skill of a huge number of folk
within the Python community. CodeGrades would like to publicly thank all
involved. It is our sincere hope that if our CodeGrades experiment is a
success, we can give back to this wonderful community.&lt;/p&gt;&lt;/div&gt;</summary>
  </entry>
  <entry>
    <title>Hello CodeGrades!</title>
    <id>https://blog.codegrades.com/posts/hello/</id>
    <updated>2019-05-21T17:30:00+01:00</updated>
    <published>2019-05-21T17:30:00+01:00</published>
    <author>
      <name>Nicholas H.Tollervey</name>
    </author>
    <link rel="alternate" type="text/html" href="https://blog.codegrades.com/posts/hello/"/>
    <summary type="html">&lt;div&gt;&lt;p&gt;This is a blog about &lt;a href="https://codegrades.com/"&gt;CodeGrades&lt;/a&gt;, an experiment to
help folks learn about programming (initially in Python). We'll use it to
celebrate the successes, learn from the failures and reflect upon the feedback
of participants. We'll also share project news here too.&lt;/p&gt;
&lt;p&gt;So, what are CodeGrades?&lt;/p&gt;
&lt;p&gt;&lt;img alt="Learn, grade, grow" src="https://blog.codegrades.com/images/learn-grade-grow.png"&gt;&lt;/p&gt;
&lt;p&gt;At a time when technology is finding its way into every aspect of our lives
many folks want to be more than just passive consumers of technology.
They feel a desire to become creators of technology. They want to take control
of their digital world. They want the skills to make their technology reflect
their own needs.&lt;/p&gt;
&lt;p&gt;This is where CodeGrades come in...&lt;/p&gt;
&lt;p&gt;CodeGrades are a programming version of time-proven techniques like music
grades or belts in martial arts. Learners level up by
applying the knowledge and skills needed for each grade to their own fun,
interesting and challenging coding projects. Learners present their projects to
professional software developers who assess the projects against the criteria
for the grade being taken and provide a set of marks and written feedback so
the learner can see where they're doing well, what needs to improve and what
their next steps may be.&lt;/p&gt;
&lt;p&gt;CodeGrades are eight cumulative steps for learning how to write code. The first
grade is easy enough for most people to take as a first step into programming.
The eighth grade is of equivalent standard to the skills and knowledge needed
to be an effective junior professional software developer. The middle grades
bridge the way so the skill gaps between each of the grades is achievable.
They're like stepping stones into coding, or perhaps a modern day
&lt;a href="https://en.wikipedia.org/wiki/Gradus_ad_Parnassum"&gt;Gradus ad Parnassum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ceci n'est pas une bug" src="https://blog.codegrades.com/images/treachery_of_bugs.png"&gt;&lt;/p&gt;
&lt;p&gt;The syllabus for CodeGrades is written by professional software developers. The
grades reflect current best practice found in the software industry. They offer
a framework for sustained and structured long term learning to write code. All
the resources associated with CodeGrades are free, learners only pay to take
the grading. Grades will be competitively priced and will certainly not
cost the many thousands needed to attend a code bootcamp.&lt;/p&gt;
&lt;p&gt;Passing a grade is undeniable evidence that an expert programmer believes the
learner has attained the level of competence, knowledge and skill for the grade
taken. Nobody can take that achievement away. It's something to be celebrated
and gives learners the confidence and momentum to continue on
their path to programming mastery.&lt;/p&gt;
&lt;p&gt;The professional developers who assess the candidates in a grading (we call
them &lt;em&gt;code mentors&lt;/em&gt; because that sounds more friendly than &lt;em&gt;examiners&lt;/em&gt;) are
paid for their time at a level comensurate to that of a senior software
engineer. We like to think this may be an alternative source of income for
FLOSS developers who want to concentrate on their software projects rather than
work in an office.&lt;/p&gt;
&lt;p&gt;That's it in a nutshell.&lt;/p&gt;
&lt;p&gt;It's early days but we have already successfully graduated a first cohort
of learners through "grade 1 Python" (with better than expected outcomes).
We have just started a second cohort of learners to test the new syllabus (more
on that soon) and hope to engage with further test cohorts over the summer.
Eventually we will open up our website so learners will be able to book and pay
for grading. We expect this to happen by the end of 2019 at the latest.&lt;/p&gt;
&lt;p&gt;There is still much to do! If you think you could support our work, or perhaps
you have feedback or maybe want to get more involved, please don't hesitate to
get in touch via the email address at the bottom of this page.&lt;/p&gt;
&lt;p&gt;Onwards and upwards.&lt;/p&gt;&lt;/div&gt;</summary>
  </entry>
</feed>
