Programming is a huge field and no one's good at all of it. Also, people learn really differently. I like learning by building dumb little projects, because I'm super hands-on and like working from the ground up. Other people I know swear by trying to fix issues in open-source projects because it starts you off working from something that's already there and seeing how your changes can affect something. I know at least one self-taught programmer who got there by literally just reading programming language documentation and tutorials and textbooks for an hour every day for months on end, fitting in math or computer science reading from whatever's publicly available. I didn't believe them at first. Then I thought they must be some kind of alien. But no, some people actually do learn stuff abstractly and then apply those abstractions instead of actually having to go get their hands dirty. I've met people who like one programming language and have found ways to attack every problem with it no matter how bad a fit it seems to me. I've met people who literally don't care what language they're using and learn it as they go on every project
I think identity is a scam. To "be a programmer" is a nebulous goal. You should think about what you want to do, and what skills you need to build to do it. If your goal is to know how computers work, get you a non-restrictive OS and start fucking around with a computer. If your goal is to make software, try to make some software and see where the pitfalls are. If your goal is to get hired, learn how to politic with businessers and then fill in the technical skills that are most strategic for the business you want to get your foot in the door with
For me my goal is to be able to build out MVPs of ideas that I have. My learning style isn't abstract -- I need to get in the weeds. Seems like the best approach may be to start with tutorials then move on to open source
website.domain/deep
website.domain/wide
website.domain/show
Both "deep" and "wide" should record a list of every IP address:port combination that hits the URL, as well as a timestamp and a random 2-digit base64 number generated when they hit the site. They should redirect the user to "show"
Keep addresses from the "deep" list for 7 days, and the "wide" list for 12 hours, removing them from the list when this time limit runs out
On "show", if the current viewer's random number matches someone from the "deep" list, show that entry on the page, with its IP address as well as the timestamp, in red. Whether or not there's a match, show the entire "wide" list, including the IP address, random number, and port, but not the timestamp, and randomize the order in which they're shown.
If someone hits "show" and their IP is on neither list, put them on the "deep" list anyway
Make this display as aesthetically pleasing as possible. Use any language or framework you like
I still continuously do all of these things to this day.
If I were starting with no experience, I don't know if that approach would get me to semi-competency in 9 months or not. Some of that depends on what exactly "semi-competency" means. But when I learned to program in the first place, it was about 6 months before I was able to write reasonably complex programs that worked properly.