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 has direct impact to 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 coda, 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 insuring it is working as expected.
In practise software is complex and contain 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 evan understand the entire software project or its code.
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.
Importance of comminication increases: As the size of the team increases the importance of communication between team members increases.
Design is 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.
On Programming 1: Introduction to Programming you learned through implementing small programs the programming basics. On Programming 2: Basics you learned on the scale of implementing small programs key basic skills on 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 and idea on what kind of skills you will learn on it. The course focuses on the field of implementing pieces of large software. During the course you will learn both structures provided by the programmin language to implement vast programs as well as tools used in software projects for enabling team work.
Let’s get started from 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)
Book (in Finnish)
Paul & Harvey Deitel: Java How to Program: Early Objects