Abstraction is a principle tenant of software engineering commonly known as polymorphism. It is a generalization of the idea of a concept to a set of related concepts. It's is incredibly powerful in building software, and it's a key part of the software engineering process. Learning to abstract software properly is a skill that takes time to master.
Part 1: Deep Dive into Generic Programming with Google Go
Generic programming has been around for quite some time. This blog post provides a brief overview of the basics of generic programming and its implications for software engineering.