The Data Abstraction Talk

Kevlin Henney

⏱ 90 minute session
intermediate
11:00-12:30, Friday, 19th April 2024
We need to have a talk. A talk about data abstraction.

To what degree should you keep your data private? No, I'm not talking about the societal and security concerns of your personal data, but about your code: to what extent are the incidental decisions of data representation in one piece of code visible to another piece of code?

In theory, the widespread adoption of languages with support for object orientation, modularity and other partitioning constructs should have made developers aware of the practice and benefits of information hiding. In practice, most code makes incidental choices highly visible across codebases, with getters and setters for every field — and public properties that might as well be public fields — and changeable technical details leaked through interfaces.

This talk takes a lot of what data abstraction is, its history, its application, its appearance across different programming paradigms, its relevance in software architecture, dependency management, Domain-Driven Design, API evolution and agile development. Different languages (including C#, C++, Go, Python, JavaScript and lambda calculus) and habits and what they do to support and frustrate abstraction will be considered. For some, this talk will offer support for their current practices; for others, it may come as a reminder or as news.

🏷 data abstraction
🏷 encapsulation
🏷 information hiding
🏷 coupling
🏷 abstract data types
🏷 object-oriented programming
🏷 functional programming

Kevlin Henney

Kevlin is an independent consultant, trainer, speaker and writer. His development interests lie at the intersection of programming, practice and people. He has been a columnist for various magazines and web sites, a contributor to open- and closed-source software and a member of more committees than is probably healthy (it has been said that "a committee is a cul-de-sac down which ideas are lured and then quietly strangled"). He is co-author of two volumes in the Pattern-Oriented Software Architecture series, editor of 97 Things Every Programmer Should Know and co-editor of 97 Things Every Java Programmer Should Know.