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've been itching for a while to learn a new language. I cut my teeth on PHP, though I don't use it anymore. I primarily program in D and Python now. I feel that these languages complement each other well, because D is close to the metal, statically typed and bleeding edge, while Python is more dynamic, interpreted, more mature and has better library support.

I also know C pretty well (mostly learned from using the C-like subset of D), have some knowledge of C++, and have written a few very small one-off programs in Perl and Java.

The key things I want in a langauge are:

  • A language that significantly expands my horizons. I don't want to learn something that doesn't teach me anything conceptually interesting relative to D and Python.

  • A practically oriented language. I absolutely, 110% refuse to spend any effort whatsoever learning a language that feels academic and emphasizes purity over practicality.

  • Something that is mature, modern and well supported enough to use for real work. This doesn't necessarily mean large production projects, but at least serious prototypes and research code.

  • Good generics, templates, duck typing, type inference, or something similar to avoid the rigidity of plain old static typing is a must.

  • Terseness and readability count, though these are admittedly subjective.

share|improve this question

closed as not constructive by gnat, Jalayn, thorsten müller, Robert Harvey, MichaelT Apr 8 '13 at 21:33

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
I believe your first two criteria negate each other. You really should learn Scheme or Haskel at this point, even if it makes you feel like it's academic. Much can be learned seeing how far a "pure" idea can take you. And that will help all of your abstractions. –  Macneil Nov 16 '10 at 4:09
    
@Macneil: That's what makes the question interesting, though: I wouldn't learn a language as intellectually boring (given what I already know) as C# or Java except to land/keep a job, and I wouldn't feel motivated to learn a language that I knew was too academic for much serious work, like Scheme or Haskell. –  dsimcha Nov 16 '10 at 4:41
5  
Then what is your goal? Do you want to keep putting more gas in your tank, or do you want to make your tank bigger? –  Macneil Nov 16 '10 at 4:49
    
Consider JavaScript –  codingoutloud Mar 17 at 19:54

7 Answers 7

up vote 7 down vote accepted

Clojure.

  • LISP ("code is data is code"), so it will definitely expand your horizons.
  • Practical, works in the JVM / Java ecosystem so you're cross-platform out of the box and have zillions of libraries readily available. Also essential development tools like plugins for popular IDEs are available.
  • Mature, it has been reportedly used for serious production work for a couple of years now.
  • Type inference for flexibility, type hints for performance.
  • Terseness and readability: LISP, so be prepared for parentheses and expanding your mind :-)
share|improve this answer
    
Clojure looks like a great language. The only thing that bothers me about it is that it appears to consume an enormous amount of memory and CPU resources, compared to other languages. –  Robert Harvey Nov 16 '10 at 21:33
1  
@Robert Harvey: I'm a beginner with Clojure, but as far as I understand, the resource consumption is heavily affected by how idiomatic the code is. There's supposedly a "Clojurian" way to do things. Generic benchmark code is probably written with language X first and then more or less blindly translated to another language. The result is hardly idiomatic then. Also, measuring memory consumption of a JVM process may be quite misleading; there's likely lots of garbage that could be collected anytime if someone actually needed that memory. –  Joonas Pulakka Nov 17 '10 at 7:24
2  
BTW, Rich Hickey (creator of Clojure) is commenting the memory issue: I think one needs to distinguish between the amount of memory a programs requires, vs the amount of memory a program uses because it is allowed to. These benchmarks don't do that. here: blog.markwatson.com/2010/11/… –  Joonas Pulakka Nov 18 '10 at 14:50
1  
+1 for Clojure. been using it for a year or so now and memory consumption has never really been an issue - Clojure tends to use a lot of memory if it's available but it's mostly just temporary allocations - the GC clears it out when needed. –  mikera Mar 14 '11 at 18:44
    
Let's keep in mind that the JVM can be blamed for some of this as well. IIRC some versions of the JVM don't run the GC until memory usage gets insanely high (or sometimes it just doesn't run at all until you're out of memory). –  Timothy Baldridge Jan 26 '12 at 14:42

Ada:

  • I think it will teach you a lot about memory layout, data typing and structures.
  • It is practical and in use by some major players in the software development world (e.g. Boeing.)
  • Compiles with gcc. There are a few good IDEs for it too, including an Eclipse plugin.
  • Lots of sources on the internet for learning Ada; it's been around for long enough to be considered mature by now (subjective) but it's certainly not dead.
  • More recent standards have good generics/templates. Ada is known for its strong typing, but I've always been able to stay flexible through generics and abstract typing.
  • I think it's terse :-)
