Okay, I am proficient in Python, Ruby (I would rather have Python than... that...), and I know some C and C++.Thing is, I have been told that everyone's first programming language should be Lisp. Okay, I know Python, but that is not my idea of a professional programming language (please, no flaming or commenting on that, it is just my opinion on Python). I have a few books with which I could start learning (Common) Lisp. I have experimented with it, and I must say I really love it. But, as you know, there are not many people who actively use it.

1) Should I really learn Lisp? Or should I get on with C?2) Will it be useful to me in a pragmatic way? (Will I be able to make use of it professionally too?)3) Is the learning curve SO steep? (Assuming I SHOULD learn Lisp)

I know this probably looks like a newbie post, or perhaps like a troll's. I AM a newbie when it comes to Lisp. And I can honestly say that I want the Lispers' opinion; some advice.

Dan6688 wrote:1) Should I really learn Lisp? Or should I get on with C?

Well, what answers do you really expect on a LispForum? But really, it depends what you want from a programming language. Common Lisp is a great, but if you care more about some C-specific functionality (like low-level interaction with the OS), then stick with C.

Dan6688 wrote:2) Will it be useful to me in a pragmatic way? (Will I be able to make use of it professionally too?)

That, once more, depends what you are doing professionally. There are some people who are paid for writing Lisp, it can also be probably used if your workplace has flexibility. And I hear it is great at creating startups! But then, I am not a programmer, so what do I know...

Dan6688 wrote:3) Is the learning curve SO steep? (Assuming I SHOULD learn Lisp)

In my experience there was nearly no learning curve, whatever that means exactly. But then, I was always annoyed by syntax, so when learning Lisp after playing with C++, I mainly basked in the glory of parentheses. Lisp is pretty simple when you get used to a programming language that mostly makes sense... of course, as they say, Your Mileage May Vary.

Mostly I would like feedback from people who have used it professionally, or know a lot about it.And C is useful for low-levelness, but programming languages affect the way you approach programming, so I would just like to get opinions about which is more useful in a pragmatic way. Not only in an intellectual way (I will end up learning Lisp eventually). I will of course not limit myself to very few languages; I just do not know whether Lisp should be my first complex language.

My two cents:Since you mentioned using c instead of lisp, i would just like to mention two things.First, as you might know, most (if not all) lisp implementations have a foreign-function interface that allows one to call c functions. So, this is why one can access opengl from your applications (in this case, using the cl-opengl package) and other c packages. Second, I thought it was pretty neat that you could write some in-line c code (again, using a pre-made library).see http://homepages.nyu.edu/~ys453/Unfortunately, this implementation isn't portable at all, mostly because it uses uffi (universal foreign-function interface) which supports less implementations then cffi (common foreign function interface). Cffi allowsa fixed format for accessing foreign c functions across a lot of implementations, since each lisp implementation (sbcl, clisp, etc.) defines different functions to access foreign c functions.Anyways, saying that, it shouldn't be tooo hard to convert inline-c to use cffi, though admittedly i haven't looked at itclosely.

We're all biased here, but I think it'd be worth learning. It's been said (by Eric Raymond) that the experience of having grokked lisp will make you a better programmer. I rarely work in other languages, but when I do I'm certainly much less prone to using global variables, and much better at decomposing programmes into decoupled function-calls.

Personally, I've been climbing up a steep (but very worthwhile) learning curve, but then I have no formal programming background. Much of what I'm learning is stuff that I'd presumably have been exposed to if I had a CS degree.

Lisp is just... different. Python, C and Java are just branches derived from Algol, so they share an awful lot of mindset. Lisp is pretty much the "other root." Personally, it fits the way I think: you can abstract things just as far as you need to, and the language allows you to find the most concise way of expressing an idea (positively encourages it, in fact). There's no arbitrary syntax to learn, no complicated precedence rules to confuse you when you should really be thinking about the problem at hand.

The downside is that other languages become painful. I work in a Java house, and I'm regularly astonished with just how unnecessarily complicated it makes things.

Dan6688 wrote:1) Should I really learn Lisp? Or should I get on with C?

Short answer: Learn Lisp.Long answer: Depends on what you want to do. Lisp is a better tool for writing most programs than C, but C has its niche.

