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:
Because Python is a high-level, object-oriented language, it encourages writing reusable software and well-designed systems.
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.
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:
Packaging code as Python extension modules makes it more accessible.
Delegating logic to embedded Python code provides for onsite changes.
Python prototypes can be moved to C all at once or piecemeal.
Moving existing code from C to Python makes it simpler and more flexible.
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.
Introducing Python
Part I: System Interfaces
System Tools
Parallel System Tools
Larger System Examples I
Larger System Examples II
Part II: GUI Programming
Graphical User Interfaces
A Tkinter Tour, Part 1
A Tkinter Tour, Part 2
Larger GUI Examples
Part III: Internet Scripting
Network Scripting
Client-Side Scripting
Server-Side Scripting
Larger Web Site Examples I
Larger Web Site Examples II
Advanced Internet Topics
Part IV: Assorted Topics
Databases and Persistence
Data Structures
Text and Language
Part V: Integration
Extending Python
Embedding Python
VI: The End
Conclusion Python and the Development Cycle