Functional Programming Principles in Scala
So here's the deal, I was dreading the thought of doing another assignment in the Odersky Scala course on Coursera. I have other projects I want to move on to and man I'm not built for the academic side. Then they send out an email telling everyone the minimum number of points we need to complete the course. Alt-tab over to a Google Doc spreadsheet, do some quick math and presto, I have way more than enough points. So, I punted on the last assignment. Yep, I'm that guy, I wrapped up my CS degree with a D in post-calc stats to get the diploma. That'll work. Besides my weak finish the course was awesome. If you're in the Scala space and you are anything short of a wizard I don't understand why you wouldn't jump on the opportunity to get instruction from Martin Odersky himself.
The Course The focus of the course, as you would imagine, is functional programming. They take much inspiration from
SICP. I don't know how much of it was SICP or Martin Odersky himself but the course laid out the proper motivation and revelation of information such that my brain was willing and able to accept it. This was a well thought out, professional course. 50,000 people signed up for the course. I don't know how many people finished it. The course developers created an automated system that analyzed your code to make sure it passed their own tests along with some other code analysis. For example I had some code implemented that passed tests but it didn't use the groupBy capability in collections. That was the point of the exercise so they dinged me. Fair enough, they're checking lots of stuff.
Because of the automated nature, the programming assignments have to structured in a particular way. They have to lead you down a path. They can't just give you an assignment and a blank canvas. I think this is okay. But it's a different approach to programming assignments and worth recognizing.
To Those That Come After Here are some things I recommend to someone taking the course when it is offered next.
- Get the SICP book and refer to it, it helped a few times. Odersky mentions it and I think it's fair game to refer to it.
- I didn't do any of the video quizes, I don't think it hurt me.
- Leverage the Scala-IDE worksheet, dump code in there and play, I think it's better than the REPL.
- The forums were sometimes (not very often) helpful.
- Submit early and often. You get great feedback. Some co-workers found that if you put print statements in your code you'll see the output in the online feedback, this can give you some indications of the additional test scenarios they are using to evaluate your code.
The Cheating 9 co-workers and myself have our own Skype room dedicated to the course. No one wanted to cheat, we all wanted to get a lot out of the class. We even made sure that no one gave away
spoilers before the projects were due. But we also knew that we would benefit greatly by looking at each others work when we were done with assignments. I actually learned some cool stuff and it was a great time for me to accept the information since I just got done spending hours trying to solve the same problem. So I was one of the guys that had his assignments up on github. Then we get the email from the admins that we need to take it down. That's all cool but they cited how we signed an agreement acknowledging we wouldn't post our stuff or whatever. I wish you could see my face but let's just say, no one fuckin reads EULAs. If you don't already know that, especially if you're in software I'm not sure what to say. So I took it down from github and put it on a private repo on bitbucket. If you don't already know, you get free private git repos from bitbucket, good stuff.