Frameworks and Knowledge Workers

What is a Framework?

Essentially, it’s a buzzword to describe a packaged approach to completing work. It’s a way of building things, using strategically agreed upon components. The people who determine the components the framework will utilize can begin as one or a few original architects, and can morph into something that seems to have a life of itself – supported by thousands, in some cases, millions of users.

I started really diving into frameworks last January after working on projects developed with CodeIgniter and Zend, PHP frameworks. I had been *unknowingly* using frameworks for years.

Recently, I have begun adopting a more “comprehensive” opinion of what a framework encompasses. I can use CodeIgniter or Symfony as my PHP framework in a project, but this is only a part of the method – the complete framework, I use to complete a project.

Why Frameworks are Important

I’d been meaning to look into HTML5 (more than just casually browsing sites which utilize HTML5, and reading the first chapter of “Dive Into HTML5.”) for quite a while.

Today, while working on a project where I wanted to finally utilize HTML5 and CSS3 in a big way (more than just setting an HTML5 doctype and throwing in a few CSS3 enhancements), I stumbled across a video presentation made by Paul Irish on Youtube, who is a really smart guy working for Google, and one of the leaders in the charge to full HTML5 support. The presentation was on boilerplate, what Paul describes as a “default” for starting HTML5 projects.

I sat down and watched the video… the whole thing (64 minutes)… I took notes, referencing and timing the most interesting points. Boilerplate integrates several innovative pieces, from how HTTP calls are made, to how htaccess is utilized and how javascript is gracefully degraded to support HTML5 / CSS3 features in older browsers. I’d be curious to see a time log showing hourly spend on each piece. Between the base experience, experimentation, community knowledge and rare “aha” moments it took to pull it off, I have no doubt that Paul Irish and other contributors could have spent thousands of hours building HTML5 boilerplate. Thousands of hours that I don’t have to spend.

Lab Rats and Code Monkeys

The work that one dude or many put into in writing a better PHP framework, or creating a “default” for HTML5 projects benefits us all. It takes a ton of core computer science knowledge, real working experience, and experimentation time to write a good framework. The work these guys do is invaluable, and is a huge part of what moves our industry forward.

However, as a user on ServerFault once eloquently stated, “Not everybody works in a lab.” Some of us simply don’t have the time to write frameworks or languages, even if it interests us and even if we are capable. Our circumstances and our goals define what we spend our time on. Since I have always made my living based on my ability to build things and organize the efforts of others who build things, efficiency and productivity are extremely important to me. The expressiveness of a language, library, framework – whatever – are incredibly important. I don’t need to know how my code compiles to C – I only need to ensure that my code is elegantly constructed, well organized, and completely documented.

Frameworks aid me in this quest. By watching one 64 minute video, Paul Irish has shown me tools I can use to go out and build skyscrapers. I don’t have to reinvent steel, or glass windows, or elevators, or staircases. They are there for my deployment, should I need them. I am being enabled by Paul’s efforts, and my focus turns from pouring through the HTML5 spec and writing javascript libraries to support older browsers, things I honestly care little about – to my users and my applications, things I care a lot about.

Frameworks Should Promote Best Practices, Not Strict Rules

Rasmus Lerdorf, the inventor of PHP, has spoken often about his “dislike” of PHP frameworks, because of the bloat that they add to projects. I THINK that it was E.B. White who once said, “A novel is finished not when nothing can be added, but when nothing can be taken away.” There is a lot of merit to that thinking, and often, Frameworks give us a lot we don’t need – things that obscure, obfuscate and abstract farther than is necessary or convenient – and we should not be imprisoned by these rules, guidelines and restrictions.

Just this morning, a colleague and I decided to go straight from content development and basic wire frames to simultaneous design and coding, a slight departure from our normal, more formalized way of doing things. We made this decision because it would allow us to build a finished product faster, and because further wire frame definition seemed to add little value. I’ve been involved in projects where formality and procedure created deadlock and wasted hours. If you’re not careful, your framework, be it a code framework or working framework, can also create redundancies and inefficiencies which limit you later.

Good frameworks provide good models for you to follow, and in the programming world, often give you reams of low-level code that you could otherwise spend days or weeks completing. They don’t lock you into doctrinal zealotry.

Summary

Whether you work in a lab or you’re out in the trenches, the framework you use for completing your work as a knowledge worker should be constantly evolving, and will always include sub-components which may be frameworks themselves. If, like me, you’re building apps and websites for consumers and businesses, you should rarely need to reinvent much. What you need to think about is what is included in your working framework. Question why you use certain technologies, and how much more productive they really make you – and stay sharp as you keep your eye out for the next great invention that makes your day easier from one of our fine men and women in the labs ; )

This entry was posted in Abstract, Frameworks, Programming. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>