Greetings once again, readers, programmers, surfers, Googlers, girlfriend, and even the media alike. Welcome to another thrill-packed excursion into OCD-like minutia, fresh off of a week of vacation, which included a harrowing forray into a foreign country, a lawless, colorful swamp.
Today I need to empty my topic garbage with various terms that have been floating around my post queue, just taking up space. Let’s answer some questions.
What is the difference between an environment and a region?
This is probably very specific to my job, actually. People talk about the development environment, but sometimes they also talk about something that happened in Region 2, which seems to be a synonym for “development environment”. The catch, rightly or not, is that sometimes two or more environments “point” to the same “back-end region”.
After two years, I am coming to the conclusion that when we speak about a “region”, we are simply referring to a back-end environment. So, don’t talk about deploying your UI code in Region 6 anymore. That makes no sense.
What is the difference between a framework and a platform and an engine and a library and a runtime?
Here is another set of terms that are regularly tossed about like a literary orgy in various podcasts and blog posts. Let us see.
A library is pretty easy; it is a package of code, typically re-usable, that can be called from other applications.
A framework is more “active” than a library; it is software that already solves a general application development problem and allows developers to fill in the blanks for their specific applications. Think .NET Framework.
A platform is…good question. My research hasn’t yielded much on this one. The best you can find is “a hardware architecture or software framework that allows software to run”. Yeah, that helps a lot.
My first impression was to cite the example of the LAMP solution stack, but that is described as, well, a solution stack. I flirted with the idea of including hardware in my definition, but after seeing Java cited as a platform, as well as LAMP referred to as a platform on the C2 PPP, I have made my decision.
A software platform is a collection of frameworks and/or libraries and/or tools that are related in such a way to address a development problem and/or fill an architectural need. Note the qualification: this is a software platform. Don’t be surprised to see the term “platform” used in other contexts to also include hardware.
And just to avoid future confusion: a solution stack is more component-oriented and more focused on describing re-use than “platform”. A solution stack is a platform, but not every platform is a solution stack.
A software engine is…just as ill-defined as a platform. The main definition appears to suggest that it is a term we nerds use when speaking to the masses about a library or platform. Yeah, that isn’t going to fly here.
When I think of an engine, I think of a game engine. Specifically, I think of the original DOOM engine and the knock-offs that it spawned, like Chex Quest. Chex Quest used the DOOM engine. You could tell that you were basically playing a less graphic version of DOOM, yet some development work had to go into Chex Quest beyond simply reskinning, though reskinning was probably the majority of it. And I’ll bet that development work was more along the lines of using a framework provided by the engine.
I think that a software engine is a piece of software that solves a generic problem and provides various points at which a developer can specialize the product, some of which may or may not be a framework. It is distinguished from a library in that a library is available for use at code-time, as opposed to the run-time nature of the engine.
Finally, a software runtime environment refers to both the logical and in-memory elements with which your program can interact when it runs. The best examples I can give you is the mental image you get when you are trying to think your way through a stack smash or when you are visualizing the bindings of variables in your favorite functional language.
Note that a runtime may or may not be OS-specific. Something like Java is not, but the C runtime very much depends on your OS.
What are other terms for the production environment?
This one came up because I wondered: what did I use to call production before I graduated college, i.e. at The Company when I “discovered” the need for test environments on The Project (Dev, Demo/Prototype, and Prod)?
Here is what I could come up with:
- Omega (a take on Alpha and Beta environments)
- Z (a take on A being the first letter)
- Flight (a take on something having been “elevated”)
- Field, i.e. “out on the field”
- “The Wild”
- Finally, I’d like to dig up my archives at some point and figure out what name I gave The Project’s production database.
Are we clear? Good. Now stop being so snippy.
|Announcer: You’re reading the EIP web-ring.|