What needs to be learned to successfully make it as a self taught developer
I up screwed in undergrad. I got cocky, spent way too much time at hackathons trying to get internships and winning prizes instead of focusing on learning the fundamentals of CS. Got kicked out of computer science undergrad program, ended up finishing my degree in [something else] and have been working at [redacted] as an swe. Doesn't sound too bad does it? Everyone has been telling me I'm doing fine but I'm not. I feel like an imposter in the environment, I don't know what I'm doing half the time. All I do is build graphql APIs and write frontend code. Do I know what's going on though when it comes to scalability? I try to but it's so overwhelming to grasp all the concepts at once I get frustrated and confused on what to learn. I am surrounded by people who have a solid understanding of infrastructure knowledge at my age. The job market is absolutely trash right now at least in [redacted]. A lot of companies want a bachelor's in CS as a minimum requirement and I feel like I'm stuck at my current company. Tried taking some courses to get into uiuc or Georgia Tech's online masters in computer science programs. I got rejected from UIUC and I'm probably gonna get rejected by Georgia Tech as well because my GPA is really trash. To all you self taught coders out there, how did you learn the advanced CS concepts? Did you build your curriculums to learn some of the more niche and advanced concepts like threading, concurrency, or distributed systems concepts?
Honestly I don't know what I am doing. I am mediocre at best and I truly want to learn the concepts I missed out on in my undergrad. I don't want to be limited to the [redacted] tech market either and I feel just bad right now they I didn't put in enough work in my undergrad.
Guys I can barely get through the day nowadays without just crying, getting frustrated, or feeling absolutely tired from overthinking. I need some guidance moving forward and I wish to receive some suggestions on what I can do to become a better self taught developer that can compete with the CS grads who have the prerequisite knowledge.
6 comments
[ 3.2 ms ] story [ 24.0 ms ] threadSo you're probably sitting tight for awhile (which is fine). That means you've got time - frame the problem from that perspective.
| A lot of companies want a bachelor's in CS as a minimum requirement and I feel like I'm stuck at my current company.
Don't sweat it.
| To all you self taught coders out there, how did you learn the advanced CS concepts?
It depends a bit on what you want to learn; if it's a specific technology or practice, try and find ways to make that the solution to whatever tasks you've got at work.
Concepts are harder, but I've had some luck with online courses. In particular, I found nand2tetris to be a really rewarding course.
These are valuable technical skills? I guess I don't know if your colleagues have been belittling this type of work.
The job market is tight right now but that won't always be the case. SWE jobs are well paid so the competition to get them is high. You just have to continue trying until you can get the job you want.
So here are the problems I frequently encounter as a self taught developer:
1) Compatibility. As a self-taught and frequent open source developer I value the no bullshit approach because I would rather do something else with my time. That generally means not revisiting the same problems over and over, which typically describes durability over convenience and reuse over patterns. Most CS developers don't want any of that as they primarily look for patterns familiar to those taught to them at school, which is generally some form of OOP. For many developers when familiar patterns are absent the first priority is to introduce familiar patterns at the expense of everything else. Sometimes people invest so much effort into these sorts of imaginary problems that they are incapable of imagining actual real problems. Joel Spolsky calls these people "architect astronauts", but I just call them expert beginners.
2) Confidence. As a long time military guy you always act with confidence. Always. When you have no idea what you are doing you then make the least wrong decision to continue moving forward because as you move forward you will learn more and your decisions will get better. Most self-taught developers just tend to do this naturally because its what they are used to. Most developers I have worked with do not do this at all ever. Initiative only applies if there is some level of comfort. Generally across the board software as an employment displays extremely high insecurity. If you are insecure in your abilities as developer then you are right there with more than half your peers. This is another indicator of friction, because people gripped with internal fear who don't have somebody putting intense pressure upon them to drive forward will primarily act in their own self interest. This one thing scares the shit out of me more than anything else in software employment.
3) Automation. The only purpose of software is automation. Software solves no other problem, but it does do a lot of other things exceptionally poorly. Self taught developers tend to at least be vaguely aware of this, because they are learning on their own time. Many CS graduates somehow believe the goal is something else. Typically that something else is what they wished software was, as though they are a small child describing how they want to be the president or an astronaut when they grow up. When you are confused about the purpose of the thing you touch for hours every day you will be likewise confused about what the output is, how to go about it, how to perceive risk, what the rewards should be, and what to do with changes.