The first programming language I worked with as a professional was Java. It seems to me as an excellent language to start learning real software development (as oppose to learn how to program, for which c is my language of choice).
It teaches you to think also on the architecture of the software (as it is reflected in the package structure). It forces you to understand various design patterns (some of which comes along with the language). It introduces you to the need of working with frameworks (the large set of Java packages, as well as external libraries), and on top that, the rigid typing with the tough compiler are just like two good parents that show you the where are the limits and does not allow you to cross them. I've worked with Java for about 6 years, and learned a lot from it.
I crossed the limits that Java taught me, and allowed myself to do so based on the belief that I'll know when to stop and what lines not to cross.
It is much easier to make a big mess too, this must alway be in mind - no parents, you can run freely, nobody will prevent you from failing and falling.
A short while ago I had some free time on my hands, and wanted to learn something new, so I developed a small android application.
Initially I thought that it would be just like riding a bicycle, but it turned out to be more like riding a rusty old bicycle, where you cannot almost turn the wheel, all that with one hand tied behind the back.
The package structure is still there, as well as the rich set of libraries and Java packages. BUT, the rigid type system and the compiler are not a directing parents any more, they are more like a bureaucratic figure that forces you to do what you don't want (in order for him to approve your request).
The no dynamic nature make no sense now, sometimes I wanted to polity ask the compiler to move aside and just trust me - I know what I am doing.
It is so burdensome to write software in Java.