Software Developers are Knowledge Workers

We usually see people from academia as knowledge workers. Why? What makes any kind of work “knowledge work”? One possible answer is: study as part of the job. This means that if studying is not only beneficial but is actually part of your work, then you are a knowledge worker.

Based on this definition, I would argue that people who work with software are knowledge workers.

It is common sense that studying regularly is “good practice” for software developers. The alleged reasons usually revolve around the fact that the software landscape is dynamic, and developers should study to keep up with constant changes in technologies and techniques. That is indeed a fact. But I believe such an argument misses the point. Studying is not only “good” for our job. It is our job.

Think of a fiction writer who is writing a book about a biologist living in northern Sweden. She has no chance of coming up with a believable story unless she studies the universe of a biologist. She will never convince readers unless she understands at least parts of the culture of northern Sweden: what it looks like, how it feels to live there, how people treat each other, etc. This kind of understanding can only be achieved through studying.

When we build software, we do something similar: we look at the world and model some part of it through code. Say you are building a backend service for a digital bank that deals with money transfers. How are you supposed to do it if you don’t understand the state of the world? What is the user’s behavior and expectations? What data is part of this domain? What does each piece of data mean for the system? Which components are involved, and how do they relate? What should happen if a requisite changes in the future?

Just as the writer’s story will be a limited and imperfect cutout from the real world, so will your system. Although language proficiency is important (both for the writer and the developer), the quality of the final product is a function of your understanding of the real world. Or, as Alberto Brandolini put it, “Software development is a learning process; working code is a side effect.”