Naming is an art. But considering too many factors like google search, I kind of feel like separation of concern is violated. Java implement their array, c# implement array, they are all called array, In project A, I have a class call Customer, in project B, I have same class call Customer, in project B, I can reference the Customer in project B using ProjectA.Customer, or give it alias "ProjACust" if I want, there is no conflict. Because they have conceptual or real namespace. If I am interested in Java array, I will search "java array" in google, java's designer did not brother to rename their array to "JArray". In our case, maybe I can search "jQuery xhr" as well. I still feel that design or naming should reflect purely semantics, that make it flexible. But I agree that sometimes purely semantics has to be compromised for other serious reason. For example, the official name of "JavaScript" is "ECMAScript", but not everyone knows that, since user has the freedom to give an alias.