5 ms·
There is no single best language. Instead, what you get from any sufficiently good programming language is a series of tradeoffs. Haskell, for example, provides
by monkeyfacebag 14y ago
There is no single best language. Instead, what you get from any sufficiently good programming language is a series of tradeoffs. Haskell, for example, provides the benefits of pure functions (lazy evaluation, composable memory transactions, ability to reason about code) but in so doing it takes away your ability to arbitrarily mutate state and perform IO. That's a tradeoff. Python provides a clean, easily readable syntax that leverages whitespace. But you can't define multi-line lambdas. That's a tradeoff. Most of the languages on the author's list use garbage collection, yet another trade off.
Importantly, it is nigh on impossible to understand the pros and cons of these tradeoffs unless you learn the language first. So get a dart board out and pick a language at random. Learn it well enough to find things you don't like about it. Then learn another language that fixes the problems you had with the first and figure out what you don't like about that language. And so on.
Also, be aware that this process will never, ever end. Because there is no single best language.
Except Haskell ;)
- DanWaterworth 14y agoHaskell is by no means perfect. You should try learning a dependently typed language like Agda or Idris in order to understand some of its flaws.
- seanmcdirmid 14y ago> You should try learning a dependently typed language like Agda or Idris in order to understand some of its flaws. Why not just try something a bit more mainstream like COQ?
- DanWaterworth 14y agoCoq is also a good choice. Coming from Haskell, though, I think Agda/Idris have a shallower learning curve. It also sits more happily on the theorem proving side of things than the programming side.
- vorg 14y ago> it is nigh on impossible to understand the pros and cons of these tradeoffs unless you learn the language first That's because there's virtually no easily accessible objective material decision-makers can use to select between them. Because of the high financial stakes involved, every company and consultant has an interest in promoting their own language memes in businesses, government, universities and schools.
- eru 14y agoYou can also ask a trusted friend. Just ask them to be honest and upfront about their biases.
- dons 14y ago> it takes away your ability to arbitrarily mutate state and perform IO No. Haskell requires that you declare where IO is allowed (via the type). Once you assert that you admit mutable state (ST) or arbtirary IO (IO), then you are free to use them.
- polymatter 14y agoIn fairness, Haskell makes it more awkward to deal in mutable state and arbitrary IO. Like how not using goto in a more mainstream language makes it more awkward to have arbitrary control flow. Debugging is annoying when I can't stick a println or puts in any arbitrary function. (The solution of course is to have small functions and print them. If your Haskell function is over 20 lines long you're probably doing it wrong.) Of course, Haskell also means if your program compiles, 90% of the time it runs fine. I love that about it. (Unit tests are still required for the things the compiler can't catch, but its a major win regardless)
- dons 14y ago> Debugging is annoying when I can't stick a println You might not know about Debug.Trace? http://www.haskell.org/ghc/docs/latest/html/libraries/base/Debug-Trace.html#v:trace http://www.haskell.org/ghc/docs/latest/html/libraries/base/D...
- polymatter 14y agoThanks very much! Thats just what I wanted :)
- precisioncoder 14y agoI would say it's better to pick a task, then take a look at what programming language is commonly used for that task. Want to write a web game to post online on a game aggregator? Sign up for Kongregate and NewGrounds and find out what they support. Flash, and Java unity seem to be your choices. Rather write a game to post yourself for geek cred? Pygame and HTML5 are much cooler options. Would rather create a web based app? Ruby and Javascript may be the way to go. Want to make an app to use on your phone? Objective C or Java are probably your best options depending on your phone. Programming is a means to an end and while enjoyable by itself the best way to narrow it down is to pick a goal.