The Coursera Software as a Service class is one of several online courses that I’m currently looking at.
Week One Review
The first week of the SaaS class had been a boring 10,000 foot view of SaaS, Computer Architecture, agile methodologies, …etc. These lectures might have been useful to the Berkeley class full of students who had never had real world experience in software development. However, for a software engineer with industry experience, such as myself, it was more like reading the cliff notes of a favorite book. It overly simplistic and added no new insight.
While the first week didn’t impress me, I opted to withhold final judgement for a few of weeks. I was looking forward to learning Ruby with actual programming assignments. I was not disappointed. I finished the first homework assignment last week and fully enjoyed it. The lectures on Ruby have been far more engaging than the first week. They have been helpful to develop an understanding of Ruby’s syntactic sugar and best practices. In addition, the assignments were well suited to showing off the unique features of Ruby, and were challenging enough to maintain my interest.
The first homework assignments were mostly introductory level problems to get a programmer familiar with Ruby syntax. Things such as list enumeration and accessor definitions. There was a fairly interesting use case of using class_eval to define a custom accessor type of attr_accessor_with_history. I would say overall, the difficulty level was moderate. Anyone with prior programming experience should be able to complete them without too much effort.
The amount of work for week three has jumped a bit over week two. I had initially been running my code against ruby 1.8.6, while looking at the api for 1.9.4, and so came across some discrepancies. I had to replace a call to .reverse() because while Array does have that method, Enumerable doesn’t. However, I had to do some trial and error finding the right methods as there were a number of methods on Enumerable that were added in 1.9: ((1..9).count and .reverse_each .each_with_index, ….) Now that I’m up to date I shouldn’t have that problem again.
In addition, parts 3 – parts 5 required some more involved work. To start, the setup wasn’t completely straightforward. Error after error popped up while I installed rails, bundler, rvm, libksba, home brew, ruby 1.9.2, use ruby1.9.2, postgres. Then, I signed up for herokuapp, installed it, ran the migration ran it renamed site … before finally getting bundle install to work and load up the website. All of this just to start working on the assignment, far more time than I expected. However, it was a good learning experience. I can’t say that I’ll be any faster the next time I need to do this, but a few more attempts and the learning curve should start to level off.
Once the setup was finished, the actual programming assignments weren’t trivial either. They required either prior experience with rails, or some careful re-watching of the lectures to help find where the needed changes would go.
Again, for those interested in how the homeworks are scored, I’ve the point system for everyone’s reference:
Part1 = %" Currency conversion correctly converts currency from rupees to dollars (singular) [2 points] correctly converts currency from yen to dollars (singular) [2 points] correctly converts currency from euro to dollars (singular) [2 points] correctly converts currency from rupees to dollars (plural) [3 points] correctly converts currency from yen to dollars (plural) [3 points] correctly converts currency from euro to dollars (plural) [3 points] correctly converts currency from rupees to yen, euros to rupees, yen to euros [15 points] adapted palindrome? correctly identifies positive and negative palindromes [30 points] enumerable palindrome? correctly identifies simple array positive palindromes [6 points] correctly identifies simple array non-palindromes [6 points] should not error on non-sensical cases of enumerables, like hashes [5 points] should still work for the case of non-array enumerables that do make sense, like iterators (valid palindrome) [15 points] should still work for non-array enumerables that do make sense (invalid palindromes) [8 points]" Part2 = %" CartesianProduct should work for the first example given in the homework [15 points] should work for the second example given in the homework [10 points] should return nothing for the case where both of them are empty [15 points] should work for other examples for 2x2 [20 points] should work for 3x3 and 4x4 [40 points]" Part3 = %" App should respond to simple request [0 points] Table header should have link to sort by title [10 points] should have link to sort by release date [10 points] Table should be sortable by title [20 points] should be sortable by release date [20 points] should highlight title header when sorted [20 points] should highlight release date header when sorted [20 points]" Part4 = %" GET /movies should be successful should have #ratings_submit button [10 points] should have checkboxes [10 points] when selecting a movie rating should only display movies of that rating [30 points] should automatically check the selected rating in the response [25 points] when selecting a sort column should preserve the ratings filter [25 points]" Part5 = " GET /movies basic tests should be successful should have #ratings_submit button should have checkboxes should have #movies should have #title_header should have #release_date_header when selecting a movie rating should remember the rating selected [20 points] should allow new ratings to be selected [15 points] should redirect to a RESTful route [15 points] when selecting a sort field should remember the sort order [20 points] should allow a new sort order to be selected [15 points] should redirect to a RESTful route [15 points]"
I am so far quite satisfied with the class so far. The course is challenging enough that I am need to put some effort into the course. While I find that I generally don’t need to reference the lectures very frequently, when I do the material is quite accessible if a little haphazard. There’s certainly no handholding in this class, and that is not a bad thing. Professors Fox and Patterson expect the students to know a little something about programming, and figure it out for themselves when they don’t. However, that is not to say that everything about this class has been perfect.
The instructions on the homework have not been as clear as they could have been. The process of submitting hasn’t been explained on the pdf describing the assignment. Neither has the scoring system been detailed. It is only after making a submission that you see how points are awarded for the homeworks. I see no reason not to have made them available on the assignment. In fact, the whole pdf was pretty ugly, which made it made it more difficult to read and understand.
The submission process was also a little rocky. Due to server load issues, the first problem I submitted wasn’t graded for a number of hours. During this time, there was no clear message as to whether the assignment had been submitted successfully. Instead, one was left to speculate if a grade would come back before the due date at all. Other submissions were processed more quickly, but never without some delay. This lackluster performance doesn’t instil much confidence in ruby for production environments. These small issues that I found, led me to post my own more thorough instructions here.
Also, while the lectures are quite good, they are just recorded straight from the classroom and then chopped up into ~10min clips for the web. It seems to work better when, as has been done in the other courses, the lectures are specifically tailored and edited for the web. The quality of video tends to be better, and the lectures also have natural starts and finishes in ~5min bite sized pieces.
However, I think it is very important to emphasize that, while there were some minor issues, overall the class has been fantastic. Professors Armando Fox and David Patterson are doing us a great service in offering this class to the public at large for no cost. This type of class is a new concept and there are bound to be wrinkles, especially when compared next to Andrew Ng’s Machine Learning class, which was as close to perfect as a course can be. Ng is a a brilliant teacher, able to breakdown truly large, complex problems into digestible pieces. The homework assignments for that class were clearly outlined. All instructions and code templates were downloaded in a neat zip. The assignment description had step by step instructions with clear explanations of the grading system. Problems could be submitted quickly and easily, straight from the command line. In addition, the problems were scored without delay giving immediate and clear feedback on whether the solution was completed successfully. The machine learning class also had tests so that you could check your progress on the problem sets before submitting the assignments. I came out of that class having learned a huge amount about several important machine learning techniques, and with an excitement to start applying the knowledge.
Next to the machine learning class, the SaaS class is merely good. Standing alone, it is great. However, I expect it the quality of these courses to only improve as the professors learn what works, what doesn’t, and are able to finally solidify a syllabus that is specifically geared for the web environment. Even in the couple weeks that SaaS has been running, Tthere have already been a number of improvements made to both the course and the platform:
- HTML5 Video has been buggy, so they added an option to revert to Flash Video. Note to all Flash haters HTML5 video and audio clearly aren’t ready for prime time yet
- Instructions for assignments improved from HW1 to HW2 (Just to clarify, HW1 was week two and HW2 is week three) with clear links to pastebin templates to get you started on the assignments
- The videos now remember what speed you were playing at (Though, annoyingly volume still resets to 100%.)