The author() function displays the name of the author of the current post. The behavior of this function is based off an old functionality "get_the_author()".
The function the_author_link() displays either the author's link or the author's name. If the author has a home page set, it can echo an HTML link, otherwise just echo the author's name.
The similarity between "the_author()" and "the_author_link" functions is that they both retrieve the author's name. The difference is that the_author_link() function can retrive the author's home page if the author has it set.
Both functions display the author's name, but the_author_link() allows you to display an HTML link to the author's page of the current post's author.