Graham,
I started out studying in general engineering at 21 after basically having a life of troubleshooting automobiles, my father was an auto mechanic and I literally started working around the guys at age 4. I progressed in complexity until in HS I had enough time in to be a journeyman auto mechanic. I had my own bay and clientele, worked independently, and enjoyed it, but it was just not what I really wanted to do. I started taking classes at the local community college and majored in general engineering. At the 3rd quarter mark I could see I really enjoyed engineering, but it was not what I really felt like I wanted to do for the next 30+ years. We were required to take a engineering programming class, and I distinctly remember sitting in the school library going through the first assignment saying to myself: Wow, I understand this. No, this is how my brain operates; I really understand this. I should change my major. This is something I can do for the next 30+ years. There is where I became a programmer.
I am good at Math, always have been, and I delight in all of the hard sciences. I thoroughly enjoyed my time studying general engineering, the problem solving is what does it for me, the time we had to calculate putting a
rocket in to orbit, then sending to the moon, then to the moon and back to the earth, then to mars and back to the earth--all the time were required to use minimal fuel to achieve our desired result. To me it was easy, because I enjoyed it. Trouble shooting cars for 17 years became easy because I enjoyed the challenge of thinking in the abstract. Programming is a delight to me, I tell people that I get to play and they give me money for it. It is fantastic. I instantly see the path a project should go and the process unravels in my mind's eye and then I just have to formalize it.
I have done some huge projects, ran down roads of development the industry would follow years later, some of my code is used in as examples on how to program at various companies, some is used by permission in software packages developed by other companies, at least one package was adopted by a library system to run encryption, a lot of my code runs checks and controls on an entire industry in our state.
I cannot fully identify with you: I have always got it. But I do understand what you are saying. In my semester of my first year at the university there were over 750 students started out in Computer Science, the university has 60 seats available (60 people can make it through the program per year), each year they graduated 8 to 12 people the years that I was in school. My semester of graduation they graduated 6, but they graduated 6 more the next semester for a total of 12 that year. For 3 of the 4 year program they had classes to weed out students that didn't quite get it, and then they had a senior year that had more work than I have ever seen even in the private sector. So what I am saying is--it's hard. There were weeks that my total hours of sleep, yes the entire week's sum, were in single digits; there just wasn't time to sleep because the work needed to be done--I remember sitting at my computer for 3 full days straight coding projects that all came due at the same time (at one point I was out of sequence so thing didn't all nicely fall into line). Are you willing to put that much into it? Remember I was already good at Math, Science, and problem solving. (Oh, BTW: During college I had a wife, 2 kids, and worked 35 hours a week too)
I was once given advice by example: a young student asked his master, what need I to attain success? The master took him out into the river and dunked him under water--holding him there while he struggle to get free. As the wise master felt his student's struggles become in earnest, he brought him back to the surface. The master look at his student and simply said: when you want success as much as you wanted air, then you will have it.
If you have gotten this far in my ramblings I would have to say this to you: Not all professors at good teachers. When you get one you cannot understand you have to supplement your studies on your own, get a book or many books--often I have to purchase a 500+ page book to learn one concept in one chapter (I have literally spent 1000's on books to stay current and learn new things), go on line fine a tutorial. And be aware that Java is a tool, like a hammer, reading and learning the instructions on using the tool does not teach you how to build a project. Programming is a problem solving approach targeted at using the computer and devices to implement a solution.
You also asked if there are job in the computer industry that do not require programming. Yes, there are. IS departments usually consist of programmers, IT departments usually consist of hardware type of guys--network people. Maybe you're an IT type of guy instead of an IS type of guy.
Best wishes for your future, what ever it may hold,
Les