I've decided to take on a whole new language for this years goal. Currently I'm a web developer (php, js, etc)<p>But want to pick up something new. I was looking at c++ (and decomposing/assembly) as it's compiled and not another interpreted language.<p>Any suggestions on new languages to learn that would allow me to mix up my skill set a bit more?
Learn C, not C++. C++ is much harder to learn than C, not much more valuable either in industry or at expanding your horizons, and, most importantly, you can be productive in C++ without really understanding the most important aspects of bare-metal programming. C++ is also full of blind alleys: you can waste a lot of time on class design, double dispatch, arranging your header files to optimize compilation, pImpl classes, and template metaprogramming, none of which will really help you in the long term.
I think a lot depends on what areas of computer science you're interested in. If you want to expand more into lower level stuff, operating systems, command line programs, server internals, etc. then Id say go right to c and skip over c++. But if you want to learn more about gaming or desktop apps then c++ or java is probably a good choice. If you want to stay in the networking/web stack but expand your horizons as far as programming theory and development workflows I'd say give either Ruby or Golang a try both have their own unique approaches to problems and IMHO very innovative ways of solving a lot of programming problems.<p>Best of luck!
The important differences among languages are in semantics and syntax. Compilation and interpretation are implementation details which are increasingly less relevant - Java and C# are compiled to byte code which is interpreted which is just in time compiled to machine code which again goes through similar processes in the hardware with modern CPU's.<p>The big lumps of language classification these days are related to type systems, facilitating functional/imperative/reactive/object oriented styles, handling concurrency etc.
I would suggest Scala. It's a vast, vast language and has something to offer in both the OO and functional paradigms. It also has actors (borrowed from Erlang), lazy evaluation, and a beautiful collections library. There is also an experimental macro feature in the latest version. Scala's type system is less verbose when compared to C++ and Java.<p>Edit: Clarify about type system.
Pick a few and look around sample code, tutorials, SO, rosettacode, cheat sheets floating on the web etc.<p>Rust, D, golang. scala, F#, ocaml, haskell. Clojure, racket, SBCL.<p>Orthogonally: study probability/stats, linear algebra and calculus thru diff eq, basically the first 2 years of undergrad math for physics, math majors, EE, etc.<p>relev: <a href="https://news.ycombinator.com/item?id=6464127" rel="nofollow">https://news.ycombinator.com/item?id=6464127</a><p><a href="https://news.ycombinator.com/item?id=6409370" rel="nofollow">https://news.ycombinator.com/item?id=6409370</a><p><a href="https://news.ycombinator.com/item?id=6953568" rel="nofollow">https://news.ycombinator.com/item?id=6953568</a>
Learn Factor. <a href="http://factorcode.org/" rel="nofollow">http://factorcode.org/</a> It has a steep learning curve (meaning you'll have to learn a lot in a short amount of time!) which is good, because learning new things makes you smarter.