Unlearning Everything I Thought I Knew
here's the thing about being self-taught: you develop habits. some of them are fine. some of them are... not.
uni is teaching me which ones are which. and it's humbling.
things i thought i knew
1. algorithms
me before uni: "i know algorithms! i can write a for loop!"
me after algorithms class: "wait, there are efficient for loops and inefficient for loops and it matters a lot?"
turns out O(n²) vs O(n log n) is the difference between your code running in 1 second vs 1 hour. i have been writing O(n²) code my entire life and just... waiting.
2. code structure
me before uni: "i know where my code is. it's all in main.py. all 800 lines of it."
me after software engineering class: "functions. classes. modules. separation of concerns. oh no."
apparently "it works" and "it's maintainable" are different things. i'm going to pretend this revelation doesn't invalidate 90% of my previous projects.
3. testing
me before uni: "i test my code. i run it and see if it works."
me after uni: "unit tests. integration tests. edge cases. test-driven development. testing frameworks."
there's a whole science to this. who authorized this.
the unlearning process
step 1: realize you've been doing something wrong step 2: feel embarrassed step 3: resist the urge to keep doing it the wrong way (it's comfortable!) step 4: suffer while learning the right way step 5: realize the right way is actually better step 6: forget you ever did it differently
i'm somewhere between steps 2 and 4 for most things.
it's not all bad
some of my self-taught instincts are actually useful:
- i google things confidently
- i'm not afraid to try stuff and break things
- i've been debugging for years so error messages don't terrify me
- i'm genuinely curious (this counts for a lot apparently)
my algorithms professor said "the students who taught themselves first always have the best intuition." which made me feel slightly better about my messy main.py files.
the biggest lesson
formal education isn't about learning things for the first time. it's about learning things properly. there's a difference.
i knew how to drive a car (metaphorically). now i'm learning why the car works the way it does, and how to not crash it, and what that weird noise means.
it's harder this way. but i'm becoming a better developer.
now if you'll excuse me, i have to go refactor a project i wrote last year. it's bad. it's so bad.