I’ve seen some people write about their journey learning to code. I thought I’d do the same for myself here.
Childhood
When I was growing up I had access to a computer from around age 6 I think? It was the family computer, some beige tower with a big CRT monitor. For a while it didn’t have internet access, but I loved poking around in the settings.
Growing up I also had Legos, and my parents got me a Lego Mindstorms set. It came with a computer program that you could use to create programs with a visual programming UI and load them onto the device to control the motors, sensors, etc.
Adolescence
Later on when I was about 11 I remember having this math worksheets I had to do for homework that were rows of expressions like 3 * 4 + 17 = ?
for random numbers. But they all had a common structure and I was lazy, so I figured out how to enter all the rows/columns in Excel and quickly get all the answers.
When I was 13 I went to a coding summer bootcamp and was supposed to learn C, but I was way in over my head and didn’t really absorb much. I did get some exposure to basic concepts though. Around this time I also used Ubuntu for a little while, but I ran into barriers trying to fix/change basic things when Stack Overflow comments and forums didn’t tell me exactly what to do.
Young Adulthood
My real first exposure to programming was when I was around 16-18. At this point I took AP Computer Science (which was taught in Java), and started to teach myself the basics of random languages (Haskell, Python, Lisp, and others) by doing Project Euler problems.
Around the same time, things really began for me when I learned Mathematica in order to visualize/simulate/understand the math and physics I was learning. The language itself certainly has its own limitations, but it was the first time I felt like I could go from idea to implementation on my own, and explore from there.
In undergrad I also learned LaTeX to typeset all of my homework. Around this time I got comfortable in a Unix environment, but not enough to make my own Bash scripts, etc. I also used Arch Linux for a couple semesters until maintaining and learning it was cutting into my schoolwork, so I switched to Fedora.
Mathematica carried me through undergrad and part of grad school (despite having some limited exposure to Python, Fortran 77, and MATLAB along the way for my physics courses).
Adulthood
Then when I was in grad school, the cracks in my Mathematica foundations began to show, and it became apparent that I needed to learn another language. For my grad school research, Python was the most obvious choice because of Qiskit. I also learned Julia later on for some projects that needed better performance.
Present
Since then Python has been my main language, and I’ve gotten better at Bash, Unix, and I’ve learned Docker and lots more computer networking, among many other small skills along the way.
Retrospect
I think the most important lessons I’ve learned are:
- RTFM
- Clean code is a good route to writing better code
- Simplify, simplify, simplify
- My gold standard for whether or not I understand something in math/physics is whether I can simulate it or express it in a program
- Programming-adjacent skills (e.g. version control, IDEs, CI/CD) are important for working in industry, and very underrated in academia
What I would have done differently:
- Learn Bash much earlier
- Learn computer networking earlier
- Despite its limitations, I would still use Mathematica for math/physics courses, but I’d give up on it earlier
If I had to start over today:
- I would focus on learning Bash, Python, Rust, and potentially Typescript
- I would immediately get a VPS and strictly do everything on it in a terminal until it’s second nature