What is one divided by two? Depends on the programming language. Sometimes it's 0.5; sometimes it's 0; there are probably some that round to the appropriate number of significant figures and so would yield 1; sometimes it's Rational[1,2] and otherwise unevaluated until later; sometimes it's an error unless the operands are explicitly cast into something that supports rational arithmetic.
In some environments, 2147483647+1 may be a negative number.
The square root of negative one might or might not be supported, and might or might not have two values.
Once decisions about things like that are made, then we can get on to defining an adequate approximation to real arithmetic - something we need to do before we can do calculus numerically (all the while keeping in mind of course that you're only dealing with approximations to real numbers); the alternative is to do it symbolically but symbolic integration is hard, the Risch algorithm isn't really intended for human consumption, and is limited to elementary functions (unlike bradgrafelman, my degrees are in computer science and mathematics).
Of course, you might change your mind later, abstract out everything done up to that point, and start again on top of the abstraction with a new set of decisions.
Besides if programming was so much harder than electronics, the electronics would be well ahead of the programs, rather than games being programmed to require computers designed tomorrow.
It's easier to write programs if they don't have to operate in the physical world with its arbitrary constraints and rules about what can and can't be done (the UTM is something like 70 years old, so that's a solved problem); but apparently there is something called "realtime" and a limit on how many bits per second you can put down an IR beam of a given wavelength with a given encoding.
You don't get to fully design your system and then build it: the full design is the system. You've got to build an entire functioning machine out of pure information (namely the components that were dreamed up by whoever developed the environment you're using, often hundreds of thousands of them, quite possibly millions.)
Programmers and electronics engineers are both pushing the envelope; they're doing it from opposite sides. But the electronics engineers can at least rely on conservation of energy holding without checking the environment’s manual to see if it holds there in the current version. But the programmers get to use source control.