Come with me to the land of file-system implementation. Let's briefly talk about how a file-system works...
Physically, Linux thinks of a filesystem as storing information in abstract things called inodes, each of which is identified by a unique number. So, every "file" is an "inode."
(Again, conceptually...) a "directory," then, is just a somewhat-special kind of file that contains a list of file-names and the corresponding inode-numbers. The computer looks-up the file by name, finds the inode, and uses that to reach your data.
Now... what would happen if two directory-entries pointed to the same inode? Is that "okay?" Yes. Is it "a problem?" No... it is a "hard link." You have two different directory entries... hence, two file-names at different points in the directory hierarchy... which are equivalent in that they all reach the same information.
Now, "that works, but it's cumbersome." A much better and more flexible way to do the same thing, in-practice, is provided by the notion of "soft," or "symbolic," links.
A "soft link" is simply (conceptually...) a directory-entry that refers to another file, by name. The computer looks-up the soft-link, grabs the file-name out of it, and silently locates and opens that file. The same essential purpose is achieved ... i.e. two directory-entries get you to the same data ... but it's done in a just-as-efficient and much-more-flexible way. Instead of having two directory-entries refer to the same inode, we have one directory-entry referring to the inode, while the other directory-entry refers (by name...) to the first directory-entry.
Of the two... you should always use soft links in practice. They just work much better in real life.