Debugging Your Hairline With 0(Log n) Complexity
My thought process around development, in more than one sense
I have a few secrets, shameful secrets, secrets that I’ll share with you. Most key of which is…. I can’t code. Honestly, I can’t. I feel like I have no clue what I’m doing. I look at code sometimes with the same amount of awe as when a mathematician draws those squiggly math garbles on a board. As their peers all look and nod and discuss and throw around fancy applied mathematics terms like multivariate regressive entrophy to the mean. Speak english lads.
Fortunately for me, what I can do is graft and sweat. I can put my head down and type something out. One painful keystroke at a time. semi-content with my incompetence. I have a chronic and existential awareness that I’m not that guy. Everyone knows that guy. That guy who just raised a massive pre-seed, who has been coding since he was in-utero, who can algorithmically destroy your hairline with 0(log n) complexity.
I’m not that guy, never have been, and likely never will be. I was average at maths. I’m not a logic whizz. I showed my code to my aunt once and she gave me a tenner, that counts as a raise right? Though, I have a slight advantage. I like tech. Not because I decided I need to transition to make money. I’ve been glued to a computer screen from 7 till now. That time is paying dividends, it’s just how I interfaced with the world.
Luckily, liking tech inadvertently led me to one of the better life decisions I've made. I studied comp sci at university. Now most people that hear this believe that when I was undertaking my degree they were pumping me with secret sauce. This secret sauce has made me x times more likely to be better than you. As the title of this piece implied, I am sauceless and these academic institutions are sauceless. Every individual comes across their own sauce - sauce revelations 12:3.
Okay? But you built this website. You have a degree. You’ve worked and are working for tech companies. You have exposure, experience. Surely when you were doing all of this you’re now a qualified expert? Hold up there, buddy. The only thing I learnt was expertise is fugazi. As long as you know more than the next guy, don’t overplay your hand and are earnest, you’ll survive. Probably.
Back to the subject at hand. Code. I am not a coder. Whatever that means. It’s like when someone says they are an artist. How much art do you produce before you’re an artist? How many “Hello Worlds” before you’re a coder? A good coder? I am not a good coder. I’m not a 10xer, a rockstar developer, I’ve barely ever touched a production-grade codebase.
I can wrangle a moderate amount of complexity though. I can look at a complex code base and because I’m rocking it near the “Peak of Mount Stupid” of the Dunning-Kruger curve, I’ll give it a shot. More often than not, I’m finding out that’s enough to get by.
So like anyone attempting to seriously do anything. I get my head down. Do some research. Albeit at a snail's pace. Make some changes, nothing too heavy. Mostly sit there confused and kicking myself for not trying harder when I was younger. Now I’ll share another secret with you. My coding and development process.
Watch a tutorial
Code
Watch another tutorial
Code
Cry
Error
Lament
It works
Then it doesn’t
Stack Overflow the error
It works
Write more code
More error occurs
ChatGPT my error
Edit the GPT code
It works
Go back to GPT
Code
Error
Look at the docs
"I should have looked at the docs earlier, oops"
Lament some more
it works
Code
Error
Semi-functional Feature Incomplete Frankenstein
Get Bored
Drop the project
Repeat the cycle
I typically do that on a cycle until something is half complete and then stop. As standalone features of something bigger which I’ve implemented and dropped in the last ⅔ months. A function MERN stack Login, 3D sunburst charts that dynamically render content based on interactivity, ChatGPT API integrations with memory & database-informed instructions. Nothing came out of any of these, and I’ll probably forget the “mad tech skillz” I learned to build them. Then I get bored, feel like I’m not very good, get intimidated by the complexity, and then do something else. Maybe I can build yet another Facebook clone…
As pointless as this feels, the graft, the lukewarm dibbling and dabbling, the reading and research, you develop confidence. Sure, O(n) complexity hairline correction algorithm is out of reach, but you can copy-paste it from someone else's codebase. Maybe tweak it, maybe it works out of the box. A POC is produced. A POC is enough for a raise, but that’s a story for another day.
You pick up confidence with the puzzle pieces even if you haven’t put the puzzle pieces together. You get more comfortable being uncomfortable. You go, "huh, that’s how that works," and put that piece back down. Insights start to form, you can talk to it, even if you can’t necessarily build it. That’s noticed, it means something. You start to understand the skeleton of some, key emphasis, some, projects.
This means I have what feels like a back-alley education. I don’t have the certification of working on it day in and day out in a professional environment. You’re probably not going to make it into a FAANG-level company as a standard engineer. The challenge with those jobs is grinding things down into their most efficient forms to deal with the complexity of scale. To build a POC, or something fun, you don’t need scale 🙂 I’ll take the ability to make a sexy splash page and a get a semi-fancy sounding job title.
The ultimate trick is barely anyone is that guy. Even that guy is barely that guy. Using 'that guy' in the most gender-neutral version of the word. In an ideal world, we’d watch a tutorial and then be a 10x rockstar developer. That’s not how it works, but I think with a bit of time and education. A little “sprinkle sprinkle” of ChatGPT. A a whole lot of genuine willingness to deal with some complexity wrangling. You can be pretty close.