Loading posts...
Loading posts...
I often come across various people on social media, some more serious than others, recommending the best path to enter the programming world. These paths can be approached in different ways: Roadmaps for frontend, backend, fullstack, data science, machine learning, etc. At the core, the premise is good, in fact, many of the sequences you find in these roadmaps are correct and useful. Except for one detail: These roadmaps are focused on people who already have programming experience.
Yes, this may sound a bit contradictory, aren't they supposed to be for people who want to learn to code? The reality is that these roadmaps assume that the person already has a solid foundation in programming, and what they're looking for is guidance on what technologies to learn next. The problem arises when people with no previous experience try to follow these roadmaps to the letter, which can lead to frustration and demotivation.
The world of technology is ENORMOUS. It's not decades of development, it's CENTURIES. This point many people are unaware of, computer science has existed for thousands of years, this is not an exaggeration at all, the first concepts of programming come from multiple cultures, from ancient Greece to imperial China. Beautiful and interesting stories, from theologians, philosophers, mathematicians, lawyers and eccentric personalities. Computer science has been gestated in a turbulent, hazardous path full of icons that have remained in collective ignorance.
I don't want to sound pretentious, but knowing history, in any field you want to study, gives you perspective. Knowing why something was invented, who invented it, in what historical, social and economic context the invention occurred, helps you better understand its purpose and functioning.
Let's say that people who work in the technology area have relatively marked patterns; We are curious, we like to solve problems and understand them, we are creative and we like to express our ideas into something tangible. But above all, we are people who seek to understand the "why" of things.
And this is not surprising, the history of computer science was built based on people who followed the same pattern. Can we create a universal language with combinatorics? What if I no longer want to add very large numbers by hand? How can I automate repetitive tasks? What if I want a machine to do what I tell it to do?
You must start with history! Haha! You thought I wasn't going to say it. Well, at least a little bit, out of curiosity. If you're interested, I can write some didactic and summarized article about great computer science figures and their contributions, but that depends on you as readers, if you see this article published somewhere, you can leave it as a comment.
Before even thinking about a trendy programming language, you must understand what an algorithm is. The definition is quite simple, and you'll find it in multiple ways on the internet, but I really like this one:
An algorithm is a set of defined and ordered instructions or steps that are followed to solve a problem or perform a specific task.
It may seem basic and very broad, but that's what it is, an axiom of life itself. EVERY day you use algorithms for your daily life without realizing it. You have routines, right? Sequence of actions that you perform repetitively to achieve a goal. Sure, your routine can have variations from day to day, but you usually reach your destination.
An algorithm is nothing more than that, a routine, sequential steps from an origin to a destination.
You wake up in the morning, you shower, you get dressed, you have breakfast, you take the subway, bus, car, bicycle, you just walk, you arrive at work, you pour yourself a coffee because you're dying of sleep, you turn on your computer and you start working.
Your routine could equally be, you wake up, go out to exercise, shower, get dressed, have breakfast, go drop the kids off at school, come back home, work from home, have lunch, etc.
Are they routines, right? Are they algorithms? Yes, they are.
Our work also implements routines, just like in daily life. What does a programmer do? Solves problems, and to solve problems, creates algorithms.
Problem: The user wants to log into their email account.
Solution: Create an algorithm that verifies the user's credentials and allows them to access their account.
See? A simple algorithm to solve a common problem. Now, don't get confused, verbally it looks very simple, but each of those steps you see there requires a number of actions that, if you're just starting to learn programming, you probably can't yet dimension.
But that's precisely why I'm giving you a hard time about this, to get to dimension all these steps, you must dimension how big and complex the world of computer science is, open your mind to understand that for humanity to be able to achieve this simple login, centuries of development, technological, mathematical and scientific advances have been needed.
Society says that computer scientists are kind of weird, square, not very social, literal, at this point I've heard everything, and partly they're a bit right, but it's because we condition ourselves a lot to what we do.
What I'm going to say may sound a bit fatalistic, and maybe some humanists won't agree with this but, at the end of every path, whatever it is, decisions are binary. What is a binary decision? It's a decision that has two options, yes or no, true or false, or as we also usually note it in programming: 1 or 0.
Am I going to work today? Yes or no. Am I going to study today? Yes or no. Am I going out with my friends? Yes or no.
It doesn't matter the reasons, the motives for your actions can be infinite, but in the end, you either do things or you don't do them.
This is a huge field of study and it's fascinating at the same time, machines work this way (don't come at me with quantum computing please haha). Circuits, programming languages, operating systems, everything works with boolean logic.
I could spend hours writing about this, but that's not the objective of this article either, but your curiosity bug should point to studying logic, set theory, boolean algebra and algorithms.
I'm sorry, but no, it's impossible that if you want to be good at this you don't study mathematics. You don't need to know differential and integral calculus, you don't need to be a genius at this, but mathematics will orbit your life as a programmer, and in a much more direct way than you think.
I've come across many of these bootcamps that say don't be scared by mathematics, that they're not very necessary, but the truth is that's lying and creating false expectations for the person who pays to learn, don't be naive, this won't be easy!
For those of us who are in this field, we know what it's like to spend days, weeks without being able to solve something, sometimes you sleep poorly, sometimes it's frustrating, sometimes you have to redo everything from scratch, but when you manage to solve it, the satisfaction is enormous. There's nothing more rewarding than seeing what you made work, that your work bore fruit, that you managed to express your idea into something tangible. If you enjoy this type of emotions, you'll love this world.
Concluding this first part, I leave you with the following initial recommendations to start your programming journey in a solid way:
See you in the next one!