Back for more posts
Career
Technical
Growth
Date published: 20-Jul-2022
Date modified: 20-Jul-2022

Growing technically as an engineer

I have been referring to roadmap.sh for folks who want to get into tech, but to be honest, that is not really how I did it. Following up on my personal story, I want to share how I progressed from a kid who tried to cheat to a somewhat competent SDE. My thoughts here are all over the place so please bear with me here

PHASE 0: EXPOSURE

First thing I ever touched was cheat-engine and art-money, which wasn't really programming, but I started to know AA is greater than 11 and it means dealing more damage. This kinda introduce a bit about variables definitions Around 8th grade, I got introduced to Pascal. While the curriculum was pretty bad/not focused, I found it pretty efficient to explain concrete logic in an structured way

PHASE 1: EXPERIMENTATION

Started (and abandoned) thousands of "projects" Attempted to install Linux (arch out of all things), failed, try again, succeeded but don't know what I did differently. Reinstall back to Windows really quick cause I don't even know how to use command line to access folder (also got yelled at for wiping all the family data) Got into HTMl/CSS so I went crazy with all these different text sizes, sparkles, backgrounds, etc.

PHASE 2: GOOGLE EARLY, GOOGLE OFTEN

I got really comfortable with Googling answers. Would say this is the peak of my Dunning Kruger chart timeline Built an entire IOS game (my arts and all) from following random tutorials and published to the App Store. This was before Swift so it was Objective C (the name is Epic Fallin' if anyone want to dig it up. I recall it crashes half of the time but playable) Got a raspberry pi and built some object detection, retro games OS, entertainment center, etc

PHASE 3: IN-DEPTH UNDERSTANDING

This was when I started my CS degree and started to see how much math and all other things I don't know about the fields Started to learn about core concepts, algorithm, memory, trade-off, and maths Volunteered into professors' research program, learned about academic writing, building scientific evidences, etc Founded CS clubs, ran Hackathons, expanded my network so I can learn from more talented peers One of the key piece I realized was every languages, frameworks, libraries are fundamentally the same at the core so as long as you have the foundation, you would feel comfortable at any of them (given some ramp up time)

PHASE 4: ROUGHLY PUTTING THINGS TOGETHER

In parallel with college, which gives the depth, I chose to expand my breadth through tech news and hackathon Learned about data scraping, request response, API Got introduced to git to store code. Know push/pull and freak out whenever there is a merge conflicts Put together couple of proper web application, then struggle with maintaining them

PHASE 5: ACCUMULATE BEST PRACTICES

This starts around the time of internship and my first entry job, where I am comfortable enough with implementing software Started looking at tech gospels (12factor.net, design data intensive application, clean architecture, refactoring) Familiar with proper Git etiquette (merge/rebase, atomic, conventional commit, etc) Went back and refactor old codes into better structure and proper interfacing Realized the importance and the difference of multiple kind of software tests (unit, integration, e2e, tdd, etc)

PHASE 6: ZOOMING OUT TO THE BIG PICTURE

Once there are some confidence with my apps/components' structure and reliability, my next step was to take a step back and fit things into the big picture, both in term of aligning with real-world/business requirements (i.e not over engineering) and in terms of system and pipeline Orchestrated fleets of couple thousands sensors without directly interact with each of them (OTA + Greengrass) Automated deployment (CI/CD) and defined multiple development stages for projects Clear clean high level to low level design, address trade-off, operational capability Knowledge sharing and organization, capturing the right details and keeping them "timeless"

PHASE 7: BEYOND YOUR COMFORT ZONE

I'm not here yet but I think this is where I am headed next. I don't think a great software engineer should just stay with software. I wanted to get into electrical engineering to understand the PWM or Verilog, or business to understand workplace political navigation, so on and so forth. This is how I think my brain can connect the dot and come up with cool idea

Quick note: The phases here doesn't necessarily mean one completion leads to another (in fact I have not completed any of these). The way I see it, each phase can help prepare you for the next but all in all any of them will be an on-going growth Lmk your thoughts