
Without frameworks our “big ideas†would still be stuck in the pre-industrial age. —Bill Lee, Berlin, 2008
I have been on a long hunt for a PHP framework so I was going to write up an article about PHP frameworks, but then I thought I should back up a bit and talk about what a framework is and why you should use one.
Software driven computing has existed for over 60 years. In the early days computer programming was performed using long series of numbers to represent the electronic switches tell a computer what to do—computers still work this way. Fortunately no one has to program computers by speaking computer-ese numbers anymore. With that kind of tedious programming, the most advanced programs would be tic-tac-toe games.
But numbers are the nuts-and-bolts of a computer’s operation. Designing a sky-scraper while having to dwell on every nut and bolt of its construction might limit us to working in ten story buildings. It is vitally important in designing complex systems to be able to think at more abstract, level. Programming using numbers quickly led to “assembly language” as mnemonic way of specifying those numbers, then to “third-generation” programming languages (such as C, C++, Pascal, Fortran) which allow programs to be written without regard to the numbers that the computers can actually interpret. This frees software designers to think about problem-solving without being encumbered by the tediousness of the numerical “nuts-and-bolts” needed by the computers that run the programs.
Constructing a building does not occur in isolation; its context involves the skills and machinery of those involved as well as governmental and environmental infrastructure. Over the past 30+ years, the complexity of computing has given rise to very advanced operating systems that define the context in which a program runs. Add to that, the interactions between a program and other programs or data that exist across a network or even the internet and the complexity of issues add to the tediousness of dealing with nuts and bolts. Again, if a software designer has to dwell on the minutia of all these elements, modern complex, powerful software would never be completed.
A framework attempts to encapsulate the complexities of designing and implementing software. A good framework allows software design to occur more abstractly, unencumbered by the tediousness of the contextual details of  the environment. Said a different way, a good framework allows the software designers to focus on the application’s purpose rather than the complexities of implementation.
Software is constructed in layers or components. Encapsulation is one of my favorite concepts in software design and implementation. It embodies the idea that there are specifics at every level or component within the software system that need not be exposed outside that implementation for that level. There are two key side-effects of this: (1) it prevents parts of the program outside the component from messing with or depending on implementation details which leads to (2) each component’s implementation can be changed or improved without fear of adversely affecting use of the component in unexpected ways. This leads to more stable, maintainable products.
Good programmers embed encapsulation within their design and implementation. Many object-oriented programming languages attempt to formalize this concept so that it is easy to do this. Well designed frameworks do the same, “protecting” some parts of the program from complex or variable implementation details.
There are good frameworks and there are bad ones. In a later article, I will discuss some of the issues to consider in picking a framework.
What have been your experiences in using programming frameworks?





Have you seen the infographic saying you should be blogging at least three days a week to keep people coming back to your site? When I saw this, I thought, “how could I ever come up with that much content, I’m not even a writer!” I’m going to share how I’m managing this internal perception by creating habits to help me “feel” like a writer.






Stuck in Your Startup? Get Over Yourself!
Photo by: Zach Klein
There are a lot of challenges to getting your own startup off the ground. The one thing that no one mentions, though, is the challenge of getting out of your own way!
If you are serious about your first start up—not just as a hobby—then you will need to push yourself, hard. There is too much work to do; there are the product creation issues, there are business and promotion issues, and there are issues that you could never anticipate. There are not enough hours in the day to do it; and that is even if you don’t have a spouse and you don’t have kids and you don’t have a money earning “day-job†to tend to!
If you are starting your first company and you don’t feel stress and pressure,  you are not taking it seriously enough.
Through this stress, you should learn something that you don’t read about:  you are your own worst enemy.  If you have the desire to start a company but haven’t done so or you are stagnating early-on, what is impeding you? Oh, you can blame it on “There isn’t enough time,†or “The idea is not good enough,†or “It will cost too much,†or “It has already been done,†or a myriad other excuses. There will be “roadblocks†at every stage of your entrepreneurial endeavor; from getting started to planning and execution. The real reason you can’t move forward is because you are inhibiting yourself.
During those frustrating times where you are not making progress, it might be worth your while to look inward to see whether it is your own psyche, habits, or preconceived expectations that are keeping you from moving forward. Once you begin to realize why you are not executing, you can begin to find solutions to break those patterns and beliefs. Â Climb out of that box that you have spent your whole life building around yourself!
Learning and understanding yourself, then changing and growing… that may be the most valuable part of pushing yourself through the challenges of starting your own company.
Posted in Startup