What language should I learn next?

I want to learn a new language but I’m presented with many options. I am familiar with C++, Java, Java web development and the whole suite of languages that go along with it (J2EE, JSP, Javascript, etc.), Visual Basic.NET, SQL, possibly others I’m forgetting at the moment. I have relatively recently gotten into Linux and would like to use my skills to contribute, whether building my own tools or joining existing projects. Of interest to me would be KDE development, OpenSUSE development, possibly kernel development depending on what’s needed, as well as games or office-interoperability with the goal of making Linux more portable and recruiting users.

At a glance I like Python but I’m reluctant to commit because of its disadvantages, namely being slow because it’s an interpreted language. I would be interested in picking up Ruby over Python if a good argument could be made. I looked into Factor (it was mentioned in a recent post) and it seems interesting, but I am reluctant to learn a such a “fringe” language (flame away).
I would be OK with devoting a chunk of time to such an unknown language if it showed large promise and I thought I could make a significant difference in increasing its user base or tool set.

I also am hearing an increasing buzz about JavaFX, which I know almost nothing about.

So my question is: what’s a good language to learn next? I am very interesting in making programming more accessible and less esoteric, specifically with things like syntax, built-in language functions, and build dependencies. Here Python seemed like the obvious next choice, but again it seems it might be somewhat limited in a practical context. I want to find a popular language that has the power and flexibility (and relative speed) of something like Java (or C++) but does away with the clumsy syntax and heavy objects.

It occurred to me I could simply design my own language and implement it with a interpreter in C++ (or something like that), but I would only want to do that with widespread support and input so I don’t write something which I’m the only who would ever use.

What do you guy think?

So my question is: what’s a good language to learn next? I am very interesting in making programming more accessible and less esoteric, specifically with things like syntax, built-in language functions, and build dependencies. Here Python seemed like the obvious next choice, but again it seems it might be somewhat limited in a practical context. I want to find a popular language that has the power and flexibility (and relative speed) of something like Java (or C++) but does away with the clumsy syntax and heavy objects.

What do you guy think?

Yeah I think your gut instinct is probably right, and Python is the way to go. The main point I think you might be missing is that Python has an API to write performance sensitive functions in C/C++ and then include these as modules. While I am not too sure, I am under the impression that Python is in fairly widespread practical use, but now that I think about it I’m not sure why I think that, I probably heard Google uses it for something or other.

You might want to glance at these pages to see if this would be a workable option for you:

Extending and Embedding the Python Interpreter — Python v2.6.5 documentation
Python/C API Reference Manual — Python v2.6.5 documentation

Good Luck,
Malcolm

Though I have not tried it myself, I was impressed by the self-documenting facility built into Python when it was demonstrated at my local LUG and that would be an advantage for someone wanting to get to grips with what it does and also trying to write consistent code.

This is one language that I recently spent some time on:
The Scala Programming Language

On 04/11/10 17:26, sp3wn wrote:
>
> I want to learn a new language but I’m presented with many options.
…]
>
> At a glance I like Python but I’m reluctant to commit because of its
> disadvantages, namely being slow because it’s an interpreted language.

The perceived speed of any programming language has, most of the times,
much less to do with the architecture of the language than with the
proficiency of the programmer.
It is very possible to get disappointing results with a piece of C code
when (ab)used for the wrong type of application, or to get very happy
with a scripting language like Python when used in the right way.
And the speed and ease of development most of the times far outweighs a
few percent less execution time, specially in (interactive) workstation
applications.
So just don’t use Python for e.g. graphics rendering or decryption, C++
on a GPU is much better suited, and don’t use C when all you want to do is
text filtering.

Btw: Python is not really interpreted; it is compiled into a byte-code at
run-time, and there is some cleaver caching done internally.

Theo

I too agree with modern processors, speed is not an issue as much as clean efficient code. I personally hate those interpreted / byte code languages as they rarely rank high on being efficient or tight as code goes. You want to really make waves! Fix the cr**y C/C++ Library stuff that breaks at every new twist of the kernel or Distro release. It’s a typical reason why poor coding is a bigger issue than speed. We have a CPU which is a Fast-Idiot when there is no memory, Now we have C/C++ which is a Faster-Idiot when there is no responsible-programmer.

As you said that your intention is to contribute to existing projects, you should pick your project first and then learn whatever language they use. Python would be perfect to contribute to ‘mailman’ (as an example) but for kernel development it’s still C.

Making the ‘right choice’ is typically going with the mob, i.e. one which attracts the least criticism, but is it the correct choice? For me the ‘correct choice’ is that which means getting working solutions running with the least amount of effort with robust, effective code. This is why I choose and still remain a Tcl scripter. Ok, its a little unfashionable these days, because ‘newness is always fashionable’ but its rapid learning curve, extensibility and cross-platform support and stability is second to none.

For my part, I maintain the Gnocl, the Tcl/Gtk+ bindings which is worth checking out at Gnocl Tcl/Gtk Bindings.

You’re already quite an all-rounder, KDE development would be a nice environment to contribute too. New things that can be combined with the knowledge you have.

Personally I don’t care about the language that much, as long as it allows decent programming.