We Are Not Special
Why am I doing the Crossover Project? Because I keep seeing shit like this:¹
The person there never built a house. They don't know what it's like to build a house. They are waxing about how software is different without knowing what those differences are.
We are not special. We are not special.
We are certainly different. There are things that make software engineering essentially different from other kinds of engineering. From my interviews, I'd say three things:
- We don't have the same kind of hard constraints that most physical engineering people do. I don't have to scrap my program if it runs just a bit too slow or consumes a scrap too much power. Not all software is free from constraint, nor all tradeng beholden to it, but it's true in the majority of cases.
- Our iteration time is much faster. I can test a block of code in seconds, compared to hours or days for physical materials.
- Consistency: two copies of the same code will have the same operational semantics. They might have different observed behaviors on two computers, but it's not close to the issues in say electrical engineering, where two resistors produced back to back can vary by 20%. More if it's slightly hotter out.
But every field of engineering is different. There are things in every kind that make it essentially different from the rest. But it's all engineering! It's all more similar than different. None of it is special! Off the top of my head, here's some things they all have in common, including software:
- Formal requirements, where we can say that something definitely does or does not conform to spec
- Significant value in up-front design and "figure it out as you go" properties
- Lots of emergent complexity and second-order effects
- Project lifecycle challenges
- Divergence between plan and reality
That's just off the top of my sleep-deprived head. Why does this matter? Because people keep saying things like "software is special" and use is to justify things like "we don't need to give estimates" or "we don't need to plan ahead". But they all get why software is different wrong! Everybody who hasn't done both misses the ways software is different and mistakenly lists differences that aren't actually real. Our opinions are completely unsubstantiated!
We're confident, snarky, obnoxious, and wrong. That's an awful combination. That's why it's so important for me to write about this. I want us to actually know the differences, so we can see what we can learn from others and what we have to learn by ourselves.
We are not special.
(PS: It's not just engineering. That's what I'm focusing on right now, but we also have a lot to learn from other fields, too. Like library science! Or digital humanities! Or social work, or economics, or welding, or cooking. We aren't nearly as interdisciplinary as we need to be.)
¹ from here: https://inessential.com/2019/10/28/no_etas
If you're reading this on the web, you can subscribe here. Updates are once a week. My main website is here.
My new book, Logic for Programmers, is now in early access! Get it here.