Language recommendations for expanding programming skills (For a semi-experienced software developer) [closed]
开发者_如何学Python
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this questionI 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&s=books&qid=1263401280&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.
Haskell, followed shortly by Python.
try a functional programming language
- F#
- Lisp
- Haskell
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.
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!
Ruby. Ruby is great, and from there you can learn about Rails, which is an amazing framework.
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.
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.
I'd say if you're interested in a new and very "different" language and are considering several options, you should check out the community first. See how active the newsgroups are, if the people seem nice and have a good vibe. Investigate if popular projects in that language tend to be on topics that intrigue you.
Haskell seems like a good option. Functional languages are important and show a different side to problem solving. I've been looking at Erlang but haven't written anything in it yet, so I can't speak about it on any level besides shared curiosity.
link | flag
add comment
Psssst... over here! Shhhhh! Don't draw no attention! We clear? Are you sure no one followed you?
So you wanna "completely change the way you look at programming", eh? People probably tellin' you the way to get mind expansion is to go to CS school—functional programming, or something sissy like that. Yeah I know what I said...with the bullcrap about "community"...that was to get the moderation police off my back, dude!
Fact is I got your "mind expansion" right here...the crack cocaine of programming: [Rebol]
First time's free. But if anyone asks where you got that from, it wasn't me! We never met...I don't exist. You got that!??
:P
Clojure. You won't regret it
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.
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.
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.
精彩评论