share|improve this answer
1  
I like some aspects of Ada the language. What holds me back is that the only Open Source implementation GNAT comes with a dual-licensed GPL/commercial runtime system. So you have the choice to only do Open Source in Ada or pay for the compiler. –  LennyProgrammers Nov 16 '10 at 9:48
    
@Lenny222, yeah that's one of my reservations as well. Overall it doesn't bother me; I'd never do a commercial app in Ada on my own. I'd only be involved in a commercial Ada project if a company was paying for the compiler and paying me for the code. Everthing else I write in Ada is open source. –  anthony-arnold Nov 16 '10 at 22:39

Lua

it has a very practical niche as a tiny core, easily embeddable and the fastest dynamic language available (with the most sophisticated JIT)

at the same time, it's designed and maintained by academic luminaries, that doesn't add a feature until they feel that it can be done keeping the core small, and above all, consistent.

it has lots of language-design features that are missing or crippled on other languages, like lexical scoping, first-order functions, closures, continuations, immutability, etc.

some other popular features like OOP, generics, metaprogramming, aren't in the core but can be approximated (others say 'emulated') with a bit of code or simple conventions.

learning it does expand your mind, and at the same time is a valuable tool to add to your chest. The biggest downside is that you can develop an aesthetic taste that would make other more practical languages downright ugly by comparison (that's how i feel about Python)

share|improve this answer

Smalltalk.

Download a Squeak bootable image and take it for a whirl. http://squeak.org

Smalltalk gets used for very serious work ( still quite popular in the financial sector) You can change the image as it's running, and commercial smalltalk VM's will let you change a method and restart execution while, for example the traders are still trading.

Variables are typeless, so you'd probably call that duck typing.

It's wider in concept than Python. Blocks (lambda functions), continuations.

And it's an image based system not a program that-you run system.

It will expand your mind.

share|improve this answer
1  
Alan Kay once said: "Smalltalk represents an improvement, particularly among its successors." –  Macneil Nov 16 '10 at 4:49
    
Quibble: variables are typeless, but values are strongly typed. But it definitely will expand your mind! Oh, and it's just plain fun working in Smalltalk. –  Frank Shearar Nov 16 '10 at 13:21
    
@Frank: If I may add my own quibble: the term "strongly typed" is meaningless because it has multiple and even contradictory interpretations. You might mean type safety. (The other reasonable interpretation, static typing, does not apply here.) See the Pierce quote from here: en.wikipedia.org/wiki/Strong_typing –  Macneil Nov 16 '10 at 15:20
    
@Macneil Indeed, the nomenclature is unfortunately vague. Serves me right; I often complain about others' use of the term! I mean "strongly typed" as in "you cannot subvert the type system." Instances are of a particular type, and without something like #become:, that type cannot be reinterpreted through a typecast. That type declares that it understands a set of messages. (I'm ignoring per-instance methods.) –  Frank Shearar Nov 16 '10 at 15:59

SQL

You didn't mention this one in your list, but you may find it to be a vital part of your tool belt. If you would like to go deeper into declarative programming, then you may consider Datalog and Prolog as the logical conclusion for where SQL style queries can go.

All three of these languages are mature, practical and well used. For example, Prolog is very useful if you are implementing a DSL, or just need some kind of complex solver and you don't want to bother with graph-style algorithms.

At the very least, it's a different way of thinking, is nontrivial (particularly if you want it to be efficient), and a skill you should have.

share|improve this answer

It is not very mature, but Blue has most of what you want and would be relatively easy for you to hack given a C background.

It sounds to me like you are close to (or perhaps already) entertaining the idea of diving directly into developing a language, even if you don't yet realize it :) Blue would be a great entry point for that.

The only thing questionable is practicality, however Blue is easy to compile and ship, just like any other dependency or library.

share|improve this answer

I think no one has mentioned it since it is just a year old. Try Go.

share|improve this answer
    
would you mind explaining about this in more detail - how and why does it answer the question asked? "Link-only answers" are not quite welcome at Stack Exchange –  gnat Apr 12 '13 at 9:43
    
@gnat I don't remember the original motivations behind recommending Go. If it were today, I think readability, OO, practical will be the reasons I'd recommend. These being some of the things asked in the questions. I have not spent as much time as I'd like to with this language. So I don't remember what I might have known back then and know much lesser now. –  vpit3833 Apr 14 '13 at 9:46

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