Developer ‘s Journey — Magic Origins
Software Engineering often seems like a insurmountable journey. How did it all start? How do we become engineers? Are we artists? What’s the end goal? And, most importantly, why?
Most people think time is like a river that flows swift and sure in one direction. But I have seen the face of time, and I can tell you: they are wrong. Time is an ocean in a storm. — Prince of Persia
Part One: Magic Origins
Maybe your love for video-games piqued your interest. Maybe it was ‘War Games’. Anyhow, something started the engine, something ignited the creative spark. Then you needed fuel. You needed to learn how to turn all your ideas into reality. You needed a way to move all those pixels in the screen to create something. In summary, you needed to learn.
You started to climb that learning mountain one step at a time. Maybe that mountain was named ‘University Hill’ or maybe just ‘Will Power’ cliff. After endless theory classes, finally one day you were able to print your name on the screen. Hurray! You felt like a wizard. You belonged to a unique club of magicians. The shell prompt not only opened a door to a new world, it just blasted it wide open.
Any sufficiently advanced technology is indistinguishable from magic -Arthur C. Clarke
Then you learned conditionals. Now, you were able not only to create new realities but to shape alternate ones using the power of two simple words: if and else. It is easy to overlook and forget how powerful yet simple these instructions are. With them, you can jump the boundaries of our continuous and unidirectional reality. You can always edit the reality of the program, rerun it and get a different result. In the computer realm, ‘what ifs’ are not left to imagination. Unlike Jennifer Connelly facing The Two Door Riddle in Labyrinth, in this universe you can try both approaches.
Which door would you choose? One of them leads to the castle at the end of the labyrinth, and the other one leads to death.
That’s not the only rule you can bend. You can experiment and explore all these alternate realities in a matter of milliseconds. You learned how to use loops. Bordering insanity, you can run the same thing over and over obtaining, hopefully, the same results. This brings you comfort, this realm offers a promise of predictability, a place where you can rely that if you do things right, you’ll get a right answer again and again.
Unfortunately, your creations were short lived. They awoke, performed some computations and then they ended. They finished but not without returning a result as a parting gift. You couldn’t accept that, you wanted your programs to transcend those limitations. You wanted them to remember what happened before, process it and evolve to the next step.
Hidden in a dark corner of your library, you uncovered a book. After cleaning the dust, you could finally read its title: Data Structures.
You devoured it. Arrays, Linked Lists, Trees, Hash tables… All sounded as powerful as elven spells enunciated by Gandalf. You wielded them to unlock a new world of possibilities. A world where you could traverse an immense amount of information, of space and mutate it. You could draw conclusions out of them in mere instants. You build a program to help your parents prepare the taxes. Your creation transcends your house and it is used by your parents friends. Then, friends of friends. It was alive.
The world seemed to fit in your computer. The outside world, once digitized, didn’t seem so vast and unpredictable after all. But something was off. There was an itch that you couldn’t scratch. Your digital realm was still bound to just text and numbers.
Why, you asked, even with all those capabilities, you were only able to print text on a screen?
Immediately you walked out the door, toward whatever the new challenge held. You felt something like optimism. — Braid