john67 wrote: > The company I work for is about to embark on developing a commercial > application that will cost us tens-of-millions to develop. When all is > said and done it will have thousands of business objects/classes, Ok, that sounds like a big app, but does it really have to be like that, or is that something you imagine because things usually get that complex using other tools?
In my experience, development costs grow faster than linearly with class model size. (Of course, this is true regardless of programming language.) Prototyping things with Python is often an good way to discover simpler ways of handling a problem, and it's not unheard of that a Python prototype is good enough to keep as the final implementation. Thus, apart from the fact that you typically meed much less code to develop the same functionality in Python than in Java, you might also discover that you can do things in a smarter way which reduces you application size even more. There are plenty of descriptions of successful use of Python at: http://www.pythonology.com/ Of course, every language has a sweetspot, and particularly if you have a bunch of experienced Java developers who will think in Java idioms whatever language they code in, they might end up building a really stupid system in Python. Perhaps you should also read: http://dirtsimple.org/2004/12/python-is-not-java.html http://dirtsimple.org/2004/12/java-is-not-python-either.html > some > of which will have hundreds-of-thousands of instances stored in a DB. That sounds like a moderately sized database.Hundreds of thousands of new entries per month might be big if you need to keep data for years, but this doesn't seem to be a limiting factor for you assuming a system which uses a real database backend. > Our clients will probably have somewhere between 50-200 users working > on the app during the day, possibly in mutiple offices, and then a > large number of batch processes will have to run each night. This is not a problem in itself. There are a number of different ways to partition such a system between clients and different kinds of servers, but it can certainly be done in Python. > It will > also need to have a web interface for certain users. It needs to be > robust, easy to maintain, and able to be customized for each client. This sounds like a good fit. Python is at least excellent for the customization part. I'll talk about how we do that here at Carmen Systems at the Europython conference in June. Slides will be available. Mail me if you want to have a look at a draft. We basically use Python for customization and use C++ for the core code. Python and C++ is a very good mix. Java and CPython might not be such a good fit, but that depends a bit what your intentions with Java is. (E.g. is JNI ok, or is hardware independence considered very important?) Java/Jython is a better pair of course, but Jython has few maintainers and is a few versions behind CPython. > Right now it looks like Java is the language of choice that the app > will be developed in. However, I have been looking and reading a lot > about Python recently and it seems to me that Python could handle it. To be perfectly honest, I'd be very wary to stick out my neck and be a Python champion if my trust in Python was based only on reading... As a manager I'd also find it rather unconvincing... Let me put it this way: Python has a potential to make your system better, and to reach your goals in a shorter time. It fits very well with an agile approach, and in most systems of the kind I imagine you intend to build, agile development is very helpful in tracking project progress. You produce *real* programs early, not a lot of paperwork which a year later turns out to represent a misunderstanding of the actual problem, or how an effective solution should behave. I think it would be worthwile to investigate what Python could mean to you. It might certainly be very useful in the toolbox of the developers. It might be just a tool to aid in the development, it might be used as a glue language to connect interacting components written in other languages (Java, C++, C# etc), it might be an embedded macro language, a prototyping tool, or the implementation language for at least parts of the application. After all, one tool is unlikely to fit all tasks. Why not hire a well respected Python trainer for a few days, let a few developers learn Python and explore how it could fit into your system. > The big attraction to me is the developer productivity. It seems that > if Python can handle it, then we could gain a huge savings by using > Python instead of Java from a productivity standpoint alone. Quite possible, but the choice of programming language(s) is just one of many very important decisions that determine the outcome of a software development project. > So, given the very general requirements in the first paragraph, do you > think that Python could handle it? If anyone has direct experience > developing large apps in Python, I would appreciate your insight. You might want to consult with e.g. Marc-Andre Lemburg, who has experience in developing large business apps in Python. (See http://www.egenix.com/ ) > Based on the responses I get, I am planning on writing a proposal to my > management to consider Python instead of Java. Consider suggesting it as a complement. -- http://mail.python.org/mailman/listinfo/python-list