Saturday, July 27, 2013

MOOC's: Be careful what you wish for.

There's an old warning that you should be careful what you wish for, because you just might get it. Here's an article from the Slate "web magazine" cautioning that MOOC's are going to doom us all:

http://www.slate.com/articles/technology/future_tense/2013/07/moocs_could_be_disastrous_for_students_and_professors.html

Countering that point of view, the article does manage to provide a link to a TED talk by coursera founder Daphne Koller, speaking at Edinburgh in June 2012:

http://www.ted.com/talks/daphne_koller_what_we_re_learning_from_online_education.html (21 minutes)

Now my own experience is limited. I took Udacity's CS101 course last year. It has no fixed schedule and I worked on the course when time was available and did eventually complete it with 100% on the final exam. I've signed up for another couple of Udacity courses, but haven't managed to get around to finishing either. Home Internet outages and a few weeks hospitalized distracted me from sticking to it. Of course, with no fixed schedule, I can always return to those courses and get down to work on them.

Koller and coursera seem to put much more emphasis on a fixed schedule than does Udacity. For example, I've been taking coursera's Systematic Program Design Course and have to concede that I have not kept up with it's mandatory schedule of weekly homeworks and quizzes. Realistically, I have to concede I'll not be completing that course this summer and will have to try it again the next time it is scheduled. Not a bad course, but it does get tedious in its attention to microscopic details. I also got distracted with learning a new programming language (Racket) along the way. Too bad as the course was to have 2 peer reviewed assignments and they were to be my first experience with peer reviewed work.

I think the gloom and doom suggestions of the Slate article are a bit too Luddite a point-of-view for my taste. I think MOOC's will lead to a lot of change in education courses in the future. The MOOC courses will establish baselines which future improvements will have to beat. Koller emphasizes that the MOOC offerings collect a lot of data which provide the prospect of guiding future improvements. The one thing that I can see screwing up a bright future of continuous course improvement is if copyrights are used to restrict building a better course based on an existing course. U.S. copyright law has seemed to get repeatedly stretched with additional years to make sure Mickey Mouse, et al, never pass into the public domain. I can only hope that the MOOC courses stick to the tradition of Creative Commons licensing so that it is possible to found an improved course on an existing good course.

On a related topic, although Bill Gates is not a person that I often have praise for, in this 10-minute TED talk by Bill, he does a nice job of arguing that teachers need more feedback. A modest bit of technology, such as a video camera on a tripod, can give teachers a basis for self-assessment and the possibility for peer reviews.

http://www.ted.com/talks/bill_gates_teachers_need_real_feedback.html

Tuesday, July 16, 2013

FIeld Trip and an Unusual Looking Flag

Flag image by Blas Delgado Ortiz, 27 June 2001

A few weeks ago, while we were visiting my brother-in-law in a nursing home in Queens, we had occasion to stop by the NYPD 110th precinct station house to file a report about an incident. While my wife was chatting with the officer at the desk, I wandered around the lobby looking at the various posters and artifacts on display there. I noticed that in several of the pictures of "events", there was a distinctive flag on display - green & white stripes and 24 stars in a curious looking constellation arrangement, not simple rows or anything simply symmetric. I asked the officer after my wife had finished her business what that flag was and she waved me off, not knowing the answer. But the question stewed in the back of my mind, unsettled.

Today, I decided to try a Google search for:

flag green and white 24 stars

to see what it would find. The search easily turned up exactly the information I was looking for. It's the official flag of the NYC police department. 5 stripes for the 5 boroughs of the city (Manhattan, Brooklyn, Queens, the Bronx and Staten Island) and the 24 stars represent the 3 cities, 9 towns and 12 incorporated villages that were integrated together in forming NYC in 1898. A detailed explanation is given on http://www.crwflags.com/fotw/flags/us-nycp.html. So now I know. Can't say that I'm impressed with the depth of knowledge displayed by the officer at the station house desk.

I can't share this kind of information without mentioning the "Fun with Flags" episode of "The Big Bang Theory". Enjoy!

Sunday, July 7, 2013

Recursion

