I've been learning on and off about programming for 3 years now. Mostly front-end, html/css/js, for school projects. My degree isn't in CS or IT, so projects that give the opportunity to code are scarce and often short. So I get that I may simply may not have enough hours in coding.
So I'm delighted to be taking CS50 as a Minor at the moment, this has given me the chance to sink a lot of hours in coding, and currently I am in week 5 Data Structures.
But every time I start on the problem sets, I feel overwhelmed and feel like I don't understand anything. I have to Google/GPT the most basic of things. Even though I've been programming regularly the past 6 weeks, I don't feel as if I have improved and I'm starting to doubt if this is a career for me.
In a year I would like to find a career in development. Have any of you felt this way? And what has helped you get rid of this imposter syndrome?
I have a CS degree and feel dumb almost every day. Devs with 20+ yoe feel dumb almost every day. Albeit, the problems that make those with more experience feel dumb are typically more complex. Programming is hard.
During my first year classes, I too was overwhelmed by the homework. My best advice is to really practice the divide and conquer techniques that I'm sure have been preached. Break the problem down until you have an iterative solution.
My other advice is to not procrastinate, and give yourself ample time to work on the problems. As soon as it is assigned, begin working on it, or at least be thinking, breaking down, and prototyping solutions until you have a couple potential solution paths.
Doing so will allow you to truly strengthen your problem solving. Languages, syntax, data structures, etc. Will become second nature, letting you focus on the problem solving. And that's what programming really is about.
Eventually, with the problem solving techniques you learn and develop, you will understand that with enough time, there won't be a problem you can't solve. Or at least have the skills to begin researching and learning. It's one of the most satisfying experiences, that reaches beyond programming and into every other facet of life. That is the invaluable skill I obtained from college that I'm not sure I would have gained otherwise.
Learn to learn. Embrace that feeling of being dumb. Push through that wall. Do it enough, and that feeling of "I'm too dumb" or "I can't do this" goes away. You begin to acknowledge that you may not currently know, but you can figure it out.
Anyways, my point is to persist. Almost everyone has experienced what you are currently.
Oh, also, step away. Take breaks. Go do something else while you ponder the problem. I've had many breakthroughs doing this.
I dropped out of school for a job so take all of this with a grain of salt.
Learning to program is more about learning to think in a specific kind of way. Datastructures, algorithms, and other math-y aspects of programming are incredibly unimportant in the day to day of the average programmer. BUT, and this is a big but, learning these things will give you a better understanding of how to think about programs like a programmer.
Learning to think like a programmer is the single most important skill a programmer has, and it is the most difficult to acquire. In essence thinking like a programmer just means thinking like an engineer or a scientist but with a few extra bits
Generally this style of thinking focuses on key aspects:
iteration (tweak, try again, tweak, try again)
decomposition/divide and conquer (identifying when you can make a big hard problem into easier smaller ones)
analysis and testing ( logging, mentally tracking the programs "state", and learning how to prove yourself wrong through experimentation)
etc*
In general you'll need to develop a thick skin for that feeling of "I have no idea what I'm doing." Because it never goes away (I'm at 10 years as a hobbiest and 4 years professionally). Instead you should focus on the meta-process of developing your process for learning new things. At it's essence all engineering is learning to build tools that help you build other tools. Except right here and now the tool you are building is your mental process for problem solving
Stick with it. It does get easier
*There are other techniques as well but these are arguably the most fundamental
That's the great thing, you never get rid of imposter syndrome! The thing that helped me was the mantra "there's always someone better than you". It's true for everything, so I can focus on just having fun and delegating to those that know more (which is also an important skill since nobody knows everything).
As for improving skills, practice makes perfect. 6 weeks is pretty much nothing. If you work out on one muscle group for 6 weeks, the chances of you seeing significant gains is minimal. You've gotta stick with it for months or years. Just look at the weight-loss journeys of people - it takes some years to lose their weight.
Don't be hard on yourself, find interesting tasks or sites with challenges you consider interesting and try to solve them. https://exercism.org/ is OK, but there are many different ones out there. I can definitely recommend watching videos that explain data structures visually. They'll make much more sense.
Just for fun, this is what chatgpt would have told you:
It's completely natural to feel overwhelmed and doubt your abilities when faced with complex programming tasks, especially when you're just starting out or challenging yourself with new concepts. Many people in the field of programming have experienced the imposter syndrome at some point in their careers, so you're not alone.
Here are a few suggestions to help you overcome imposter syndrome and gain more confidence in your programming skills:
Recognize your progress: Take a step back and reflect on how far you've come in your programming journey. It's important to acknowledge the skills and knowledge you have acquired over the past three years. Celebrate even the small victories, as they all contribute to your growth as a developer.
Embrace the learning process: Programming is a continuous learning experience, and it's normal to encounter new and challenging concepts. Instead of being discouraged by what you don't know, embrace the opportunity to learn and grow. Remember that every problem you solve, even with the help of Google or GPT, is an opportunity to expand your knowledge.
Break down the problem: When faced with a daunting problem, break it down into smaller, manageable tasks. Focus on solving one part at a time, and gradually build up to the bigger picture. This approach can help make complex problems appear more approachable and less overwhelming.
Seek support: Don't hesitate to reach out for help and support. CS50 is a great course with a strong community. Engage with your peers, participate in discussion forums, attend office hours, or join study groups. Collaborating with others and sharing experiences can provide valuable insights and encouragement.
Practice regularly: Consistency is key when it comes to improving programming skills. Try to allocate regular blocks of time (even small ones) to practice coding. The more you code, the more comfortable and confident you'll become.
Focus on projects and practical experience: While courses are important for building a foundation, practical experience through personal projects or internships can significantly boost your learning and confidence. Look for opportunities to apply your programming skills outside of the classroom, even if they're small projects or contributions to open-source initiatives.
Remember, the imposter syndrome is common in the field of programming, and many experienced developers have gone through it. Believe in yourself, be patient, and keep pushing forward. As you gain more experience and tackle challenging projects, your confidence will grow, and the imposter syndrome will gradually fade away.
Mood swings occur in any field.
If you like the task of coding, problem solving and researching you are fine.
Everybody needs to look up stuff.
The human brain was made to find patterns and think, not to store information indefinitely.
For this we have made computers.
Try not to learn something by heart. But to hone your skills in doing/processing/solving things.
Looking at code and understanding it is much more appreciated than knowing specific algorithms.
Sure patterns are helpful and are actually necessary to be known.
But those will come with time.
I have also begun the CS50 and is not easy my friend, in particular if you start without much background. And week 5 add a pretty big piece of info to the mix.
I'm also learning and feel often dumb, I know other people learning and they also feel dumb from time to time.
Keep learning you'll see the progress, and the imposter syndrome is what forces you to learn more and do better. Think of it as an ally instaed of a problem.
Those cs50 courses are not particularly easy and the problem sets are designed to push you.
You'll always need to quick reference basic things, so don't worry about that, and ChatGPT is great for 'dumb' questions.
As far figuring out how to tackle a problem, remember to break things down into smaller problems and work with those. Each small problem should have it's own function and then test each function on its own to ensure you get the results you want.
Data structures and algorithms are not easy. While cs50 does a great job explaining things, look at other sources too for concepts your having trouble with to get a different perspective. While your doing that, experiment with the concept and play around with it in code.
I to this day still have to Google tons of stuff, even very simple things; sometimes it's just hard to remember that function's name or whatever, it's no big deal.
Programming didn't click for me until I actually built something. Just a little command line game. Eventually after a certain point I realized: oh my god I can do anything! (with enough time)
You'll get there, but try working on something bigger with zero stakes where you can feel out how code you write in one place ripples out to other places.
Don't rely too much on chatgpt before you understand the basic concept.
You should also read the books. E.g. pick axe book(i.e. programming with ruby). You could also find the recommended books in your CS50 course. Also ask your online course buddies and instructors for help.
If you only have exp in html, css and js, don't regard yourself as you are already familiar with programming. Learn as a beginner. Go back to the earliest topics you have trouble with. Try to get the concept and work your ways to the situation where you feel overwhelmed.
LLMs aren’t going to give you a roadmap or prioritize concepts. They also frequently produce contradictory information.
They’re good tools if you already have some experience and vocabulary in the field, but a more structured approach to building some projects and acquiring skills is better.