Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

What languages to learn?

by kevin_i_orourke (Friar)
on Jun 19, 2001 at 20:36 UTC ( [id://89699]=perlmeditation: print w/replies, xml ) Need Help??

After the sucess of my last meditation I feel encouraged to try another one...

Lots of people have encouraged me to learn some more programming languages as a way of improving my skills. I'm looking for some suggestions of languages to learn.

I've downloaded Squeak (Smalltalk) and will have a play with it when I get the chance. What other languages would be worth trying?

I've already had a go with Visual Basic, Pascal, Tcl, Delphi (a teeny bit), FORTRAN (ick!), Logo and COMAL (anyone remember that?).

Update:I should have known, there are still people using COMAL. I remember it from computing at school where I discovered that if you input BBC BASIC the COMAL interpreter could usually convert it into correct COMAL.

--
Kevin O'Rourke

Replies are listed 'Best First'.
Re: What languages to learn?
by bikeNomad (Priest) on Jun 19, 2001 at 21:28 UTC
    Squeak/Smalltalk is a good choice for getting a feel for OO programming and design. The class library, while huge, has some interesting gems in it.

    You would do well to pick up different kinds of languages so you can learn their important ideas. Broadly speaking, most of the "common" languages out there hail from the Algol or Simula camps (C, Pascal, Modula 3, Ada, C++, Smalltalk, Perl, C++, Java, ...).

    There's also the Lisp family (I'd probably look at Scheme or Common Lisp (which includes CLOS, with its nice support for OO)).

    And then there's the functional languages (Prolog, ML, Haskell) that will provide a totally different way of looking at things.

    You might also look at assembly language for a couple of processors (do something with a little microcontroller for kicks), and at Postscript, which is interesting from a language point of view (kind of like FORTH with some data types). And maybe APL or J for another completely different view of languages.

    This chart diagrams the history of computer languages and has some links to other such charts.

    update: clarified CLOS

      I like the assembly suggestion, but it's a bit too much like work. At the moment I'm writing code for a Texas Instruments VLIW DSP. Most of it's in C but you have to be able to understand the assembly when the compiler screws up (as it often does). VLIW assembly code is a bit of a brain-melting experience.

      On the other hand I can highly recommend microcontroller assembly as a fun way of learning about the opposite of high-level languages. PICs, with their 30-odd instructions, are the ones I've played with.

      Lisp scares me, which probably makes it a good choice to learn next. I might even eventually be able to configure emacs!

      --
      Kevin O'Rourke
      

      ...Common Lisp (and CLOS (its object extensions))

      Just nitpicking, but it's a little bit misleading to refer to CLOS as an "extension" to CL; after all, it's part of the standard (and one of the primary reasons that people use CL, too).

Re: What languages to learn?
by dragonchild (Archbishop) on Jun 19, 2001 at 21:03 UTC
    While people are right and learning more languages will broaden your horizons in terms of learning what features a given language may emphasize over another ...

    *sighs*

    A given language's syntax is, well, just that - syntax. I learned how to program in Pascal. I have never written a line of Pascal since I finished CS210 at the end of my freshman year in college. In fact, I can count on one hand I've seen Pascal code since then, and that was 7 years ago.

    However, I learned proper programming style, and that was much more important. Since then, I've learned 3 languages to competency on my own, each in less than a month, and have been able to edit in at least 2 others. I'm not trying to boast here (especially cause that's really not that impressive - too many other monks would beat me out without trying! *grins*) The conclusion I've come to is that a given language is just syntax - it's a toolbox. Nothing more. What's important is that you use a screwdriver as a screwdriver and not an awl. (Though, in a pinch ...)

    If I were you, worried about your skill level (for whatever reason), I'd start working on crazy problems. Do a bunch of obfuscations or play GOLF. Take a project you've worked on and bloat with with a ton of feature creep. Or, get out of the procedural languages and go learn a functional one. LISP is touted by a number of monks. Or, go do some sysadmin work. I built a Linux box this weekend, in large part so I could expand not my coding skills, but my understanding of how programs are used. What makes a device driver? What makes a kernel? Why was it built that way? I can then use what I discover there to aid other programs I write.

    <disclaimer>Now, while I feel that Pascal is a wonderful teaching language, seeing as it was designed as such, I'm not saying that only people who learned to program in Pascal are good programmers, nor am I saying that learning in Pascal will make you a good programmer.</disclaimer>

Re: What languages to learn?
by bluto (Curate) on Jun 19, 2001 at 20:58 UTC
    If you want to broaden your view quite a bit, and have the time, you can learn strange (but useful) things that many current languages skimp on from some of these...

    Lisp        You can learn this over time.  Just grab 
                a copy of emacs and hack your own commands
                as you need them.  Plenty of code comes with
                it.
    
    Snobol/     The Perl of the 60s, as far as pattern
    Spitbol     matching goes.  My grad advisor, Ralph
                Griswold came up with this.  I seem to
                remember Spitbol had a construct of
                "compiling" code at runtime similar to
                Perl's "eval".
    
    Icon        Another Griswold invention of the late 70s
                early 80s.  Check out generators (similar
                to closures).  It had backtracking, but 
                not just when matching patterns.
    
Re: What languages to learn?
by mirod (Canon) on Jun 19, 2001 at 20:54 UTC

    The usual suspects include Python, Ruby and java.

    If you want to learn languages with a different feel than than Perl you can try Lisp or Prolog, XSLT could be interesting too.

Re: What languages to learn?
by Sherlock (Deacon) on Jun 19, 2001 at 21:03 UTC
    Frankly, I think one of the best languages you can learn would be C++. It's a very powerful language and it gives the programmer a lot of power to do all sorts of good (and bad) things. Unlike scripting languages, you'll need a compiler to get started. One word of warning if you decide to delve into C++, it's a complicated language and it is not horribly easy to learn. However, I think that if you can get a really good feel for a language like C++, you can very easily pick up other languages, such as Java. A lot of programming languages today seem to have some sort of background coming from C or Pascal. If you can learn a little bit of C++, I think you'll find that learning other programming languages will be easy.

    I'm not trying to say that C++ is always the most useful language in the world (especially in the world of web) but, from an understandability point of view, if you can understand C++ well, I think you're well on your way to understanding a lot of other programming languages.



    Skepticism is the source of knowledge as much as knowledge is the source of skepticism.
Re: What languages to learn?
by John M. Dlugosz (Monsignor) on Jun 19, 2001 at 23:02 UTC
    Someone already mentioned Prolog, and I agree it's good to "learn" totally different ways of doing things, even if you never use that language to write real products.

    Taking that to more of an extreme, check out Intercal, a language whose whole charter is to do things differently than any other language. It was supposed to be a joke, but why do the concepts seem to be less than funny today? The way conditional execution is performed by turning off specific lines, rather than jumping over them, sounds a lot like Intel's new 64-bit chip. The way you can disable specific commands sounds a lot like "sandbox" security environments as seen both in Perl and Java. It goes on and on.

    Read it and get a good laugh. But read deeper and see that the way we do things is really a very narrow, even provincial, viewpoint.

    —John

Re: What languages to learn?
by clemburg (Curate) on Jun 20, 2001 at 12:43 UTC
Re: What languages to learn?
by dimmesdale (Friar) on Jun 19, 2001 at 21:44 UTC
    Here's my input.

    C/C++: Either one, really. C++ is powerful, and its ability to make ADTs is useful; coming from perl, it should be relatively simple to learn the basics--though beyond that you're on your own(or so I figure; the other way around, C/C++ -> perl wasn't too difficult).

    Assembly: Not only can this be used in C/C++ directly, via _asm(or __asm), i.e., the inline assembler, but it offers a *great* glimpse at the inner workings of the computer--not to mention that it is FAST. Even if you don't plan to program in assembly, learning it can help you write better code(boolean algebra, etc., check this site out for basics: http://webster.cs.ucr.edu/Page_asm/ ArtofAssembly/ArtofAsm.html

Re: What languages to learn?
by Torgo (Beadle) on Jun 19, 2001 at 23:24 UTC
    Believe it or not, JavaScript may be a good language to learn at this point. Despite its common bastardized usage and rather tarnished image, it is a useful client-side companion to Perl CGIs. It's also a good thing to learn now, since Perl 6's object structure is going to look very, VERY similar to JavaScript's.
    --
    I write the code while the master is away!
Re: What languages to learn?
by LD2 (Curate) on Jun 19, 2001 at 21:02 UTC
    Why not try your hand at Ruby? I haven't had a chance to really play with it yet... but from what I've seen of it, it looks interesting. Also, I think Java and JSP would be fun to play with.. but that could be just me.
Re: What languages to learn?
by frag (Hermit) on Jun 19, 2001 at 23:44 UTC
Re: What languages to learn?
by busunsl (Vicar) on Jun 19, 2001 at 20:42 UTC
    RPG, but you need an IBM AS/400 for that. :-)

    It is rather good for commercial stuff and has database access built in.

