Zu erst ist es wichtig, was genau du machen willst. Nicht jede Sprache ist für jeden Einsatzweck gleich gut geeignet. Um dynamische Websites zu entwickeln, brauchst du eine andere Sprache als für Spiele, und für Spiele eine andere als für verteilte Client-Server-Anwendungen. Auch kannst du nicht jede Sprache auf jeder Plattform anwenden.
Wenn ich dir einen Tipp geben darf: Lass die Finger von Java. Der große Vorteil, ein ein mal kompiliertes Stück Code auf jeder Plattform ohne erneute Kompilierung ausführen zu können, wird ganz schnell dadurch hinfällig, dass Java bei komplexen Projekte und bei Anwendungen mit GUIs extrem kompliziert zu handhaben ist. Ich würde da eher zu C++ greifen, oder zu C#, falls du auf Windows bleiben willst.
Also solltest du dich erstmal eingehend mit den generell verfügbaren Sprachen auseinander setzen, um die für deine Anforderungen am besten geeignetste zu finden. Wikipedia bietet da zahlreiche Infos. Wenn du dann eine Sprache für dich gefunden hast, kaufe irgendein Buch dazu. Welches spielt im Grunde keine Rolle. Jedes Buch ist anders, genau wie jeder, der eine Sprache lernt. Der eine kommt mit diesem, der andere mit jenem Buch besser zurecht. Wovon du die Finger lassen solltest sind Youtube-Videos. Meiner Erfahrung nach haben diejenigen, die diese Videos erstellen, meist selbst nicht all zu viel Ahnung von den jeweiligen Sprachen und erklären mitunter extrem wichtige Dinge überhaupt nicht oder völlig falsch.
Kostenlose Entwicklungsumgebungen gibt es inzwischen für fast jede Sprache, und die besondere Eigenschaft, die alle Sprachen miteinander gemein haben ist die, dass zum Programmieren selbst ein einfacher Texteditor grundsätzlich immer reicht, was in der Natur der Sache liegt. Allerdings ist es ohne Entwicklungsumgebung meist sehr mühsam.