- COMP.CS.140
- 4. Programming in the Large
- 4.1 The Playing Field of Implementing Software
The Playing Field of Implementing Software¶
Learning Outcomes
This week we will focus on the concept of abstraction. After the section you are able to explain the basic principles behind implementing a large piece of software and the role of abstraction in it. You also know the history of the different levels of abstraction in software development and are able to explain what an interface is.
Software and programmable devices are everywhere so they influence our everyday lives in many ways. The quality of these pieces of software and devices impacts how smoothly we can go about our day to day lives. The efficiency, reliability and maintainability of software have a direct impact on us. This also means that the amount of code in even one piece of software is large. So far in studying programming, we have focused on implementing small, personal projects. This has been beneficial as you have been able to focus on learning programming basics in practise: how to write syntactically correct code, how to run a program and how errors in program behaviour are fixed. Small, at most a few hundred lines of code programs are easily managed by a single programmer. One person can understand all factors affecting the project thoroughly from the beginning of the project to the end and programming is mainly focused on creating the algorithmic solution to the problem at hand as well as ensuring it is working as expected. In practise software is complex and contains much more than just code: for example the Google code base is estimated to be around two billion lines of code, developed by over 25000 software developers. In general large software projects are characterized by:
The broad scope of functionality: One member of the team cannot control or even understand the entire software project or its code.
A large team of developers: The software is developed by a developer team instead of a single programmer. In addition to software developers, the team consists of user experience experts, graphical designers, data scientists and other experts.
The importance of communication increasing: As the size of the team increases the importance of communication between team members increases.
Design being central: The structure of the software affects how well its development can be divided between the team members. Also the communication between different parts of the software becomes more important.
Coding small programs is not directly scalable to implementing large software. Processes and ways of working as well as a set of tools have been developed to make software development fluent. In addition, programming languages provide ways to implement programs through independent components. In Programming 1: Introduction to Programming you learned through implementing small programs the programming basics. In Programming 2: Basics you learned in the scale of implementing small programs key basic skills of software development: you learned how to implement the program in more manageable parts, how to use indirection and the basics of version control. Our course is called Programming 3: Interfaces and Techniques. This gives you an idea of what kind of skills you can expect to learn. The course focuses on the field of implementing pieces of large software. During the course you will learn both structures provided by the programming language to implement vast programs as well as tools used in software projects for enabling team work. Let’s start with a concept quite natural to us: abstraction.
References used when writing the material:
Timothy Budd: An Introduction to Object-Oriented Programming.
Matti Rintala ja Jyke Jokinen: Olioiden ohjelmointi C++:lla.
Book (in Finnish)