Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I could use some guidance on what would be more beneficial to learn as i pursue a computer science degree. I take computer science courses at a nearby college(i am in highschool) and code daily in my free time. Currently i have a fairly advanced knowledge of C++ and it's default library's, and a basic understanding of java(syntax and in/out libs).

My goal is to learn PHP and Java more in depth, but i don't want to be a syntax junky and leave my current c++ studies behind(Algoithms/boost/advanced data structures). Would it be more efficient to learn an understanding of these three languages first, then jump into advanced mechanics afterwards? or take each language one at a time, dedicating a chunk of time to learn the in's and out's of the language? I really appreciate any help, thanks!

share|improve this question
    
As explicitly mentioned in our FAQ, we can't tell you what to learn or how to learn it. It's beyond our expertise and is too individualized to your situation to be helpful to other people. –  Thomas Owens Oct 16 '12 at 17:50
add comment

closed as off topic by Robert Harvey, Thomas Owens Oct 16 '12 at 17:50

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

2 Answers

up vote 1 down vote accepted

Computer science is not really about learning syntax of languages. It is about having fundamental understanding of data structures, algorithms, theory of computation etc. Basically what this means is understanding how the machine really works underneath.

I would suggest:

  1. Gaining theoretical knowledge of common data structures both linear and non-linear.
  2. Gaining theoretical knowledge of commonly used algorithms.
  3. Gaining theoretical knowledge in networking.

I am not mentioning theory of computation (finite languages and automata) above because that is fairly advanced and you can hold off on it for now. While learning those you would have to use a technology to apply the knowledge. If you are most advanced in C++ right now then stick to it.

Afterwards you can adapt your knowledge to any technology, be it php, java, c, python, etc.

share|improve this answer
add comment

Currently i have a fairly advanced knowledge of C++ and it's default library's, and a basic understanding of java(syntax and in/out libs).

Your first priority is to not think that you have advanced knowledge of anything programming :)

After you learn a few languages, learning syntax becomes an after thought. What is more important is the underlying programming language paradigm. For example, imperative programming, static typing as in C++ and Java versus dynamic typing in PHP.

Don't spread yourself too thin with languages. Java is very representative of most imperative, object-oriented languages. What C++ adds is memory management, which isn't the most exciting thing unless that is where your interests are. I'm not a big fan of PHP, instead I recommend either Python or Ruby.

Don't leave studies of algorithms and data structures behind. This knowledge applies regardless of language and paradigm.

Would it be more efficient to learn an understanding of these three languages first, then jump into advanced mechanics afterwards? or take each language one at a time, dedicating a chunk of time to learn the in's and out's of the language?

Overall, the process is going to be continuous and iterative. You need to learn the basic mechanics of the language to work with data structures and algorithms, however you certainly don't need in-depth knowledge. In practice, in-depth knowledge is very much context dependent and usually involves knowledge of not only a language but several frameworks as well.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.