Forgot your password?
typodupeerror

What Programming Languages Should You Learn Next? 759

Posted by Zonk
from the anything-but-haskell dept.
simoniker writes "Over at Dobbs Code Talk, Chris Diggins has been discussing programming languages beyond C++ or Java, suggesting options such as Ruby ('does a great job of showing how powerful a dynamic language can be, and leverages powerful ideas from Smalltalk, Perl, and Lisp') but suggesting Scala as a first choice ('Very accessible to programmers from different backgrounds.') What would your choice be for programmers extending beyond their normal boundaries?"
This discussion has been archived. No new comments can be posted.

What Programming Languages Should You Learn Next?

Comments Filter:
  • no Ps (Score:2, Interesting)

    by whtmarker (1060730) on Tuesday March 18, 2008 @01:26PM (#22785092) Homepage
    php, perl, and python are not even included in the list.
  • None (Score:3, Interesting)

    by the computer guy nex (916959) on Tuesday March 18, 2008 @01:33PM (#22785196)
    A good programmer would study design patterns in their downtime rather than a new language. Learning the right way to solve common programming problems is far more useful than learning mindless syntax.
  • Re:Wrong Question (Score:5, Interesting)

    by MrEkted (764569) on Tuesday March 18, 2008 @01:34PM (#22785210)
    If you've never checked out Erlang [wikipedia.org], I recommend it. I've programmed seriously in at least a dozen languages, but this one really made me think. It has sophistication in concurrent programming [wikipedia.org] that I've not seen before. Plus, there's a great movie [google.com]!
  • by JamesP (688957) on Tuesday March 18, 2008 @01:38PM (#22785278)
    Wow, that's like, coming from a very narrow range...

    But my suggestions are:

    Python - go learn why strong-typing doesn't mean a lot in practice (except for headaches).

    Lisp / Haskell / whatever - go learn ' a different way' of programming things. Trust me, it rocks.

    Ruby / ECMAScript - it's the future baby.

  • Re:Wrong Question (Score:5, Interesting)

    by abigor (540274) on Tuesday March 18, 2008 @01:41PM (#22785308)
    Yup, I'll second this. Parallel programming is going to be a HUGE deal in coming years, and current languages don't handle it well - threading is complicated and prone to errors, leading to product delays. Erlang handles parallelism very elegantly and in a low-fault manner, as it must as it's used in critical telecoms applications. Unfortunately, the language also has a high barrier to entry as it is not Algol-based (like C, C++, Java, etc. are).
  • Malbologe (Score:2, Interesting)

    by Urger (817972) on Tuesday March 18, 2008 @01:41PM (#22785322) Homepage
    Malbologe [esolangs.org], a language so painful it took two years just to write a "Hello World" for it:

    (=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
    hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
  • Re:Wrong Question (Score:3, Interesting)

    by Jeremiah Cornelius (137) * on Tuesday March 18, 2008 @01:43PM (#22785354) Homepage Journal
    Learn LISP!

    It has a funny name, and carries the mystique and credibility you seek. Nothing says "way old school" and "MIT Wizard" like piles of LISP with your tag on them. Of course, you'll have to leave vim behind - there is only one, true tool [gnu.org] for the LISPer, now that dedicated machines like Symbolics are all in the museums.

    The opportunities here are boundless - there are whole categories of libraries for HTTP and HTML that simple don't exist yet! If that seems to trivial a challenge, why not look into one of the projects to write and OS [common-lisp.net] in LISP?
  • by burris (122191) on Tuesday March 18, 2008 @01:55PM (#22785492)
    Like a lot of people have commented on this thread, it's past time for you to learn a functional language. I'm not sure if it is true, but new CS students at MIT used to have to learn Scheme as their first language. Learning a functional language will transform your programming ability.

    I recommend the book The Little Schemer [neu.edu] This book is like no other programming book you have ever used. It is a socratic dialog between you and the interpreter. Questions on the left, answers on the right. It is meant to be used with an interpreter.

    Once you make it through this book you'll be a much, much better programmer. You'll also have an easy time learning languages like Haskell, which is used quite a bit in academia and is useful for real world software.

    So buy a copy of the Little Schemer and download an interpreter, Dr. Scheme is pretty good, and get cracking.

  • D: The Language (Score:2, Interesting)

    by ion (18545) on Tuesday March 18, 2008 @02:07PM (#22785650) Homepage
    I know it still has some issues, but I'm hoping the D [wikipedia.org] takes off. There are a lot of really interesting ideas in that language if you read the spec and write a few sample apps. Even if the language itself doesn't take off its worth a look to see the kinds of things people are thinking about including in next-gen languages.
  • by Avenel (603755) on Tuesday March 18, 2008 @02:10PM (#22785686)
    This seems to be the future. Are there any languages that are more efficient for multithreaded programing?
  • by skrolle2 (844387) on Tuesday March 18, 2008 @02:13PM (#22785734)
    The only important thing to know about SQL is that it is a declarative language, i.e. in the same family as Prolog. Common to them is that you state how you would want the world to look like, and let the language runtime figure out how to actually do it. This is totally contrary to imperative languages which is a series of explicit instructions, i.e. "first do this, then do that." In SQL you simply state "I wish to have the data that satisfies these criteria. Give it to me. Now."
  • Screw them all. (Score:5, Interesting)

    by God of Lemmings (455435) on Tuesday March 18, 2008 @02:16PM (#22785782)
    Write your own language... it's certainly more educational.
  • Don't Forget Piet (Score:4, Interesting)

    by eldavojohn (898314) * <[moc.liamg] [ta] [nhojovadle]> on Tuesday March 18, 2008 @02:20PM (#22785854) Journal
    Don't forget Piet [dangermouse.net]. That's produced some of the most beautiful code [dangermouse.net] I've ever seen. It also handles abstraction in a novel way.
  • Re:Verilog (Score:5, Interesting)

    by twistedsymphony (956982) on Tuesday March 18, 2008 @02:34PM (#22786062) Homepage
    Nice to see Assembly at the top of your list. There's something to be said for learning some form of assembly.

    after learning C++, Java and a few others I decided to get into Microprocessor and Microcontroller programming and did so in whatever flavor of assembly the chip supported. I gained an entirely new respect and understanding about how these chips work on physical level as well as a much greater understanding about how inefficient most applications are and the enormous potential for improvement, as well as the enormous potential of modern CPUs and how much that potential is squandered on what people actually use them for.

    I've developed a number of embedded applications now and the way I think about other applications has really changed too. My next language will probably be Verilog because the price of FGPAs has dropped significantly and they are incredibly versatile tools if you know how to use them... some of the things I've seen people use them for are mind boggling
  • Re:Verilog (Score:5, Interesting)

    by SanityInAnarchy (655584) <ninja@slaphack.com> on Tuesday March 18, 2008 @03:09PM (#22786514) Journal

    I'd suggest erlang for its own sake -- a parallel programming model that doesn't suck as much as threads with locks.

    • C -- you think you know it, because you know C++, but you really don't. Also, if you're on Unix, you'll need it at some point.
    • JavaScript/EcmaScript -- has nothing to do with Java. Dynamic everything, closures, first-class functions -- most of the Lisp-y goodness, but you already know the C-like syntax.
    • Haskell -- purely functional programming, lazy-evaluation.
    • Erlang -- pervasive message passing as a language construct.
    • Ruby -- beautiful syntactic sugar for most of the JavaScript/Lisp tricks you learned elsewhere. Nice for domain-specific languages, too.

    Disclaimer: I don't actually know Smalltalk (Squeak won't run on my machine), Prolog, Verilog, or Scheme. I did learn Lisp, once upon a time.

    Also: I think that while we do have languages that are good for specific tasks, every language I've tried is missing something I consider to be critical.

    Sometimes I'm able to bring it in -- with JavaScript, I can almost emulate Ruby's iterators (each, collect, etc). But sometimes, it's something more pervasive -- for instance, while most languages support some kind of threads, they often allow supporting libraries to be written in such a way that they break when used in threads, and some of my favorite languages (Ruby, Python, Perl) don't support real OS threads actually running in parallel. (Python has a Global Interpreter Lock, and Ruby seems to be about to adopt the same, meaning that a single process of each won't be able to really take advantage of multicore/multiprocessor systems.)

    Sometimes, these things are mutually exclusive -- how do you have a purely-functional, lazily-evaluated language, and also make it simple and imperative? But most of the ones I care about aren't -- there's no reason a language like Ruby couldn't be written to be fast, bytecode-compiled, and truly threaded. There's no reason a language like Erlang has to have non-variable variables and ass-ugly syntax.

  • Re:Wrong Question (Score:2, Interesting)

    by archen (447353) on Tuesday March 18, 2008 @03:12PM (#22786568)
    I think that also depends on just why you are learning a new language. Personally I would highly recommend Ruby for system administration. However thinking in Ruby isn't overly different than most other common languages. As such LISP is really cool in the fact that you not only gain a new language, but a new methodology in approaching problems - not just a new language with a different syntax. Prologue is another interesting language although much less useful than LISP in my opinion.

    But if you're just looking to pad your resume, then I really don't think LISP will do you much good. It may look cool to the guy making the decisions, but you need to get past HR first, and they have no idea what LISP is nor do they care if you're smart enough to learn other languages.
  • Re:Verilog (Score:2, Interesting)

    by fpgaprogrammer (1086859) on Tuesday March 18, 2008 @03:14PM (#22786608) Homepage
    Alternatively, in VHDL:

    FPGA /= CPU

    It's tends to be harder to get an FPGA to "hello world" but it seems these days that all the cool kids are compiling their dataflow graphs into reconfigurable logic. If you want to be a 1337 fpga programmer, then you should learn Bluespec [bluespec.com]. Guarded atomic actions for the masses!

    Or Excel [blogspot.com]
  • Re:Wrong Question (Score:3, Interesting)

    by Jack9 (11421) on Tuesday March 18, 2008 @03:20PM (#22786670)

    The question is flawed. Anyone worth their weight as a programmer doesn't care what language they
    program in.

    Really? What kind of idiot programmers do you work with? My life is finite and my time is valuable. If you don't care what language you program in, you don't care what language you learn, and you must not care what framework you learn either. Heck, all languages and frameworks must be worth learning! Reality check: What kind of languages you spend time to learn, matters.

    Much discussion goes into what languages my team will use for what project and why. We don't fear learning new languages, but even as individuals away from work, nobody wastes time learning languages that do not serve a purpose in the workplace or in our own personal projects just to "know them". I've dabbled in Erlang, Lisp, Perl, Python, Ruby, etc. Mostly Erlang. None of these languages would I claim to "know". I'm not going to learn any of them. It doesn't help me to know them right now or in the future AFAIK, which is the point.

    Flex Actionscript programming I've had to learn and have taken Adobe classes to learn. I "know" Flex and the associated Cairngorn framework. It's been the most useful thing I've learned in a long long time. I'd recommend to anyone, learn Flex.

    See, that's an answer, not this constant /. nonsense of "you're too dumb to ask the right question".
  • by grammar fascist (239789) on Tuesday March 18, 2008 @03:33PM (#22786842) Homepage
    Also, while some design patterns seem to be universal (structural patterns like facade, adapter and proxy, in particular, are necessary to make independent systems play well together), others indicate that the language you employ them in is lacking in features.

    Visitor? If you have first-class closures, it's the most natural thing in the world to pass a function to a traversal function. You don't need a name for it or a specialized set of trigger terms so that maintainers can see easily divine your intentions. You don't name your closure "visit", you name it after what it does.

    Singleton? Whatever for, if you can create object literals, or your classes are as first-class and polymorphic as instances?

    Factory? In Python, you override __new__...

    Learning other languages lets you determine the difference between unification and duct tape.
  • by RAMMS+EIN (578166) on Tuesday March 18, 2008 @03:41PM (#22786976) Homepage Journal
    I'm curious how you do your verification.

    I've taken a course on this in university. The tools I remember did basically an exhaustive search of all states in your program, and verified that there were no deadlocks and the properties you specified hold in every state.

    Needless to say, this is very memory consuming, and can take a long time. So what you really get to verify is simple models, not your actual application with all its different variables. Also, the tools didn't grok Real World programming languages, so you had to write your model in a language other than the one you would eventually write your application in.

    In the end, the impression I got is that formal verification is great, but the tools we used don't tell you _anything_ about the application you write, because that's not the code you ran the verification on.

    I know that's just the tools we used in that course, but how do you do it? Which tools do you use, and how do they work?
  • by Z-MaxX (712880) on Tuesday March 18, 2008 @05:56PM (#22788660) Journal

    Do I want to know Ruby? Sure. But it's not going to make me better at my job. My employer has me jumping from JBoss to Weblogic to Websphere to Jetty to Glassfish to ... whatever's under the sun for application container and all the while I'm trying to be an expert at Maven (which seems limitless) and Ant so I can do a decent job building. Not to mention the UI aspects: JSF, Tiles, Javascript, AJAX, DHTML, JSPs, JSeamless, Flex, GWT ... they just go on and on.
    ...
    Honestly, a lot of the older coders I know just don't have the time. The company will both pay for and tell them what they need to learn next or they ain't learning anything at all.
    This sounds like a case of picking a tool and then trying to apply it to your problem--and switching to another tool one whenever something "new" and "cool" comes out--which is totally bass-ackwards.

    By having a breadth of knowledge and skills, you can make informed, smart choices about what language, framework, technology, etc. is best suited to solving your problem. Should your current problem be solved with a "Web 2.0" interface, a rich client application, etc. In your case, you should know what the benefits and downsides of the various J2EE containers are, and in fact, you need to know what using J2EE in the first place is buying you. Make informed decisions that help you solve your problem.

    JSP, Servlet, PHP, and Rails programmers should have experience with Java Swing, Java Web Start, and other technologies in order to decide what the optimal solution is -- or at least, the lead developer or senior software engineer needs to have an exceptionally wide range of skills in order to make these kinds of decisions.

    My team was stuck for years on a project that was forced into a web application mold (using Java servlets, JSP, Apache Struts, etc.) which caused us relentless headaches for most of the time. It should have been a regular application! A rich client. For many reasons. Unfortunately, at the inception of the project, the project lead had firmly decided that it had to be a web application.

    At my employer, I'm constantly learning new technologies to find new and better ways to solve problems. You need to be proactive and take the lead, and solve problems! I had previously been focused mostly on graphics programming, Java application and web programming, but when my project needed it, I learned about embedded programming, embedded operating systems, electronic design, microcontroller programming, etc., on my own. I learned how to do things that no one at the company has done yet, and I have found ways to make our product orders of magnitude better (10x smaller, 10x more battery life, 10x better performance). Since many of my colleagues are focused on their more specialized areas of expertise (e.g., Java application programming, or Java web programming, or functional testing, or database programming, or electronic circuit design), I actually am often frustrated because I have no one to consult with when I have a problem to solve.

    You express concern about learning technologies you will never use, but the fact is, that unless you acquire some other areas of expertise, you will never know what is the best tool for the job!

1 Mole = 25 Cagey Bees

Working...