Algorithms or Programming Languages Theory (Grammars, lexers, etc)?<p>Background: I just know the basics about programming (conditions, loops, classes, etc) And I almost got 30 years old, hopefully is not to late.<p>My goal is to help the advance the Computer Science field (No kidding).<p>P.S: Could you elaborate on your answer please, besides "Learn Algorithms first". Thank you.
Given a choice between those two, I'd recommend algorithms, since you can probably apply that knowledge more readily to everyday programming projects. For example, it's useful to know roughly how long it takes to sort an array, add an element to a hash table (like a Python dictionary), etc.<p>Language theory probably won't be that useful unless you're planning to write a parser for a programming language or something similar. I occasionally need to deal with grammars (for the Bison parser generator) in the work that I do, but most people probably do that kind of thing very rarely, if at all.<p>Also, it's never too late to learn stuff.
Neither, because you'll either get burned out or full of trivia that is not useful.<p>Instead, pick some practical projects, and work on those. Maybe a music player, or a game. Games are good because they bring you through the whole spectrum of high-level abstraction (how should I build this system?) to the low-level drudgery (oh god why is this buffer getting corrupted how do I fix this aaaagh).
As a computer science graduate, and having worked as a s/w engineer, researcher and quant and currently writing code in strongly typed language, I can assure you that unless you're doing research and writing your own PL, you wouldn't need to understand PL theory, so much so that now I'm rusty in less than 6 years.<p>Also, just to clarify- PL itself has not much to do Grammars and lexers. PL theory mostly deals with programming paradigms, and type-safety. Lexers and grammars knowledge can help you write a compiler for a PL, but PL theory doesn't care about it- its the job of compiler writer.<p>I suspect you mean 'theory/models of computation' when you refer to Languages theory (<a href="http://en.wikipedia.org/wiki/Introduction_to_Automata_Theory,_Languages,_and_Computation" rel="nofollow">http://en.wikipedia.org/wiki/Introduction_to_Automata_Theory...</a>) That's what covers "language"/grammars. While it's good information to have- a ground up understanding of "computation" science- you would need that pretty late into your foray if you really want to learn about "Computer Science"<p>CS is a big field- you'll have to choose what you want to learn.<p>So start with Algorithms first, when you come to the Big(O) notation, you'll get a brief and usually enough introduction to the Theory of Computation.