Slashdot Mirror


Is It Worth Learning a Little-Known Programming Language?

Nerval's Lobster writes: Ask a group of developers to rattle off the world's most popular programming languages, and they'll likely name the usual suspects: JavaScript, Java, Python, Ruby, C++, PHP, and so on. Ask which programming languages pay the best, and they'll probably list the same ones, which makes sense. But what about the little-known languages and skill sets (Dice link) that don't leap immediately to mind but nonetheless support some vital IT infrastructure (and sometimes, as a result, pay absurdly well)? is it worth learning a relatively obscure language or skill set, on the hope that you can score one of a handful of well-paying jobs that require it? The answer is a qualified yes—so long as the language or skill set in question is clearly on the rise. Go, Swift, Rust, Julia and CoffeeScript have all enjoyed rising popularity, for example, which increases the odds that they'll remain relevant for at least the next few years. But a language without momentum behind it probably isn't worth your time, unless you want to learn it simply for the pleasure of learning something new.

47 of 267 comments (clear)

  1. No. by Anonymous Coward · · Score: 5, Insightful

    There is enough similarity between programming languages that there really is no point in learning any more than what you need. If you find yourself in a position where you need to learn a new one, as long as you have a pretty broad background it usually only will take a couple of days to get going and a couple of weeks to get really good.

    1. Re:No. by mlts · · Score: 2

      On the other hand, once you learn a few programming languages, it becomes easier to know others, (assuming something that isn't completely different, such as a procedural language (C or Java) versus a functional programming language (Lisp, Scheme), versus assembly language.

      If you know C, you can consult the camel and make functioning perl code. So, it might not hurt knowing a non mainstream language, and may not take too much of your time, relatively.

    2. Re: No. by Anonymous Coward · · Score: 2, Interesting

      Every language has tradeoffs, otherwise we'd all just use the one that didn't make any sacrifices.

      Ruby excels in productivity, developer workflow, infrastructure tools and flexibility but it's tradeoffs is actual speed and concurrency.

      Go excels in concurrency, portability, team development and keeping you close to the metal but it's tradeoff is a much slower working speed for everything around HTML as well as a different way of thinking about problems.

      Java excels at speed with the tradeoff of severe lack productivity and a dependency on a lot of extra tools to make the process even passable.

      C# is actually a great language but the tradeoff is the Microsoft stack and costs involved (for the most part).

      Perl excels at text parsing.

      PHP excels at low cost web hosting due to lack of RAM commitment (256mb of RAM can still serve 1TB of PHP scripts...just not all at the same time).

      Everything has tradeoffs.

    3. Re:No. by Anonymous Coward · · Score: 4, Insightful

      There is enough similarity between programming languages that there really is no point in learning any more than what you need.

      That's true with a lot of the "C-with-X" type programming languages that are out there (e.g. if you know Python/Perl/Ruby you probably don't need to also learn Ruby/Python/Perl unless you have to), but there are also programming languages that are built around a wholly different philosophy, and I would argue that people *would* benefit from learning one of them, even if you don't actually ever use it.

      The canonical example is Prolog. Not used for anything much in particular, but a completely different way of thinking about programming, and something that will definitely make you a more well-rounded programmer if you do learn it. Likewise, if you've never worked with a functional programming language, learning Scheme or Haskell will be a benefit. Something like Eiffel is good to learn design by contract. Heck, even esoteric languages like Brainfuck and Unlambda can be worth learning (but never using) for the different perspective they give on how to accomplish a programming task.

      Of course, by "learn" here I don't just mean learn the syntax. By "learn" I'm referring to knowing the concepts behind the programming language, and understanding what is "correct" or idiomatic for that programming language, rather than "can I transliterate this FORTRAN program into Scheme syntax?" It's not "will I ever use this language" or "will this look good on my resume" but "what is the philosophy of this programming language, and what can I learn from it"?

    4. Re: No. by Tailhook · · Score: 3, Funny

      And it becomes even less productive than it already was when it becomes necessary to hire Java, C# or even PHP devs

      Yeah, I've noticed how everything written in Java, C# and PHP are brilliantly fast and bug free.

      --
      Maw! Fire up the karma burner!
    5. Re:No. by RabidReindeer · · Score: 3, Interesting

      There are probably less than half a dozen basic language syntaxes. COBOL/Fortran/Python, Algol/Pascal/Modula/Ada, C/C++/JavaScript/Perl/PHP, LISP/Scheme, RPN/Forth/Smalltalk. and so forth, not even touching other relatives of the forms I've just named.

      What makes them different languages isn't the language, and it isn't really even the support llbraries (if any), It's the way of thinking that comes along with the language. Whether it's object-oriented, message-oriented, parallel-optimized, Functional, whatever, each language has its own characteristics.

      As the old adage goes (something like) being able to write COBOL in 17 different languages. Yes, you can pick up the syntax in a few days and begin to get a feel in a few weeks, but most people won't think naturally in a language's mindset unless they've spent several months at a minimum at it.

    6. Re:No. by HiThere · · Score: 2

      Different langaguages are different.

      OTOH, I disagree with the basic premise of the article. It is my belief that one shouldn't learn a new language to improve ones job prospects, but rather to improve ones skills as a programmer. So if you know C++, then you don't learn C# or Java, but rather Eiffel, Lisp, or Haskell, or possibly OCaML.

      OTOH, If you already know C++ or Java, it's certainly easier to learn Python or Ruby. So easy that a basic knowledge can be learned in a day. So if you're tight on time, that will allow you to expand your capabilities in small increments. (But a basic knowledge won't teach you the libraries, which is where the important differences lie.)

      FWIW, I first learned Fortan, actually FORTRAN, since it was before Fortran 77 was standardized. But then I went on to Snobol, PL/1, etc. I never did really master LISP1.5, but I didn't have access to a running implementation. With Lisps a decent IDE is nearly a necessity to start with. (Currently, if you want to pick up a lisp, I'd recomment Racket Scheme from PLT. It's got a decent development environment.)

      OTOH, I dropped C++ about 20 years ago, and am no longer fluent in the modern dialect (something I keep meaning to correct). My current favorite language is D (Digital Mars D, or dmd), before that I cycled between Ruby and Python. Before I retired I normally wrote in whatever my employer chose, which, towards the end, was MSAccess Basic...a really foul language. So foul I wrote routines in Eiffel that did the work and just used the MSAccess Basic as a driver. Not only was it faster to write, it was also faster to execute, and unlike MSAccessBasic, the programs wouldn't arbitrarily start failing after a few months of use. (In the AccessBasis I used to need to save the programs as text files so that I could re-import them after the system corrupted them. Figuring out that there wasn't actually anything wrong with the programs took a lot of quite furstrating debugging, since a newly entered program would work properly. It's my guess that the system was storing some invisible binary code in with the source, so the source became unusable when the code got corrupted...why the code ever got corrupted I never found out, but it happened repeatedly to many different programs.) I presume that MS has by now fixed the problem, but it persisted over at least 5 years and multiple different versions of MSAccess.

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
  2. Programming languages are for luddites. by Anonymous Coward · · Score: 3, Funny

    Only Windows 7 luddites use programming language. Modern app appers write apps written in App Languages!

    Apps!

    1. Re:Programming languages are for luddites. by fisted · · Score: 2, Funny

      Only Windows 7 luddites use programming language. Modern app appers app apps apped in Apple's App apper!

      FTFY. Next time at least do it right.

  3. Doing it now... by Rinikusu · · Score: 2

    Bread and butter has been C# the past few years, currently enamored with f# and racket. I don't think I'll be able to find a job with these, but it certainly has returned me to a "fun" mode.

    --
    If you were me, you'd be good lookin'. - six string samurai
    1. Re:Doing it now... by Marginal+Coward · · Score: 2

      I think it's fair to say, we're well past the day where anyone can claim that C# is completely locked to Windows.

      The word "completely" seems like a pretty strong hedge here. Sure, Mono exists, but it seems to be a bit of an unloved stepchild of the Open Source world, which generally seems to regard all things with any relation at all to Microsoft with some combination of hostility, suspicion, or at least disinterest. So, is Mono "a real boy" now in terms of being a full-fledged alternative to .net at all levels including features, libraries, tools, etc., or is it actually an unloved stepchild, as I seem to have perceived?

    2. Re:Doing it now... by RabidReindeer · · Score: 2

      When an app dives into one of the Windows-only assemblies, Mono's word is "broken". .Net and Java are a lot alike. Both are "universal" platforms (originally) sponsored by vendors of operating systems. But .Net is turned inwards whereas Java is turned outwards. Indeed, the only reason .Net exists is because Sun wouldn't let Microsoft weld Windows-only functionality into their version of Java.

    3. Re:Doing it now... by HiThere · · Score: 2

      If I read the article announcing the release correctly, then while the basic C# language is (probably) open source, it's definitely not free. You can't make a version of it without the agreement of MS, and the released version by MS is ... incomplete. Parts of it are portable, others aren't. So you can only use it as MS desires.

      IIRC the release agreement said something like "permission is given to any full and complete implementation that fully implements the specifications" I forget whether the specifications were subject to unilateral change by MS, but even if they weren't it means that the language cannot be implemented by anyone except as desired by MS. Also, of course, the libraries were not made available, which reders it essentially useless except on MSWind machines.

      Now just because their public promise didn't allow something doesn't mean that they won't ignore any "infringing" code as long as they feel like it. But it does mean that only a trusting (characterization deleted) would put their own time and effort behind it...without some form of idemnification.

      So I'm going to pass on C#. It'd rather trust Oracle's Java (which I also avoid, though not all the time).

      --

      I think we've pushed this "anyone can grow up to be president" thing too far.
  4. little-known programming language by rossdee · · Score: 3, Informative

    APL

    1. Re:little-known programming language by avandesande · · Score: 2

      Many of the problems with APL have been fixed in J, of course if you are going to work on old APL systems it would be your first choice.

      http://www.jsoftware.com/

      --
      love is just extroverted narcissism
  5. A good point by grimmjeeper · · Score: 2

    The answer is a qualified yes—so long as the language or skill set in question is clearly on the rise.

    Very much this. There is a reason why I, and many of my colleagues, leave Ada off our resume. I know more than one person who's stuck doing maintenance work on defense projects that haven't been cutting edge for more than 20 years because they hitched their wagon to obsolete languages.

    The better companies are innovating and looking towards the future. Learning a new language that is on the rise is a good idea. Even if it doesn't pan out, the experience isn't always wasted. And you can demonstrate to future employers that you a good hire because you're good at learning new things in new environments.

    1. Re:A good point by gstoddart · · Score: 2

      and you can take your pick of jabs and locations

      Ooooh ... poke me in the elbow again!!

      --
      Lost at C:>. Found at C.
  6. Sure. by fahrbot-bot · · Score: 3, Interesting

    Nice that TFA titled, "Should You Learn a Little-Known Programming Language?" shows a screenshot of JavaScript, but I digress.

    Little known languages aren't always actually little known or used, just less and/or not main-stream. They are often languages used in specialized areas or use less common syntax and or structure - like PROLOG and LISP. As such, using them can often help a programmer think and problem solve in new/different ways that may help programming in more common languages. I know learning LISP help my recursion skills.

    My LISP and PROLOG skills two are a bit rusty, but I've used (and was proficient with) several dialects of LISP and would probably enjoy a job using either language again.

    --
    It must have been something you assimilated. . . .
  7. Is the Lobster an auto-post? by xxxJonBoyxxx · · Score: 3, Insightful

    Every week I seem to see a slight variation on:
    "Is learning %s worth it?"
    "What is value of learning %s vs. %s?"
    "Would you learn %s to switch jobs?"

    I'm beginning to think this Dice account is just an autopost with a random list of possible values.

  8. Oldies but goodies by nhtshot · · Score: 2

    I'm very well versed in PPC assembly. I've found a quite wonderful niche working on automotive controllers. I also have several subordinates well versed in Tricore (Infineon automotive CPU) assembly.

    Neither of those will ever make it onto any list of "popular" anything, but we all make plenty of money doing it.

    As important as those two languages are to what we do, I've never hired anyone that listed either of those things on their resume. The ones that did list them specifically had at best a rudimentary understanding and little other practical background that would make them useful.

    Don't learn something because you think you can make money with it. Learn something because you like it and want to use it. Then, find an employer that values your talents and willingness to learn whatever they need you to learn.

    That's the best path to a good paying job.

  9. Re:Yes if you can afford the time by houstonbofh · · Score: 5, Insightful

    And if you pick the right one. A "language on the rise" may not be a good thing if everyone is jumping on it. By the time you learn it, the limited but growing market may be flooded. You can even pick a language that is falling off, as long as the programmers are falling off faster. A good example is COBOL. It is truly a dieing language. But with many COBOL programmers in their 70s+ the need is actually growing. (That said, you could not pay me enough to program in COBOL)

  10. It's not about the nail by __aabppq7737 · · Score: 4, Insightful

    It's about training your mind to understand something hard. Learning a little language exercises will-power, discipline, and focus.

  11. Lisp-likes and CS background by chthon · · Score: 4, Insightful

    Start with How to Design Programs and work it through, from beginning to end, even if you are a good programmer.

    Then go to Structure and Interpretation of Computer Programs. Work through the chapters that you find interesting.

    Then start with learning Common Lisp. Even after 30 years existence, there is still no other programming language which implements everything that is possible with CL. There might be programming languages which are more specialised in certain language subsets that are also part of Common Lisp, but none includes everything that CL includes.

    Then learn Common Lisp macros, and realise that to get at the same level of possibilities in other programming languages, you need to embed a Lisp system. But that will be a slow interpreter, and Common Lisp can compile.

  12. ADA? by Frosty+Piss · · Score: 2

    COBOL is an excellent example, it has become niche, but will be in use on "mission critical" systems for years to come. Perhaps ADA would be another example?

    --
    If you want news from today, you have to come back tomorrow.
    1. Re:ADA? by Em+Adespoton · · Score: 3, Insightful

      I think ADA is finally on its way out. COBOL and Fortran will still be around for years though. and anyone who knows their way around MATLAB will also be in high demand for years to come. Pick any language on which deployed hardware depends, and you've got a language that will need people who understand it for years to come.

      I once new someone who helped a Telecom deploy their COBOL stack -- she was pulled out of retirement some 20 years later to help them migrate it to a more modern platform, as she was the only person from the team left alive who actually understood how it all worked.

    2. Re:ADA? by ShanghaiBill · · Score: 4, Interesting

      COBOL is an excellent example

      Is it? How come I never see job ads for COBOL programmers? I know no one who uses it. I have often heard that it is used in "banks" or for "business" programming. But I know several people that work as programmers at banks, and none of them use COBOL or are aware of it being used at all. They are all Java shops. Same for programmers writing business logic. So I think that all these myths about demand for COBOL programmers is a load of hogwash.

      Perhaps ADA would be another example?

      Ada was oversold in the 1980s, and quickly developed a reputation for poor performance, and heavy resource requirements. Few systems were written in it, and even mission critical military systems (which Ada was designed for) could commonly get an exemption to use something more sensible.

    3. Re:ADA? by jythie · · Score: 4, Informative

      I see ads for COBOL now and then, but I am East Coast where a lot of that infrastructure is sitting. While not every day kinds of ads, when I was job hunting I would see at least a couple per week. About the same as FORTRAN.

    4. Re:ADA? by gb · · Score: 4, Insightful

      If a skill set is sufficiently rare then it's not very cost-effective to advertise for it on the open market - but that doesn't necessarily mean it's not a very valuable skill set.

    5. Re:ADA? by Dutch+Gun · · Score: 2, Informative

      I was under the impression that Ada is still widely used in many mission-critical systems. For example, the latest Boeing planes' software (777 and 787) is nearly all written in Ada. I haven't heard about another language making inroads in those applications, but I suppose it's possible. More likely IMO is that the relative percentage of mission-critical software has shrunk compared to the explosion of commercial software.

      Keep in mind language "popularity" is very industry-specific, so it's often a bit misleading to look at global rankings of language popularity. For example, in my own industry (videogames), C++ is completely dominant for game code, C# is very popular for tools, and Lua is popular as an embedded scripting language. If you look at Lua on it's own, it typically ranks pretty low compared to most languages, but there's no doubt it would be much higher if constrained to just my industry.

      --
      Irony: Agile development has too much intertia to be abandoned now.
    6. Re:ADA? by radarskiy · · Score: 2

      "But I know several people that work as programmers at banks, and none of them use COBOL or are aware of it being used at all."

      Probably they're only average programmers, so they are assigned to safe areas like user interfaces and web sites.. You don't need software engineering for *every* problem.

  13. Learning new mindsets by DarkDust · · Score: 4, Insightful

    Over the years, I've worked with about 20 different languages. I learned a lot of them purely out of interest. Even if you won't need it for any "serious" or paying work, it can be useful to learn a new language that is different from the languages you know. For example, if you know C# you won't learn that much by working with Java; they're too similar. By contrast, if you try learning a language like Haskell or Go instead you'll get introduced to new ways of thinking.

    In almost all languages, there are things you can do easily or "naturally" in it. These language (and framework) features usually influence how you would design a program in that language. And it's these concepts that are worth learning. For example, when I learned Ruby and later Haskell, I learned how powerful concepts like map/select or working with closures are.

    This knowledge then transferred to the languages I usually work with; my designs in my "traditional" languages changed because of the things I learned while working with other languages.

    So even if the new language is not "one the rise" it might pay off by indirectly improving your skills in the languages that you do get paid for.

  14. Sometimes by Necron69 · · Score: 2

    Several years ago, I fought tooth and nail over selecting the new test automation framework we were going to start using at work. I wanted a nice, modern, resume-building language like Python/Ruby/Java. What did they pick? - a legacy internal system written in Perl (and abandoned by the original author who had left the company).

    Over the last year, I've become a moderately skilled, OO Perl programmer, and it's worth six figures to me. Good enough. :)

    - Necron69

  15. It's always worth learning a new way of thinking by nickovs · · Score: 3, Insightful

    Even if you never make use of the new programming language it is almost always worth getting your head around a new way of thinking about problems. You may not ever need to write code in Lisp but understanding what a functional language is and isn't good for is helpful in other languages. If you're building flight control systems then Python might not be the language to do it in but getting deep into it and start understanding why you'd want a metaclass in the first place can help you stricture your code better. There aren't a ton of job openings for Erlang programmers but there are lots for people who understand High Availability and Disaster Recovery and the background knowledge will stand you in good stead.

    In short, yes, it's worth learning all the languages your brain can handle. Even if you forget the details the concepts will stick around and help you later.

    --
    If intelligent life is too complex to evolve on its own, who designed God?
  16. Re:Yes if you can afford the time by flargleblarg · · Score: 5, Insightful

    The simple answer is that once you learn how to code it doesn't matter what the language is.

    I couldn't disagree with this more. I don't mean to be flippant or argumentative; I simply want to say that my experience has been quite different. I think the langauge you write programs in is incredibly important. You want the right language for the task at hand. Just as an example, I often prototype new ideas for algorithms in Perl as a prelude to rewriting them in C. Perl (and I'm sure Python is as well) is great for a quick prototype and for proof-of-concept testing. But it's terrible for speed (compared to C/C++), and is also terrible at type-safety. When I rewrite something in C, it often runs 100 or 200 times faster than the Perl version. (Not for parsing and string-based stuff, but for integer numerical analysis stuff). But exploring the data structures and getting them worked out first is easier in a high-level language like Perl, with its dynamic arrays, hashes, autovivification, and so forth. Anyway, I rarely prototype something C, and I rarely write production code in Perl. For me, the choice of the language is one of the most important decisions I make on a daily basis.

  17. REXX RULZ! by ArhcAngel · · Score: 2

    You can't go wrong with REXX

    --
    "A person is smart. People are dumb, panicky dangerous animals and you know it." - K
    1. Re:REXX RULZ! by Wargames · · Score: 2

      Totally!

      --
      -- Each tock of the Planck clock is a new world and here we are still life. --
  18. Re:Yes if you can afford the time by Grishnakh · · Score: 4, Insightful

    One big factor, here, however, is how similar the language is to ones you already know.

    For instance, if you already are well-versed in C and C++, looking at some D or Rust code probably isn't going to be hard for you. However, looking at something in Haskell or Lisp is. A lot of languages these days are very C-like and either imperative or object-oriented (in an imperative way), so to me it's really rather trivial to learn them; it's just a matter of learning what's different. But if you start looking at languages which are really different from ones you know, then it becomes much more challenging. Looking at one with syntax unlike C will be one factor (like with Python), but looking at something entirely different like a functional language will be even harder.

  19. Nope by Greyfox · · Score: 2

    You get typecast. You could have 3 decades of C/C++ and mention that you studied APL for one semester in college and all the calls you'll get will be for APL jobs. I don't even list LISP on my resume, even though I became enlightened in LISP in the 90's. With LISP, enlightenment is a heady feeling where you suddenly see the elegance with which everything fits together, followed by the sinking realization that if you want to actually do anything with the language you'd have to write all the libraries yourself.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  20. Re:Yes if you can afford the time by JMJimmy · · Score: 4, Insightful

    The simple answer is that once you learn how to code it doesn't matter what the language is.

    I couldn't disagree with this more. I don't mean to be flippant or argumentative; I simply want to say that my experience has been quite different. I think the langauge you write programs in is incredibly important. You want the right language for the task at hand.

    I don't disagree with this at all. My point was that you don't need to go out and learn an entire language just because you think it might be useful to do. Once you know one or two languages it's not important that you know other languages, just that you know what situations other languages would be better suited for. When you run into one of those situations, it's just as easy to pick it up on the fly because you already have the core knowledge from the existing language(s) you've learned.

    I think of it this way... a decade ago my professor gave us a little anecdote about how, if you learned 10 new methods in Java every day for the rest of your life - you'd be dead before you learned everything that was in Java. Since you can't "know" a language because it's constantly being created/changed/etc the best thing to do is understand rather than know.

  21. Re:Yes by RabidReindeer · · Score: 2

    I think you meant "now Forth Learn".

    Precisely!

  22. Re:Yes if you can afford the time by jythie · · Score: 4, Insightful

    This becomes an even bigger deal if you are talking about jumping entire language families. Moving within things like C, Java, C++, Python, etc, most of the thought patterns associated with how you solve problems goes with you. Throw that same programmer into a FORTRAN, LISP, or eris forbid Prologue, and there will be a larger learning curve than just the syntax and limitations.

  23. Re:Yes if you can afford the time by phantomfive · · Score: 3, Insightful

    I don't think you understood the GPs point. He is talking about choosing a language to learn, not choosing a language for a particular task. Certainly, the language you choose for a task is important.

    The reality is (and the GPs point) learning a new language shouldn't take you very much time. If you have to ask whether a language is worth learning, the answer is 'YES' because at that point you need more experience learning languages.

    --
    "First they came for the slanderers and i said nothing."
  24. Re:Yes if you can afford the time by jythie · · Score: 2, Insightful

    Though keeping with that analogy, cars might all be pretty much the same, but hand someone a motorcycle or a big rig and the learning curve makes it so knowing the rules of the road is barely even a start. And people handed a boat are really confused.

  25. Re:Yes if you can afford the time by JMJimmy · · Score: 2

    Certain languages will definitely take a little more time. Lisp is a great example - I've never had the need to use it so I just looked up some code for the first time... it is different but even with the differences I could see the basics at play. I could understand where a conditional started and ended, how certain loops worked, etc. and that's with a quick glance of a random piece of code from google images. Give me a proper doc and an hour I'd be good to go.

  26. Re:Yes if you can afford the time by master_kaos · · Score: 3, Insightful

    Actually, this is a good analogy. You can get from Texas to New York using an F150 or using a Yaris. But what is the purpose? Are you lugging your spouse and 3 kids for a vacation? Then maybe go for an SUV or minivan that provides comfort. Are you transporting some goods? Maybe a truck with a tailer. Is cost a concern? Maybe fuel efficient vehicle. Are you a hipster? Maybe a Tesla.
    But even with these different requirements, you still have choices.

  27. Is Java really a programming language? by IWantMoreSpamPlease · · Score: 3, Insightful

    Or is it a punishment?

    --
    So rise up, all ye lost ones, as one, we'll claw the clouds.
  28. Re:Yes if you can afford the time by mr_mischief · · Score: 2, Interesting

    I agree, but I'd like to expand a bit.

    It's not important to know a bunch of languages deeply. I think it's important to learn two or three languages fairly deeply and a few more at a shallower level.

    One doesn't really know the right tool for the job until there's some experience with multiple tools. The more different the other languages are from you main language, the better one can judge the best tool. There are lots of different types of languages, and knowing a few types, their advantages, and their disadvantages can be really helpful.

    An Algol family language, particularly from the Modula/Pascal/Ada/Object Pascal family or the C/C++/ObjectiveC/Java/D family, is a good choice for getting practical work done. Perl, Python, Ruby, JavaScript, Rust, Go, Lua, Erlang, or something else fairly popular and a little more separated from those other Algol-derived languages but not terribly so is not a bad second choice. It's good to be familiar with something from the functional camp: Lisp/Scheme/Arc/NewLisp or ML/SML of NJ/CAML/OCAML or maybe Haskell. Stack-based languages like Forth or Factor can be handy to learn, or something else in postfix like Postscript. Something actor-based or dataflow-based can open some lines of thought. Assembly isn't used directly much anymore, but nobody ever became a worse programmer from understanding it.