Well, it all starts with your first attempt to write a program; a very innocent and and naive program - I mean, your very first “Hello World” and the classic“Read 3 inputs and print the sum of them”. Your only concerns will be some missing commas, whitespaces and some misplaced IF’s - things that may cause a little confusion first. You’ll eve think that it is hard.

#include
int main() {
    printf("Hello World");
    return (0);
}

Then time will pass, you’ll understand the logic better and get impressed with your first program; 150 lines of pure java code, and you will be amazed by it

images

Now you have become a programmer - or even better - a software engineer, right?! We shall answer that soon, let’s continue with our timeline…

You’ll commit yourself to build your first not-so-trivial software project; maybe a stock management system built with some sort of web technology and data persistence with some cool database system. After a few days and some effort, you’ll finish your project and be even more amazed…1500 lines of code!

That is, until the first problem comes up with your system and you have to fix it. You’ll probably be coming to your code without having looked at it for a month, and your first reaction, probably, will be this:

images

And you’ll think “Well…maybe i’m not this Software Engineer thing yet”

From this point on, you will start to study some software developing principles, design patterns and writing reusable and maintainable code. Uff…finally, now you’ll think “I am more professional” and that finally you can deal with the industry, so you’ll come to an important conclusion:

“It’s time to get a software engineering internship”

Well, I will tell you the consequences of this important decision in 3 phases:

Phase 1 — New technologies to study

After a short search for internship opportunities, a software company will eventually hire you as an intern and you, with all your experience dealing with code bases that you created (after all, you hit that 2 thousand lines of code mark, wow!) will think that you’re prepared… Your manager will give you new technologies to study, so you can understand the technologies the company uses: J2EE, JPA, Hibernate, JSF, HTTP, FTP, JavaScript, Jquery, AJAX among others. Well, you’ll be a little shocked at first, that’s normal, but anyway, you, the strong programmer, thinks “it’s okay, i can learn it quickly” which brings us to the big shock that is phase 2.

Phase 2— The company show to you their legacy systems

Ok,so now you studied every concept that were given to in phase 1, and you think “I’m ready to work with the company’s systems”. Then, your manager shows to you their system that was written with java, 10 years ago, with a total of 700,000 lines of code without documentation and he says:

“You will be responsible for the maintenance of this system, here’s the code, study it, good luck!”

And you, the programmer, looks at the code, runs the system, looks at the code again… and your only reaction is:

images

And this is the moment when you question everything, even the laws of the universe… Nothing makes sense anymore and all you know is a lie:

“seriously, what the **** is this? there’s no way that I can understand this code, it’s giant, messy, old and nothing makes sense” — you think.

This is what the code looks like to you

And then, the desperation takes over, you realize that everything you’ve learnt on your classes and on codecademy was very different from the real world systems and you don’t know where to start. But after reading the code 10000000 times, you, in a magical way, get to phase 3.

Phase 3— The discovery

After much effort and many sleepless nights, you, start to see the patterns in this many lines of code; you start to see the logical flow and the most important thing:

You start to realize that even a code base without documentation has the power to tell you a story.

“A story? how is that possible?”

Exactly; the more time you spend there trying to understand the code, more you start to see patterns. You feel like the code could talk and tell what problems it is trying to solve; like you were present while the old engineers were brainstorming to find the solution to these problems.

So you, the young prospective engineer, start to see the logical flow in those 700,000 lines of code, and as strange as it may sound, you start to talk with the code in your head. And the most amazing part of it is that the code answers to you, gives you tips and paths to follow so you can understand it better.

Suddenly you are in a state of ecstasy; you have the power over this messy and dirty code, because it makes sense and gains shape:

images

And then, this quote from Eric Filson makes a lot of sense:

The art of programming is finding patterns where others see only chaos

Yes, this is where your true love story with the art and science of software engineering begins, this is when you build your connection between your mind and code, it’s when you disconnect from the real world and connect yourself to new other universes: your systems.

No matter what happens, don’t give up your attempt to understand the logical flow of your new universe. The key for this comprehension is to stay mentally connected to the system, feel it, live it, walk inside it just like the processor, step by step, line by line, command by command, and trust me:

You will find the pattern inside the chaos.