Slashdot Mirror


What Programming Languages Should You Learn Next?

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?"

16 of 759 comments (clear)

  1. Wrong Question by jellomizer · · Score: 5, Insightful

    The question is flawed. Anyone worth their weight as a programmer doesn't care what language they
    program in but. But Programing Methodoligy should they work with. Assuming that you use to
    Object Orianted Languages (C++, Java, .NET) which are a deveation of Procedural Based Languges (C,
    Pascal, FORTRAN). So after knowing those methodoligies perhaps you should study functional languages
    (LISP, SCHEME, HASCAL) or Logic Based Languges (Prolog).

    Procedural and Object Orianted languges tend to have the most programmers and is widly used

    Functional comes next used in some Sciencetific applications as well handling a lot of AI type stuff.

    Logical Lanagues are used less frequently because it is very tight sometimes too tight to expand into
    a full application.

    But most good programmers with experience in these languge classes are not normally worried about what
    to program in. They may have their personal favorates but, can code sucessfully in any language
    even if they never coded in it before. Because once you understand the classes the rest is just a
    google search from finding the right command and syntax of the languge.

    For example some differences between procedural Languges

            FORTRAN
                    IF (X .EQ. 1) THEN
                    END IF

            VB
                    If (x = 1) then
                    end if

            C
                    if (x==1) {
                    }

            Python
                    if x == 1: ... ...
            BASIC
                    IF ($X = 1) THEN
                    END

    Wow there are 5 different languges and they all look simular almost anyone would be able to figure it out

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    1. Re:Wrong Question by ucblockhead · · Score: 5, Insightful

      Well...programmers usually care what languages they know when it comes to writing their resume. So while in one sense, you are current, in the career advancement sense, I'd go by what they want on Monster.com: (Java, Javascript, C, C++, Python, Perl, PHP.) True, any good programmer could pick any of those up in a few months (except maybe C++) but HR drones don't know that.

      When I went to school, we were taught all these methodologies. (Though in my case I'm so old that OO programming was too new to be well taught.) I'd hope your average programmer would know them all before getting that first job. Sadly, I get the feeling I am mistaken.

      But in general, I'd say, for instance, to use Javascript rather than Lisp as a functional language...not because it is better...not hardly...but because it is very marketable. (And sadly, most people with Javascript on their resumes have no clue it is anything but a Java clone.)

      --
      The cake is a pie
    2. Re:Wrong Question by MrEkted · · Score: 5, Interesting

      If you've never checked out Erlang, 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 that I've not seen before. Plus, there's a great movie!

      --
      Tell the moon dogs, tell the March hare
    3. Re:Wrong Question by jellomizer · · Score: 5, Funny

      PRINT *, 'What is wrong with using FORTRAN 77? It is a perfectly fine lan'//
          1 'guage that offers the flexiblity for all generations.'
          PRINT *, 'Where else can I write code that will run on todays system and '//
          1 'still be able to back it up on punch cards for safe keeping that wil'//
          2 'l last for decades'
      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    4. Re:Wrong Question by EWIPlayer · · Score: 5, Insightful

      I'm sorry, but the parent comment is a bit "out there". If you had said something like, "Programmers don't care what language they program in, so long as they only want to be coding in one language just like they're coding in any other language", then maybe. But come on... It's talk like that which makes completely mediocre programmers. Do you know how long it takes to become truly proficient in C++ and OOP? Do you honestly want to tell me that you can come from Java (which doesn't destructors, for example) and simply apply your OO Java programming to C++ and be "good"?

      Different languages exist because language A does not do what language B does. And, yes, they can contain a ton of the same kind of idea, which is exactly the reason you need to become highly proficient in them to get anything real out of them. You need to explore the differences not the similarities. I have worked with enough mediocre programmers and enough non-designers in my life, thanks very much. I want people to get deeper, very very deep into alternate languages so that they can broaden their thinking, not just their basic language skill set.

      Learning a new language has little to do with that language and more to do with learning new ways of thinking. When I interview people that say that have any OO language, I grill them on OO more than I do on the intricacies of Java interfaces or C++ memory management. How you think is much more important to me than how many times it takes you to successfully compile a file.

      --
      This sig used to be really funny...
  2. Specialization Versus Breadth by eldavojohn · · Score: 5, Insightful

    I seem to be at odds here with this mentality.

    Stepping outside your comfort zone is a great thing if you have the time or need to do it. Me, I learned scheme & lisp, prolog, a number of instruction set languages and various scripting languages in my undergrad. Because I needed to see what it was like in realms other than Java & C++.

    However, these days, I spend my free time looking at frameworks for the latter two languages. 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.

    I hate to say it but this specialization programming and time spent with other people's frameworks and libraries seems to make me more valuable in my own realm. You're right, it's a good idea for me to pick up Ruby (or whatever I'm supposed to learn next) because Java is not going to be around forever. But honestly, I feel a lot of people around me could stop re-inventing the wheel week after week at work and just take a couple days to tweak someone else's solution to work.

    That said, Lisp & Prolog were my most favorite and least practical languages I've learned (I think Lisp stands for Lost In Stupid Parentheses).

    I guess my answer to your question just another question: "What is your motive for learning a new language?" If it's to broaden your view of the world, go with something out of left field. If it's to be more valuable or better at what you do in Java, C++, Pearl, etc then I would actually tell you to start learning how everyone uses those languages.

    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.

    --
    My work here is dung.
  3. SQL is next for me by damn_registrars · · Score: 5, Insightful

    I learned BASIC back in the days of the C64. I then learned Perl when I decided to try my hand at bioinformatics. I picked up C++ at the same time. But there was one language that was used regularly there that always made me feel like a fool.

    SQL.

    Everything about it seemed backwards and inside out to me. I had a hard time wrapping my mind around "accountant-speak" and "normal forms" (still not sure WTF that means). Yet i know it will likely be in my future. Too much data resides in tables now, and too much data interpretation comes down to data(base) mining. Even the perl::sql modules couldn't save me completely.

    So I would say, if you plan for a career that is data-driven, learn SQL if you haven't already. It certainly doesn't seem to get easier to pick up as you wait longer - or at least it hasn't for me.

    --
    Damn_registrars has no butt-hole. Damn_registrars has no use for a butt-hole.
  4. None of the above... by Ckwop · · Score: 5, Insightful

    My advice would be to learn formal verification techniques. These can be applied across languages and across platforms. If you deploy them properly you can reduce your defect rate from 50 per 1,000 statements to 2 per 1,000 before the first test case is run.

    That will save you far more time than the latest over-hyped platform. While everyone else is fixing bugs in their application, you've already moved on to greener pastures. It will increase your capacity to build really good quality software and not get in to flame wars over nonsense. Nothing quite ends an argument over style more than saying: "Yes, but can you prove that your approach is correct? I can."

    Simon

    1. Re:None of the above... by epine · · Score: 5, Insightful

      My advice would be to learn formal verification techniques.

      Over my career, I wouldn't say that languages as such have been a major influence. Developing language-independent formal coding strategies has proven far more important. I've benefited from the writings of Dijkstra (immeasurably), Stroustrup, Iverson, Backus, Knuth, Plaugher, Stepanov, Brooks, Bertrand Meyer (with reservations), and not a lot else. I haven't learned anything profound from Wall, but thanks for all the Onions.

      Machine code gave me a good underlying model of the machine. Essential for many debugging situations, esp. back in the day when compilers would often generate faulty code.

      APL taught me the value and power of carefully reasoned primitives, the power *and* risk of concision.

      C taught me how easy it is to write a loop that's impossible to validate mentally (and then I taught myself how *not* to write such code).

      C++ taught me most of what I know about software engineering: programming in the large. C++ manages to be simultaneously better and worse than almost any other language one cares to name. There is a deep truth there that hardly anybody in the industry wishes to accept.

      SNOBOL and PL/1 taught me that kitchen sinks are best used for washing dishes.

      Perl taught me that it isn't at all difficult to write a complex regular expression that's harder to read than any APL program I ever wrote. I once had to program in APL on a teletype that lacked the APL character set, so every APL symbol was mapped to its ASCII counterpart based on key location. Reading APL code on this teletype was comparable to reading a particularly hairy Perl regex.

      PHP taught me that useful code can be written in a language with no coherent center whatsoever.

      LISP taught me that the human brain is not a stack machine. I grew up with Mechano. I don't understand the Lego people while all those identical bricks, and I don't understand the LISP people with all those identical cricks.

      COBOL taught me separation of concerns: code should be code, comments should be comments.

      Python taught me nothing at all. To me Python is just the metric version of PHP, which spares you the headache of guessing which functions calls are in Imperial or American units (roughly as arbitrary as whether a Wikipedia page uses British or American spellings). To be honest, I learned more from playing around with ChipWits many years ago. But I find Python enjoyable for some reason as much as I've used it.

      Pascal taught me that the evolution of a complex program occurs along more than a single dimension. I never enjoyed a single minute of Pascal programming.

      By far, I learned the most simply from reading Dijkstra (set aside an hour per page) and practicing the art of coding an algorithm in such a way that by the time you are done, your code couldn't possibly be wrong in any profound way, because you have captured the undiluted purity of essence.

      Plaugher helped to convince me that computers are *especially* fast at doing nothing. Whenever possible, when a precondition is not met, I just let the code continue, mostly doing nothing (if every statement is coded not to execute in the absence of its precondition, this is an automatic consequence). When the routine completes, I check state variables to see whether the desired actions were accomplished.

      I hate exceptions and have never conclusively demonstrated to myself why exceptions are necessary. I suppose to permit integration with code that *doesn't* rigorously guard every statement. I feel confident about my C++ code until the moment I enable exceptions in the compiler. Then I think to myself: this program could potentially fail in 1000 different ways depending on which exception paths are taken. It took the wizards of STL *years* to make the STL fully exception safe. That troubles me. A lot. More than all the other complaints about C++ piled to the moon and back.

      Knuth was wrong about premature opt

  5. assembly by petes_PoV · · Score: 5, Insightful
    if you have only ever programmed in a high-level language, you should really learn a low level one. This will give you an appreciation of what actually goes on inside a processor.

    Even if you never use it commercially, the background it gives you in terms of hardware will improve your ability to write efficient code.

    Personally, I think this should be the first language that future programmers (as opposed to CS graduates) should learn.

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
  6. Whitespace by ookabooka · · Score: 5, Funny

    I think Whitespace is worth learning, if only to be a smartass on exams where the prof specifies you may use "any" programming language. Just leave it blank, then after the exam spend a few hours figuring out how the hell you would solve the problem in whitespace, and bring a proof of concept on a USB flashdrive to fight the inevitable incorrect grade you receive for the problem.

    I have yet to find the courage to actually attempt this. . .

    --
    If you are about to mod me down, keep in mind that this post was most likely sarcastic.
  7. It's not all syntax by shyberfoptik · · Score: 5, Insightful

    The fact that you think "mindless syntax" is the only difference between lisp, haskell, and c shows that you should probably learn one of these languages.

  8. Re:Verilog by exley · · Score: 5, Informative

    Verilog is a hardware description language, not a programming language. It may look like a high-level language -- wire assignments look like variable assignments, module instantiations look like function calls -- but conceptually it's completely different. Furthermore I don't know how applicable it's going to be for anyone who works in software design, which is the audience this question seems geared towards.

  9. Get the Little Schemer by burris · · Score: 5, Interesting

    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 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.

  10. Re:Verilog by Anonymous Coward · · Score: 5, Informative

    It's a programming language for programming a type of CPU called an FPGA.

    It's not. It's a hardware description language, so can be used in FPGAs, but is equally used for ASIC designs.

    Furthermore, an FPGA is NOT a CPU of any kind. It's a configurable logic chip. You could program it as a CPU, but it's not one until you do.

  11. Re:Verilog by sean4u · · Score: 5, Insightful

    Maybe you should have been +5 Funny, but not +4 Insightful.

    An FPGA might very well be able to do very little. See Adrian Thompson's page, especially his 1990s work on evolving FPGA circuits.

    'An FPGA' could be a very limited device.