Have anyone read "Effective Java"? Compare the "item 10: Override clone judiciously" with this interview is fun http://www.artima.com/intv/issuesP.html No perfect design because we need difference design trade off for difference task, like performance, time, resource, .... No perfect design because difference user have difference expectation of API .... No perfect design because requirement change by time http://www.artima.com/intv/perfect.html