Tuesday, 29 April 2014

Which programming language should you choose?

With so many programming languages to pick from, it can be difficult to decide which one to teach students. I wanted to share my experiences from my background as a programmer and help narrow the options down.
If you are to teach KS3 and KS4, the very short answer, in my opinion, would be JavaScript and this post explains why.

Relevance

Teaching programming to KS1 and KS2 will most likely not go beyond explaining some basic concepts and writing simple programs in special learning tools (e.g. Scratch). Students in KS3 and KS4 however, will probably want to program using a ‘real world’ programming language. This can be more motivating for students at that age, and could even teach them a skill that they can use outside school or later on in their career.

Decisions

The issue I see here is deciding on which programming language to teach. Personally, I have used many programming languages over the years, starting with Basic in the early eighties to Pascal, C, C++, Java, C#, and most recently JavaScript. For this discussion, I am focusing on the programming languages I have used, but of course there are other languages that can be good candidates such as Python. Omitting Basic, Pascal, C, and C++ because they’re either not popular anymore or too difficult to learn, leaves us with Java, C# and JavaScript.

  • C# - while being my favourite programming language, is limited to the Windows platform and I think this is a big disadvantage in a time when platforms such as the iOS and Android are dominating the mobile devices market.
  • Java (which by the way, has nothing to do with JavaScript despite what its name may imply) has some big advantages. It is easy to learn and is platform independent, meaning that it can work on any machine, plus it is the main programming language for Android devices, and that is a big plus. Also, its resources and development environments are mostly free. You can’t go wrong with teaching Java so it’s definitely a good option and many computing science departments at universities go for it as their main programming language.

Recommendation: JavaScript

If it was up to me however, I would go for JavaScript. My reasons for recommending JavaScript are as follows.

  • Its basics are very easy to learn for a beginner
  • It is platform independent, so it’s possible to run the program on any device with a web browser.
  • All the required tools are free – students can start simply with a text editor (e.g. note pad), and a browser (e.g. Chrome or Firefox).
  • JavaScript is part of the HTML5 standard which many expect to be the new de facto standard for writing multi-platform applications.
  • Accordingly, it also requires knowledge of some HTML (at least the very basics), and with HTML being the actual webpage that eventually hosts the JavaScript program, learning basic HTML is very useful anyway as it is the standard for defining web pages.
  • It is a skill that students can use outside the classroom to develop interesting interactive webpages and a skill that some of them are very likely to need in any IT related career.
  • It is COOL to learn because it is basically the language that made the web interactive.

Having said all that, it is important to stress that what is more important than learning the specifics of any language, is learning the main concepts of programming. Once the concepts are mastered, switching between languages is, in most cases, a very trivial thing. While I am recommending JavaScript, I think you can’t go wrong with Java or Python as well.

I hope that this has been useful.

Tuesday, 1 April 2014

The mystery of teaching computing at schools

As a person who has been programming since the age of nine, which was a long time ago, and as an academic researcher in computing science whose focus is on education, I am very excited about the new Computing At School curriculum to be introduced later this year. Regardless of the arguments about the approach to that and the timing, I am totally in favour of introducing students in more depth to computing and computational thinking. It provides the students with problem solving skills that are applicable to many other disciplines and to today’s and tomorrow’s world as well.

When it comes to using tools to support teaching the new curriculum, a number of tools come to mind to help teaching programming and writing algorithms such as MIT’s Scratch, Kudo and Logo. However, even when talking specifically about algorithms, there is much more to programming than simply being able to write or understand an algorithm. Students need to understand that there are many algorithms to solve the same problem. In most cases there are compromises between the speed of the algorithm and the time it takes to implement it, or between writing code that is easy to understand, debug and modify and one that executes fast but is hard to maintain. This is just one example of the many decisions that programmers need to make, and existing tools may not be as well suited to raising or discussing such issues, as they are other elements. Arguably, understanding the benefits and shortcomings of different ways of solving a problem - and the compromises that need to be made based on the specific circumstances - are more useful life skills to learn than knowing how to actually implement an algorithm.

There are many other topics in the curriculum that can be taught best by engaging students in open discussion with their peers and their teacher. This is especially true for topics such as; judging quality and reliability of information obtained from different sources from the web; using digital content responsibly; and understanding the consequences of publishing and sharing personal information. As recommended by different guides on the new curriculum, working collaboratively in groups can bring many benefits to students, especially for such topics that have an open question with no one, clearly right answer. Encouraging students to engage in discussions about such topics does not only help them learn better about the topic but also helps in the formative assessment of the students. Discussions help the students elaborate on their understanding which consequently can identify missing knowledge or incorrect understanding that need to be addressed by the teacher.

While in researching and developing the concepts behind Digital Mysteries - a tool to promote collaboration and thinking skills - at Newcastle University and later at Reflective Thinking, using it as a tool for supporting the teaching and learning of IT related subjects was not part of the plan. However, looking carefully at the new computing at schools curriculum and at the existing tools that can assist in that, it seems as if Digital Mysteries can fill an important gap in the pool of existing resources. We plan to collaborate with educators and make use of our experience in computing to develop the sort of materials that complement existing programming tools in order to help teachers address the subjects in the curriculum that do not directly involve understanding and writing programs and algorithms.

I hope for this to be the first of a series of blog posts about the introduction of the new Computing At Schools curriculum. My first active step is to write our first mystery on the subject.
I’d really like to know your thoughts, so please feel free to comment and make any suggestions for future discussions.