This hits close to home. I used to think that I'm slow. I distinctly remember my childhood math teacher telling me that my parents should get me a paper that would qualify me for "special treatment" because I had difficulty solving problems in time. From start to finish, I sucked at school, and I barely made it through university, finishing it several years after my peers. Because I really suck at being social, I also managed to thoroughly waste most of the opportunities this time gives you. Not a very good start.

A few years later I'm doing pretty well. I'm the strongest programmer in my company (there's just a handful of us and I'm the oldest so it's not such a big deal), and I feel respected by my colleagues and my employer. I'm earning what's considered a very good wage in my country. Eventually, I'm planning to start my own business. I still think I'm mostly an idiot, but these days I'm not very worried about my future. I'm not a programming genius, but I feel very confident and productive at work, even if the impostor syndrome never goes away entirely ;)

I'm not entirely certain what let me succeed, and I'm sure a lot of it is plain luck, but here's what I think helped.

- Obsess about quality. I want my code to work well, run fast, look good, smell good, taste good. Most of the programmers I know don't care about code style. Make it into your hobby. Take every opportunity to make your code 0.01% better. Disregard all advice that tells you to be lazy. Optimize prematurely - it's great for learning. Throwaway side projects make for a great playground.

- As long as you're staring at code, you're not wasting time. Never forget that there's billions of neurons in your head doing Meatware Learning 24/7, so feed them data! It's a long-term investment, the marathon of marathons, so take your sweet time and don't stress yourself.

- Go deep. Dig into the frameworks you're using. Try to understand what happens underneath each line of your code. This lets you develop an intuition about how your code works. When you're not sure about how something works, look it up.

- Go wide. Try stuff out. Different languages, tools, libraries, frameworks. It all adds up eventually. It's very useful if you manage to develop cross-disciplinary skills. Most programmers don't bother with this. Watch conference videos about tech stuff that interests you. Sometimes you won't understand a thing, and it's ok - you're invisibly nudging yourself forward, inch by inch, while everyone else is stuck in their comfort zone.

- Controversial advice that I wholeheartedly believe in: Avoid asking questions. Almost always, it's faster to look up it up yourself. I'm not just good at googling, I'm a Google God. All the time, I encounter low-performers who are simply bad at finding answers. It's an invisible time-saving superpower.

- Do everything in English. You're from an eastern-european country - I can relate. Your English seems pretty good, so you're already way ahead of very many people in your situation. Configure all software to use English. Especially Google - this immensly improves technical search results. Always read documentation and look stuff up in English - you will slowly absorb technical jargon. It's another one of those things that puts you slightly ahead, but adds up over time.

- Do what what you love doing. It's a chicken and egg problem, because you can't really love programming until you're decent at it. Regardless of your intellectual capacity, if you think this is something you could love doing one day, give yourself time. It could take months or years. Giving it an honest try is the only way to know.

Good luck, friend!