I always think of '^' and '<' as being arrows pointing at the relevant dependencies, i.e "that list of things up ^ there" or "that thing on the far left <". It can also help to think of '<' as being like a stdin redirect, so a simple rule might look like "myprog < $<".
I'm not sure what the deal is with '@' though.