Choosing your Tech Stack
My definition —
A tech stack is an assortment of tools that are used cooperatively to materialise your project ideas. Specifically to developers, this would refer to your choice of programming languages, frameworks and libraries.
Without further ado…
Intro
When you first dig your teeth in to programming, it’s very easy to feel overwhelmed with the vast amount of resources and information you have available to you. Thankfully the majority of which are free, yet that only makes it harder to choose where to start or even what type of programming you want to learn.
Even when you’ve become a more seasoned programmer, you still may have a doubts about what to specialise in so hopefully a breakdown of stacks can help make that decision easier for you.
This post is based on my journey so it is specific to web development.
Web Dev Stacks
Web development has come a long way since HTML was first invented back in 1989. Over time, more and more improvements were added to make the language more stable and eventually CSS was invented to complement the structure of a web page with styling options.
Nowadays you can make full-scale single page applications whereas before we were limited to a collection of web pages held together by URIs and routes.
A basic web stack in the early days would have been a basic HTML and CSS Frontend with most likely a Ruby or Java backend section. This has now evolved to allow for fully independent UI frontends and backends that are now possible with most programming languages, even Javascript is now capable of hosting a server whereas before it was only capable of client-side scripting.
Thats enough history, let me explain frontend and backend just in case you don’t know. The ‘Frontend’ or the ‘Client-side’ is the face of the application and amounts to what the user can see as well as interact with.
The ‘Backend’ or ‘Server-side’ is the kitchen and storage for the application.
This is where all the data is stored, handled and manipulated. Users shouldn’t have direct access to the backend, it’s the frontend’s role to facilitate that.
With that in mind, a full stack developer is someone who works with both frontend and backend sections.
You with me so far? Good because we’re moving on quickly
Now the frameworks in web stacks usually fit in to one of two categories.
Opinionated or minimalist… and this is referring to the backend section. You don’t have to worry about the frontend just yet.
Backends also need a database, which also has two common categories.
Relational or document-oriented (non-relational).
Lets dive in, opinionated frameworks are essentially an application in and of itself, they do a lot of the heavy lifting for the programmer but the code has to be exactly what the framework expects, what that means is you have to follow a certain convention but in doing so, you are guaranteed consistent results.
These types of frameworks are simple to follow and cleaner to work with because they are written specifically to have a similar makeup even when comparing different applications.
They are most likely to have relational databases, which are data stores structured to efficiently reference links between models and attributes.
Minimalist frameworks are the complete opposite. Providing you with a bare bones template and requiring most of the lifting to be done by the developer.
These frameworks expect every feature you write to be appropriately declared and defined, there’s no guesswork here.
This makes for a more flexible and customisable approach to programming your application, but that doesn’t mean convention can be ignored.
Code still needs to be clean and consistent.
Minimalist types are more likely to have document-oriented databases, they have a free-form structure that suits the minimal approach.
Just before we move on, it’s very important that you factor in your main language(s) when you choose your stack. Learning a new language can be a lengthy process so its best to start with a stack that covers the language you already know and instead pick up new languages / stacks at a later stage.
Examples
Name of stack: LAMP
Made up of —
* Linux (Operating System)
* Apache (Web Server)
* MySQL (Relational Database)
* PHP (Scripting) can also replace with Python or Perl
Type of Stack: Backend
Name of Stack: MEAN / MERN
Made up of —
* MongoDB (Document-oriented database)
* Express JS (Minimalist backend framework)
* Angular JS/ React JS (frontend UI library)
* Node JS (Server)
Type of Stack: Full
Name of Stack: Ruby on Rails
Made up of —
* Ruby (Scripting)
* Rails (Opinionated ruby backend framework)
* MySQL / SQLite / PostGreSQL (relational database)
Type of Stack: Backend
Name of Stack: Django
Made up of —
* Python (Scripting)
* Django (Opinionated backend framework)
* Integrated Relational database (ORM) can also replace with SQL
Type of Stack: Backend
My Journey
I started learning HTML, CSS and JS on an Udemy course at the beginning of my programming adventure, this course was moving its way towards MERN stack although I never reached the frameworks section as I was starting a course at Flatiron before I could finish.
Flatiron prepped me to be well versed in Ruby so it was a given to eventually move to Rails. I generally found Ruby to be a very inviting language and once I understood the conventions, Rails became familiar quickly.
I went back to JS for the third module yet I didn’t vibe with JS straight away. It took some breaking in to but eventually it became my preferred language. Something about its quirks gives the language a bit of personality and I was starting to get tired of the hand-holding nature of Ruby.
This in time reignited my curiosity towards MERN stack and at this time of writing, i’m currently transitioning from Rails towards MERN.
I’m also interested in branching out to mobile development, I believe there is a smooth path between web and mobile so I also intend to add Flutter to my repertoire as it facilitates development for both iOS and Android.
Conclusion
The decision of what stack you go with is fundamentally down to you. Remember to consider the factors that may affect your working relationship with a stack such as the programming language, the structural category of the framework or database and so forth.
Also consider what jobs are available and what they want as there is little point in learning a stack that no company works with unless its for your personal projects.
Other than that, I wish you luck on your journey :]
— Code in Peace