Hi Keith,
Front-end programming generally refers to technologies an end-user (or client side) can see, such as HTML, CSS, JavaScript, etc...
Back-end programming generally refers to technologies that are used behind the scenes (or server side), such as C++, Java, Objective-C, C#, etc...
Certain technologies, such as PHP and Java EE, could cross back and forth between the traditional view of front-end versus back-end.
Java is a very diversified language that can be used in many different situations. Before you decide on Java, though, I suggest you spend some time getting to know your local job market. Polyglot and programmer MeetUps are an excellent (free/cheap) resource that lets you get feedback from local programmers and helps you build your network. If you are just starting out, I would suggest you find one language you like, and is in demand locally, then learn it well. If you already have some understanding of C++, you will find Java has many similarities (minus the pointer manipulations). However, if the local jobs don't demand Java, investing time in learning it probably won't help you find a job. Over time you will want to learn more languages, as it increases your marketability and value to an organization.
Most of us have some formal education, but self-study is still a very important component. Programming is a life-long learning commitment as technologies change very quickly. There are also excellent free courses available through sites such as
Coursera that we regularly discuss in the
Bunkhouse Lounge forums. I also suggest you take a flip through the
Job Discussions forums, as the questions you asked come up quite regularly. For example,
this thread answers a lot of them.
Cheers!
Chris