The main difference deals with inheritance. If you use constructors, you can call superclass constructors more transparently. With a factory method, you have to call the more general factory method, then use some sort of set/get construction to further refine the class. You're hosed, however, if you need a narrower class and the more general factory method isn't capable of creating it.

This is a somewhat difficult discussion to have in general, as languages deal with this in so many different ways. In Perl, for example, instances are just hashes that get "blessed" as a particular class. So you can have a different factory method that returns a wider class and then bless it in a narrower definition.

I don't have a preference between 'new' and newInstance-like methods, as long as the newInstance kind provides inherited constructor functionality. Again, Perl acts in the manner you describe: you can name the constructor whatever you wish, and calling it provides a blessed instance. With Python, you just do "foo = FooClass(a, b)". No new keyword, and no factory method either. :-)