Functional Programming Principles in Scala starts today
class.coursera.org
class.coursera.org
Edit: I found a place where the web-based quiz mechanism used by Coursera gave me some troubles. In lecture 1.4 there is an exercise to implement functions and(x,y) and or(x,y) but using neither || nor &&. While I was able to compile and run functions that produce correct truth-tables in my Eclipse environment, the web-based form appears to be fairly tempermental with what it will accept. (Equivalent functions modulo only formatting differences made the difference between "incorrect" and "correct".) I managed to proceed by asking myself whether my function was as simple as possible: no newlines, simplest possible expression, no superfluous characters such as {}
I'm having some trouble figuring out how to get it installed in my Eclipse, though. I already had an older version of Scala IDE installed, and apparently this is a fairly new feature. I tried the latest milestone, which is supposed to have it, but I don't see New --> Scala Worksheet when I try to create one.
Has anybody fought this dragon and won?
Edit: I have found my own answer. The trick was to use the following URL as the "update site" when installing ScalaIDE. When you do, the "Scala Worksheet" plugin will appear under the list of available software.
http://download.scala-ide.org/ecosystem/dev-milestone-2.9/si...
Also the specific Juno one: http://download.scala-ide.org/releases-juno-29/milestone/sit...
but it doesn't have the worksheet feature
both worked for me on the latest Juno release
p.s. I did have some issues, and uninstalling and reinstalling did the trick
Scala IDE: http://download.scala-ide.org/nightly-update-juno-master-29x Worksheet: http://download.scala-ide.org/nightly-build-worksheet-scalai...
http://scala-ide.org/download/nightly.html#scala_ide_helium_...
I ask because my brain really cant absorb too many languages, and I want to make some kind of pseudo-optimal choice. I'm not just talking about some shootout here, but about the the next 5 years outlook.
After that, if you want to switch to another JVM language, do it, but you should have a much clearer reason than "I want to use an alternative JVM language". Something about that language should grab you. Personally, I think Groovy's great for perl-type work where you'd like to just clack something out in a terminal rather than starting up a new project in eclipse. Clojure is an actual LISP for real functional programming. Scala (IMO, no offense) is a pile of academic features that sound great in theory. Jruby is ruby.
I am not a fan of the required cognitive overhead that scala takes to get started -- reading someone else's code reminds me a lot of C++ and the tooling still needs to catch up. If any of the JVM languages are going to break out, I'd put my money on scala. JRuby has its place as well, and I know of a few high profile projects done in it, so it wouldn't be a bad choice for consumer apps. For enterprise, I think static typing has some major wins.
I kind of want Scala--, to be honest...
It wasn't right for us on this project, but I can definitely see going back to it for other projects.
If Scala/Haskell/Go would become more mainstream, and had a very straight forward / magic-free 1:1 conversion to javascript, then node.js will have much less appeal to me.
If Play had all the community and gems that RoR has, it would be a very, very strong framework, and something that the enterprise world would (years from now) adopt more likely than RoR (for all the wrong reasons, but such is life)
Am in the same boat. I moved to SF permanently 2 months back, after 15+ years in the east coast. Decided to pick 1 language, immerse myself in it deeply, & then start the interview circuit. The opposite approach would be to pick a bunch of languages ( ruby, python, jquery/coffeescript etc. ) and get a smattering of best practices in everything without knowing anything too deeply. Both approaches have their merit. In SF, I recommend the latter approach - you will find jobs almost instantly if you do that. But still, given my proclivity ( I would rather know everything about 1 thing than something about everything) I chose the former approach. I picked Scala, read every single chapter of Odersky's book, & subjected myself to 19 total interviews at 2 multibillion$ companies using Scala exclusively for a "new project built from scratch".
I got offers at both. Now am debating which one to join.
tl;dr Scala is that pseudo-optimal choice you are looking to make. In SF there are a few very-nice Scala jobs with 6-figure salaries & tons of RSU's thrown in...but only if you can hack it. The questions you will be asked in the interview are definitely esoteric & very academic ( difference between reader monad and writer monad, reverse a list without mutation using a foldLeft, kruskal's algorithm in scala, merging graphs with common edges where each edge is a tuple, etc. ) Its not web apps, its not "software engineering", and its not everybody's cup of tea. But if you like academic CS, Scala will not disappoint you.
I am not in the valley, but it may be that you picked up on some buzz/conversations in general that lean towards scala. It is quite puzzling since Indeed.com's trends shows a massive lean towards Clojure vs Scala.
http://www.indeed.com/jobtrends?q=scala%2C+clojure%2Cjruby...
On an absolute term, Scala still leads the pack (http://www.indeed.com/jobanalytics/jobtrends?q=scala%2C+cloj...)
This is maybe a little too obvious if you understand left folding at all. A less trivial exercise in the same vein is to implement right folding via left folding. It's just a one-liner, but if you haven't tried it before, it's enlightening and worth giving a shot.
Well, the early days of computing had domain specific languages, and I'm afraid we are getting back to that. The days of a one-size-fits-all language are over. Your best bet is to learn the principles and then the syntax differences just aren't that troublesome. The problem is that when you are new to programming, you learn only a small subset of those principles, and then are stumped when it is time to pick up a new language because it may rely on new concepts.
In education, Scheme once occupied the role of being the language in which you could learn and investigate a broad range of principles of computation. However, the perceived need for vocational training seems to have pushed Scheme out of the curriculum.
Today, Haskell is the best choice for this role.
To be transparent I had intended to just take part of the course to get a taste because I am in one other class now and I have a total of three starting in the next few weeks. A combination of Clojure, Ruby, and Java more than suffice to get my work done, but I will probably stick with this class and drop other classes instead.
I've started putting it together in small pieces but ML and NLP are tough topics to learn without some sort of instruction.
I have a pretty good grasp of Scala but I learned in sort of an ad-hoc fashion and I'm looking forward to learning what I imagine will be idiomatic Scala.
I'm liking this course too, it's really about functional programming more than Scala. He says in the first lecture that the curriculum is mostly from a well known book on scheme, just with the languages swapped out.
but perhaps this course would be sufficiently generic to not get bogged down by scala's peculiarities...
At first he seemed to be reacting more to Odersky's book than to the language. I wonder if he had first opened "Scala For The Impatient" how his reaction would be different.
Then he takes the odd tack of complaining about arcana in the Scala typesystem, and then suggests Haskell as a solution.
I get the impression that his love of dynamic typing had his mind made up before he even approached it.
What's odd about it? He seems to be straightforwardly claiming that Haskell has a less confusing type system than Scala. I don't know whether that's true or false, but certainly don't see anything odd about it.
The fact that he clearly knows so little of Haskell is what's most telling - you shouldn't be taken seriously as a language critic if you don't realize that Haskell also has all of those scary things he lists from the Scala table of contents, with the exception of variance annotations (since it's not OO).
I get the below error. > submit login password [error] Not a valid key: submit
What am I missing ?
I believe this is still relevant: http://amix.dk/blog/post/19574
PG's post: http://news.ycombinator.com/item?id=1781417
If the former, why do you give a shit?
I know it works on me. I don't write the best comments I could, I write the ones I know will be upvoted.
(At least, it is if "gets what it deserves" means "gets something it's got no right to anything better than" rather than "gets exactly what, in some kind of best possible world, it would get".)
Having said which, I don't think it's all that shameful to write what you think will get the most votes. But I'd rather you didn't.
So shame on him? I don't know. Major props for being honest.
One could argue you were subconsciously influenced toward posting a shaming comment because of the karma incentive.
Of course, you may just be joking as well.
It's certainly funny either way.
If people post for Karma instead of for content, IMHO it is their problem. It won't make the site much better, but it won't make it much worse, either.
"Shame on you" was my way of saying "who cares?".