The Philosophy of maximized results with minimal effort
In college, I had the honor to meet an extraordinary Italian professor, who turns out had a strong background in both philosophy and psychology. Every once in a while he would bring fascinating conversations to our classes, and he was kind enough to share his way of seeing the world with us. In those many occasions, he taught us of the philosophy of having the greatest results with minimal effort, and more importantly, its consequences.
This way of thinking portraits how easy it is in modern times to do extraordinary things with little to no effort at all; Allow me to elaborate with an example, better yet, with a question: When was the last time that you ordered takeout by calling the restaurant directly?
I mean, think about it, think about how powerful it is to pick up our smart devices, go to an app and order whatever we please from whatever restaurant, and how, before we know it: food’s hot and ready at our doorstep… What a great outcome for such little effort.
I soon realized that it does not stop with takeout, on the contrary, it’s everywhere: Ordering things through Amazon, enjoying any movie or TV show from the comfort of our homes, working remotely… the list goes on.
And so it hit me, the process of making software was no exception to this rapid evolution.
The double-edged sword of rapid software development
I often think about the development of the famous old game: Roller Coaster Tycoon originally made by Chris Sawyer. Legend says that it was all written in assembly code. I can’t even begin to imagine the amount of knowledge required to perform such a task, and I wonder (being a web dev and all), could I build a Web Server in assembly language. And I want to think that I can, but it would probably take me weeks before that Web Server can return a Hello World inside an H1 tag.
Nowadays, we have high level programming languages that hide the scary computer science topics away, and they go beyond by having a variety of frameworks to choose from. That is, some big library that takes care of the difficult things about producing software, no matter it’s nature: video game, web service, native application…
Today, making an app is almost like following a cooking recipe. There’s no effort in figuring out what’s the right design pattern, the recipe will tell you, no need on how to organize the project or architect it, it’s all there in the recipe. I think that’s concerning.
Do not get me wrong, I am going to be the first one to say that popular frameworks are awesome; they are marbles of engineering. Without them, the development of a product would most likely take twice the amount of time to make, or maybe even 3 times the time. Not only that, but there would be a higher risk of introducing bugs or exploits.
Consequences of our critical thinking
My concern about frameworks is not about their functionality or what they bring to the table, that’s clearly beyond awesome. My concern is that if we are not careful, we can end up learning the framework rather than the language, architecture, and patterns that make it happen.
Everyone can follow a recipe if read carefully, but not everyone can write one.