Re: What languages to learn?
by scott (Chaplain) on Jun 20, 2001 at 06:29 UTC

    I'm currently studying a range of different types of languages:

    1. LISP (bigloo)
    2. Ada (gnat - available on Linux and, I think, Win32)
      IMHO, a C/C++ equivalent both in terms of what it can do and in how much you have to know to use it well. But, IMNSHO, much better than C/C++ because of its international standardization and strong type checking, among other things.
    3. Ocaml
      A derivative of ML (which someone else mentioned).
    4. Mathematica

Re: What languages to learn?
by wendigo (Initiate) on Jun 20, 2001 at 01:55 UTC
    Another nifty language to learn is ML. It's a well-designed functional language that will help you to understand why having functions as first-class objects is so useful. I would recommend the SML implementation and book "ML for the Working Programmer".

      It also provides a nice contrast to Perl since it is statically and strongly typed.

Re: What languages to learn?
by Anonymous Monk on Jun 20, 2001 at 18:55 UTC
    I agree with the Javascipt suggestion. Not only will it be great help for the CGI stuff, but it'll teach you OO as well. If you persevere long enough to write cross-browser compatible stuff, you'll have used just about every trick in the book (it'll do your brains in :), which will help with everything you do afterwards.
      Go buy a spectrum and do some Z80 assembly.
Re: What languages to learn?
by sean (Beadle) on Jun 20, 2001 at 06:09 UTC
    This article is pretty good lisp propaganda. It's convinced me to at least check it out and see what i'm missing out on.

    --sean
Re: What languages to learn?
by sierrathedog04 (Hermit) on Jun 22, 2001 at 04:39 UTC
    Here in the Washington, DC area some people are talking about Java as if it were going to replace Perl someday. I doubt it, but I think for now a person equally skilled in Java and Perl would get more Java job offers.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlmeditation [id://89699]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2024-04-18 00:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found