Generally speaking, the "front end" has to do with what the user or "client" sees and interacts with. The "back end" is the server side of things. Accessing database data. Delivering data to the front end.
The front end is often divided into design and coding. This separation does not have clear boundaries and the designer often does coding and the developer often does some design work. Sometimes the developer is also a designer.
It's beginning to look to me like a front end developer has just as hard a job as someone doing straight Java. Java is homogeneous, simple, and object oriented. The front end world is almost the opposite; it's the wild wild web. You're dealing with multitudes of different devices and many different browsers: everything is talking to everything else. The world is connecting itself together in a mesh of chatter. This is where the Front End Developer comes in.
Content ultimately comes from the client. Without content there will not be a web site. (generally speaking)
There may be a person who gets the content, makes a content inventory, and shows the design team.
The designer(s) work(s) with the developer(s). It could be the same person(s).
Frameworks. Skeleton. Various grid systems. Libraries. jQuery. jQuery-mobile.
Many different browsers interpret your code differently. You may not see your site on every device in the device universe, but you will try to hit the major ones that the majority of your users will use. And occasionally your site may fail on a particular device. You, the front end developer are responsible. You fix the problem and move on. You adapt. You respond to a new situation. (Responsive Web Design) You learn and you pass that learning on to your program and, hopefully, future programs.
The front end developer often must deal with many more contingencies than most other types of programmers and, therefore, should be treated with the same respect and appreciation as programmers in other fields or environments.