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

11 of 759 comments (clear)

  1. 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
  2. Re:Wrong Question by abigor · · Score: 4, Interesting

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

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

  4. Best Language to Learn Multithreaded Programming? by Avenel · · Score: 3, Interesting

    This seems to be the future. Are there any languages that are more efficient for multithreaded programing?

  5. Re:SQL is next for me by skrolle2 · · Score: 3, Interesting

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

  6. Screw them all. by God+of+Lemmings · · Score: 4, Interesting

    Write your own language... it's certainly more educational.

    --
    Non sequitur: Your facts are uncoordinated.
  7. Don't Forget Piet by eldavojohn · · Score: 3, Interesting

    Don't forget Piet. That's produced some of the most beautiful code I've ever seen. It also handles abstraction in a novel way.

    --
    My work here is dung.
  8. Re:Verilog by twistedsymphony · · Score: 4, Interesting

    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

  9. Re:Verilog by SanityInAnarchy · · Score: 4, Interesting

    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.

    --
    Don't thank God, thank a doctor!
  10. Re:It's not all syntax by grammar+fascist · · Score: 4, Interesting

    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.

    --
    I got my Linux laptop at System76.
  11. Re:Specialization Versus Breadth by Z-MaxX · · Score: 4, Interesting

    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!

    --
    Dr Superlove 300ml. I use my powers for awesome