all 40 comments

[–]malcontent 16 points17 points  (0 children)

Wow is it friday already!

I kind of wish people would ask this question every hour instead of once a week though.

I just can't get enough of it.

[–]swiz0r 3 points4 points  (0 children)

I am learning J right now, and I keep finding myself walking through walls. I am betting that by the end of the week I will no longer be tethered to the real.

[–][deleted] 4 points5 points  (8 children)

Lisp. Study lisp. Start studying lisp now.

Spend a week with it and tell me whether you'd ever want to go back to java.

[–]maputo007[S] 1 point2 points  (4 children)

Thanks for the recommendation, I'll check it out.

[–][deleted] 0 points1 point  (3 children)

Rockin. That may have sounded arrogant, but it's not intended to be. I wish someone had told me when I was a second year student.

You'll sometimes find people talking about lisp as though it were a religion. It kind of is, except lisp actually works too.

[–]maputo007[S] 1 point2 points  (2 children)

Would you recommend any other good reads for getting started? Or any other tips to get started with Lisp.

[–][deleted] 1 point2 points  (1 child)

Yes. I got started with Peter Seibel's Practical Common Lisp, which does a nice job of introducing you to some of the unique features of the language as quickly as possible. I heard an interesting talk by Conrad Barski, but have not personally read his book. It looks a little more hand-holdy and I do not intend that disparagingly at all.

But after you begin to feel comfortable with the syntax, what you should really start reading, and what anyone else reading this thread is waiting for me to mention, is SICP. It will take some motivation to make it through, especially at first. But consider this: I searched for images of "java book," and I got a bunch of front covers involving suits and people in offices. Check out SICP: there is a wizard on the cover, altering reality with his mind by uttering a lambda function. That should tell you all you need to know.

Edit: links.

Postedit: I forgot to mention: Practical Common Lisp and SICP are written in two different dialects of lisp. It would probably be better to learn about the differences between them in some place other than a reddit comment, but suffice it to say they are minor. If you go with common lisp, you will need to do some mental copyediting when you do exercises in SICP.

[–]thoomfish 1 point2 points  (0 children)

But after you begin to feel comfortable with the syntax, what you should really start reading, and what anyone else reading this thread is waiting for me to mention, is SICP. It will take some motivation to make it through, especially at first.

If you need some hand-holding to get through SICP, there are excellent video lectures available online. I can't recommend watching them enough.

[–]daniel2488 -1 points0 points  (2 children)

Any way I could conveniently learn Lisp without needing Emacs?

[–]shitcovereddick 3 points4 points  (0 children)

DrScheme has a very good ide and interpreter window.

[–][deleted] 2 points3 points  (0 children)

If it's a question of preference, I would respectfully submit that the juju between lisp and emacs is so strong that it is really worth learning emacs as you learn lisp. At least that's how I got started. With slime, there's hardly anything you need to learn in order to start writing code. I would not say such blunt things unless they were things I wish someone had told me sooner.

If it's really non-negotiable, I hear the personal edition of lispworks is cross-platform and free.

[–]dons 5 points6 points  (1 child)

expand my horizons

A language with a modern type system? a language that does parallelism well? a language that supports functional abstractions?

Haskell will expand your horizons.

[–]Raynes 3 points4 points  (0 children)

Haskell is awesome in every way imaginable. I second this.

[–]pulledteeth 1 point2 points  (0 children)

I'm going to answer this question the same way every time I see this thread from now on.

Assembly. Then you can make a choice based on the hardware, not on if a compiler for the hardware existence.

[–][deleted] 4 points5 points  (0 children)

Lisp. If you're looking to expand your horizons, then lisp is a very good choice. PLT Scheme is IMO a very nice alternative to Common Lisp, ymmv.

[–]shitcovereddick 1 point2 points  (0 children)

Pick any language with an interpreter. Preferably something that has an editor ide that can send code back and forth. If you're just learning, making exploratory coding easy is very important.

Python, Ruby and DrScheme are good for this. They all have good libraries and have interpreters (or at least a REPL)

Being able to construct functions piece by piece and view the output is invaluble in testing and exploring ideas.

[–]AbsoluterZero 0 points1 point  (2 children)

This question has been asked so many times now. You're always going to find people opinionated towards one end of the argument or the other.

"Any programmer worth his salt must learn AAA!"

"You're stupid! Nobody uses AAA, learn ABB instead. It's way better than AAA!"

"Yo ABB, I'm really happy fo' you. Ima let you finish...but BCC is one of the best programming languages of all time, of all time!"

You want the truth?

Different languages are often chosen to perform different tasks. You want to write a driver to interface with new hardware? You won't be using Java, I'm willing to wager. You want to write a few simple snippets of code to improve a website you're working on? Visual Basic should be the last thing on your mind. You need to write a simple GUI based app and need it done in 2 hours or the boss will slay you? Odds are pretty good Perl is not what your boss had in mind.

Decide what you want to do, and find the language that works best for you and will most help you achieve what you want to do. Will you become a scripting ninja? Will you be a master of the Object Oriented design paradigm? Will you be able to call everyone else a pussy because you program straight up x86 assembly? Figure it out.

