4 ms·
Ask HN: I'm a self-taught programmer, what am I likely missing
I've been programming since I was about 10, starting with BASIC, then ActionScript 2 and 3, then PHP, mySQL, Objective C, then Javascript, Swift, back to Javascript to learn React, Node, Next.js etc etc. and using these I've made websites and apps with millions of downloads, had books published.
BUT, I'm entirely self taught, and I feel like I'm likely missing a bunch of things that 'properly' trained programmers know. But you don't know what you don't know, right? I would definitely fail any kind of code test with sorting algorithm type questions for example.
Has anyone also been along this path and realised these important things they don't know? If so, what are they?
- clash 5y agoKnowledge about complexity classes is an issue that at least many hobbyists seem to miss.
- jonplackett 5y agoAny reading on this you'd recommend?
- clash 5y agoI'll rephrase. Learn about the basic container data structures like linked list, vector, set, map, hash, tree, queue, heap. Study time complexity of insertion, deletion, search, etc. in these data structures. Then you will understand when to use which. Big O notation is used to express time complexity for expected runtime of the operations.
- AnimalMuppet 5y agoI'm self-taught. (OK, I had one class in high school, and one in college. Nobody has ever hired me because of those classes.) Things I've had to learn: - Big O notation and what it means - UML, at least parts of it - SQL - git - gdb I am not expert at any of these. I've learned enough to get by. And that's kind of my philosophy. It's like just-in-time learning. I learn what I need to be able to do what I need to do. I haven't bothered to grind leetcode or anything. I let the job tell me what I need, and I learn that. (I do also kind of keep an eye on what else is going on, so that every five years or so, I try to learn the one thing that's going to matter most for my employability in the future.)
- jonplackett 5y agoThanks, I've never heard of Big O or UML so that's just the kind of thing I was hoping would come up. I have the exact same philosophy as you, constant learning but to always achieve a goal. Makes learning always fun (even when massively frustrating).
- version_five 5y agoTake a look through and undergrad CS curriculum. A lot of what you're missing would be breadth stuff - math, basic physics, introductory logic, operating system theory, computer architecture, digital systems, algorithms and data structures, compiler theory, finite automata, ... Personally I'm a big advocate for learning all of this stuff, even if you don't ever need it for your job. It still changes how you think about problems and makes you more well rounded (though formal education is not the only way to be more well rounded). If you have an undergrad degree or past experience in a different area, you may not be "missing" anything from the perspective of being well rounded.
- christopherbalz 5y agoMy two cents: Formal Methods (e.g., "Z" and Promela) and also, teamwork stuff (from old days, Team Software Process, and any more modern material like that).