Teaching Software Engineering is more than just coding

Teaching professional software engineers goes beyond coding skills.

Coding is needed, too

Some years back we started a renewal of our beginner to intermediate level software development courses. In this effort we wanted tackle the challenges of:

  • The very first programming courses having a huge number of students with heterogeneous backgrounds and interests to programming. Some students plan to be professional software engineers and may already have substantial programming experience. On the other hand, the basics of programming need to be taught to all technology students.
  • Aligning the content of the several courses with no gaps or unnecessary overlaps.
  • Not wanting to teach only “coding” skills, but also other important practices of professional software development. We think that we should teach Software Engineers – software professionals who are more than just coders: they should manage various aspects of project and project management.
  • Providing content that is modern enough to match the current needs in the industry, and
  • Last but not least, students learning the underlying concepts in addition to technical details of programming languages and tools.

The first corner-stone of our renewal is utilization of online tools and automation. This allows each student to progress with their own style and rhythm 👩‍💻 🕺 🙋‍♂️. In addition, the use of electronic tools also gives the students a taste of digitalization in general, and prepare them to the trend of automatization in software engineering. For situations where personal help is needed, we have introduced Coditorium (Kooditorio in Finnish) – a friendly environment where students can come and ask help.

Secondly, we use modern software engineering tools already in early phases. This means, that use of version management tools (GitLab), Continuous Integration and automatic testing. Students gradually, and in a natural way, learn to use these tools as a part of they daily routine.

Beyond Coding

Software engineering is not just “coding”, i.e., expressing a solution in some programming language. A software engineer also needs to understand the question/need and select the solution before the actual coding can start. Thus, we have added “beyond coding” content to our programming courses.

After coding the quality need to be checked, i.e., software is tested. (No, this does not mean that we propose so called “waterfall”, the same thinking can also be applied to one feature at the time).  The responsibilities of the students are expanded gradually: in the first course they learn to implement simple programs with clear requirements and in the 4thcourse students are only given rather abstract requirements and the need to figure out what really should be implemented.

Similar gradual increase is given for the architecture. In the first two courses programs are rather small, but in the 3rdcourse students need to understand a bigger software and develop their contribution so that it fits to a bigger program. In the 4thcourse students also need to design the structure of the program so that development of it is easy in a three person group.

A view to our CD-toolchain used by courses

Software development is typically group work and it is also practiced in our set of courses. First two courses are based on individual work, but in the third course students work in pairs, and in the fourth course students form three-person groups. At the same time responsibility of work planning increases. In the fourth course students have reasonable large freedom to decide when and which order the different tasks are performed. All this also makes students to grown in their professional competence.

The courses implemented according to the above principles are

  • Programming 1: Introduction
  • Programming 2: Basics
  • Programming 3: Techniques
  • Programming 4: Design


Q1:Which programming language you use? We start with interpreted language that do not require learning of tools like compilers. We continue with a compiled language with object orientation, static typing and IDE.

Q2: What programming language you use? If you insist: we use Python and C++, but the language is not the main issue: the concepts underneath matter more.

text by Kari Systä and Terhi Kilamo

This entry was posted in Courses, teaching. Bookmark the permalink.