A 2D vector, we generally store as [x, y, 0]. What's the extra 0? The homogeneous coordinate.
A 2D point, we generally store as [x, y, 1]. That extra 1 is the homogeneous coordinate, and since it's there, it means "and apply translations!"
If I have a 2D transform, I put the translation component in the last row or column, depending on if you pre-multiply or post-multiply (I can never remember which).
When I transform a vector by that matrix, the 0 in the homogeneous coordinate means translation doesn't apply.
Perfect!
But what if I have a 3D vector? Well... I end up with [x, y, z, 0], right?
Ugh.
If instead, we stored the homogeneous coordinate in the FIRST position, [0, x, y] for 2D, and [0, x, y, z] for 3D, etc. then it's just a sparse vector! Set the values you want to! [0] is the 0-vector in any number of dimensions!
[1] is the origin point in any number of dimensions!
Why did we put the homogeneous coordinate last in all our internal representations? It was so dumb!