Hidiho,
von Java mag ich persönlich abraten -- aber das ist wohl eher aus meiner Abneigung zu Java zu verstehen.
Wie angenehm ist es doch unter c++ mit Templates zu arbeiten oder dynamisch Objekte zu übergeben, deren Typen man nicht kennt. Auch an dieser Stelle die Nutzung eingebauter Datentypen. Unter Java muß man sich da mitunter ein wenig verrenken. Oder vielleicht liegts einfach daran, daß durch die c++ Erfahrung der Blick für Java getrübt ist?
However, ich finde c++ um einiges leistungsfähiger, schließlich benötigt man keinen Interpreter, der im übrigen einen riesigen Overhead aufbaut und zwar für jede einzelne Java-Applikation. Und portabel kann man unter c++ auch super programmieren.
Nun, durch die Uni habe ich einige Erfahrung, wie schwer sich viele tun, eine objektorientierte Sprache zu lernen, wenn sie noch nie programmiert haben. Es scheint nicht wirklich leicht zu sein, in Klassen und Onjekten zu denken. Und wenn die Sprache noch so "strikt obejktorientiert" ist wie Java (ja,ja, kein Vergleich zu Smalltalk,...), dann wird's noch schwerer.
Da auch die Linux-Programmierung ganz vorne steht, aber noch keine direkte Richtung, in die's gehen soll, würde ich persönlich das Erlernen einer imperativen Sprache empfehlen, wie z.B. C oder Pascal. C ist sicherlich brauchbarer und verbreiteter, Pascal einfacher. Zudem steht z.B. in den GNU-Coding-Standards [1] ein ganz netter Spruch zur Kenntnis von C

Eine imperative Sprache läßt sich IMHO vergleichsweise einfach lernen. Hat man dann ein wenig Erfahrung mit Programmierung allgemein gesammelt, auch mal systemnah geproggt und weiß, wohin es in Zukunft gehen soll, kann man dann die "passende" Sprache lernen, also z.B. Perl, C++, Python,...
Zudem lassen sich IMHO in C die kleinen Helferlein prima hacken -- wobei das auch sicherlich geschmacksache ist.
Ach, und BTW, sollte systemnahe Programmierung wirklich von Interesse sein, kann ich nur Assembler empfehlen. Nicht direkt zum Programmieren, aber zum generellen Verständniss dessen, was intern abgeht. Insbesondere zur Optimierung eignet sich trotz allem immer wieder der gute alte Inline-Assembler
[1]
http://www.gnu.org/prep/standards.html