When we use computers to accomplish a task, we usually do so to make our work easier, faster, cheaper, or simply because the task would be practically impossible without a computer. Because computers are multi-purpose machines, we need to program them for the task we intend to accomplish. Ideally this would be a straightforward process of expressing the task at hand as an algorithmically solvable problem, but in reality programming is a lot more complex. Contemporary application programming is more about gluing together existing libraries, components and subsystems than it is about expressing algorithms. With the abundance of libraries, API’s, languages and components that are available, there are so many technical details to consider that it is easy to get absorbed by them instead of staying focused on the task at hand. In such programs one has to read between the lines to figure out what task is actually being accomplished. To what extent this matters depends on the application. Integration of the latest fashionable API or service may be what sells some applications, but for computer systems that support mission-critical tasks, overhead caused by a bad fit between the computer system and the task it is supposed to support matters more. To rationally design systems focused on optimally supporting critical tasks, it is important to understand the task you aim to support. However, if a task is complex and has no clearly defined boundaries or outcome, this is much easier said than done.
Task-Oriented Programming (TOP) is a new programming paradigm that uses “tasks” as central concept for constructing programs. Although tasks are a common notion in daily life, in order to use them as building block in programs we need to be more precise. With a formal notion of tasks, a way to express atomic tasks, and the means to define tasks in terms of other tasks, we can think about programs in terms of the tasks we need to do, instead of the necessary underlying technical details. In TOP, a task is a specified piece of work aiming to produce a result of known type. When executed, tasks produce (temporary) results that can be observed in a controlled way. As work progresses it can be continuously monitored and controlled by other tasks. Tasks can either be fully automated, or can be performed by humans with computer support. TOP is therefore best suitable for applications that cannot be fully automated. These can be supported by a mix of interactive and automated tasks that have to be coordinated to achieve a combined goal though. The most extreme examples of these are those applications in which the conditions under which the task has to be accomplished are unpredictable, where people have to work together, and there is time pressure to get it done. Tasks such as responding to incidents with a rescue operation, or the management of crises in general, belong to this category. The ideas behind TOP emerged during development of the iTask System (or iTasks for short), a concrete prototype system that uses tasks as its core concept, when we applied it to such cases. With iTasks, we have continuously reflected on TOP to ensure that the paradigm is able to capture a wide range of real-world tasks.
This dissertation consists of three parts. Each covers a research theme that has been investigated simultaneously with the other themes. Together they present the research that I have contributed to, in order to understand the use of tasks to structure incident response applications. The first part, “Task-Oriented Programming with iTasks” (chapters 2, 3 and 4), illustrates the evolution of the iTask System and the emergence of the TOP paradigm, which has been my main research focus. The chapters report on the status quo and progress early in the project, more or less halfway and at the end of the project. As a series they show the progressed insight into TOP. The second part, “Information Models and Data Types” (chapters 5 and 6), contains contributions concerning the intersection of information models, for defining shared databases, and data types that define values in programs. Although these contributions extend beyond TOP, they enable programming information systems in a task-oriented way. This is because in such systems most tasks deal with storing, retrieving and sharing information. The third and final part, “The Netherlands Coast Guard Case” (chapters 7, 8 and 9), is concerned with TOP’s potential to be used for the development of incident response applications. The most influential application with which we reflected on TOP has been a case study of the search and rescue operations of the Netherlands Coast Guard. The chapters in this part cover that case.
With TOP we have a new approach for the design and development of interactive programs. We reduce programming to what matters most: understanding the task at hand.