TEACHING PROGRAMMING SKILLS USING MODERN SOFTWARE DEVELOPMENT APPROACHES
Today, a teacher instructing programming skills is faced with three main problems:
1. Today's students are mostly grown up with computers in their daily lives. They are very familiar with the web or smartphone applications and know very many operating concepts that do not require a mouse or keyboard. When learning programming languages they are suddenly confronted with a typical “console based” operation of software programs. This kind of operation was still very common 20-30 years ago, but is not up-to-date today. Therefore, many of the students do not see the connection between their first programming steps and their known colorful and intuitive computer world.
2. Especially new programmers often think, their programming tasks are completed, when they can just compile them. It is very tedious and initially also very difficult to explain to students why they need to test their programs using many different examples until their software is really bug free. This raises the question of how this skill can be taught in practice so that students recognize the need to test their software and always perform the tests needed.
3. Especially with programming tasks, the practical experience is more important than acquiring some theoretical knowledge. It would be important to the students to implement much more programs on their own than it is possible during the courses at the university. Usually, a personal attention for the students including code reviews and testing is not practicable for teachers.
This paper describes an approach developed at the Stuttgart Media University which motivates students to improve their programming skills and to extend their practical knowledge without much personally explanation by the teachers.
Our current approach is also a first step towards a future e-learning platform for programming skills. The core of the approach is a source code management system, in which each programming task is stored with at least three components:
• Graphical user interface (GUI): All programming tasks are only provided with a predefined GUI. Hence, students no longer need to work with an obsolete console, but they use their own implementation directly with a GUI. In this way, they can better recognize what programming means and can do.
• Automated testing: For each task there is a set of predefined automatic tests. After completing their implementation, the students can additionally test their software with the automated tests. This makes them better recognize their bugs and forgotten features in the software.
• Static analysis: in addition to the automatic tests, the implemented software is analyzed automatically using tools like Checkstyle or FindBugs. Both are tools for static analysis of programs which recognize typical error patterns in the programs and also give clues as to how the errors can be solved.
First experiences made with this approach are very promising: students are significantly more motivated when they can use their familiar graphical interface during programming. Through the automated tests and analysis they learn to consider their own software very carefully.