One of the interesting computer science topics that Udacity CS101 introduces is "recursion". Recursion is where you define a function in terms that in some cases require the function to call itself. This is the main topic of Unit 6 of the course. There are important design considerations to be taken into account if you are going to use "recursion" in your implementation of a function.

  1. Base case(s) - It is crucial that your function have at least one combination of inputs that do not trigger yet another recursion. This non-recursive case is called the base case of your function. If you don't have at least one base case, then you are fairly certain to have an unending loop that never produces a final result.
  2. Progress - It is similarly crucial that your function make progress toward the base case(s) as it recurses. If you have situations where sometimes the function re-invokes itself with the same inputs and state as it had previously, then it may be more subtle, but almost surely you are stuck in an unending loop that never produces a final result.

Not every programming language supports recursion. Cobol and Fortran for example traditionally do not. Some languages (e.g. PL/I) support it, but only if you declare that a specific function may be invoked recursively. ("PROC OPTIONS(RECURSIVE)"). Python supports recursion without any need to declare your intent to use the capability, but Python's support of recursion does not include "tail recursion optimization". Tail recursion optimization is where a language processor recognizes the special case that a procedure is being called recursively, but that when the procedure returns to the point of the call, there's nothing more to do than to return to an earlier call to this procedure. A clever compiler can transform the code for such a program to do a plain loop instead of a recursive call. Alas, in Python, there's much that cannot be known for certain about the code until run time. Guido Von Rossum, the creator of Python and it's "Benevolent Dictator for Life" (BDFL) has blogged about why Python doesn't bother to try harder for this particular case. See: Tail Recursion Elimination.

A key fact to note is that if you've got code with a tail recursion in it, then it is reasonably straight forward for you to restructure that code to explicitly use a loop in place of the recursion. It apparently is in this fact that Guido draws enough comfort to not bother trying to optimize the handling of this kind of code.

Some folks look at the limitation of Python's support of recursion and wrongly conclude that recursion is a feature of the Python programming language that you should avoid. Ned Batchelder did a great job of de-bunking that assertion in his essay: Recursive Dogma.

There are lots of interesting discussions of recursion in the Udacity CS101 forum. Much of the debate is over whether or not recursion is something easy or hard to get your brain wrapped around. Some folks find recursion is an elegant way to express a function while others opine that iteration is a more natural way to conceive of a function's processing. My opinion in this debate is that even if recursion provides a straightforward clean design for a function, do think through how to transform that design into an iteration. Compare the readability, performance and limitations of the 2 alternative designs and pick the alternative that makes the most sense for your needs.

Saturday, June 22, 2013

Ken Robinson on how to effectively run an education system - Command and Control isn't the right choice.

Ken Robinson surely must earn a lot of air miles giving talks at TED conferences. Here's another one, from fairly recently. May 2013 is when it was published to Youtube.

Ken Robinson: How to escape education's death valley

I did laugh out loud, so he still manages to give an entertaining talk, but he compares the scale and challenges of Finland's education system to that of a US state. I can accept that for at least some states the scale is comparable. Texas, New York, and California and perhaps Illinois are likely outliers in the size distribution, but that can presumably be solved by carving things into administrative regions. Except on matters of revenue collection, upstate NY surely doesn't want to be lumped in with New York City anyhow. But I do think there are vast differences in the educational challenges faced by the US vs. those faced by Finland. Wikipedia tells me that 91% of the people in Finland speak Finnish and 41% of the population can speak Swedish. There are various other languages spoken by a fraction of the population, but the totals are in the thousand's of people. Compare that to the languages of New York where the total of non-English speakers runs into the millions, thanks to NYC's long term position as a port of entry into the "melting pot" of US culture. I believe there is also more cultural diversity in the US than in Finland and that this makes it easier to run a successful high school in Finland than in Brooklyn.

So, I don't think that Robinson has been entirely convincing in his talk. Nonetheless, he makes lots of valid points about how and how not to effectively run an education system. The prevailing testing culture imposed on US schools seems well captured in this "What real-world skills do you have?" cartoon.

If you didn't see Robinson's previous TED talks on education, see the links from my January, 2013 Blog article "TED Talks on Education". They were enjoyable and informative talks too.

Friday, June 14, 2013

Told You So - MOOC forum participation is important

