Am I learning on "hard mode"?
Posted by lakethecat@reddit | learnprogramming | View on Reddit | 31 comments
I'm self-taught with no CS degree, but I am a UX/product designer with 6+ years experience in tech. I have a small-ish background in JS and OOP. I'm 60+ days in and building my first project with vanilla JavaScript to inject HTML in the DOM.
I'm not using AI to generate any code, just using it to explain concepts. I've instructed ChatGPT to never give me answers or generate code for me.
But it feels like I'm learning on hard mode. I want to internalize how JS/HTML/CSS work together in the browser, when I know frameworks literally were designed to solve the problems I'm facing.
Example: I've spent this whole week trying to build a custom select input. If I had gone straight to React, I could have taken advantage of react select and would be farther ahead by now. Instead, I'm losing my mind fighting every bug trying to build a UI from scratch. Frameworks are definitely on my roadmap, but I'm not there yet.
I'm desperate to learn and eventually transition into a fullstack role, but given my lack of degree, I feel like I'm wasting time.
What is the "right" way to learn how to be a modern developer? Does learning the manual, "old school" way not cut it in 2025?
niboras@reddit
When you say build a select from scratch…you mean with a div and JS logic? Or are you just using the native HTML form select? If you are trying to do the first one, may I ask why? Select has been a native concept in html since, well, HTML existed. Ot are you trying to do something specific? Like type ahead multi select?
lakethecat@reddit (OP)
Great question! Essentially, yes, I'm building with "divs and JS logic". select is an exceptional part of HTML, but I wanted to have more control to build a modern UI. I inspected my favorite productivity tools and noticed they all use custom select components, and I wanted a challenge.
I'm sure there's a way to use both a select tag and customize it to feel modern... I just didn't figure that out and went all-in on custom. I don't regret learning the way I am now, even though it's (very) painful and slow.
Tjakka5@reddit
Please don't try reimplement such functionality, because you'll be making your site completely inaccessible for people with screen readers & killing SEO performance.
It doesn't matter now when you're just making toy programs, but once you start making "real" websites there's actual laws governing this; best to not learn it right from the start.
qwkeke@reddit
"laws governing this"? lol. what are you smoking man?
Tjakka5@reddit
I quote: "but once you start making "real" websites there's actual laws governing this"
https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/union-equality-strategy-rights-persons-disabilities-2021-2030/european-accessibility-act_en
qwkeke@reddit
The EU accessibility laws don't apply to small companies, let alone a guy who's just experimenting around in his personal project. What next? You're going to bring up GDRP to a guy that's got some stuff in his local database?
That's like trying to scare a kid who's just learning how to cross a road to get to the neighbour's house by bringing up laws about jaywalking. Just give it a rest man.
Tjakka5@reddit
I think you and I disagree on what I meant when I said "real websites". I meant it in the sense when working at one of those big companies working on production software.
qwkeke@reddit
You're literally telling him to not to do it now. No, not in the future when he's working for a big company, but stop right now.
So, it doesn't even matter what our definitions of "real websites" are. You're telling him that he should just give up on experimenting and learning that particular thing in his personal projects because of laws that doesn't even apply to him in his current situation. So cut your bs, you're not weaselling out of this one buddy. You said what you said. Classic case of elitist gatekeeping.
Tjakka5@reddit
Alright that's fair. I'll own that my wording was too strong and came off like I was trying to shut things down. That wasn't my intention.
I get where you're coming from and you're right, experimenting is how we learn and I don't want to gatekeep that, but I do want to warn people to not pick up bad habits that may hurt them later.
I think Lakethecat understood what I meant, so I hope it's all good like this.
qwkeke@reddit
Fairs, peace out.
lakethecat@reddit (OP)
Don't worry, I know that!! I'm a design who has worked with engineering teams to bring entire products to AA and AAA accessibility. This is just a beginner project. :)
qwkeke@reddit
So, you're basically learning to build a reusable component. There are right ways to do it, and there are wrong ways to do it, far more wrong ways than right ones. If you're just starting out, it's more important that you spend time understanding all the fundamentals of html/css/js, etc. You can then start trying to look into building your components. Spending a day or two is fine on experimenting with building your select component, but spending an entire week is not. Because it means you don't have much idea about what you're doing. You'd get more value out of reading someone else's code that builds a reusable component, then applying those techniques to build your cuatom select component.
Naetharu@reddit
There is overwhelming evidence that we learn better by seeing something done well first. Contrary to popular belief banging your head against problems and trying to self-solve everything is most often the worst route. There is a bit of nuance here.
When you already have a degree of skill in an area, then solving things to get a deeper understanding / appreciation is good. But as a newbie learning core ideas, be that in mathematics, or programming, or otherwise, the "solve it yourself" approach of so many old school masters is well evidenced as being a poor route.
I would recommend a middle road.
Getting AI to simply spam code at you is a terrible idea. But having it do code reviews, and even to give you clear answers so you know what to do, is a good idea. There is very little value in sitting there for a day, struggling to figure out how to align things in CSS, if you could have learned the core functions of flex and grid in 30 minutes and then spent the day actually practicing them.
Be sensible.
You seem like a smart person. So you can tell the difference between a case where you are using AI to do the work for you vs using it to teach you things in an efficient way. And don't depend only on AI. But it is a powerful tool and you should use it. There are many Luddites who swear off it and will tell you that you will never code if you touch it. But honestly, they are just living in denial. We are where we are. Love or hate AI it is here. And so use it. Because I assure you other people will be.
JenovaJireh@reddit
This is the way
pmojix@reddit
If you are getting confused, that's a good sign. That means you're going out of your comfort zone and trying to improve yourself.
There is nothing wrong in using framework since it accelerate work for you. If you want to learn stuff from scratch, that's good as well but completely not necessary these days. You just have to learn the high level of how those framework works without going to deep.
It's like plugging in a keyboard because you want to type something doesn't mean you have to tear it down to learn how it put letters in the screen.
darkstanly@reddit
Hey man, you're not wasting time at all. You're actually doing something really smart that most people skip.
The fact that you're building vanilla JS projects and fighting through the bugs is exactly what separates developers who can actually problem solve vs those who just glue frameworks together. When you hit a weird React bug later (and you will), you'll actually understand what's happening under the hood.
But here's the thing. You don't need to torture yourself for months. 60 days of vanilla JS fundamentals is solid. You could probably start picking up React now and still have that foundation to fall back on.
At Metana we see this exact scenario all the time. Students who spend 2-3 months on fundamentals then move to frameworks do way better than those who jump straight to React. But there's also a point where you're just spinning your wheels on problems that are already solved.
Custom select inputs are notoriously annoying btw, even experienced devs avoid building them from scratch if they can help it lol
My suggestion? Finish your current vanilla JS project, then start learning React. You've got enough foundation now. And honestly, your UX background is gonna be huge. Most developers can't design their way out of a paper bag.
Keep pushing through, you got this :))
lakethecat@reddit (OP)
Thank you!!! I appreciate the encouragement! 🎉
CMC_Coding@reddit
we learn by being given the answer as an example. the test is to see if you can apply that example answer to this new question.
make sure you are doing the writing yourself
ValentineBlacker@reddit
How far did you expect to be in 2 months?
OpinionPineapple@reddit
You learn by doing and struggling through it; not by having it done for you
code_tutor@reddit
The easy mode is learning about networking and university-level programming, then learning JS, then learning React. Everyone does it backwards today and it takes them 10x longer.
It's probably faster to take all of CS50 and The Odin Project than it is to try to learn React with zero skills. Even doing it the right way will take many thousands of hours.
Neomalytrix@reddit
If u dont sit and struggle you wont remember. Keep the struggle going. In this case it works. I remember mistakes i spent tons of time trying to solve. I dont remember anything that just worked well right away.
GxM42@reddit
You’re not learning on “hard mode”. You’re learning on “the good mode”. It’s harder, but well worth it. If I ever teach web dev to students, I’d start with simple HTML and DOM every time. Then you see what the frameworks are doing.
And FWIW, cool behaving select lists were ALWAYS a pain in the butt in the old days; no input control had more 3rd party packages devoted to it than the select list. I wish HTML had made customizable select lists early on in HTML/CSS specs, and also had a Combo box as part of them.
I like what you are doing OP; it will pay off!
xian0@reddit
I would recommend starting with a good course (or at least a Youtube course) install of trying to learn from a chatbot. I don't mean naively choosing the highest rated course on a learning site or the most viewed video on youtube, but look around a bit and use some common sense. Remember a best resources mega thread on some tech forum is going to get much better replies from people who know what they are talking about than you starting your own thread.
A framework isn't going to solve you not really understanding how HTML/CSS/JS work so you're not wasting time by not starting there. The best a framework can do for you at the moment is give you some design level ideas for your custom form components. If you are really slow/stuck you might need to get more fundamental knowledge, but you can expect a road to full stack to take a really long time in any case.
Glad-Situation703@reddit
Inspirational shit right here. Hard mode learning is permanent learning. Sound investment.
qruxxurq@reddit
You’re doing fine.
Aggressive_Ad_5454@reddit
You’ll learn a lot about how web pages, DOMs, animations, etc, work from doing this. If you do other projects, that knowledge will help.
And your imagination about UX will improve a lot as you learn this stuff.
Sounds to me like you’re doing it right. Go for it.
Unique-Property-5470@reddit
You’re actually doing it the right way. Learning to build with plain JavaScript, HTML, and CSS is tough, but it gives you a real understanding of how everything works under the hood. It’s supposed to feel harder because you’re not skipping the hard parts, and that’s what will make you a stronger dev in the long run.
The truth is, once you know how to build something like a custom select from scratch, you’ll understand how frameworks like React or Vue actually solve real problems. So when you eventually switch, it won’t feel like magic—it’ll make sense.
Also, not having a CS degree doesn’t hold you back anymore. What matters is what you can build, how you think, and how you solve problems. The only mistake is giving up before you get to that turning point.
If you ever want support from a full community of devs who can answer questions and help you stay focused, my community is open. You can try it free for 7 days, and if you stay after, just message me (Joseph Abate) and I’ll give you a discount for your first month. Coding With Joseph
iOSCaleb@reddit
Building stuff is a big part of it, but it’s not just banging your head against the wall until something gives. What are you using to guide your efforts? One or more books? A random collection of YouTube videos?
Sometimes doing new stuff feels very hard because you’re learning a lot. But sometimes it feels hard because you’re well and truly stuck, not making any progress, and out of ideas. Try explaining the problem to anyone who will listen — bonus points if they can also understand the issue, but that’s not entirely necessary.
allium-dev@reddit
Real learning will always involve doing things that are hard / confusing / frustrating. Learning something new will always involve doing something someone else can do better. Neither of these are reasons to abandon learning.
lakethecat@reddit (OP)
Excellent point, thank you.