So short background. I'm a self taught web developer who lucked into working at a friend's startup with practically no skills and only a couple basic CRUD to do style apps under my belt. I learned a lot, but never touched DSA. Did this for a couple years. Startup failed to get its last round of funding, and yep, I'm outta work.
My cousin works as a data engineer in a city a couple hundred miles north of me and wants me to get a software job so I can move up there and out of my parents place.
Most of the devs I've met from there are supportive of my journey, but emphasize I need to grind Leetcode. Only been doing that a couple weeks now.
My cousin called me and set up a call with a startup founder. I talked with him this morning and was very honest about my skills. He was also honest and said he needed somebody pretty comfortable with DSA as the application they work on is heavy utilizing ML.
He asked if I'd still like to do a Technical Interview and of course I said yes, making sure to emphasize I was probably going to perform poorly but was very thankful for the opportunity, and that I'd be treating this more as a practice mock interview. The founder was like "Well, at least you know your standing. And perhaps I can give you some pointers about how to proceed."
Super good stuff actually. I mean, obviously it'd be better if I actually was prepared, but I'll take what I can get in terms of feedback.
I'm nervous, I've never coded live and I can barely keep twosum in my head. Fuck. I'm about to waste this guy's time and will probably just look at his problem for two minutes, ask a few constraint or details questions and then just say, "Sorry...I don't even know which data structure to implement."
Anyways, I hate to be so defeatist about it, but I just know I haven't prepared enough. Oh well. Thanks for any sympathetic responses in advance.
I appreciate the encouraging comment. Sometimes I feel like my ability to quickly tape together a solution is a double edge sword.
Due to copying and pasting solutions so much my memory of everything is just a whirl, like somebody can mention some problem and I can be like, "oh yeah, I did something like that in such and such part of this project" or I remember seeing an article or code snippet that will lead me down the right path, but as soon as the solution is done, I take it in briefly and then forget everything but the gist of the implementation. This slows me down greatly by comparison to other developers who just have a toolkit in the back of their head. Like it is the same if they don't have it in the toolkit. But I just don't have one.
I've tried to put one together but ultimately I just have over a gigabyte of notes in a repo I have referenced over and over, and that along with MDN, docs, man pages, and tldr pages has sufficed for a good while. I guess now its coming to bite me in the ass...should have memorized at least some syntax...and should have started grinding leetcode a long time ago.
Are you me?
This isn't even specific to coding, I feel like a lot of general tech projects I've had end up like that, though I have been making an effort to learn how to code this year and have noticed exactly the same behaviors you're describing.
I can logically provide an idea of how something would need to be done in order to complete a certain coding requirement, but the actual syntax needed just does not come to me yet, I always have to reference something else, old code I wrote, internet searches, and various LLMs.
In general, that's how I have gotten by on many projects over the years. I almost feel like my brain doesn't keep much specific knowledge long-term, rather references or reminders on how to find the information, which is both good and bad.
There's also an aspect where I need a certain amount of a "reminder" (usually visually) to bring information forward, that part was very beneficial for multiple choice questions throughout school. I wonder how much of that is just innate to how my brain functions vs due to growing up essentially on the internet and schooling having multiple choice be basically ubiquitous.
Edit more ramblingings: I have a much easier time with something like Powerautomate, as it's much more visual ans plug and play to an extent, with lots of extensibility through knowing extra coding possibilities.
I have also found I have a difficult time starting basically anything from scratch, whereas I can often more easily contribute to something existing and/or tune it to what I want it to accomplish.
Photo editing was an early passion of mine through a pirated copy of photoshop, made lots of old forum signatures and stuff for fun, worked in my favor as I would have a starting point of some sort (a hobby, interest, character, w/e).
Then I did a small bout of video editing (very small lol, it became daunting very quickly when any actual effects came into play and I dropped it) but at least having footage being the "base" to work on made it much easier to get into.
Then I got into electronic music and producing it myself, I'd have to say this is what I'm the most passionate about when it comes to creative endeavors and yet I still run into the same issue of creating from scratch being very difficult. Working with a collaborator helps a lot but then I feel like I didn't really create it did I.
Random other projects aside where I usually get just far in enough to accomplish what I need but never actually retain the info...
Idk where I'm going with this lol, happy holidays!
It's likely that it's some combination of the aforementioned. I dont blame the education system (much), but I do tend to dwell on whether my brain has a severe flaw specific to logical thinking.
Like people say with leetcode or coding problems in general, "if you can't figure it out in around 25 minutes, just look at the answer, understand the pattern that you see in similar problems, give yourself a day or two to forget the actual solution, and then return to try again, eventually you'll get it."
But I've forgotten how to solve twosum multiple times in a single day. I can return to the exact same problem statement an hour later or sometimes even in 15 minutes and even though I can go, "I need a hashmap", I've forgotten the syntax entirely. And with twosum in particular I've returned to this very rudimentary problem multiple times over months. My brain resists memory hard it seems.
With projects its just so different because 99.9% of the time, the problem you're trying to solve has been solved. So you can simply find the answer, or something approximate to it with: "how do I stream data asynchronously from point a in this framework to point b in this other framework?", "how do I write this version of a for loop again?", "why aren't the props from this component passing to this child component?" etc. etc. This results in the search "how to... in framework/programming language" or "error message...means" or some other just verbose enough search query.
And yeah, gpt spoils guys like me cuz I can be as verbose or not as I want and with the code snippet, it just goes, "on yeah, there's your bug here and here's how to fix it" or "oh yeah, the docs don't really cover that use case and there isn't much info on the internet, but here's this insanely obscure implementation that likely works."
I try my best not to use gpt immediately, but if I've been staring at my screen and can't find a stack overflow answer...yeah, I gotta move on...and sadly my brain just goes "oh yeah, obviously that was the answer, cool, here's some dopamine, now let's move on."
Anyways, I love taping together solutions in code, but coming up with your own solutions through logic is just mind breaking. When I first started I wasn't even able to ask the right search queries, so I would just type crap out until it either worked or I gave up.
I...I need to rethink my approach to programming.
I work in a company where we create a large software product. Over 80 devellopers in my department alone, working on the same product.
I have noticed 2 types of devellopers that are equally necesary for our department to run smoothly.
The first type is the one you are trying to be, but feel you can't be: the one that will conjure up complex systems from scratch. I do consider myself one of these.
The latter one I have much more respect for, as they can do things I can't do as well.
The second type looks at existing systems, code, and solutions, and finds problems in them or tapes them together into a bigger solution. They have heard of issues with a system somewhere before, causing them to debug into the right direction much faster. And they are excellent at reading code and documentation, allowing them to use exiting solutions much easier. Despite them not being the best at creating entirely new solutions, In such a large software product, their skills are extremely valuable.
I get the feeling you would fit into the second category. If so, my suggestion is to look for a position as an integrator. Someone who puts all the code of others together, and debugs the resulting system as a whole. You literally spend your time taping existing stuff together, while you can delegate creating new solutions to the people who create the software you stich together. These other devellopers are your chatGPT for the problems that chatGPT can't solve.
Thank you. I'll look into that. It sounds like integration involves a decent amount of testing as well, which I have a sort of love/hate relationship with, but ultimately need far more experience in to really make a judgment on.
When I first started learning, I kept on telling my mentor I had the hardest time figuring out what to make for personal projects and ultimately just wanted to be given problems to solve. He did say something along the lines of what you're telling me, though worded quite differently.
Anyways, I'll stop meandering. Thanks for the advice!