Dan6688 wrote:2) Will it be useful to me in a pragmatic way? (Will I be able to make use of it professionally too?)

It will be useful if you use it, by which I mean that even though people prate on about how learning Lisp will make you a better programmer (probably true), it's primarily worth learning in order to do stuff with it. If you're wondering whether you can use it to write a given program effectively, the answer is yes.

You can use it professionally if you are either very lucky, very entrepreneurial, or very willing to go where a job is. The odds of a Lisp job sitting down in your lap are low. Or at least that's the impression I get.

Dan6688 wrote:3) Is the learning curve SO steep? (Assuming I SHOULD learn Lisp)

No, not at all. The learning curve is shallow. It's just really, really tall. You can be productive in CL quickly, but it's so flexible that there are always new things to learn. A side effect of using such a flexible language is that you can just keep on writing the sort of code you wrote in your previous favorite language, meaning you don't need to learn a new way of thinking just to write working programs, even though there are more effective styles that you could adopt. Setting up your environment can be a hurdle though, or at least it was for me. It's not hard with guidance though.

But really, what do you think you're doing asking a Lisp forum about this? Do you expect us to say anything other than that Lisp is a delightful language which you should learn right away? :)

Most of what I would have answered has already been said -- so I have just two things to add:

1) One of the best uses I've had for Lisp was as a prototype tool. I haven't written anything big in Lisp (I'm working on my first seriously useful Lisp project now), but almost every program that I've worked on for the last three or four years has seen parts of the more complicated algorithm implementation or techniques of it written in Lisp first. It's a very expressive programming language, and it makes it a lot easier to reason about the problem in front of you. Plus, unlike pseudocode, you can actually see it running.

2) The usefullness of working with Lisp, even non-professionally doesn't come from a magical "enlightenment", but from the fact that it seriously broadens your view of problem solving. I'm not sure where I've heard this -- but I did find it to be true: we all speak English just as well as Shakespear did; it's not his knowledge of English that gave him his genius -- it's his knowledge of idioms. Since Lisp isn't hindered by a lot of limitations inherent in other programs (arising from syntax problems, architecture, lack of metaprogramming capabilities and so on), Lisp does give you slightly more freedom in approaching your tasks.

I'll just add that anything that you can do with Python, you can also do with Lisp. Whether you think you can do it "better" will ultimately come down to a personal preference. I like some things about Python, too, though I'm not proficient in it. (And Ruby, and...) The fact is, just learning Lisp will probably make some parts of Python make more sense to you, even if you don't get hooked by the macros, code-is-data, etc.

Another consideration for using a language is whether anybody else will have to read your programs and maintain them. While that shouldn't stop you from learning Lisp, there are practical considerations that you'll have to deal with if you're a working programmer and you are part of a larger team that is all proficient at using something else.

Harnon: I have heard about that feature, but I do not really think I will be needing it soon. And learning Lisp is really multitasking and learning lots of different things at the same time, together with a lot of wiki* visiting, so the time will come when I get to the point where I am ready to learn how to do that.

JamesF: Indeed, I am also a self-taught programmer and that is why I am a bit lost on what to learn first, as what one learns first will have an influence on you forever (well, that is my opinion). I find Lisp attractive, beautiful, logical, free (as in, I have more freedom), and also complex.

PaulDonnelly: I think perhaps I am asking on a Lisp forum because I want to be reassured =P

findinglisp: Indeed, and I have read your blog often =) I learned Python because I wanted to find a simple language that would allow me to understand and learn other languages. I learned Python very quickly, but I did not find it to be the right tool for the sort of things I want to do, so I dabbled a bit with C++. Then I came across Lisp.

I will learn Lisp. What annoys me most is the fact that there are so many implementations and they all have many differences, but I will just find my way around it. It makes one antisocial, but it works. Lisp: just works =)I think Lisp is what I will learn and that C will be what I will pursue when I am more proficient with Lisp. I think I like C more than C++.

Dan6688 wrote:I will learn Lisp. What annoys me most is the fact that there are so many implementations and they all have many differences, but I will just find my way around it. It makes one antisocial, but it works. Lisp: just works =)I think Lisp is what I will learn and that C will be what I will pursue when I am more proficient with Lisp. I think I like C more than C++.

For things staying inside the standard the main differences between implementations will/should be only surface deep.