Content-Type: RST Don't forget about the version of Guido van Robot that's implemented in Javascript and runs in your browser (http://gvr.carduner.net firefox only). The fun part about writing the backend was that with python you could just use getattr to dynamically link language tokens to the internal python API. Add a new method to the python API and it is instantly exposed as a keyword in the language. You can do this with Java's introspection library but I don't think it is quite as trivial as in python. I have no idea how you would accomplish this in C++. Don't forget that in python you can sort anything that is iterable via:: >>> sorted(iterable) That takes the cake from C++, even with a custom linked list object (or anything else) as you don't need to import anything special. Java purposefully stayed away from any and all operator overloading including string equality in part to keep people from misusing operator overloads. The craziest operator overload I've seen in python code that I've actually used was for building file system paths. You could say:: >>> directory = path("foo")/"bar"/"baz" or:: >>> foo = path("foo") >>> bar = path("bar") >>> directory = foo/bar/"baz" and you would end up with a file system path using the correct separators. This sort of operator overloading is manageable within the context it was made for - writing little shell script like programs - but under no circumstances would you ever want to use it along side any math related code. For example:: >>> mb = 1024 >>> sorted([(len(open(foo/bar/fn).read())/mb,fn) for fn in (foo/bar).listdir()]) which would give you the list of files in the "foo/bar/" with their sizes in megabytes in ascending order. Get's confusing when you start dividing by numbers again on the same line of code. Not to mention the confusion that >>> "foo"/bar/"baz" will raise an exception.