What makes a "generic list" generic is the fact, that you can use the same class to create a list of apples and a list of potatoes. Of course once you create a list with the "new" operator you have to decide what objects you want it to store and communicate your decision by putting the Type name of the objects you store in the <>.
The following line actually tells the compiler:
List<Employee> employeeList = new List<Employee>();
"Hey, I need a list that can handle objects of type Employee and is named 'employeeList'!"
The list object you get that way is not generic anymore, it will only accept and return objects of type Employee. But the list's behaviour is defined in a "generic" way that doesn't care about what objects it's actually working with. It just calls them 'T' internally because for all that the list is supposed to do it's contents type doesn't really matter.