views:

300

answers:

12

I have little (<1 year professional) experience with

  • Perl
  • Groovy/Java

I have limited (<2 year professional)

  • C

I have decent experience (>= 6 years professional) with

  • PHP
  • SQL

I have hobby experience with

  • C++/DX9 (some simple windows games/demos)
  • Obj-C (a few iphone app's)
  • ASM (http://www.amazon.com/Assembly-Language-Intel-Based-Computers-5th/dp/0132383101/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1263401280&amp;sr=8-1) - I stopped when it got too windows specific.

So my question is what language can I next approach (on my free time) to give me some new insight to programming and problem solving in general - I was looking at maybe LISP - something which would be very foreign to me. I want to tackle something very, very different from the languages listed above.

EDIT: I think I'll investigate Haskell - thanks for the feedback! and maybe possibly Erlang, and I really liked Adrian Kosmaczewski's idea about a Mac App for snow leopard.

+6  A: 

Haskell, followed shortly by Python.

Ignacio Vazquez-Abrams
Great - I'm familiar with Python, but not Haskell. Care to elaborate on why you selected those two languages?
Mr-sk
Haskell, for functional programming, which is quite different from imperative programming. It forces us to think differently, which sometimes is not easy to do.
omermuhammed
Python because it feels just natural and Haskell because it's a functional language.However, I'd start with Haskell and learn Python after that.
tstenner
Haskell is an up-and-comer rooted in mathematical theory, whereas LISP seems to be... I know I'm going to get flamed for this... mostly relegated to AI and emacs these days.Python is a very well-engineered language that can frequently reveal you the correct way to implement something, as opposed to having to pick from half a dozen or so equally bad forms.
Ignacio Vazquez-Abrams
Ok - seems like there's a strong vote for Haskell. I'll consider that.
Mr-sk
Mr-sk
You can read it freely here: http://book.realworldhaskell.org/read/. Yes, it's great.
Bastien Léonard
heh, awesome, thanks.
Mr-sk
A: 

Ruby. Ruby is great, and from there you can learn about Rails, which is an amazing framework.

marcgg
Yeah, while I think Rails is a very cool framework (I've dabbled in it), I'd actually prefer to stay away from web-centric tools/frameworks. However, I will consider ruby, thanks.
Mr-sk
A: 

Prolog, to learn logical programming. That will probably teach you a lot, but I mean it as a hobby, since I personally do not know any non-educational applications.

Haskell, or Erlang, for functional programming.

YuppieNetworking
+1  A: 

try a functional programming language

  • F#
  • Lisp
  • Haskell
Yin Zhu
Probably will pick Haskell, thanks.
Mr-sk
A: 

Clojure. You won't regret it

bugspy.net
+1  A: 

Two very different programming languages you could try are Haskell and Prolog.

Haskell is a pure functional language, where you have functions that take other functions as arguments and modifies them. It freshes up your mind ;-)

Prolog is a logical language, where you specify a set of conditions that should be true and then prolog can find legal solutions. The language have been used for research in artificial intelligence.

midtiby
Very cool - prolog seems interesting as well. I've dabbled in A* and AI techniques...
Mr-sk
+2  A: 

I also vote for functional languages:

  • Erlang is interesting because it's a growing language, explicitly targeting to parallel programming;
  • LINQ, which uses functional programming concepts to extend .NET languages into doing some really cool things;
  • JavaScript - it's fun it's not in your list, but it's the worrrrrrrld's most misunderstood language as Crockford would say, but it's also the worrrrrrld's most deployed functional language ever.
  • Since you know ObjC already, try creating a Mac app for Snow Leopard using blocks and Grand Central Dispatch... that might also stretch your mind a bit :)

Given that the free lunch is over, jumping into this paradigm is a good investment, IMHO.

Hope this helps!

Adrian Kosmaczewski
Hey, thanks for the comments. I really liked your idea, "Since you know ObjC already, try creating a Mac app for Snow Leopard using blocks and Grand Central Dispatch... that might also stretch your mind a bit :)"
Mr-sk
Also, I think you are the only one to mention Erlang, but your reasons are solid. I might dig into that a bit as well.
Mr-sk
Glad to be helpful :)
Adrian Kosmaczewski
+1  A: 

Javascript and python.

Javascript is the most misunderstood language in the world. But don't take Crockford advice. Embrace it with its defects. Don't work around them. Just be aware of them. For example, dont' go closure for the object creation. embrace prototype-based inheritance. It's cool.

Stefano Borini
Ah, I forgot to add JS to my list - been doing it professionally about 2-3 years - don't really touch it anymore these days though.
Mr-sk
A: 

Based on your CV, I would recommend tackling Python as it will give you a good opportunity to work on some CS fundamentals like OOP and functional programming. Python is a good general purpose language to have in your toolbox that is mature, can be used for a wide variety of applications (web, utilities, scripts, servers, etc) and is pretty easy to learn and become productive with in a short time.

Lance Weber
A: 

Is this for academic or professional development? If the latter, look at the areas you would like to work in, and see what languages they are asking for. They will most probably be mainstream such as C++, C# or Ada for example (depending on the domain), but if this is for academic interest some of the more esoteric languages might be of interest Eiffel, Forth, Smalltalk and all those mentioned by others.

For professional development, you may be becoming a jack-of-all-trades, master-of-none, and I suggest that you might think more vertically and consider studying design and modelling languages such as the UML, and associated analysis/design methodologies and patterns. These skills are portable across languages, and choice of language should always take second place to a good specification and design.

Clifford
"For professional development, you may be becoming a jack-of-all-trades, master-of-none, and I suggest that you might think more vertically and consider studying design and modelling languages such as the UML, and associated analysis/design methodologies and patterns."- Good point. I'll consider that as well, thanks.
Mr-sk
+1  A: 
Hostile Fork
Above kidding aside--I do believe Rebol is mind expanding. It's difficult to make a serious suggestion of using it in mainstream development, but (for instance) the cute and award-winning indie game Machinarium was coded in a Rebol dialect that compiles to Flash: http://machinarium.net/
Hostile Fork
haha, just found your comment..haha..ok, yeah I know of Machinarium - ..and I'm reading the wikipedia entry now...I'll take a look at this more in depth - thanks for the tip..and uh, yeah, didn't hear it from you..or yeah..umm..who are you again?
Mr-sk
A: 

LISP and FORTH are good choices for serious mindstretching.

If you seriously want to stretch yourself, get a copy of Abelson & Sussman's "Structure and Interpretation of Computer Programs", and a copy of the MIT Scheme system, and start working through the book. Scheme is a dialect of LISP (but you probably knew that already.) (On this subject, pull down a copy of course 6.001 from Open Courseware at MIT.)

If you want to learn a different mindset, that will serve you in good stead in interesting ways, Google and snarf down a copy of Leo Brodie's classic "Starting FORTH", and pick up a FORTH interpreter to play with. (The book is written for polyFORTH, which is no longer available from FORTH, Inc., and FORTH systems are not common these days.) Then read "Thinking FORTH", from the same author.

John R. Strohm