I'm a young developer looking for a language to focus on. I already "know" a handful of languages, but I'd really like to master one. My current options are:<p>--- <i>Go</i><p>- Designed by legendary hackers: could learn a lot from their choices; great tools and environment;<p>- Very high performance: less $ spent on servers<p>- Static/compiled language: not ideal for things that change too often (eg, startups)<p>--- <i>Lisp</i><p>- According to PG et al, Lisp is the best thing since sliced bread<p>- Somewhat steep learning curve<p>- Not a lot of ppl know Lisp: hard to collaborate, bad hiring pool, etc<p>--- <i>Ruby</i><p>- Great community, lots of libraries & resources, etc<p>- Bad choice when raw CPU performance is important<p>--- <i>Python</i><p>- Swiss-knife: can tackle a wide variety of problems (web, big data, games, etc)<p>--- <i>JavaScript</i><p>- Server & Frontend<p>- A great deal of effort is being put on it<p>- Lots of design flaws<p><i>From a startup founder point-of-view</i>, which of the following languages would I benefit the most from mastering?
Go: I actually disagree that it "not ideal for things that change too often". The cost of deploying changes is very low b/c it compiles so quickly. Furthermore, the static typing is extraordinarily lightweight. You have nothing to worry about there.<p>Lisp: I've only ever used it academically. I'm not fit to comment on it, although my inclination is to say as a founder you should skip it since it's not nearly widely used enough.<p>Ruby: Works good. (sic) Tons of libraries are a blessing and a curse, though. Also, there's 1000 ways to do everything in ruby...that gets old fast since every library you ever use will chose a different one. All that said, you can't go wrong because of how widely it's used. On the other hand if you're using it solely b/c of rails, then Ruby itself will never really be your main focus.<p>Python: I have a soft spot for python...I use it to deploy my Go. It's widely used, mature, and I think it's a reasonably good choice. Great for quick file-manipulating tasks as the tools are built in and are easy to remember.<p>Javascript: Plan on making a web-tool? You're gonna have to learn it. Some of the ugly goes away when you use coffescript. I think you'll need base-level competency at this no matter what other language you choose.<p>I notice you didn't add C#/Java. C# is actually a really pleasant language to use. The trouble is that you (more or less) <i>have to</i> have a windows back-end to use it.
If you don't want static typing, Clojure is my recommendation. It's a lisp, but it also emphasis functional programming (common lisp doesn't), has amazing immutable data structure, has nice syntax literals for more than just lists, as well as other nice like destructuring binds. It has great concurrency support (including go-like channels), and it runs on the JVM so it's pretty fast and has access to tons of libraries. Also Clojurescript (clojure to javascript compiler, some example code: <a href="https://himera.herokuapp.com/synonym.html" rel="nofollow">https://himera.herokuapp.com/synonym.html</a>) is pretty mature, though you'll have to know the basics of javascript with any cross compiled language.<p>Though I don't necessarily agree with you that static typing isn't going to be good in a startup environment, I'm just getting into playing with static languages (Haskell) myself so I can speak strongly on the matter. In that domain though, I think Haskell/Ocaml and even Scala are better choices than Go.<p>If you do want to learn Clojure, the O'Reilly book "Clojure Programming" is excellent and the best out there for beginners. You should easily be productive after reading that, it's pretty comprehensive. The Joy of Clojure would be a great follow up though. The #clojure channel on freenode is very friendly as well.
I think every programmer should know one of Ruby/Perl/Python <i>very well</i> because they're by far the most versatile type of language. It's pretty rare that you <i>can't</i> solve a problem in one of them, even if when it's not the <i>best</i> tool for the job. It truly doesn't matter which, whatever feels the best to you. It's not a technical choice.<p>If you want to do Lisp I think Clojure is a really exciting option. It's modern and runs on the JVM, which is a big advantage for some people.<p>You can learn basic Javascript in a week, which is all you really need for most web development tasks. Most web apps are a sprinkle of Javascript, though that is not the case with every app.<p>Javascript, Ruby/Perl/Python, and Go are a pretty killer combo. You'll have trouble finding problems you can't solve with that set.
Personally I do not enjoy using poorly-typed languages (C, C++, Java) and prefer the flexibility of untyped languages (Python). However I <i>even more</i> prefer the flexibility and strength given by powerfully-typed languages (Haskell, and I suppose Scala, OCaml, F#).<p>Don't confuse typing with rigidity.
I think the question is incompatible with the constraints. From a founder's point of view, there's no reason to master any language, let alone a new one. What matters is being just good enough at something to start iterating.
I think the better tactic is to focus on mastering programming and solving problems, rather than a specific language.<p>Learning a new syntax is not that challenging, and no language will be the optimal(or even possible) to use for every project.
Personally I would go with Lisp. The symmetry between data and executable code affords flexibility beyond compare. You have a first class suite of tools with Emacs + SLIME + Paredit. You have native deployment on multiple platforms to boot. Can't go wrong.<p>If you prefer static typing I'd choose C++ over Go. Good old C++ may not be the flavor of the week but it is almost as dummy-easy as Java if you use smart pointers and RAII. It has excellent generics support, something sadly missing from Go. Great mutli-platform native deployment.
Are you working? If not, pick a language you can get work in, work that you want to do. Even if you are in school, at some point you won't be, and you will want to have projects in your portfolio, and skills you can leverage to get work.<p>Other languages will be around for later. You can learn Lisp while working in python , but knowing lisp probably won't get you the freedom to master python after work.
is the idea that you want to be a founder, and are asking what language would best help you, or are you asking founders what kind of people they want to employ?<p>if the latter just check the hire threads (at the start of each month in "ask" there is a thread about who is hiring).