Thanks
-Patrick
But certainly give it a try here in Portland first because there are
some of us out here who have been playing with functional languages
for a few years now ;-) And we've had pdxfunc for, what, about 4 years
now? Usually have about a dozen eager (or lazy :) functional
programmers show up in any given month.
Oh, and OCaml and F# are kissing cousins... just say'n because I've
been dabbling with OCaml for a while now.
Phil
But certainly give it a try here in Portland first because there are
some of us out here who have been playing with functional languages
for a few years now ;-) And we've had pdxfunc for, what, about 4 years
now? Usually have about a dozen eager (or lazy :) functional
programmers show up in any given month.
Oh, and OCaml and F# are kissing cousins... just say'n because I've
been dabbling with OCaml for a while now.
The F# and Scala choices Patrick gave in his original post are very
similar in some respects:
Both are multiparadigm languages with a distinctive functional flavor
built on top of an existing infrastructure and libraries (F#->.Net,
Scala->JVM). Making the jump to the functional mindset is just one
part of mastering these language/library mixes. The other part is
knowing the underlying libraries/tools that come with each. I'm not
sure which part of that learning problem is more difficult. I would
tend to think that being able to think functionally is more
fundamental, but then again with these two languages the libraries are
so vast that maybe the paradigm shift is actually easier.
Of course, the other dimension to the problem is the problem domain.
And other dimensions (as Thomas mentions) related to architectural
issues - messaging, type of database, etc.... Given all of this, I
guess it's understandable that we see such highly constrained job
postings these days, you the ones where you wonder how the heck
they'll find someone with that particular mix of skills & experience.
Phil
guess it's understandable that we see such highly constrained jobGiven all of this, I
postings these days, you the ones where you wonder how the heck
they'll find someone with that particular mix of skills & experience.
So, for me, at least, Scala, because of its extensive OO support, makes it harder to grasp the functional paradigm in any sort of intuitional way because it's so easy to get stuff done without it and very few supporting libraries help. (Unless by "functional paradigm" we mean non-side-effecty functions with map, fold, collect, filter over collections.) Scala seems to help you use functional islands in an imperative world, but doesn't help you (by necessity) re-conceive the way you might write applications in the first place. (Or I've not gotten there yet, except to pretend I'm using Erlang.)
What I'd love most for the JVM is a language with namespaces, functions, pattern matching, type inference, and algebraic types (and type classes, I guess, insofar as I understand them --- kinda like interfaces?).
On Sat, Jun 18, 2011 at 6:14 PM, Keith Irwin <keith...@gmail.com> wrote:So, for me, at least, Scala, because of its extensive OO support, makes it harder to grasp the functional paradigm in any sort of intuitional way because it's so easy to get stuff done without it and very few supporting libraries help. (Unless by "functional paradigm" we mean non-side-effecty functions with map, fold, collect, filter over collections.) Scala seems to help you use functional islands in an imperative world, but doesn't help you (by necessity) re-conceive the way you might write applications in the first place. (Or I've not gotten there yet, except to pretend I'm using Erlang.)I've seen that a lot, to be honest, in the Scala world and it has worried me at times, but I also think it's not necessarily a bad thing, overall. I'm all for functional purity and would generally choose that over any OO approach. But for quickly rolling out code, sometimes it's hard to argue against paradigms in which you or your coworkers might already be quite comfortable.
What I'd love most for the JVM is a language with namespaces, functions, pattern matching, type inference, and algebraic types (and type classes, I guess, insofar as I understand them --- kinda like interfaces?).I assume you mean you'd want *just* that and not everything else that Scala brings along, since it already includes all those features.
Yeah, just to clarify, because I think the wording wasn't clear in my
email when I reread it: I'm saying that given the two problems:
1)developing a functional "mindset" and 2) Learning the libraries...
given the size of the .Net and Java libs it might actually be easier
to develop a functional mindset than it is to learn those libraries to
the degree that one becomes highly productive.
Phil
Ah.
Heh.
If you further distinguish between "libraries" and "frameworks," I'd totally agree on the framework front. I know it's a wiggly distinction, though.
Keith
Phil is right. Every language has a runtime that you must learn. They consist of data abstractions and system calls that you will use. The runtime is not inherently functional, even in packages like ghc. The challenge is to capture the meaning of what your program is, and then to lower it into those system calls and mutable things. The process is similar in most languages.
Each of these responses has been helpful. My original post was
deliberately simple. We are at the beginning of a new project,
technically from scratch although the business is fairly well
established. I am not hiring at the moment, but gathering
hiring-related information into our technical-options analysis.
> I'd love to hear more from others who have been on either side
> of the table as to their experiences with hiring. I think it
> could also be helpful to hear what has worked for people
> learning, coming from different backgrounds.
Yes, please.