October 15, 2012
Tomorrow will mark the start of week five of Functional Programming Principles in Scala and my frustration level with the course continues to grow. While I like the way the course is presented - through topical videos that include interaction opportunities for me, I am unhappy with the assignments. There are two aspects to my dislike: one - the highly "computer science-y" angle all the problems take, and two - the lack of evaluation on my assignment submissions.
This week's assignment centers around Huffman Coding. I had to look it up. Turns out its a lossless compression routine developed in an MIT Ph.D thesis. After many hours of diagramming and thinking about it I now think I understand it enough to tackle the assignment. Only the level of effort published for the course is 5 - 7 hours per week and I've already invested more than twice that on week four and I still have 90% of the assignment left to complete. Tomorrow a new round of video lectures will be published, and a new assignment will be made. Whatever I am learning about functional programming is being lost in the chaos of just trying to keep up.
The course does have a forum and it is fairly active, but I have stopped trying to use it as a resource and it only serves to batter my already bruised ego even more. There are any number of "the assignments are too easy" postings. Or "I completed week four using only 'one-liners'". That I'm not finding the assignments easy, and that my submissions aren't filled with one-line solutions makes me think I'm doing it wrong.
Which brings me to my second gripe. When I submit my assignment it gets scored - not evaluated, not critiqued. There are over 40,000 people signed up for the class so there is no way all assignments submissions could be evaluated. What happens is your work is tested against a master set of assertions and, if it passes those, you get all the points. There's also some "style" checking to prevent you from using non-functional attributes of the language. There is no evaluation of your code to say, "that's a good approach", or, "you shouldn't do this and here's why...". Each week has built on the concepts of the previous week, but I have no confidence that my understanding of the previous week is solid. Throw in the assignment complexity issue from above and you have a recipe for frustration and anger.
There have been people asking for the solutions to the assignments to be published, however the course staff has pointed out that this course will likely be offered again and will use the same assignments. The explanation given was that it would require too much work to develop new assignments and the scoring tools each time it was offered. So not only are our submissions just scored and not evaluated, there is no feedback at all as to how these problems ought to be solved.
I'm just an old-fashioned brute force programmer who got his start on punch cards and paper tape in the 1970s. My code may not be elegant or sophisticated, but it works and it has always been written with an eye toward maintainability. Spending several years on call for a batch billing system that ran between 2 am and 6 am every night I learned to write code that worked, and if it didn't work, was understandable to people who were half asleep while trying to fix it. The 'one-liner' solutions that seem to be the rage with functional programming strike me as being extremely difficult to maintain in the middle of the night. I'm not going to write off functional programming as a good approach to some problems, but I am disheartened at the direction this course has taken.