I got my first computer in 1987 as a gift from my parents. I must admit that I chose an Amstrad CPC 464 because it came bundled with a few cassette tapes with games:
Figure 1.1 – Amstrad CPC 464 (author: Bill Bertram, source: https://en.wikipedia.org/wiki/Amstrad_CPC#/media/File:Amstrad_CPC464.jpg)
I used to play some of those games during my initial days with the computer, but they were unfortunately quite boring and primitive. One of them was called Animal, Vegetal, Mineral and it especially caught my attention. It was a very simple text game that tried to guess any animal, plant, or mineral that you could think of as soon as possible, by asking questions such as is it a vegetable?, is it green?, and is it a lettuce?
I have always been a very curious person and started to think how that game could work, and mentally pictured some kind of tree structure organizing all the information about potential answers so that the answers provided to the questions could help the code decide which leaf of that tree to traverse. As you can see, my mind was already a good fit for data structures, wasn’t it?
The CPC 464 came with a small book, which was one of the reasons why I became a developer (I’ll leave the other story about reverse engineering the protection scheme of a Lemmings game for another time). The title of the book in English was called Basic Reference Manual for Programmers. I loved reading at that age, indeed the worst punishment I could get was not being allowed to read at night, but this manual surprised and entertained me even more than the sci-fi classics I was used to reading because it opened the door to learning and fostered my digital creativity at the same time:
Figure 1.2 – CPC-464 Basic Reference Manual for Programmers
One step at a time, I was able to learn how to code in Basic on my own and implemented an even more primitive version of the game I mentioned earlier. But much more important than that, I loved the experience and decided at quite a young age that computers in general, and programming, in particular, would both be core parts of any professional career I would choose in the future.
Programming at that time was like writing with a pen on a blank piece of paper but using the bundled and primitive Line Editor application instead. In 1985, I just had that Basic manual to learn and get inspiration from. Forget about autocompletion, online help… and, oh my God, there was no Stack Overflow! Just take a look:
Figure 1.3 – Amstrad screen with Basic code
In the following years of my professional career, I had the chance to start working with Unix and Linux systems and started using vi and emacs as code editors for shell and Perl scripts, together with code written in C. I have always felt quite comfortable with the console, even for editing code, but I have to admit that graphical and integrated interfaces were game-changers.
A few years later, I moved to a pharma company where the presence of Windows systems was much more frequent. That meant meeting Microsoft’s Visual Studio UI for the first time, and I must admit it was a very pleasant surprise. Coding in Visual Basic felt different when compared with my good old Amstrad CPC and exploring interface design was a very interesting experience. I also started using Notepad++ for my PHP, Perl, and bash scripts. It was great to see how all these applications added new features year after year.
But I still realized I had to create everything from scratch whenever I started working on a new project, and the time required to develop an application or service was just too long.
Fortunately, nowadays, there are a lot of different integrated development environments (IDEs) to choose from, with amazing features such as code completion, code control integration, online references, and samples, which make writing code a much more enjoyable experience. I love the idea of using web-based IDEs, which in my opinion make the experience comfortable. Being able to open a browser and have access to an IDE full of options is just amazing!
Visual Studio Code (https://code.visualstudio.com/) is one example that I use quite often when I develop applications for Google Cloud. Just compare the following screenshot with the previous one from the Amstrad CPC...
Figure 1.4 – Interface of Visual Studio Code
And we are getting closer and closer to code being automatically written by just providing a summary of what the piece of code should do (https://www.forbes.com/sites/janakirammsv/2022/03/14/5-ai-tools-that-can-generate-code-to-help-programmers/).
However, what I love about developing for the cloud is how easy it is to integrate external services that provide advanced features, or how accessible architecture patterns, reference implementations, or sample code are. Now, I can put together pieces of code during a single day of work that can do much more than what I could achieve years ago working for 2 weeks.
During my first few months at Google, I worked on a solution that analyzed display ads and let advertisers know what elements worked better. Knowing whether ads with a palm tree worked better than those with a swimming pool, or whether an image of a couple with a baby got more clicks than one with a group of friends was cool.
And implementing this application was reasonably easy thanks to what Google calls the Cloud Vision API, an AI-based service able to detect objects, text, and colors on an image. Imagine how long it would take me to develop this system on my own. I will admit it: I would never have been able to do it. But now, it just takes a few minutes to integrate the API of this service with my code.
And the same happens with other key services, such as storage, messaging queues, databases, and many others that we will cover later in this book. I can say loud and clear that Google Cloud has changed the way I understand and conceive software development. Not only can I develop applications much faster and much more securely but I can also deploy them much more comfortably and make them available to any amount of users worldwide. And all of this can be done from a browser running on my laptop.
Now, I can focus my time on innovative applications and use different components, which make use of cutting-edge technologies, to develop and deploy these applications in record time. And this is what Google Cloud can do for you, too.
So, long story short, after spending endless days fixing the effects of bad initial designs and upgrading hardware, operating systems, and applications, I realized that it would be much better if I could design and build resilient and distributed applications while reusing cutting-edge components and services, which would scale great and deploy faster, and try to decouple them from the hardware and the operating system.
But when we talk about developing, it’s not just writing code but also getting to identify what problem or challenge needs to be solved and decide how we can provide a solution that works. And doing all of this properly is the real challenge.
In my case, I was lucky because, just before joining Google, my employer happened to start exploring ways to make projects shorter and more successful. That’s how I became familiarized and started to use project management, Agile, DevOps, and, once I joined Google, Site Reliability Engineering (SRE) practices.
Let’s discuss what these are and how they can help developers.