Too much ego. What I find important is to consciously separate stuff that I actually care about and believe in and fluff stuff for appearances. The second part is like acting and bullshitting when it is required and incentivized. Don't confuse the two.

> I don't know that I have very many things that I have genuinely accomplished, which I think gets at the heart of the issue.

Good. Maybe you actually haven't accomplished much, maybe you have. But clarifying it is important and you have to face it honestly to have a straight up baseline. It may also be okay. Clarify why you want to achieve those things in the first place and what those are exactly.

> I have in fact built tons of projects and worked on large codebases, but I'm not certain that makes me an engineer or that any of this is a genuine accomplishment. It isn't.

Clarify why do you want to call yourself an engineer. Vague envy of an imagined idealized capital letter "Engineer" is not useful. Engineers aren't some kind of demigods. The important thing is to apply the best techniques to the job at hand, not to cargo cult and clone prestigious other fields. Try to collect examples of "genuine accomplishments" and dissect them. Are they really that magically genuine? Or were they the product of a lot of stumbling, tries and retries, sleepless nights and luck? Focus on humble, respectable people and take their advice, not the bullshitting LinkedIn blogger and CV streamliner who wants to make everything look like they just accomplished one thing after the other purely out of their natural genius. Difficult things are messy and not a straight arrow from scratch to genius accomplishment.

> At the same time, I feel stupid trying to learn how to program properly at my age.

The first step to learning is admitting that you don't know yet. Pretending won't help. Give up your ego and keep honing your skills.

> I should already know all this at this point in my career so it feels really demeaning, depressing, and embarrassing to do programming exercises.

Perhaps you should know it already! But you can't time travel, so the best recourse is to learn it now.

I think overall, it's much better to approach things as they come up. Instead of setting out to "now do this project to feel better about myself", you just see what topics come up when you try to accomplish a real-life goal. Say you want to build some nontrivial application or machine for a real existing use-case that you genuinely want to have and will use. Then who cares if it's all glued together existing code? Most of the time the existing code won't work for your exact use case and you need to read documentation and understand that domain, how their algorithms work, what the constraints are what the design looks like. That's learning.

You don't have to create prize-winning earth-shaking inventions each time you do a project. The point is to learn a technology and the theory behind it.

But if you only copy code without understanding what you're doing that's also not great. Don't be ashamed to sometimes read books, to doodle diagrams and bullet points on a physical notebook or pace in your room up and down submerged in thought while you try to grok what's going on.

Read some Feynman interview books, like "What Do You Care What Other People Think?" and "Surely you're joking Mr. Feynman!" I always get inspired to cut off the bullcrap and focus on curiosity and learning for the sake of it, without caring about stroking my ego. If I'm a noob in a new language and make mistakes, who cares? I'll do my best and try to achieve what I can.

It's also a fine balance to learn how to respect others who are genuinely more skilled than you are and have the humility to learn from them. The two failure modes are 1) to idolize them and think you are a zero and will never achieve anything and it's too late and everyone is leagues better than you and 2) to try to downplay their achievements and pretend they aren't actually more skilled than you are or that merit doesn't actually exist, or that self-improvement doesn't exist and everyone is already perfect, etc.