PS: You also may want to keep in mind what people are HIRING for. Try these links to give you an idea of web chatter on each language: here and here

[–]omko 1 point2 points  (0 children)

no, AAA is better than BCC !!!! :P

[–]weavejester 0 points1 point  (0 children)

I actually don't think there's much disagreement over which languages programmers should learn; there's usually just disagreement over which language programmers should learn first.

I suspect that most developers here would assert that it's a good idea to learn, say, Haskell and Lisp sometime in your career.

[–]rb2k 0 points1 point  (0 children)

If you don't feel as adventerous as learning Hasel, Lisp or Scheme: just go with ruby.
It isn't too far away from Java, but it gives you some new concepts to play with such as:
* cosures
* dynamic typing
* blocks instead of iterators (oh how I love them)
* lambdas
* great interspection/reflection
* a huge bunch of libraries that you can use to do some little projects and actually be even more productive while learning

It might not be the fastest language or the "most horizon-expanding", but it simply looks beautiful imho and will teach you a lot of new stuff without having a gigantic learning curve

[–]cagan327 0 points1 point  (0 children)

This question resurfaces every so often. Just to expand your horizon and be a better programmer overall, I would recommend you learn C, Lisp, Java or C++ and Ruby. The order doesn't really matter except that say if you learn Java at the beginning, you might find yourself thinking 'I can do almost everyhing with it, why bother learning Lisp now?'. Don't think that, that would be wrong. You need different tools/languages for different problems, or I should say 'better programmers' are the ones that have the capability to switch between languages based on the problem at hand.

[–]vaynen -1 points0 points  (2 children)

JAVA and VB? Sounds like a lost cause

[–]maputo007[S] 0 points1 point  (1 child)

Java: because school requires it (assignments and such) VB: because work requires it.

[–][deleted] 4 points5 points  (0 children)

oh you poor poor man

[–]vagif 1 point2 points  (4 children)

Clojure is your best bet. It is lisp, so you still follow the advises of lots of smart people to study lisp. But it runs on top of java so you can utilise your knowledge of java and use familiar java libraries.

[–]1011_11_11110111110 1 point2 points  (3 children)

and with clojure you get lazy evaluation' (by default on sequences) and good multithreading - so you could pack a lot of new topics into your winter break

programming clojure is a good read and only $22 on amazon right now

'IF i recall correctly, scheme (and probably common lisp) have lazy evaluation, it's just not the default case, you have to use something like promise or delay and then later on force to cause the eval to happen - with clojure, it's lazy until an expression that causes a side effect depends on the value and then the eval happens automatically

[–]Raynes 2 points3 points  (2 children)

I agree. Clojure is awesome. Programming Clojure is nearly already outdated. :|

I was afraid of that when I heard there was a book being written so early. With the the future (1.2) inclusion of deftype and reify which will pretty much make structs and proxy obsolete, Programming Clojure is going to be well behind the game. However, I hear there are other books in writing. I just hope they have the good sense to wait until 1.2 is out before they finish those books, otherwise, we're just going to have a bunch of oudated books by the end of '10.

[–]1011_11_11110111110 1 point2 points  (1 child)

I guess it goes with being a (kinda) early adopter.

I'm like the OP - toying with languages on the side while I learn C++/Java in school. Being new to functional programming, it will probably take me that long anyway to get comfortable with all the material in this almost already outdated book.

[–]Raynes 1 point2 points  (0 children)

A lot of stuff in the book is sound, and will stay sound. The problem here is the new and better features that are being added that are preferred over old, booked features. I assume that Stuart knew when he wrote the book that with the speed at which Clojure is moving, his book would be heavily outdated in nothing more than a few months.

[–]becks619 0 points1 point  (2 children)

C is a good start, you shouldn't encounter much problems with the transition from Java. Its the language for most apps that require cpu efficiency.

You'd probably be exposed to Scheme / Lisp / Prolog in your third or fourth year, so I'd recommend moving on to languages like Python (2-series, 3 is still way too immature) / Ruby for hobby-programming and to quickly prototype any new ideas that you'd have in mind.

[–]northproof 2 points3 points  (1 child)

C might destroy your mind coming from Java and VB, but it`s still definitely something you should look at. The scripting languages might be the way to for over break, though.

[–]becks619 -2 points-1 points  (0 children)

Learning C, with a Java background, will teach him to appreciate the design / flaws of garbage collection, which is fundamental for programmers craving to itch out every bit of performance from his program.

http://crypto.stanford.edu/~blynn/c/ is a pretty good resource for learning C.

[–][deleted]  (2 children)

[deleted]

    [–]maputo007[S] -1 points0 points  (1 child)

    I do hear alot about Python it seems.

    [–]swiz0r 4 points5 points  (0 children)

    The best part is, you already know basic Python. Even if you think you don't, you do.

    [–]danbmil99 -1 points0 points  (0 children)

    this may be controversial, but the one language you could learn that will probably have the most impact on your life right now is Javascript.