If you have been a regular reader of this blog and have a long memory, you may recall that back in December of 2012, in my article "Is the Udacity CS101 Course Watered Down?", I strongly emphasized my opinion that a vital part of getting the most out of the course is to participate actively in the forum. As strong as my opinion on this matter was, it was just my opinion. But now I've got data to back me up.

John Duhring has posted to the Google+ STEM Community today a link to an article "Effective Habits of Power Users: A Look At Recent MOOC Research". The article reports on a study of the small percentage of folks who completed the MIT "Circuits and Electronics" course that edX offered as a MOOC in March 2012. About 155,000 folks registered for the online course and only a few more than 7,000 completed the online course and earned a certificate of completion. There was a follow-up study to see what distinguished the folks who made it to the goal line from the rest. The report says the level of participation in the forum is the big differentiator.

Many years ago when I was a college student, I had the pleasure of sharing housing just off-campus with other students taking many of the same courses as I was taking. We had marvelous arguments with each other as to what the professor really was saying in the lectures we'd attended. They were friendly arguments with much hand waving at speeds approaching C to explain space-time dilation and other such hot topics. I'm quite certain that those discussions were an extremely important part of going to a residential college and greatly increased my learning.

I've been watching my wife's kids slow progress as commuter students to a local college and I think part of the problem is that they come home right after class and so don't have any of the discussions that cement into the brain the material of the course lectures. MOOC's bring a similar handicap of splendid isolation of the students from each other, but the forum provides a way for them to virtually get together and have those opinionated arguments with each other through the keyboard (hand-waving is not useful on the forums so some specific verbal skills are called for. At least you are safe from flying meter sticks approaching the speed of light).

So, again, if you take a MOOC, do take the time to participate in the forum associated with the course. Remember what Radio talk-show host Barry Farber used to say at the end of each broadcast: "Keep asking questions!"

Wednesday, June 12, 2013

A Chem teacher cautions against "Pseudoteaching"

Several times now I've come across mentions of "Pseudoteaching" in my reading, and I confess to not quite grokking what that meant. Today, the Google+ STEM community shared this short video and I think I'm beginning to understand.

"Blow something Up!"

I remember Mr. Greenberg, my high school chemistry teacher, but on the one hand I have trouble cataloging him as an "entertainer', but on the other hand I was always troubled by the seeming "magic" in chemistry class. See, when we stir these 2 clear liquids together, it turns pink. My brain would gripe "Why?". And that's probably why I went into software, not chemistry.

I think this video pairs nicely with the one linked to my blog post of 02/2013 "STEM Education Ideas".

Sunday, June 9, 2013

A Frequently Asked Question on the Udacity CS101 Forum

On the Udacity CS101 Forum, I've been surprised at the number of questions that were posted for quiz 2-18. For example there's this question: http://forums.udacity.com/questions/100057486/problem-with-is_friend-quiz?page=1&focusedAnswerId=100057509 and several many more that are much like it.

Now part of the confusion, I think is that when Python prints the string value "True" and prints the Boolean value True, there's no visible distinction between the 2 outputs. e.g.:

>>> print "True", True
True True
>>>

But I think it is perhaps worth noting that in the coursera course "Introduction to Systematic Program Design", there is strong emphasis in the course's "How to Design Functions" recipe on starting by writing down the function's "signature", the types of its inputs and of its outputs, which for quiz 2-18 would be:

# String -> Bool

(Mostly irrelevant is the detail that Udacity CS101 is working in Python 2.7 while the coursera course is working in "Dr. Ratchet", another programming language, and one that is new to me).

For as small a quiz as 2-18 is, and as often as similar questions have shown up in the forum, I think it is clear evidence that CS101 needs to add emphasis on function "signatures". It would also make sense to soup up the auto-grader for this problem to give more specific feedback if the function returns string values instead of the desired Boolean values.

For what it is worth, here's my answer to the question I cited in this article's opening paragraph.

I didn't actually run your code, but I see your function returns string values of "True" or "False". Python has special Boolean values of True and False (NB. no quotation marks). They behave in many ways like 1 and 0, but they are easier to read in the source code.

So, my best guess is that the autograder is looking for Boolean True and False, not the strings that you are handing to it. Further reading: Truthiness and Falsiness. By the way, the version of Python that CS101 is using has changed a little since I wrote that blog article last year. Also, be aware that None is another special value in Python.