Software Engineering 101:
I shared a tweet yesterday as regards how Software engineering isn't Frontend and Backend.
I was surprised at how some people were surprised or saw the tweet as a hot take instead of taking it for the fact that it is.
I later realised that it was just a "curse of knowledge" that made me assume everyone knew this already.
I feel like a lot of boot camps aren't doing enough justice because this is meant to be foundational knowledge and not something you find out after years of being in the tech space!
I spent 1hr trying to come up with the best way to explain this and the best approach is using an analogy to break down what Software Engineering really is and what Frontend and Backend are.
One of the ways I learn to understand and explain anything tech is by using analogies, which is my way of making concepts clearer when related to the real world.
Consider Object-Oriented Programming (OOP), where terms like 'inheritance' can be better understood through real-world analogies. In OOP, inheritance allows an object to acquire properties from another, similar to a child inheriting properties or traits from their parents.
An analogy allows you to simplify tech's gibberish by relating to everyday life.
Let's explore a software system by comparing it to a construction site.
A typical site has various specialists: carpenters, plumbers, bricklayers, painters, labourers, and supervisors. Each has a unique role.
However, a construction project doesn't start spontaneously.
It begins with a client's vision, which is then shaped into a feasible plan by engineers.
This planning stage is crucial, ensuring the project's viability and avoiding future complications.
In software development, a similar process occurs. A project starts with an idea, which software engineers develop into a practical plan. They choose appropriate technologies and tools, similar to selecting materials in construction.
In both fields, some individuals execute these plans.
Bricklayers and carpenters in construction, or front-end and back-end developers in tech, use their tools to create something tangible.
They may not grasp the entire engineering concept but can effectively build based on patterns or instructions.
However, using tools doesn't equate to understanding underlying principles.
A bricklayer might construct a house based on experience without deep engineering knowledge. The house might stand, but its future stability is uncertain.
Similarly, a software developer can build applications using tools and existing code but might lack insight into the broader implications of their work.
In contrast, engineers, whether in construction or software, plan and build with a comprehensive understanding. They consider the broader impact of their decisions, ensuring sustainability and effectiveness.
This distinction is evident in tech roles. Software engineers understand the principles and implications of their work, while developers might focus more on tool usage.
WordPress developers, for instance, use templates and tools to build websites, similar to how a bricklayer uses skills to construct a building.
Project managers and site engineers in construction ensure adherence to plans and quality standards. In software development, similar roles oversee the development process, ensuring best practices and project requirements are met.
With these few points of mine here are my takes:
1. Software Developers are not Software Engineers as to how Bricklayers and Carpenters can't call themselves civil or Architectural Engineers.
2. Frontend and Backend Engineers are Software Engineers who know how to use a Frontend or Backend tool alongside applying Software Engineering Principles to them. The "Engineer" keyword makes the difference.
3. You don't have to be a Frontend Developer or Backend Developer to become a Software Engineer. You don't have to be a Software Engineer to become a Software Developer.
4. Ever wondered why the tools you use for building like node js call the document developers' documentation and your senior engineer at your company gives you guidelines in the form of engineering documentation. It is because you are a developer at that company and not an engineer!
5. Engineers are tool agnostic, meaning they're comfortable with using a variety of tools and also apply engineering principles to them.
6. it's really not a bad thing to be just a software developer, as far as there is an engineering guideline you are following.
7. I also saw someone mention that software engineer and developer can be used interchangeably. My answer is: No they can't.
In the shortest way possible, software engineering principles are guidelines that ensure the development of reliable, efficient, and maintainable software. Key principles include:
1. Modularity: Breaking the system into smaller, independent parts.
2. Abstraction: Focusing on high-level functionality, hiding details.
3. Encapsulation: Bundling data with methods that operate on it.
4. DRY (Don't Repeat Yourself): Avoiding code duplication.
5. KISS (Keep It Simple, Stupid): Simplicity over complexity.
6. YAGNI (You Aren't Gonna Need It): Not adding unnecessary features.
7. SOLID: Five design principles for object-oriented programming.
8. Separation of Concerns: Dividing a program into distinct sections, each with a specific responsibility.
9. Scalability: Designing software to efficiently handle growth.
10. Maintainability: Writing code that is easy to understand and modify.
Thanks for reading, please do well to share by retweeting, so that other people can understand this foundational knowledge.
I will try to answer your questions in the comments 🤌
Full Course Videos on YouTube
❯ Python
https://t.co/bxsCeuGSN0
❯ JavaScript
https://t.co/x0oGDNYyNJ
❯ Java
https://t.co/1ZRFCuFA9H
❯ C#
https://t.co/99ZhK60aQN
❯ HTML/CSS
https://t.co/zYAW3ePA38
❯ PHP
https://t.co/dBJVuRrZcM
❯ MySQL
https://t.co/IayAtwfT00
❯ C
https://t.co/ekR4Ar5ANZ
❯ C++
https://t.co/DRwqUkYkTr
❯ DSA
https://t.co/AHyDoWnp3w
They all have total ~35M views and the teacher is "Bro Code".
OOP concepts are the most fundamental concepts in programming languages like Java, Python, Javascript, etc.
Here's a Dead Simple Guide to Understand It:
Gmail has 4.2 billion active users.
But only a few know how to use Gmail effectively.
Here're 7 Gmail hacks that you shouldn't miss and make earn $20,000/m
WHEN BOYS BECOME MEN
A boy becomes a man when he starts trying to impress himself more than others.
A boy becomes a man when he learns to value respect more than attention.
A boy becomes a man when he stops altering his behavior to please women.
A boy becomes a man once he’s completely comfortable being alone.
A boy becomes a man when he begins teaching his parents more than they teach him.
A boy becomes a man when he finishes his first hero’s journey.
A boy becomes a man when he’d rather appear broke than rich to the masses.
A boy becomes a man when he can both suffer and celebrate in silence.
A boy becomes a man when he enjoys giving gifts more than receiving them.
A boy becomes a man once he’s completely comfortable saying “no” to women he’s attracted to.
A boy becomes a man when he stops causing unnecessary suffering for others and starts seeking necessary suffering for himself.
A boy becomes a man when his mother seeks his validation more than he seeks hers.
A boy becomes a man when he stops begging and starts building.
A boy becomes a man when he starts producing more than he consumes.
A boy becomes a man when he values silence more than speech.
A boy becomes a man once he desires fulfillment more than fame.
A boy becomes a man once he fears the regret of a meaningless life more than he fears insult, injury or death.
Carrot 🥕 is good for eyes.
Lemon 🍋 is good for skin.
Cabbage 🥬 is good for gut.
Banana 🍌 is good for stress.
Pinneaple 🍍is good for cough.
Tomato 🍅 is good for prostate.
Water 🥛is good for your kidney.
Coconut 🥥 is good for diarrhoea.
Avocado 🥑 is good for your heart.
Cucumber 🥒 is good for hydration.
Egg 🥚is good for bones & immunity.
Spinach 🥦 is good for red blood cells.
Watermelon 🍉 is good for erection.
Repost 🔁 is good for others.
CISCO is offering FREE trainings and certifications for people looking to learn:
- Data Analytics,
- Data Science,
- Cybersecurity,
- JavaScript,
- Python
These are self-paced courses, so you can practice as you learn.
Open this THREAD to get started on your learning.
Repost for someone who needs this.