This article is not only directed to anyone who’s designing a new introductory programming course or CS program, but also to anyone who is currently teaching a programming course, and thinking of modifying it.
Designing an introductory programming course for students is not an easy task and an important decision you’ll have to make is picking which programming language to teach. As with everything in Computer Science Education, there are many different views on this. In this article I will try to combine these and inevitably add one more view to the mix.
Before starting, let me tell you a little bit about my background. My formal education is in Computer Science, where I have also worked as a teaching assistant for a couple of years, mostly teaching programming to CS-majors. Currently, I’m CEO at CodeGrade, allowing me the pleasure and opportunity of working with coding educators globally. On a daily basis, I work with them and consult on their courses. This hopefully gives me a broader perspective of coding courses in higher education in a wide variety of settings.
In this article, I’ll try to compose four questions that you should answer when selecting the programming language for your introductory coding course, but also, importantly, the programming paradigm.
What is a programming paradigm?
A paradigm for a programming language classifies the concept, methodology and features a language has and how programs written in this language should be programmed. There are two distinct paradigms: imperative and declarative. Within the imperative paradigm you have, for instance, procedural languages where instructions are grouped into procedures (such as C) and object-oriented languages (such as Java, C++, Python). Within the declarative paradigm, where you declare the properties of a program but now how to compute it, you have the functional programming languages (such as Haskell, F#) and logical programming languages (Prolog). Many languages also support multiple paradigms.
1: Who am I teaching?
The first question you should ask yourself is what your target student group is. Different student groups have different learning goals and thus need different types of education.
Broadly speaking, I generally see two different target groups. CS-majors (this is specific to higher education) and non-CS-majors (this is usually still higher education, but could also apply to K-12, and hopefully more and more coding education will happen at the K-12 level).
If you teach prospective IT professionals, the choice of paradigm and programming language is perhaps of less concern. As in most Computer Science degrees, students will (and I think should) learn multiple programming languages and paradigms. Different perspectives make a better problem solver and a more dynamic programmer. To give students a deeper perspective you want to pick a strongly-typed programming language, forcing them to think about typing from the get-go.
If you teach students from non-CS majors (or K-12), the goal is generally to give them an introduction in the world of computing and they often only have one or a couple computing courses. In this case, the choice of programming language might become more important. One example is that you might want to teach students a language that will help them in their future careers. For instance, when a learner needs to automate something simple which could be easily done by writing a Python script.
Another reason could be that students study a field where coding plays a supportive role, such as in the Biomedical Sciences or Physics. In that case you’d probably want to teach the students a language that’s useful in that field. Good examples of this are (again) Python, MatLab / Octave or R.