Algorithmic Programmable Matter: An Overview