{"id":722,"date":"2016-02-02T21:42:47","date_gmt":"2016-02-03T02:42:47","guid":{"rendered":"http:\/\/codefork.com\/blog\/?p=722"},"modified":"2016-02-06T10:13:19","modified_gmt":"2016-02-06T15:13:19","slug":"algorithms-i-on-coursera","status":"publish","type":"post","link":"https:\/\/codefork.com\/blog\/index.php\/2016\/02\/02\/algorithms-i-on-coursera\/","title":{"rendered":"Algorithms I on Coursera"},"content":{"rendered":"<p>I&#8217;m currently taking the <a href=\"https:\/\/www.coursera.org\/course\/algs4partI\">&#8220;Algorithms I&#8221; course on Coursera<\/a>, a session of which started on January 22nd. I thought I&#8217;d write up my impressions so far on taking my first <a href=\"https:\/\/en.wikipedia.org\/wiki\/Massive_open_online_course\">MOOC<\/a>.<\/p>\n<p>As someone who taught at a university for seven years in the humanities, I should say right off the bat that I dislike the idea of online learning for the reasons you might expect. But this course appealed to me for a few reasons. It&#8217;s developed and taught by Robert Sedgewick and Kevin Wayne, the authors of the highly regarded <a href=\"http:\/\/algs4.cs.princeton.edu\/home\/\">Algorithms, 4th Edition<\/a> book. The syllabi of the two-course sequence on Coursera would make for the type of semester-length course you&#8217;d find in a respectable Computer Science department. Finally, Coursera has a reputation for offering more rigorous and demanding courses than other similar MOOC sites.<\/p>\n<p>So far, I&#8217;m keeping up with the schedule and am in the middle of the Week 2 material. I&#8217;ve found it to be a positive experience so far, and more challenging than I&#8217;d expected!<\/p>\n<p>Some initial impressions:<\/p>\n<ul>\n<li>The course is a serious time commitment. Per week, it&#8217;s 2 hours of lecture + 2 hours for exercises + 4-12 hours for the programming assignment. I&#8217;ve chosen to skip the &#8220;interview questions&#8221; supplementary material.<\/li>\n<li>Assignment grading is, thus far, very rigorous. Submitted source code is analyzed and run through a battery of tests measuring not only correctness, but code cleanliness, run times, and memory use, and scored accordingly.<\/li>\n<li>The ability to submit exercises and assignments as many times as you like in order to improve your grade score is a <strong>fantastic<\/strong> feature. (I don&#8217;t know if all Coursera courses work this way.) It means you can really learn from your mistakes by correcting them; also, it gives you the chance to try out alternative solutions. This is WAY better than the traditional one-shot-only model of graded assignments, which is terrible for actual learning.<\/li>\n<li>Basing the course on a published textbook (which is optional) is extremely helpful. There&#8217;s material covered more deeply in the text than in the lectures, but the lectures also address some aspects of topics and problems not covered in the book. This makes for a strong complementary relationship between the two; it doesn&#8217;t feel like the lectures are simply repeating the textbook.<\/li>\n<li>You&#8217;re firmly expected to have some basic programming skills and a bit of math as a prerequisite. I like that the lectures keep the focus on the topics at hand, and don&#8217;t try to make the course all things to all people. If students need to &#8220;catch up&#8221; because they&#8217;re new to Java or their math is rusty, they use the discussion forums to do so.<\/li>\n<\/ul>\n<p>As for the actual material, I&#8217;ve already learned a lot so far:<\/p>\n<ul>\n<li>I&#8217;ve gotten some exposure to formal methods for algorithm analysis. A week and a half obviously isn&#8217;t going to make anyone great at this, but at least I now have some approaches for thinking through correctness, run times, and memory use mathematically, whereas before, I would mostly work empirically.<\/li>\n<li>I can better identify different <a href=\"https:\/\/mitpress.mit.edu\/sicp\/full-text\/sicp\/book\/node17.html\">orders of growth<\/a> and some of the common code patterns that indicate them.<\/li>\n<li>The first week&#8217;s case study of different algorithms for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Disjoint-set_data_structure\">Union-Find<\/a> was, for me, a thought-provoking exercise in what is possible with arrays vs trees in representing relationships among data. The programming assignment is so stringent that it&#8217;s difficult to satisfy all the run time and memory requirements for a perfect score. This has generated a lot of insightful discussion in the forums about optimization.\n<\/ul>\n<p>Algorithms really get at the essence of what programming is. Anyone who works as a programmer has to put into practice algorithmic thinking to some degree, even if they aren&#8217;t aware of it.<\/p>\n<p>I plan to continue writing about this as a way to keep me accountable for completing the two-course sequence.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m currently taking the &#8220;Algorithms I&#8221; course on Coursera, a session of which started on January 22nd. I thought I&#8217;d write up my impressions so far on taking my first MOOC. As someone who taught at a university for seven years in the humanities, I should say right off the bat that I dislike the &hellip; <a href=\"https:\/\/codefork.com\/blog\/index.php\/2016\/02\/02\/algorithms-i-on-coursera\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Algorithms I on Coursera&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,14,9],"tags":[],"class_list":["post-722","post","type-post","status-publish","format-standard","hentry","category-compsci","category-java","category-software"],"_links":{"self":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=722"}],"version-history":[{"count":39,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/722\/revisions"}],"predecessor-version":[{"id":775,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/722\/revisions\/775"}],"wp:attachment":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}