I know Java. What's Next?

Hello, and thanks for taking the time to click this topic.

I'm in a little bit of a pickle at the moment and am posting here to receive an educated opinion regarding my future as a programmer. To clarify, I'm trying to figure out which language would be best to learn next. I hear all these things about C, C++ and C sharp, but I have no idea which would fit me best.

Java has been my first and only programming language. I've studied it for a mere 3 years, and I'm in no way proficient at it. However, after having learned quite a few things about it, I'd like to expand my knowledge.

Now, I am going to present to you the subjects which I've already learned and mastered, and would appreciate it if you could direct me to a language that shares these subjects, extends them, or at the very least interacts with them. I guess what I'm looking for is a language that would be easy to learn given the knowledge I possess at the moment.

What I know in Java:

Basic control structures: if, for, while

Basic logic structures: if, or, and, not

Variables

Classes

Data structures: 1d array, Matrix (2d array), Queue, Stacks, Objects (OOP)

Dynamic data structures: List, Binary Tree

Searches and Sorting through said data structures

Recursive algorithms

And of course, all the abstraction, modularity and encapsulation stuff.

So, what language's next?

I hope that this post has been clear enough and not too demanding, as this isn't my intention. I'm simply asking for experienced help on the matter, instead of going at it alone with no proper idea or set plan.

Thanks for reading, and double the thanks for those who provide any sort of constructive response.

Re: I know Java. What's Next?

I think what's next to try and apply your knowledge of Java and do some programming. Come up with something you think would be useful (or fun) and then try to create it. Also, you can never get enough algorithms :) These are fairly universal regardless of what language you use. Another good idea would be to learn about parallel programming and multi-threading. Also, you'll find that once you learn the basic CS topics and programming paradigms you can quickly pick up any language within a few weeks (you probably won't be an expert in that language, but that's ok).

Good algorithms/data structures/Concepts to learn about (this is by no means a complete set, just what I could come up with off the top of my head):

Heaps

Hash Tables/Dictionaries

Queues/Stacks

Linked lists (singularly linked and doubly linked)

Balanced binary trees (several methods)

Spatial data structures (Quad trees/Oct trees, KD trees, hierarchical grids and bounding volume hierarchies)

Set theory (at least the basics). Other math (particularly vector/matrix math) would also be very useful

Discrete mathematics

Event driven programming model

Reflection

Functional programming paradigm (you'll have to use a language other than Java)

Regular expressions and parsing algorithms/tools

Parallel programming (multi-threading, multiple processes, mutex's/locks, thread pooling)

dynamic programming

Algorithm analysis ("Big-O" notation and other analysis)

Root finding algorithms (bisection method, newton's method, secant method)

Numerical derivatives/integration algorithms

Linear algebra (solving simultaneous equations is a very good topic)

Monte Carlo methods and other stochastic methods

Graph/Map theory

Path finding algorithms (Dijkstra's algorithm, A*)

Computer learning and AI

Language wise, I would recommend learning C# and then C++. C# is very similar to Java, but it's also a bit closer (syntactically and semantically) to C++. I would recommend C++ over C because it has a good base in OO where-as C is mostly functional/procedural programming (useful for micro-controller programming, though some micro-controllers use C++). Python and/or matlab are also good languages (matlab if you're planning on doing scientific/engineering computations), but they're quite different than the above listed languages. You could also dabble with various web oriented technologies (HTML/CSS, JSP, Javascript, PHP, JavaEE which is basically Java). There are also hundreds of other languages you could learn.

What path you take really depends on what you want to end up doing with your programming knowledge.

Re: I know Java. What's Next?

Quote:

Originally Posted by

**helloworld922**
I think what's next to try and apply your knowledge of Java and do some programming. Come up with something you think would be useful (or fun) and then try to create it. Also, you can never get enough algorithms :) These are fairly universal regardless of what language you use. Another good idea would be to learn about parallel programming and multi-threading. Also, you'll find that once you learn the basic CS topics and programming paradigms you can quickly pick up any language within a few weeks (you probably won't be an expert in that language, but that's ok).

Good algorithms/data structures/Concepts to learn about (this is by no means a complete set, just what I could come up with off the top of my head):

Heaps

Hash Tables/Dictionaries

Queues/Stacks

Linked lists (singularly linked and doubly linked)

Balanced binary trees (several methods)

Spatial data structures (Quad trees/Oct trees, KD trees, hierarchical grids and bounding volume hierarchies)

Set theory (at least the basics). Other math (particularly vector/matrix math) would also be very useful

Discrete mathematics

Event driven programming model

Reflection

Functional programming paradigm (you'll have to use a language other than Java)

Regular expressions and parsing algorithms/tools

Parallel programming (multi-threading, multiple processes, mutex's/locks, thread pooling)

dynamic programming

Algorithm analysis ("Big-O" notation and other analysis)

Root finding algorithms (bisection method, newton's method, secant method)

Numerical derivatives/integration algorithms

Linear algebra (solving simultaneous equations is a very good topic)

Monte Carlo methods and other stochastic methods

Graph/Map theory

Path finding algorithms (Dijkstra's algorithm, A*)

Computer learning and AI

Language wise, I would recommend learning C# and then C++. C# is very similar to Java, but it's also a bit closer (syntactically and semantically) to C++. I would recommend C++ over C because it has a good base in OO where-as C is mostly functional/procedural programming (useful for micro-controller programming, though some micro-controllers use C++). Python and/or matlab are also good languages (matlab if you're planning on doing scientific/engineering computations), but they're quite different than the above listed languages. You could also dabble with various web oriented technologies (HTML/CSS, JSP, Javascript, PHP, JavaEE which is basically Java). There are also hundreds of other languages you could learn.

What path you take really depends on what you want to end up doing with your programming knowledge.

You sir, are fucking awesome. I highly appreciate you putting so much time and thought into this post.

Happy new year, and thanks a lot!