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