I was typing away today, trying to get some Java done and something dawned on me. Java is a pretty academic language. I mean, don't get me wrong, a lot of the concepts and ideas embodied in Java serve programmers well in practicality most of the time. A lot of the concepts in Java are rooted in a very academic nature, and it's very interesting to me, coming from a background without any formal programming training (except now) trying to pick it all up. Interfaces in Java, for example, is something that intrigues me. I understand the concept behind it. It separates the specification from the implementation; for larger projects, this is a very valuable thing. It's just such a pain in the ass to do something like this for a much smaller project. Seems to me that we're just doing it because it's good "academic form" to teach interfaces.
Academic context, I feel, is very important to the content that you're being taught. While abstraction, and the idea of splitting implementation is great, I feel like without the need for that level of encapsulation, there's no need to use an interface. It just gets really taxing to type out all these programs. :/