Some people here saying things like "near a major city" or "It matters where you are geographically" and I don't know if that's really true.

I live in Lexington, KY, not exactly what springs to mind when you think of tech or web dev but there are plenty of jobs here for that skill set. Furthermore there is the option of remote work which really opens you up but I'd probably suggest working in an office for the first few years at a minimum.

Learn some combination of Javascript/Typescript, Angular/Vue/React, NodeJS/PHP/Ruby/Java, CSS/SCSS/SASS, Bootstrap, etc. The BEST way to learn FOR ME (and some others I've taught) is to have a goal/project. You might find some use out of the various online courses/bootcamps but I'd start with a simple project. It's important to not pick a project based on one of the (extremely) tired examples like: ToDo App, Blog with posts that have authors and comments, etc. It's fine to cut your teeth on something like this but that's not what I'm talking about when I say "project".

It needs to be something you wish existed BUT IT CURRENTLY DOESN'T (or not in the form you care about). Here are a couple of things I created back in/around high school:

- A simple music site where users can up/down vote songs and/or playlists (this was pre-Spotify), you gave it a youtube url and it would rip the mp3 using scrapers/ffmpeg on a server. It was highly illegal when you came down to it but a great learning experience. I got to work with Frontend (jQuery/HTML/CSS), backend (PHP), queues (DB-based, I was young, cut me some slack), JS bookmarklets (To click when on a YT page to grab the song), and more.

- A library attendance program replacement for my school. Teachers would mark they were sending a kid to the library (normally durning study period) and then it would pop up on the library computer and alert if the kid hadn't shown up in a reasonable amount of time. Kids would type in their ID numbers to sign-in/out of the library. First foray into ajax IIRC to keep the teacher-view and the library-view in sync without page reloads.

- Flash game site that I kept moving (or mirroring really) to different domains to avoid the blocks. This was less of a technical challenge and more of learning about giving people what they want and working around the existing system. .info domains were dirt cheap especially when you bought 5 at a time and song lyrics are easy for kids (if not everyone) to remember so I'd buy up a bunch of .info's for $1/first-year each based on popular song lyrics/titles and then slowly "release" them into the population as old ones got blocked. I did make a couple hundred off ads before I went to college and let it die.

- A voting program to be used by students for various things at the school (Homecoming king/queen, prom king/queen, senior superlatives, etc). This included UI to create new polls, see results, make them available to only certain classes (Freshman/Sophomore/Junior/Senior), and login for the students with UI to vote.

All of this is to say the best way to learn IMHO is to be forced to essentially or "learn as you go". I had no idea how to accomplish most of these tasks when I set out to do them, I just knew I wanted a social music site, a flash game site, a better attendance program, a better way to vote rather than paper and then I googled, followed tutorials, inspected other sites I liked and cobbled together enough code to make it all work.