My favorite part of programming has to do with maintaining and using code over the long term. In this sense, reusable APIs and frameworks are central to my work process. Adding a new feature to a project generally does not involve coding something wildly unique or reinventing the wheel. While the various ways in which you interact with web applications vary greatly on the surface, under the hood there should be a level of consistency, in which code is reused, flexible, fast, and straightforward. If you do a lot of form processing, for example, you might maintain a set of commonly used input validation functions. If you’re working with a solid application layer, whether for security, templating, or database functionality, etc., it will evolve over time and become something incredibly powerful, accounting for important trends in the industry which can easily be applied to past projects, as well as accounting for the various server environments in which it needs to run.
Maintaining code libraries does not have to contribute to bloat, either. The idea of a framework is to implement core APIs that are used from project to project to build functionality specific to that job. The independent framework itself will not absorb any of this site-specific functionality, contributing to bloat. A good framework plateaus, only growing incrementally upon necessity and relevance to the entire breadth of your work. Furthermore, more robust frameworks are modular, loading on the components they need. Sometimes explicit control is desirable, in which certain users are authenticated and given access to particular modules or plugins. Other times code logic dictates which portions of the framework need to be loaded and deployed. It may be desirable to go for a model in which services are dynamically registered within mechanisms central to the framework.
It’s particularly exciting to be in a position where you can rely on a powerful foundation of tried-and-true code, and be free to unleash your creativity in terms of how those static APIs are deployed from project to project. Broader communities might also benefit from your work if you can isolate and open-source particular APIs that contribute to smart application development, and certainly there are great options out there which you can adopt and benefit from yourself. Just as with any other career, the knowledge you gain, tools that you build, relationships that you make, over time, help to define who you are and what you can bring to the table in terms of problem solving, creativity, and commitment to the industry in which you work.
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.