On Sinking the Titanic
In short, Python is really more than a language; it implies a development philosophy. The concepts of prototyping, rapid development, and hybrid applications certainly aren new. But while the benefits of such development modes are widely recognized, there has been a lack of tools that make them practical without sacrificing programming power. This is one of the main gaps that Pythons design fills: Python provides a simple but powerful rapid development language, along with the integration tools needed to apply it in realistic development environments.
This combination arguably makes Python unique among similar tools. For instance, Tcl is a good integration tool but not a full-blown language; Perl is a powerful system administration language but a weak integration tool. But Pythons marriage of a powerful dynamic language and integration opens the door to fundamentally faster development modes. With Python, its no longer necessary to choose between fast development and fast execution.
By now, it should be clear that a single programming language can satisfy all our development goals. In fact, our needs are sometimes contradictory: the goals of efficiency and flexibility will probably always clash. Given the high cost of making software, the choice between development and execution speed is crucial. Although machine cycles are cheaper than programmers, we can yet ignore efficiency completely.
But with a tool like Python, we don need to decide between the two goals at all. Just as a carpenter wouldn drive a nail with a chainsaw, software engineers are now empowered to use the right tool for the task at hand: Python when speed of development matters, compiled languages when efficiency dominates, and combinations of the two when our goals are not absolute.
Moreover, we don have to sacrifice code reuse or rewrite exhaustively for delivery when applying rapid development with Python. We can have our rapid development cake and eat it too:
- Reusability
-
Because Python is a high-level, object-oriented language, it encourages writing reusable software and well-designed systems.
- Deliverability
-
Because Python is designed for use in mixed-language systems, we don have to move to more efficient languages all at once.
In typical Python development, a systems frontend and infrastructure may be written in Python for ease of development and modification, but the kernel is still written in C or C++ for efficiency. Python has been called the tip of the iceberg in such systems -- the part visible to end users of a package, as captured in Figure 21-6.
Figure 21-6. "Sinking the Titanic" with mixed-language systems
Such an architecture uses the best of both worlds: it can be extended by adding more Python code or by writing C extension modules, depending on performance requirements. But this is just one of many mixed-language development scenarios:
- System interfaces
-
Packaging code as Python extension modules makes it more accessible.
- End-user customization
-
Delegating logic to embedded Python code provides for onsite changes.
- Pure prototyping
-
Python prototypes can be moved to C all at once or piecemeal.
- Legacy code migration
-
Moving existing code from C to Python makes it simpler and more flexible.
- Standalone use
-
Of course, using Python all by itself leverages its existing library of tools.
Pythons design lets us apply it in whatever way makes sense for each project.
Категории