Teacher’s of Computer Science have quite a task on their hands given the current English curriculum and the content expected from examination boards when it comes to formal assessment. The theoretical elements of Computing are relatively well resourced and there appears to be strong support in place for the Python language which has been preferred as the go to language for those making the transition from ICT teachers to teachers of Computing. I was recently informed that one of the main universities in the North West of England were seeking to move their undergraduate courses onto learning Python language which is interesting to say the least. However, coming from an Industry background and understanding the needs of local businesses and companies further afield we teach the C# language in tandem with server-side technologies such as ASP.Net. Therefore, this allows for better use of strong IDE GUI elements when teaching the likes of OOP (Object Orientated Programming). Furthermore, the use of Visual Studio’s database functionality via Microsoft’s SQL Server and a whole host of other development opportunities such as cross-platform smart device/mobile development with the Xamarin tool set.
I often come across students who have previously been taught Python at other schools and i frequently observe that their deeper understanding of why they have coded in a particular way lacks explanation. Students frequently comment that they were shown the way to code via way of rote learning, however, for such students taking projects through the full life cycle they seemed to struggle once a reasonable level of complexity was required. Click here for a list of the most in demand languages for the UK jobs market. Teaching students how to code can be challenging at times, especially when you have a large class of 25+ students who have a varied understanding and different abilities across the cohort. All students within my current place of work can choose to sit GCSE/A-Level/Tech. Bacc Computing/programming regardless of their academic ability or prior qualifications. So how can you bridge the technical knowledge gaps between the varying abilities found within your classroom?
I usually have dedicated technical lessons/days where i embed expected practice early on for years 9, 10 and 12. Problems, such as naming solutions correctly which allows students to quickly identify prior solutions as a means of a refresher for when they have to make use of prior tutorials to develop a new application. Simple practices of making full use of the IDE, such as turning line numbers on, making use of break points and debugging correctly within Visual studio. However, for all intents and purposes one of the most powerful methods i have found is cross-collaboration in the form of paired programming, (Click here for a more detailed breakdown of Paired Programming) this can also link into scrum for student collaboration of problems via sharing of applicable skill sets. Given you have an understanding of the principles of paired programming, then there are further considerations, such as:
Deciding who is paired with who?
How long should a student drive/navigate for?
Do pairs have access to more than one computer/Keyboard?
Research by Lewis (2011) suggests that students with similar abilities should be paired together, however it is acknowledged that further research needs to be carried out in this area. For example, pairing a high ability student with a low ability student could lead to a high ability student driving most of the development, or simply that the high ability student lacks the ability to be able to adequately explain to their partner the justifications for their code choices when solving problems. Furthermore, some students will automatically expect to be paired with one of their friends, naturally, this can be problematic in terms of work output, however, such decisions are solely at your discretion. You may want to try mixing pupil premium students with none PP along with considerations of pairing girls together. I have found that similar abilities work best together. You may also find that some introverted students really struggle with the thought of working with someone else, so easy does it.
Deciding how long a student should drive for is again a choice to be made by yourself and is of course dependent upon the lesson time allocated for your lessons. However, from my own experiences, it is useful to show a timer and to ensure that pairs do swap otherwise you end up with a driver bossing the paired programming session. There have also been studies around the use of one or two computers, or one computer and two keyboards. All of these scenarios have their own pros and cons. The use of two computers, can allow for the driver to code and for the navigator to research if the pair arrive at a problem that they cannot resolve collectively. Traditionally, the use of one computer with one keyboard is certainly the best starting point. You can then choose to change-up the next session by making use of two computers and measuring the feedback from students in terms of likes and dislikes, the use of student voice is vital in learning how to shape your paired programming sessions.
The key focus here, is for students to be developing teamwork skills but more importantly the ability to be able to effectively problem solve. Problem solving is a key skill attribute of any programmer by making use of internet resources or via other team members. Naturally this statement conflicts with the requirements of some of the current NEA scenarios. At the end of the day, professional developers make use of all resources available when there is a problem to be resolved and that can include heavy internet usage.
I would be interested to hear about your experiences with paired programming, whether they were successful or problematic, feel free to drop me a line via the contact form which you can access here!
Andy @ TeacherTech
You can discuss this article over at the Teacher Tech Facebook page, click here to request access.