I've been programming for a while, I am now 26. Although I've only have 2 past jobs in small companies, I've recently transitioned to a larger company where I'm doing 100% programming (where in my former jobs I would usually be programming 75% of the time and doing support/it stuff the rest). I'm having trouble working with a larger code base where much of it is legacy, complex and difficult to grasp. Although I get the job done, it just takes longer than expected and there is usually a better way. I think I have a good understanding of software principles (OO, SOILD, design patterns), however, I'm wondering if programming is the best career for me. It seems to me I work my ass off trying to understand the system while others are kicking back and making it sound easy. What is the best career move in this situation? Put more effort into learning how to program better (including estimating time better, working with multiple layers of code, etc...) or change my career into something else like IT, front end dev, consulting or tech support?

I also hear people say you need good math and debating skills for programming, I'm not very good at either, although I know I can improve, it will just take time and I want to know that 10 years down the road, the investment will be worth it or not.

I've just read this and recognized a lot of friends of mine (and, partially, myself) in it.

it is true that you'll always will have to keep learning, since there will always be upgrades, new techniques, ...
but the better your grasp on the basics, the easier that is.
it's logical that you need time to get to know an application you're just starting at, especially if a lot of work on it is done before you got to work on it, so that's absolutely not unusual.

as on maths or debating skills ... ok, math, I can understand, but .. debating skills? this is more the part where you need to express yourself in meetings and such, I assume? if you know your application and you are familiar with the programming language, you don't really need extra skills to point out where somethings can be improved. and math, sure, understanding logical steps helps you a lot, but no, you don't have to be the next Einstein-in-math to be a good developer.

whether it will be worth it. ..
well, that's more up to you, actually. are you interested in it? will you stay interested? and, of course, it depends on the jobs and colleagues you'll get, so I see no way how I can answer that one for you.

The only reason/reasons you should change/quit your job is if you truly hate it, or logistically it doesn't pay enough.

From what I can see you get the job done - it just takes an inordinate amount of time.

This is OK. In fact the only difference between you and those who twiddle their thumbs and announce 'That was easy' - is just EXPERIENCE.

You simply haven't done it ENOUGH for this to be easy. Trust me, after you've programmed a lot and in a variety of different language this becomes easy.

The question which is more pertinent to you is, 'Do you enjoy what you're doing?' If it isn't, set yourself goals to move onto something better.

It can be difficlut to find the perfect job, especially in the IT industry. People work for many years before finding the perfect position that matches both their personality and their skills. When you find a job that fits both it is a truly rewarding experience. I found that when seeking the perfect IT Job it is helpful to assess your personality, skills, experience and interests to find the most rewarding position.