I'll take a stab. Start with the simple:
static <T> void sort(List<T> list)
Says you're sorting a List of type T. But, we need to be able to sort the Ts, so we have to restrict it to:
static <T extends Comparable> void sort(List<T> list)
Which says you're sorting a List of Ts that are a subclass of Comparable. Since Comparable is an interface, this really just means that it's a List of things which implement the Comparable interface. But this isn't sufficient. Foo could implement Comparable where Baz isn't related to Foo at all. So we finally get to:
static <T extends Comparable<? super T>> void sort(List<T> list)
Which says you're sorting a List of Ts where T means any type that implements Comparable<? super T> - it can compare two Ts via a method on T, or some ancestor (superclass) of T. This is necessary for sort, because sort needs to compare the items in the process of sorting. Absent an explicit comparator, the only way to do this is for the items to be able to compare themselves. The comparator need not be on T itself - if there's a superclass that implements Comparable, that's fine too.