Importance of Environments in Software Development
Daniel Azeez
Software engineer | Full Stack Engineer | Reactjs | Nodejs | Express | Vuejs | Nextjs | Python | JavaScript | TypeScript
A little less than a year ago I was sitting in front of my laptop computer, and I was going to install VS-code, an integrated development "environment," on my local machine for the first time.
I remember throughout the installation process I was completely puzzled and clueless about the need for and the significance of an "environment", just for coding.?
Was coding not just about writing lines of some gibberish understandable stuff, and perhaps, testing to make sure they were working fine??
The idea of calling a coding workspace on my laptop an environment was foreign to me.
It didn't fit with the conventional way I understood an environment: an environment as a physical space in the physical world with houses, humans, roads, cars, and perhaps, trees—if the humans in the environment cared about nature, our depleting ozone layer and global warming.
Then as I progressed in my learning, I came across more "software" environments, like the production environment, staging environment, and testing environment.?
At this point, my confusion was at its peak. I was baffled, literally, by my in-understanding of concepts and conventions that were so common in the software world!
For goodness sake, what's development environment?
What's production environment?
What's testing environment??
Why do we need several environments just to write and deploy code??
What's the difference between production and development environment??
My questions were endless.
It turned out that for me to understand "environment" as used in the software world, I had to revisit the way I understood "environment" as used in the physical world, then re-understand the term from a different perspective; which is what I did.
For some reasons, I selected the kitchen of my home as the environment to help me through this thought process. And don't ask me why I chose the kitchen. It was rather random—but I'm certainly not a foodie.??
First, I reimagined the kitchen without any of the stuff that makes a kitchen convenient for cooking.?
领英推荐
I reimagined it being without plates, spoons, and washing zinc; without salt, food condiments, and other ingredients; without washing soap, knifes and bowls.?
I re-imagined it without anything save for some tools: a gas stove, a cooking pot, and a bowl of uncooked rice.?
Now, with just these three materials, come to think it, how easy would you think it will be for me to cook a food successful??
Thinking...
Very stressful, I would think. And at the end of the cooking session, end up with the most bad tasting food ever: I might forget to put salt since it isn't in the kitchen in the first place.
With this, I understood the significance of environment in the software world.
The epiphany came once I understood the stressful nature of cooking in my re-imagined kitchen: the spoons, plates, washing zinc and other utensils were like the functionalities in an IDE that made it convenient to code.
Without those functionalities, coding just like cooking in my re-imagined kitchen, would be very stressful.
With my re-imagined kitchen constructs in my head, suddenly, I felt so much pity for the early programmers that had to code in Notepad and other text editors that resembled my re-imagined kitchen with no tools but a stove, a pot, and some rice. How stressful coding must have been for them!
As for the difference between a production environment and a development environment, I compared my kitchen environment to my bedroom environment.?
They both have different functionalities installed that make them convenient for the purpose assigned to either of them.?
With a bed, a wardrobe, a fan, and other tools, the bedroom is so much convenient for sleeping; and same goes for the kitchen and its functionalities that makes it convenient for cooking.
This same thinking applies to the development and production environment.?
The production environment is configured with functionalities that makes it convenient for deploying application without compromising on speed; and development environment is configured with functionalities that makes it most convenient for writing and debugging code.
As for "why we have several environment in the coding world", I had a realization: software coding, testing and deployment are very complex processes such that we need several "convenient" environment to serve these processes needed to ensure we produce optimized code that satisfies modern web application users with fast access and speed that we all so much demand in today's world, like a birthright.