I know in the moment things seem very dire for you. Step back, take a deep breath, and know that countless other people have been in your situation or worse. We're humans and throughout history we've adapted to conditions 10x more horrid than you can even imagine.

First, the DUI. I'm also a member of the bad judgment club, but it has never impacted my career in any way. It's an expensive lesson, but depending on your conviction, the state you reside in, where you are in the legal process, etc., employers may never see it. Do your research. In San Francisco and for public employers, it's actually legal to inquire about your criminal history if it has no relevance to the job. Out of all the things you could have been convicted of, people will probably be the least judgmental about a DUI because the vast majority of people ahve driven drunk, you just got caught. Depending on your level of desperation and/or your personal ethics, lying or massaging the truth is also an option.

> I find it hard and give up at times because everything is so overwhelming and I don't have anyone to ask questions to because I have so many questions

Guess what? That sentiment is very common amongst software engineers. In fact, from my personal experience, devs have a higher level of impostor syndrome and professional inadequacy than any other profession, save for doctors and scientists, I've witnessed. I had the exact same feelings as well in the beginning. However, I funneled these feelings to add to my drive. I wanted to be a dev and it was going to happen one way or another. My first resume was filled with a bunch of BS, personal projects were conflated to contract work, a lot of the code in my github was copypasta, and all my references were just personal friends. I don't condone this, but the padded resume got me interviews. And actually going on interviews taught me how to better prepare and perform for interviews. After 5 or so, someone finally gave me a chance and I took all those lies on my resume and made them true.

For your situation, starting off as a freelancer isn't impossible but it's very difficult as freelancers generally get contracts/positions based upon their demonstrated skill and networking as it takes a higher level of trust to hire someone who you will never see work.

Despite your claims to the contrary, you do sound depressed and obviously overwhelmed, so taking care of that should be your priority. Following my example would works best only if pressure turns you into a diamond.

In your case, I would start by going to local tech meetups, networking, and finding someone who enjoys mentoring. There's a ton of people out there who enjoy educating noobs, especially hungry ones. Find these people in developer rooms on IRC, Slack, or Discord. Take a MOOC and meet up with a local study group of like-minded wanna-be devs. Like any other profession, networking is very important. Plus, they give out free food. If you're driving there, I'd steer clear of the free drinks :).

Also, just write code. Every day. Doesn't matter if it's shitty, doesn't matter if it doesn't work and you have to start over. Code the simplest, dumbest application and just get it working. Every day, add a little something to it, no matter how trivial. If you're ever feeling like giving up, let this motivate you: https://jenniferdewalt.com/index.html There are going to be times where you feel like you're not getting it or are just not advancing anymore and ramming your head against a wall. It's an illusion. I remember when I first encountered pointer logic, it just didn't register with me and no matter how many different ways I tried to understand it, I still couldn't manipulate pointers for the life of me. Then one day, without even consciouslly thinking about it, it all made sense.

That's what the start of programming, and life in general, is like. You may not see evidence of progress every day, but some concepts take time and subconscious/unconscious though to understand. And that eureka moment is totally worth it, better than sex. Oh, focus on javascript. You most likely won't be doing anything outside of CRUD work in php, if that.