We often think of constraints as being a bad thing. Far often we don’t recognize that constraints force us to grow.
Let’s say you are writing a video chat program. With no restrictions, you would likely require a gigabit internet connection with zero lost packets and a sub 50 millisecond ping, and you’d write it in whatever language you want. But let’s say that you now have a set of restrictions on it: suppose that it has to run on a mobile device.
- You will likely be CPU limited, bandwidth limited, and have a maximum camera resolution that you can use (as well as a maximum display resolution).
- You will have to be aware of power consumption and battery life.
- You will likely be restricted to a subset of programming languages and APIs.
Restrictions like this are going to force you to be more efficient and more creative in how you solve the original problem. As a result, whatever solution you end up creating will likely be a lot more interesting than if you had unlimited CPU/bandwidth.
I have a huge amount of respect for those early programmers that had to deal with very tight constraints who still managed to create some amazing programs and games.