I'm going to focus my answer on the last part here as it relates to something I've been thinking about for a few years now:
I like being a software engineer, but I feel like there's no good way to evaluate skill. How can I figure out if I'm actually bad, or if I just need to keep practicing more?
The Norris Number scale is a metric by which individuals and organizations can measure themselves.
Norris Numbers start at 20 and increase by multiples of 10. They correlate to an increased understanding of the fundamental design and structure of any given software application.
For the purposes of this answer, the Norris Number is a measurement of the lines of application code, minus libraries, that an individual can write and maintain by themselves.
Everyone starts out at 20 Norris. Most formal programmers move up to 200 Norris pretty quickly. 200 Norris programs are usually quick-n-dirty scripts that do something important but just do that one thing. Such programs are "thrown together" which means they tend to lack proper code formatting and error checking - especially from newer programmers. Many programmers move onto 2,000 Norris as they start building larger programs/scripts.
Going from 2,000 to 20,000 Norris outside of a team environment is a lot harder. You have to be building a serious application at that point. A lot of doors open up at 20,000 Norris (e.g. large open source projects). Getting past 20,000 to 200,000 Norris on an individual level is quite difficult since there aren't that many software applications out there built by one person with 200,000+ lines of application code. That's generally too much for one person to sanely and actively maintain.
Norris also indicates comfort level. At what point can you write an application "in your sleep"? That is, the amount of mental effort required to go from idea to deployment. Those graduating with a CS degree tend to be 200 and less commonly 2,000 Norris. It's very rare to find a 20,000 Norris developer right out of college. Such developers usually start writing software long before college and they view the diploma as a very expensive piece of paper.
An organizational Norris Number is similar but is the average number of lines of application code per application spanned across the entire organization. Most organizations are 2,000 or 20,000 Norris. Small businesses with an IT department that develops tiny scripts for the organization are usually not more than 200 Norris. An organization can also have a 2,000 Norris average but might have one or two 20,000 Norris applications lurking inside that bump up the average slightly but not enough to get it to 20,000 Norris.
If an organization is 2,000 Norris and the individual is barely 200 Norris, the individual will have a difficult time keeping up (i.e. it will be a challenge to stay afloat). If an organization is 20,000 Norris or is hiring for a 20,000 Norris application and an individual is 200 Norris, the individual probably won't get hired without lying their way into the job but the individual won't survive more than a few weeks anyway. If an organization is 200 Norris and the individual is 2,000 Norris, the individual will likely be bored and find it difficult to stay interested in the projects that come along (i.e. a lack of challenge). Also, someone at 20,000 Norris will regularly discover that communicating with someone at 20, 200, and even 2,000 Norris is awkward or difficult. The person at the lower Norris Number level simply won't understand the purpose of certain decisions and may try to "refactor the code" or call the person at 20,000 Norris a "bad software developer". In my experience, the only "bad" software developer is the person who (unintentionally) writes code with security vulnerabilities in it and then participates in active denial when the vulnerabilities are pointed out by peers.
Norris Number alone can, as long as all parties are truthful about it, determine whether or not to hire (or even fire) an individual. It's also possible for an individual developer to outgrow an organization or vice versa. When relying on an honest Norris metric, the in-interview coding test could be skipped, which can really only measure up to 200 Norris in the time allotted for the average interview. Norris Number could be a really good filter for a job search engine for software developers and I strongly suspect other industries have similar metrics that they could similarly leverage.
Instead of practicing problems, which tend to focus on algorithmic design, focus instead on projects. What projects are of interest to you? Create a list and start building THOSE projects in your spare time. The whole point of software development is to build what is interesting to YOU. Software is an art form filled with elegance and beauty. Yeah, you can get paid for it too but if you aren't already doing what you love outside of a formal job, then you should start doing that. Otherwise you'll work a job for 40-ish years and yet your life will be empty and devoid of any personal achievements.