Where it all began
Back in 1998, when I was 16, a friend of mine lend me a copy of a Delphi 3 book. At the time, I used to work as storekeeper and all I knew about computers was how to use Windows 3.1 and 95, Word 6, Excel 5 and MS-DOS. It was a informatics course pack common in Brazil at the time. After reading this book, I used my spare time at work to go to the company's office and use my boss's computer to implement some examples and create small applications, using Paradox, DBE and Delphi 3 to automate some small tasks. My boss liked the idea of receiving free software and said I could use all spare time I had in his computer. 5 years went by and I decided it was time to look for a real job as a software developer. By that time, I had accumulated a lot of experience and was convinced by a friend, a Clipper programmer, that I was already good enough to give this step. I was 20 at the time. I grabbed the yellow pages, remember it was early 2002, and listed the name and phone number of all software development companies in my city. It was not that many. Then the next step was to call each one, inform I was interested in appling for a programmer position and ask for an e-mail address to send my resume. Well, it was sassy, but it worked, and in May 2002 I was already working as a software developer, in a company that had clients in Brazil and Switzerland. Since 1999 I was already studying english by myself, to be able to understand the information I used to find about Delphi in the early Internet, and this knowledge was crucial, since from the beggining, english was already the default written language at work.
The First Real Challenge
I remember seeing that messy code at my first work and thinking, well, code is more complicated than I thought. I have so much to learn to be at the same level as these guys. Actually, that code was just messy, but I was only able to realize that years later. Lots of patterns and idioms common to structure programming, a years old Delphi desktop app that needed to be refactored to be moved from DBase to Paradox. Not that much of a improvement, but significant at the time. It was a project from a brazilian customer. The senior guy told me I should not touch the other project, from the international customer, until he said otherwise. Something that took about 2 years to happen.
The Joy of Java
Delphi 7 supported a few OOP features, but not all of them. In 2003 I had a chance to take a Java programming course (J2EE) and along with it, apply the OOP concepts I had studied in the last few years in its full glory. This course introduced me to the Java 1.3 and J2EE. I honestly did not like the "do it as I say" style of J2EE, but the OOP in practice was amazing. Not only for me, but for the whole team. In the next weeks we started to see camel cased code methods in Delphi code, a mistake that we soon came to regret.
In the last two years, I worked mostly on Blood Bank Management systems. I had the opportunity not only to learn a new business domain but also start to develop and apply my own programing idioms. Now I could make my own mess, and learn with it too. After some time, the demand on the international client started to increase and my good english skills, at the time only writing and reading, helped me to be accepted in the team. A few years later, 2007 to be more precise, I was travelling to Europe to work on site. That was my first experience with a multiregional team and was crucial for my carrier as a software consultant.
Tasks before TPL
A new and big contract, a large system, large team and more reasons to be more assertive in how the system had to be developed. It would be our first experience with web services in the backend side. It was 2008 and I could work for the first time as Software Architect, describing how the software would be structured and creating the foundations on which the development team would deliver the new system. Among the challenges, create a replicable module structure so that new features could be delivered easier, but that was not my favorite part. Delphi was successful in the 2000's mostly due to how their component libraries and drag and drop style made our lives easier, and since my first days as a programmer I already enjoyed developing VCL extensions. This time, I could write a whole component library to be used as the client side library for our RemObjects webservices, an alternative/extension for their Data Abstract. That was one of my first big accomplishments and sadly, as GitHub was not a thing at the time, is probably lost by now.
Time for a big change
9+ years working for the same company carries a lot of stress, and it was time for a change. Up to this point, all that I did as a software developer was to build and maintain Desktop applications, using either Delphi or WPF, but for a few years by then the Web was the trend. ASP.NET Web Forms was being replaced by ASP.NET MVC, SPAs were being born after the huge jQuery success, so the conclusion was obvious: To be marketable, I had to learn Web Development. The year was 2011 and so far few were the software development books I've read. You can see more details here. But this time I had to stop using only blog posts and forums as continuous learning resource and get something more reliable. I started with Clean Code, HTML5, jQuert, CSS3, ASP.NET MVC 3 and TDD. They were certainly helpfull, but for my surprise I received a call from someone I didn't know at the time asking if I were a WPF developer that they had I job opening and I was recommended in a developers forum. I still don't know who made this recommendation, but there I was, once again working with WPF. For sure I had new challenges, but the migration to Web Development didn't come yet. What certainly came at the time was my appreciation for reading technical books.
Almost 2 years working mostly with Geographic Information Systems in WPF, the company CTO called us to a kickoff meeting. A new project, his dream platform, individual backend applications responsible for individual tasks. Each application would do a single job and communicate the results to the others via a high speed message bus. He was excited, but also frustrated, since it was not the first time he was trying to implement a solution like that. My eyes sparkled with that architecture and I asked him to trust me with the job, which he did. That was my first experience with a large backend system and the results were not as good as they could be, but it was a R&D project that could achieve its goals. One of the outcomes of this project was the Reactive Services framework, which I like to present as part of my portifolio. I only uploaded it to GitHub a few years later, but it was born in 2012. An embrio for a Microservices Architecture, before the term become popular. A few other concepts were starting to become a trend at the time, like Docker and Spring Boot. Today, we have yet Spring Cloud and Kubernetes, Microservices is now a fully grown architecture and the one I'm passionate about.
A step back
At this time, I was working as a Software Architect and Team Lead, but a new opportunity arrised. Leading a team in a different company in a scenario that was more like what I was looking for. I went for it, but something went wrong and when I started in the new job, the promissed leading position wasn't available anymore. I got hired and had a position available for me, but as a regular programmer. No leadership role, no software architecture to be responsible for. Turns out it was a blessing. I was there with the compensation I desired, working with something I love, coding, but without the extra pressure and responsibilities. Obviously, that couldn't last, and I was prepared for that. I was hired occupy a much higher position and being paid for that, but that was not what I was doing in a daily basis, so less than a year later, I got fired!
A step forward
Since some years back, I was getting ready for a position in an international company, working for international clients again. My English skills were good already, but remember, I haven't been a Computer Sciences student, and Algorithms was not something I learned for good in my self-taugh studies or graduation courses, so I had to compensate that flaw. For sure that topic would be present in any international technical interview. The Sedgewick course in Coursera, the CLRS book and Ace the Programming Interview got me covered. And surprisingly enough, the undergrad in Mathematics was crucial, since that job required experience with software optimizations and lots of mathematics. A position that was oppened all of the sunden, a week later I got fired from my last job. I've got the international consulting job and soon, once again, became a reference among my coleagues.
Back to Java
Since that first experience with Microservices, back in 2012, I was working mostly with C# and .NET, in the backend side. Microservices is now a daily thing and devops work is something I can't stay a single day without. Through the last decade so far, it's 2020 as I'm writing, most books I've read were ilustrated in Java, most devops work I do in a daily basis requires interacting with a Java ecosystem, and the market in San Francisco is not quite open for .NET and C#, even after the rise of .NET Core. Microsoft Development Tools are great for productivity and performance, but the lack of a bigger and mature ecosystem outside Microsoft Azure, along with a smaller development community, made the opportunities become scarce. It was time to check what this new Java 11 was all about. My last contact with the language, other than simple helper tools and studies, was years ago, in Java 6 I guess, so it was worth some reading. Also, I wouldn't convince anyone I'm good at Software Architecture without at least knowing well what Modern Java has to offer. The path that I chose was to learn and be certificated in Java 11 SE and later the Spring Framework, and I can tell the suprises in this learing path are really amazing. Since the end of the first half of 2019, I got into a intense study routing and by the mid of 2020 I could already feel totally confortable and productive with the language and its main frameworks and tools. Next steps? More books, more Java, more Software Architecture. Learning never ends for a Software Developer.