The Day I Became A Software Engineer
Tags: advice
Published: 2020-04-27 16:24:19

---
title: The Day I Became A Software Engineer
published: true
description: A single mindset shift that changed my entire attitude to software.
tags: Advice
slug: the-day-I-became-a-software-engineer
canonical_url: https://www.swyx.io/writing/the-day-I-became-a-software-engineer
---

I've used software almost all my life. A single mindset shift changed my entire attitude to software. It turned me from a software *user* into a software *engineer*. **It took me 30 years**. I'd like to share that day with you.

---

When I was 10, I was playing [Space Cadet Pinball](https://www.pcgamer.com/heres-how-to-bring-space-cadet-3d-pinball-back-to-windows/) and [Mario Teaches Typing](https://playclassic.games/games/educational-dos-games-online/play-mario-teaches-typing-online/) on the shared family computer. I became a software user. Not a software engineer.

When I was 14, my entire friend group found [ICQ](https://en.wikipedia.org/wiki/ICQ). I discovered [MUDs](https://en.wikipedia.org/wiki/MUD) and spent way too much time online. I became an Internet user. Not a software engineer.

When I was 18, I helped run battalion logistics [in the Army](https://en.wikipedia.org/wiki/National_service_in_Singapore). My unit tracked everything in Excel, and it became my job to output accurate monthly reports and forecasts. I become a business software user. Writing Excel formulas now! Still not a software engineer.

When I was 22, I learned statistics and finance in college. I also ran a student investment fund. My classes used [R/S-PLUS](https://en.wikipedia.org/wiki/S-PLUS), [MATLAB](https://en.wikipedia.org/wiki/MATLAB), and yes, Excel with a little [VBA](https://en.wikipedia.org/wiki/Visual_Basic_for_Applications). I became an academic software user. Writing code for class! But still not a software engineer.

When I was 26, I helped trade billions of dollars' worth of interest rate swaps, currency derivatives, and eventually stocks. The bank/fund I worked at had software engineers, but they were too busy for little old me. So I had to learn [Haskell/Mu](https://www.quora.com/Why-did-Standard-Chartered-need-its-own-Haskell-compiler), F# and Python to write the stuff I needed. Nothing amazing, mind you, just enough to get by. But I became a [quantitative trader](https://www.investopedia.com/articles/active-trading/112614/steps-becoming-quant-trader.asp). Managing money with code! Yet still not a software engineer.

When I was 30, I [burned out of finance](https://www.freecodecamp.org/news/shawn-wang-podcast-interview/), and took a year to decide to learn to code for real. I spent a year [completing FreeCodeCamp and Fullstack Academy](https://medium.com/hackernoon/no-zero-days-my-path-from-code-newbie-to-full-stack-developer-in-12-months-214122a8948f) and got my first dev job at [corporate venture](https://twosigmaiq.com/). My job title literally said "Software Engineer"! But I was *still* not a software engineer.

---

I spent ~30 years as a software **user**. For 30 years, I would try to do things with software. When I ran into a problem, I looked through support forums. I asked colleagues. I (sometimes) [read the manual](https://en.wikipedia.org/wiki/RTFM). If I found nothing, I was done. It wasn't possible. Next tool, next task, sorry boss. You'll have to get a Real Software Engineer to figure this out.

I had this mindset even through learning to code. First I was told what to code and how to code, by professors and bosses. FreeCodeCamp did the same thing: write this line here, see that result. It was particularly acute with [MeteorJS](https://www.meteor.com/) - if an [Atmosphere package](https://guide.meteor.com/using-atmosphere-packages.html) didn't exist, it couldn't be done. You'll have to get a Real Software Engineer to build it.

It persisted when I learned React. If I wanted to do X, I would search for "How to Do X with React". Google wanted me to believe that my problems would be solved if I could type in the magic incantations to summon the right blogpost. That I could ask stupid questions like "What's the Best ______?" absent any context. If something didn't work, I'd file an issue and wait for the maintainer to fix it. I'd find someone's hacky workaround, paste it in to my code, and if it works, happily carry on. It'll be fixed eventually by someone who knows what they're doing.

I knew how to write tests, but I didn't *believe* in them. You could say I wrote tests *performatively* - on demand, because someone said it was a good idea, because some interviewer was watching, because some user asked for it. In a way, it just mirrored my own attitude to my own code. I knew how to write code, but I just didn't *believe* mine was worth anything.

---

I turned 34 last week. **Things are different now.**

I don't recall the exact day I decided to stop being afraid of [`node_modules`](https://www.reddit.com/r/node/comments/9o5fzk/what_is_node_modules_used_for/). It must have been around June 2018. I had a bug, docs were out of date, and no help was forthcoming. I'd peeked in there before, but it always looked like a mess of junk. But I opened it up, guessed the right place, put in a few `console.log`s... and figured it out!

I knew the objectively correct answer, because I was looking at the running source code. I could give a solution to my own issue, and contribute a fix. I could make a judgment call on whether this code was adding value. I could [apply local fixes](https://github.com/ds300/patch-package/), or fork it altogether. I appreciated the separation between app and framework, between developer and platform, between "antipattern" or "best practice" - but equally could make up my own mind whether I agreed with it, **once I understood how it worked**.

I found I could do this again, and again. It'd be frustrating at times, and I lacked a lot of fundamental knowledge where I'd get stuck. But it worked more often than not. I stopped passing the buck. Taking responsibility for my own code. Thinking for myself. Learning about tradeoffs, and making them. Becoming that person other developers go to when they need help. Writing those docs and blogposts they look for on Google. Always improving my knowledge of how things fundamentally work, by sharing it.

Everything is just layers of abstraction. Made by humans just like me. If I run into a problem, I can [search for help](https://www.swyx.io/writing/how-to-google-your-errors-2l6o/). I can [write it up](https://www.swyx.io/writing/learn-in-public/). I can [View Source](https://twitter.com/swyx/status/1113635187915673600). Think through [First Principles](https://www.swyx.io/writing/first-principles-approach/). I use git for version control and tests to [hold the line](https://twitter.com/swyx/status/1237894223384334339). With enough time, effort, and mentors, no problem is intractable.

Now I am a software engineer.