Do forces really exist?
This is an episode of Thoughts on Functional Programming, a podcast by Eric Normand.
Force is an important concept in Newtonian mechanics. But do forces really exist? In fact, it is an abstraction invented by Newton. The insight revolutionized physics and universalized his model. What can we learn from it?
Do forces really exist? Hi, my name is Eric Normand and this is my podcast -- the "Eric Normand" podcast.
I'm going to talk about software design and domain modeling. I've been talking a lot about Newtonian mechanics. It's worth deconstructing that. It's a very amazing model. It's an amazing model that Newton came up with. It's got three equations and a handful of concepts defined in terms of one another.
It manages to unify phenomena that we see all around us. Also, we look through telescopes. It makes sense of the motion of planets, moons around planets, and the sun and...It's quite amazing that these three equations can do that.
First, I want to talk about my book ''Grokking Simplicity." This just came in. Today is Tuesday as I record this. I got them on Saturday. I was on vacation, and when I came home, there were two boxes full of them that were overnighted to me, from Manning, from the publisher. They were at the printers, but Manning overnighted them to me, so thank you so much.
It was so lovely to get this and to be able to hold it after more than two years of work on it, of hand laying out each page. Of course, the production department did a nice job of making it nicer than I could design. Still, they managed to maintain my layout, even while making it lovelier. Manning, thank you so much. You did a great job.
The book is all about functional programming. It's a book about elementary functional programming. What is it? How do you do it? Those kinds of questions. For someone who has a couple of years of experience, knows at least one programming language, but is curious about functional programming what it's all about.
If that's you, buy Grokking Simplicity. If that's not you, if you are more experienced in functional programming, this book, it won't teach you functional programming probably. It was written for you because if you're anything like me, you're talking about functional programming and someone's like, "What is that? What is that all about?"
Or maybe they've tried functional programming, but they didn't have a good introduction to it. I always wanted to recommend them a book. I couldn't find anything that wasn't oversimplifying things, or too academic, overcomplicating things. I wrote this book for me, and hopefully for you to be able to give to people or recommend to them that they read it as an introduction to functional programming.
Yes, it's for you, and it's for them. It's available at Manning. Right now, you can buy it and get it in the mail. Soon, it'll be available on Amazon if you prefer that. There it is, Grokking Simplicity. It's got a rabbit on the cover, a rabbit professor teaching a class because it's a grokking book.
Let's get back to the topic. Does a force really exist? The short answer is no, there's no such thing in the real world as a force. Force is an abstraction, that it's almost mystical. If you haven't grown up with the idea of force, a physical force, it's a mystical idea. At least, it borders on it.
It's an abstraction that somehow unifies a bunch of different phenomena. If I push an object, that is two forces. I push something, it's me pushing against the object and the object pushing back, resisting the push. That's an opposite force. A push is two forces.
We often say, "Force, oh, it's like a push." No. Push is two forces. Forces come in pairs. That's the second law, or is it the third law. The equal and opposite reaction means a force has come in pairs.
A push can be a force, but so is gravity. A push requires contact, but gravity does not. Gravity happens over a distance. It's different, you got magnetism. Magnetism can be modeled as a force. Strong electrostatic charges, these things can be forces.
What's amazing about this concept of force, is that they can all be modeled in exactly the same way. It leads to stuff like, what are called, free-body diagrams, which is what you use in physics class to, like, you draw some boxes and stuff, and then you draw arrows representing the different forces.
You have one for gravity pulling on the box, and then one for the person pushing on the box this way, and you can model a situation in terms of objects with mass and forces acting on them.
They move around, though, what's the velocity of this thing, or what's the acceleration of this thing, given all these forces on it. That is a pretty cool idea.
There's stuff that we can learn about this idea of force, this abstraction, and invention by Newton. For one, it ignores any abstraction, ignores details. It doesn't need a source to be similar to other forces.
Some forces are due to contact, some are due to gravitation, others are due to magnetism. Some are pushes, some are poles. There's nothing relating these things, except in this model. You can say, "Well, we just draw an arrow." It's just a vector in three spaces.
We've boiled down these very distinct phenomena, into three numbers, it's a vector. It's got three components, X, Y, and Z. We've boiled this thing down into something very abstract, very general.
That's what I'm trying to get at is, it's abstract enough that it is now a general-purpose thing that we don't even need to know what the force is from, we can just draw the arrow and say, "Oh, here's a force on this object."
Done. You don't need to know anything else. What's the force due to the push? It doesn't matter. What's the gravity? It doesn't matter.
That's a very important idea in this domain modeling that we need to be able to, in these abstractions, create these abstraction barriers.
We need to be able to set aside, after we've drawn this diagram with all these arrows, we need to be able to set aside, where do these forces come from? It doesn't matter. At this point, it doesn't matter. We've already accounted for all of them. They're all on the diagram. Now we're going to add up these vectors. That's important lesson number one.
Lesson number two is a little bit easier to dismiss. Let me put it this way. If you went back in time to him presenting at a conference at the Royal Society, this model, someone would raise their hand and they would say, "But what is a force? What exactly is it? Can you point to one?" Like, "Can you explain it to me?"
I hear this all the time when people are talking about new concepts in programming. People always ask me, "What is a monad? What is it?" It's a mathematical construct. It's a thing that has these functions that is a functor. You start naming things. People want to have a concrete thing that they can point to and say, "Well, this is a monad and this one isn't."
At some point, your abstractions can reach such a generality that there's nothing anymore to point to. It's a vector with these kinds of units. There's nothing more I can say. It's a feature of the model. It doesn't exist in the real world.
Newton was a very mystical person. He was into mysticism. I wonder if that didn't play some part of him being able to imagine things that aren't real. [laughs] I wonder if that didn't help him deal with this problem of abstraction. Once you get abstract enough...Mathematicians do it all the time, but a physicist abstracting? It might be hard. This might have helped him.
The lesson there is that, you might have to invent ideas that do not seem to have anything real behind them, anything you can point to. They simply exist in order to make the model function. You could sum up the mass times the acceleration. F=MA, or the sum of forces equals to mass times the acceleration.
You can say, "Well, there's definitely something that a mass times the acceleration," but what is it? Well, you can find it by summing all of these things that we're going to call forces. They're all different in all different kinds. You have to know it when you see it, what's a force.
I don't know. This is an important thing. When you're building a model, you often have to invent something. Part of the challenge will be that, it might be indistinguishable from something else you invented that is not useful, [laughs] that is not helpful to the model, or that has all these problems.
You want to keep your thing real and concrete. Sometimes you need to build something general, abstract, and unreal. Let's put it that way. It's easy, once you start doing that, to go astray, to go wrong. You need some grounding. Luckily, in a program, your forces might be an array of...
Somehow you use the type system, if it has one, or you use some kind of system to say, "I'm going to get the direction and magnitude of all these different things that look similar." They all implement the same interface. "I'm going to sum them up." [laughs] They're vectors of what we now call force. It's newtons. That's the unit. "I'm going to sum them up." Mostly what happens.
When I do that, I get this other neat result. If I divide the mass, how do I get the acceleration? This is the thing that Newton didn't have. This is lesson three. Newton didn't have computers. He couldn't build the model. He had to imagine it. He could never see it working, whereas we could build a Newtonian physics simulator.
Orbiting planets are billiard balls bouncing off of each other or something like that. That's totally based on his physics, his mechanics and kinematics.
We could build that and see it work. Like, "Yes. That does look like how billiard balls might work," or "This does look how planets orbit each other." He couldn't do that. We do have a check that he didn't have. We do have the ability to go front to back from observing the world, developing a model, to simulating that model and watching it, and seeing, that actually looks like...could look nothing like the real world, or it does look like what we see in the real world.
That's the third lesson is to use the modern amenities. Maybe we can do better, not spend a thousand years building a Big Ball of Mud spaghetti-code model and just get straight to the good one.
This has been my thought on software design and domain modeling. My name is Eric Normand. If you get my book, Grokking Simplicity, it is out. It is ready for you to read. All you have to do is enter in a credit card number on Manning site, and it will be delivered to your home and you can read it. Please read it. Let me know what you think.
If you liked this episode, you should subscribe. There are more like it and more coming and tell your friends if you like it. Also, I appreciate ratings and reviews because that helps other people find it. Like I said, my name is Eric Normand and as always rock on.