Algorithmic thinking is often bad at examining aspects of evolution. Like the fact that crabs, turtles, and trees are all convergent forms that have each evolved multiple times through different paths. What is the unambiguous instruction set to evolve a crab? What initial conditions do you need for it to work? Can we really call the “instruction set” to evolve crabs “prescribed”? Prescribed by whom? Like, there’s a really common mental pattern with evolutionary thinking where we want to sort variations into meaningful and not-meaningful buckets, where this particular aspect of this variation was advantageous, whereas this one is just a fluke. Stuff like that. That’s much closer to algorithmic thinking than the reality where it is a truly random process and the only thing that makes it create coherent results is relative environmental stability over a really long period of time.
I would also guess that algorithmic thinking would fail to catch many aspects of ecological systems, but have thought less about that. It’s not that these subjects can’t gaining anything by looking at them through an algorithmic lens. Some really simple mathematical models of population growth are scarily accurate, actually. But insisting on only seeing them algorithmically will not bring you closer to the essence of these systems either.
Okay, I think I get it now. I see how one could really twist something like your evolution example every which way to make it look like an algorithm. Things like saying the process to crabs is prescribed by the environmental conditions selecting for crab like traits or whatever, but I can see how doing that is so overly broad as to be a useless way to analyze the situation.
One more thing: I don’t know enough about algorithms to really say, but isn’t it possible for an algorithm to produce wildly varying results from nearly identical inputs? Like how a double pendulum is analytically unpredictable. What’s more, could the algorithmic nature of a system be entirely obscured as a result of it being composed of many associated algorithms linked input to output in a net, some of which may even be recursively linked? That looks to me like it could be a source of randomness and ambiguity in an algorithmic system that would be borderline impossible to sus out.
I think what you’re talking about starts to get into definitional differences between different fields, but regardless I think the answer to the underlying questions is “yes”. We can talk about a function’s “purity”, meaning that if a function is pure, it will always produce the same output for the same input and will not change the state of any other aspects of the system it exists within. This concept is different from chaotic systems like you’re discussing, where the “distance” between outputs tends to be large between inputs whose distance is small. So some computer systems have the properties you’re talking about because they’re impure. Others have them because they’re chaotic.
A lot of functions which are both pure and chaotic are used as pseudo-random number generators, meaning they will always produce the same number for a given seed, but are exceedingly difficult to predict. But creating perfectly chaotic systems is very difficult (maybe mathematically impossible? idr) and a lot of the math used in cryptography involves attacking functions by finding ways to reverse them efficiently, as well as finding ways to prevent those attacks.
But yes, all of the things you mentioned can be sources of complexity that can make things chaotic, but that doesn’t necessarily make them nondeterministic. A lot of chaotic systems are sensitive to things like the exact millisecond at which some function runs or other sources of userspace randomness like user input or resource usage. Meanwhile, a good chunk of nondeterministic behavior in software comes from asynchronous race conditions.