Is Python suitable for a huge, enterprise size app?

Magnus Lycka lycka at carmen.se
Thu May 19 05:57:28 EDT 2005


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.



More information about the Python-list mailing list