Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: I'm a self-taught programmer, what am I likely missing
3 points by jonplackett on Oct 5, 2021 | hide | past | favorite | 7 comments
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?




I'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.)


Thanks, 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).


Take 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.


Knowledge about complexity classes is an issue that at least many hobbyists seem to miss.


Any reading on this you'd recommend?


I'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.


My 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).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: