object oriented – How could a computer program do anything if everything is immutable?


I feel this is a bad question because I probably do not understand what I am talking about. In my effort to learn about functional programming, I became stumped on understanding the idea of immutable stuff. I have been using C# as a hobby for years and I think I do not even understand OOP principles very well.
I use a class as a bucket of public and private data with methods pinned to it. It’s partially mutable and partially immutable I guess?
So I sort of want to step away from comparing and contrasting OOP and pure FP for a second and just think about “mutable” (can change) and “immutable” (cannot change) stuff.

People say it is good to make things immutable and I believe them. But how can a program do anything if you cannot change data? Whether you’re talking FP or OOP, it seems that you need at least one giant mutable data structure (like a database) since all your functions or objects are immutable. But that sounds very impractical. I can think of it this way: x = f1(f2(f3(f4(f5( y ))))) where y is the user input and x is the output. The program is the immutable functions 1 through 5. But again, this appears very impractical. I think I understand the benefits of immutable things but I just don’t understand how to use them properly for a large program.

Again, consider me a baby in the programming world that has been practicing poorly. I would appreciate book or book chapter recommendations. And feel free to tell me if I’m asking the wrong question.