Abstraction in programming: Taming the ones and zeros