Road and reflections on first job

Just wanna share my thought process or maybe its more documenting for myself to see where I was at when I first entered the work force.

Quick background, I come from a typical "Computer Science"(C.S.) background, I put C.S in quotes because in Portugal where I live, the college courses are not like CS in America. There is an "Electronics" Degree where you study programming and focus more on low level and "electricity stuff". And then we have the course I took which is called "Informatics" degree. This is a course where we get thought mostly Java + OOP and of course data structures , a bit of C, SQL, assembly, Angular, DotNet etc. . Now looking back is pretty easy to see that they just structure the course around the most used technology in "Enterprises". Which can be good because they are producing the people that the industry needs but in a counter point it's not producing the most curious and good programmers. What I mean is for example: Why didn't they have a compilers course? Probably because Industry does not demand but understanding a compiler brings an insight so big it pays off. This is another hole topic so I won't continue and let's get back on track.

After I graduated, I decided to go do a Masters in "Software Engineering". Also before this I had an internship in a company doing an InHouse product for managing desktop software which I refused to continue at the time but looking back It was a nice place to have some ownership and decision making. Getting back to the Master I decided to enter because I was initially in this mindset of "Enterprisy" software but just before I entered the masters course and had some time off without doing anything. I know this time was the most important during my journey on being a developer because I discovered a different mindset about programming. I was just casually trying to find content about programming and specifically being good at programming and I stumbled upon Casey's Muratori Handmade Hero. For those who don't know what is HMH is a about the process of Casey doing a WHOLE video game by himself on stream. This was the point where it changed for me. Because just watching some episodes Casey showed a things are not that difficult and you can learn to uncover all of the magic and you use a computer and he awakened on me this sense of Curiosity in me that I didn't know I had( and it manifested into other things other than programming after). I started to be more pragmatic trying to understand things beyond the layers of abstractions that we have in our software world. This lead me to dropping out after discovering this new way when I went to the Masters Degree and they were teaching about Design Patterns,Java, more crap I don't remember,...

Fortunately when I was in the Masters Degree there was this nice girl I was pairing with in one of the classes that recommend me to the company she worked at when I told her I was dropping out, and some weeks after I got interviewed and they accepted me. (Funnily enough I did apply to this company some months earlier and they didn't even phoned me for an interview, I guess recommendations are very strong :))

So this is where my first job/project begins. The company I got hired was CriticalTechWorks which is a venture between Critical Software and BMW in Portugal. So my first project was about a testing framework for Autonomous Driving Cars. When I heard this I thought I had gained the job lottery. From dropout to AD at BMW, thats pretty good I thought at the time (I still think it is but some caveats). So this project was already being developed for some years at BMW but CTW was just getting into it and starting to build a team to start working on it. There was a lot of mystery and unraveling to do in this project in this new team when I joined. So much information was missing I didn't even understand the product just only after 6 months I could explain the simple version.

This new team started with 3 people, a scrum master (scrum knight how they call in CTW because they also develop), 1 senior and 1 junior (me). At first glance I was just so excited to work, my expectation would be that the software would be of top quality and I would learn a lot during the process. Of course I learned a lot because I was a newbie but after some months I came to realize that the product is a mess. It was a mess in terms o software and team structure,... During these months before I realized the mess and I was "pushing" trow this mess with working more hours but eventually this lead to a small burnout. Fortunately and unfortunately I had a motorcycle accident so I had a 2 month break. But after I came back all of the mess just made me "not care", "everything is shit in this project". I was angry I had to work with this mess and unnecessary complexity. This feeling stayed with me til the end before I left the project which did not help with motivation and hobby programming on the side.

At least towards the end I concluded by talking to many people that this mess and complexity is a "normal thing". I guess is normal but I don't want to be part of this thing were we just keep building complex and messy stuff. So my approach from now on, is to acknowledge that no software is perfect and my mentality when entering a project is to try to understand the system as deep as possible and try to simplify the parts that I can without being angry and just complain which doesn't help the solve the problem.

The main take away from this post that I want someone to take (including me). If everything was perfect then the companies wouldn't need to hire you. I'm hired to solve problems and complexity is one of problems that can be solved bit by bit. The complexity only can be solved but only after deeply understanding the problem first, don't rush into making changes without knowledge. Don't conform to "We always did it this way", this phrase would make you complacent to not look at the problem in front of you.

"An idiot admires complexity, a genius admires simplicity” - Terry A Davis