My Journey as a Software Engineer

06 Mar 2024

The following is a Technical Essay Assignment for ICS 314 and a reflection of my programming journey thus far:

My introduction to Computer Science

My software engineering journey began when I was an enlisted member of the U.S. Navy EOD (Explosive Ordnance Dispostal) Team, a.k.a. Navy Bomb Squad, or Underwater Demolition Team. During our training, we learned to identify, counter and defuse IEDs (Improvised Explosive Devices) or more simply, homemade bombs - like the kind the infamous ‘unabomber’, Ted Kaczynski used in his 20 year long domestic terrorism campaign until his arrest in 1996, if that rings a bell. The Unabomber engineered relatively primitive IEDs which used only basic electronics and mechanical components as fuzing to set off his improvised bombs. In more recent times, IED makers have used far more sophisticated designs that incorporate microprocessors that can be programmed to take a variety of inputs as fuze mechanisms - these designs can be complex and use virtually any inputs of data in their design; from simple garage door sensors to GPS locations to cell phone RF signals.

During my Advanced IED training in the Navy, we were taught how to program Arduino single-board microcontroller kits to build mock IEDs; a learning experience that would give us exposure to the kinds of devices we may potentially encounter during our deployments overseas - this was my first experience ever programming. Although the Ardunino programming IDE only required C++ voltage inputs and outputs, it opened my eyes to the limitless nature of computation. Although I had used computers, played video games and owned a smart phone for much of my life, the way computers worked was kind of a blackbox to me until that Advanced IED course where we learned to convert electronic signals to binary code that was then processed into readable instructions for the microprocessor to follow. That was a pivotal moment for my understanding of how the world works and sparked an interest of how virtually anything humans can imagine could be programmed into code for machines to follow.

Years later, as I was preparing to exit my eight years of military service and doing some soul-searching for what next?, I was offered a job at SpaceX as a Technician on the Dragon Spacecraft. It seemed like a dream opportunity for young veteran and caused me to defer my plans of college enrollment. After a year at SpaceX, I was unsatisfied working as a technician - while it felt incredible to play a role in the first non-government funded commercial human space flights in history, working as a technician mainly involved following instructions from our engineers for vehicle integration. It was mechanical labor and did not really involve any creative expression - it felt limiting. I wanted a job that allowed me to feel that same creative spark that I felt when programming an Arduino microcontroller - so, back to school I went.

Programming in University

Prior to taking ICS 314: Software Engineering 1, I had completed ICS: 111, 211 and 212, which were all introductory courses on program syntax and basic structure. I did decent in those courses but ICS 314 would be different, using OOP and advanced algorithms had been a challenge that I did not anticipate. This semester would also be where my disadvantages as an older, working, college student would become more apparent - taking Calc II, Gen Chem II and Software Engineering I at the same time, on top of part-time job, financial obligations and large gaps in my academic foundation would put me underwater for the first time in University. Let me elaborate: growing up & completing high school in Arizona (currently ranked 49th in the nation for public education), an 8 year education gap from military service and SpaceX, working a part-time research position and having financial obligations such as my mortgage (owning a house is a blessing and a curse) would not be helpful in keeping pace with my mostly private-schooled, parentally-financed class mates who have been taking coding courses since grade school. However, looking at the bright side, if this is the first course I fail in college, retaking this course will only make me a stronger software engineer, as concepts like OOP and the ability to write algorithms under time limits are paramount for a strong software foundation. This course also has more real-world application than any previous ICS course, so I think it is worth taking my time to really understand the material.

Reflecting on JavaScript

My initial perception of JavaScript was that is was very intuitive, you do not need to memorize the very implicit syntax to identify and use different data types like C requires, JavaScript is very efficient at cutting out unnecessary code. That being said, learning JavaScript ES6 felt like learning another language that is a little bit too intuitive. I often found myself getting lost in nested constructor classes in object oriented programming. The ES6 update removed a lot of traditional code structure which sometimes made it more difficult to read and understand how a code blocks functions. The pace of this class can definitely feel relentless, and I have repeatedly felt like I had to press the ‘I believe’ button and move onto the next modules, only to feel even more lost as complex code compounded, which led to a very inefficient feeling of back-peddling between modules to patch my knowledge gaps to stay on schedule. As a feature of ICS 314, we complete ‘WODS’, i.e. timed coding assignments - which I’m assuming ‘WOD’ is a cruel analogy to those brutal CrossFit WODS where the goal is the lift as heavy as possible, as fast as possible, with as many reps as possible under a time limit. Ironically enough, as a Special Operations veteran, I’m really good at CrossFit WODs, as a CS student, I really struggle writing algorithms under time limits - but again, on the bright side, just like in CrossFit pain + repetition = growth.

Moving Forward

I have come to accept that my foundation in JavaScript is not strong enough to keep pace with the class and have also accepted it’s not a terrible idea to take this course twice to reinforce my programming foundation (paying $1200 is going to suck but hey, gotta spend money to make money I guess). I am still learning so much though, even though I am slowing down to my own pace. I’m extremely invested in this course because unlike any of the previous ICS courses, these lessons relate to real-world applications like building websites - which I really don’t want to rush through, because its something I would like to be very proficient at someday. So moving forward, just as I did through Special Operations training, SpaceX, the trial & error learning of real-estate/investing, learning to surf/foil/snowboard and just about everything else I have done in my life that I’m proud of - I will pay my dues and endure the growing pains. Thank you, ICS 314, for forcing me to become a better software engineer.