Tag Archives: undergraduate

The law does not and should not define our morals

I attended the Advanced in Security Education workshop earlier this week where I gave a lightning talk about our Communications Security and Social Movements class.  The last lightning talk (which, unlike all the others, was allowed to go far longer than the 5 allotted minutes), by Anthony Serapiglia of Saint Vincent College, was about his class on forensic training where, as part of the class activities, students retrieve data from old cell phones (mostly flip phones) that are in a variety of states (e.g. seemingly broken, infected with ransom-ware).

Cellphones available from Goodwill for $6.

Serapiglia described how easy and cheaply one can get these cell phones from Goodwill’s online store (“by the pound”).  That’s right, he is using real people’s old phones that were discarded (in many cases it seems that they were discarded because people thought they were unusable), lost or stolen and ended up at Goodwill.  He has students retrieve personally identifiable information from the phones, phones that he himself has not looked at the data on.  He illustrates the retrieved data in a series of increasingly sensationalized photos: a family picnic; a child playing; a full frontal nude selfie; and 4 photos from the same phone of a man and his girlfriend, a hand holding presumably illicit drugs, a bookie sheet, and a man lying unconscious beat up (which Serapiglia describes as the owner of the phone having not paid his gambling debts).

I was feeling increasingly sick as I listened to his talk until he brought up a slide that had some mention of ethics on it, at which point I felt even worse.  His take on the ethical considerations were that of protecting his students from the pictures and other data they would uncover from the phones.  On the one hand, his mention of a media spot that he claimed to have done before the course started describing how easy it is to get data off old phones seemed to be his personal stand-in for informed consent. On the other hand, his saying several times that his university’s legal counsel gave the green light for the use of people’s presumed discarded data in his class, indicated that he was using the law as his moral and ethical guide.  He ended the talk asking us if we would use such real data in our classrooms, and, given the outline of his talk, the only consideration seemed to be out of concern for what the students would be exposed to.

I was relieved that my hand wasn’t the only hand to snap up after the talk.  The first questioner pointed out that such data use would not be legal in Europe and (paraphrasing) that European law, in this case, more closely aligns with morality.  I pointed out that if one uses the law to define ones ethics that you will far short every time and that the law in the US drags behind commonly held societal beliefs.  Another questioner suggested Serapiglia try an experiment to see if his presumed implicit consent closely matches what he would get from explicit consent: put out a call for volunteer cell phones to be used in the same manner; if he doesn’t get any donations, then perhaps he shouldn’t used “discarded” phones either.  Except for one audience member who thought it would be okay to use such an exercise in a graduate, but not an undergraduate, class, everyone admonished the use of people’s old cell phones without their explicit permission.

We have seen more than once, the treatment of electronic data as divorced from the people who created it, claiming at least implicitly that it does not warrant the same level of human-subjects-research protections that we afford people in person.  And while IRBs don’t evaluate non-research use of human data, that doesn’t mean that we shouldn’t apply the same principles to our classroom activities.  Perhaps even more importantly we should be aware of the ethics we are implicitly teaching through our classroom activities, as they shape our students.

Bringing current events into the technical classroom

I spent last summer thinking about how to bring something related to the climate crisis into my fall undergraduate algorithms class.  In this class, I have converged on having 4-5 projects covering iterative, divide and conquer, dynamic programming, linear programming and heuristics.  These projects each have a practical component where an algorithm is implemented.  Linear programming seemed to be the tool that I could use to “solve” some problem in climate change.  It wasn’t until I stumbled upon this article by Robert Vanderbei suggesting an upper-level class project wherein students fit a curve to daily temperature recordings.  The suggested curve is the superposition of

  • a sinusoidal curve with a period of one year to model the change in seasons,
  • a sinusoidal curve with a period of 10.7 years to model the solar cycle, and
  • a linear term representing any drift in mean daily temperatures.

I adapted the suggested project to my class and had them fit such a curve, using GLPK, to 60 years of daily temperature recordings for Corvallis.


I provided the students with the data and offered bonus credit for students who repeated the project for another location (downloading data from NOAA).  The students found the project challenging but seemed to appreciate the tangibility of the project, so I think I will likewise adapt other projects. The students could then interpret the coefficient of the linear term as the amount of warming in average daily temperatures.

A few interesting things came up.  For example, apparently two different versions of GLPK find two different “optimal” solutions to the same LP — with different values.  For more details, please see the project description.

Next year, I think I will have them choose their own location by default as I think it is a useful experience to clean data …

Undergraduate algorithms study guide

A year ago, I was just finishing putting together materials for the new online version of our undergraduate algorithms course.  I’ve finally compiled all that material into one webpage: available here. There are a few things not yet posted, but this is essentially the content of our undergraduate algorithms course less the assignments and exams. As when I teach the on-site course, I relied heavily on material from others, notably:

Though the “interactive questions” were written by me, they were not implemented by me.  I have to thank Oregon State University’s eCampus group for that.

Hopefully this will be helpful to others, though it assumes the particular prerequisites of our program …

Classroom competition, TSP style

I changed up a few things in my undergraduate algorithms course this year.  I probably wouldn’t have if I wasn’t charged with designing an online version of the same course, one that would be static for at least three years, so far as I understand it.

One major thing that I changed was the assignment component.  This course has always (officially, by way of ABET-geared course learning objectives) included programming assignments.  Something that I abhored.  There was a post by Michael Mitzenmacher that changed my opinion (a bit) on this front. But mostly the thought that non-students would be looking closely at the various components of my course convinced me to take things a bit more seriously.

In previous iterations, I would completely separate “programming” assignments from “non-programming” assignments which is really terrible I know.  So this year I took a 180 and had 4 projects, each geared toward a major topic of the course with design, analysis and implementation/experimental analysis components.  Much better.  (Except for group unfairness woes as mentioned in my previous post.)

For the final project, I left things very open ended.  Design an algorithm to solve (2D Euclidean instances of) TSP.  In class, this allowed me to talk about verifiers (how else would I trust their solutions?), NP, give them a taste of a difficult problem, etc.  The assignment would culminate with a two-step competition. One to solve instances over a period of 24 hours and one to solve instances — live in class — in 4 minutes.  Before the assignment was even released I realized how competitive the students would get, requiring me (a.k.a. our amazing IT guy, Todd Shechter) to set up virtual machines for the competition to ensure fairness.  It was definitely convenient that DIMACS has a large set of instances available with optimal tour lengths listed.  Thank you, experimental algorithms community!

I have to say, I was impressed.  In a stroke of genius, I enforced a 2-page report limit so that I was actually able to easily discern their main techniques.  There were several equivalence classes of algorithms.  Two groups implemented Christofides’ algorithm, and, true to form, it got within 50% of optimal.  I tried hard to keep my impartiality in reading the reports on algorithms by biological metaphor and was pleased to see that my abhorrence played out in algorithms that didn’t do so well.  Several groups that did very well started with some sort of greedily generated tour and then made local changes that improved the tour.  I’d like to highlight the algorithm by Francis Vo and Soo Hyun Yoo, who were the only team to take advantage of the 2D Euclidean-ess of the problem and had an algorithm that outperformed all the others (almost all of the time), solved one of the 4-minute instances to optimality and added fuel to my “take advantage of the domain” banner I love to wave.  They started with a(n almost) convex hull of the points, iteratively added the remaining points to this tour greedily, and cleaned up with local search.  They even animated their algorithm to aid in design:

I will definitely make improvements (the in class competition was a little chaotic and not super interesting for the students who didn’t make into later rounds) but I enjoyed it and I think many of the students did.

The $17,500 computer science degree

Update: the tuition for this program has been changed and now amounts to about $30,000.  Sadly.

Our department has announced a new, entirely online, bachelor’s degree in computer science which can be completed in one year.  Given that we are a public university, this translates to a $17,500 degree*.

I will admit, when I first heard the idea I did not have very good thoughts about it.  My negative thoughts included

  • one year? yeah right!
  • what about programming languages, theory of computation, AI, etc.?
  • are we designing ourselves out of jobs? (courses will be administered by non-tenure-track instructors)
  • how will standards be maintained?

But then, I got to hear the details.  First, it is a post-baccalaureate degree.  So, students will already have a bachelor’s degree, and will have need to meet OSU’s post-baccalaureate admissions standards.  They will likely be more mature and perhaps working as they study.  I’m also glad to see that they are cautioning that completing the degree in one year would be a very intensive, full-time schedule and include two and three-year plans of study.  The degree is intended as a second degree, so all optional classes in CS are not mandatory.  Of course, this must ruffle some feathers as many courses that are required for graduation in our regular 4-year, first-degree program are not required by this post-bacc degree.  (I’m glad algorithms made the cut.)  As a post-bacc degree, we will still  have the usual cohort of students seeking a CS degree straight out of high-school.  Finally, it seems there is a consensus to require 2 proctored exams per course and, at least for the first few years, the assignments and exams will be the same as in the on-site classes.

I’ve been thinking more generally about online classes and online degrees and their social implications.  One commenter, pointed out some very valid points of the benefits of online education, that I have to agree with.  This degree provides an opportunity for the un- or under-employed to retrain for less than the cost of a new car.  The flexible schedule and location of the online classes will allow non-traditional students to study when they can, at the pace that they can.  I’m excited to see who will complete this program and from where they study.  I’d like to see a concerted effort to recruit women to complete this degree to perhaps counter the gender imbalance in our on-site program.

So, this coming fall, I will be converting my undergraduate algorithms class into an online class in time for a Winter 2013 release.  I’m excited to do this** and I’m sure I will have plenty to say about it in the fall.

* ~$15,000 for tuition (in- or out-of-state) plus additional expenses, such as textbooks (~$50 per course), a compatible laptop or computer (~$600), graduation fee ($300) and 2 proctored exams per course (~$30 each).

** And very glad that my department treats this course development as one class-worth of teaching assignment.

*** If you have questions about the program, please contact the program director directly at PostBacCS-online@oregonstate.edu.

Undergraduate-appropriate summer projects

(updated: now with links to projects)

A friend asked me, in reference to my post about the call for proposals for REU positions from CRA, “What kind of projects did you have them work on?”

Two years ago, I proposed two projects and used one.  (I was to have two students, but sadly the shuttle carrying one student to her local airport crashed and she ended up hospitalized with serious injuries.  Last I heard, many months after the accident, she was recovering very well and CRA had set up a last-minute local project for her to work on.)  I include here the two project descriptions I submitted to CRA:

This summer was spent mostly on experimental work rather than theoretical and I was glad for the experimental plan.

For the OSU Math REU program — now accepting applications! — last summer, I proposed a rough area and at the start of the summer changed my mind (while keeping with the spirit of the original area) so that my two summer students could work with my graduate student on what she had already started.  The summer was very successful, resulting in the completion of a paper in which the undergraduate students proved two main theorems.  I had given a thorough outline for one theorem and very little guidance for the second theorem.  They also experimented with generating examples which I think aided in a feeling of productivity and surely helped them understand the problem at hand better. Their summer project report is available here.

Based on this very limited experience, I have the following advice for theoretical-based REUs:

  • If possible, have two undergraduate students working together.
  • Involve a graduate student.  Even a junior graduate student can help fill-in course-level knowledge and can help advise if you need to travel during the summer.
  • Have an experimental (back-up) component.  If they get stuck, the experimental component can help with a sense of productivity and accomplishment.
  • Seek out math, computer-science double majors.

I’d love to hear what other advice/ideas people have.

Did I mention:  the Oregon State University Math REU Program is now accepting applications!  Math/CS double majors are welcome and highly desired!

Wonderful, funded undergraduates for the summer

The solicitation for summer research projects for undergraduates from the CRA-W is out: the DREU.  I highly recommend proposing a project.  For those who haven’t heard of it, the DREU are Distributed Research Experiences for Undergraduates (from Underrepresented Groups in Computer Science and Engineering). How it works: profs suggest projects; students apply; the fine people who run DREU match students to profs, handle payment and logistics for the students; the students show up and you get them for 10 weeks.  It has a very high reward to effort ratio.

The students are amazing.  I had one student through DREU two summers ago.  It worked out so well, she came back as my Masters student, and I hope she’ll continue to do a Ph.D. with me.  (Recruitment tool, anyone?)  I would have hoped to repeat this last summer, but I instead advised two (also amazing) students through an in-house REU program run by the math department at OSU.

The deadline for suggesting projects is February 15, and generally they are short on projects, not on students.

Death by Powerpoint

In my grad algorithms course, I am teaching in an increasingly Socratic way (not all the way there yet) and covering less material as well.  Well, going through fewer examples.  In my freshman “Orientation to Computer Science” course, I am doing this much less so.  I find it challenging because, while the material is quite easy, I have no idea of the background of the students.  How do you teach Socratically to a group of students, a third of whom already know what you are teaching and a third who think you are speaking Greek?  I’ve still managed to keep the classroom somewhat interactive, but it definitely needs work.  Maybe next year.

But it came to a screeching sleep-inducing halt on Wednesday.  I needed/wanted to teach the students basic computer architecture.  Now, this is a topic that I have somehow escaped learning anything but the most basic of knowledge about.  I scrounged up some slides online as a starting point and decided the only way I too could teach this material is with slides.  I never teach with slides.  This really was only the second time.  The first time was for a 15-minute teaching sample I had to give during an interview in which they refused to provide anything other than a projector.  I was glad to have asked.

It’s a bad sign that I was bored by lecture.  The students certainly didn’t look any better. Never again.

Of course, about an hour after the lecture – having learned, digested, taught the material – I realized there definitely is a way to cover basic computer architecture Socratically and, in retrospect – as this was the one topic that was new to everyone in the class – this may have been the one place that I could have really teach in a deep, meaningful way.

Oh well.  Next time.

Note to self: turn off cell-phone data connection during class

In my large intro class I used Robozzle to talk about program control and introduce recursion. Robozzle does use a true call stack and to solve some puzzles (for example, learning stackrecursedlearning stack 2limit your stackcounting – green) you really need to understand both recursion and how the to use the call stack.  This is week one of computer science, so  I didn’t get into a huge amount of detail, but it did seem to get the “newbies” engaged and make the “hackers” realize that they do have something to learn.  Only a tiny handful of students could solve the aforementioned puzzle before being taught how the call stack can be used.  Overall, it was a success (I think), and I recommend it as a learning tool.

A colleague once mentioned “boy, this would be difficult to debug” and reminded me that the iPhone version of the game shows the call stack – or a version thereof – in the “step-through” mode.  I decided it would be a good idea to use the document camera to show this live (rather than hand-drawing the call-stack on the board).  It never even occurred to me that while my phone was exposed under the document camera, I could receive a call from <embarrassing pet name> or a text of <face-reddening material>.  And then “BING”.

Cue my nightmare.

Thankfully the text message was some automated one from AT&T.  However, in my “deer in headlights” teaching state, it didn’t occur to me to then turn off my phone’s data connection.  Nervously, I made it through the next 10 or so minutes of class without incident.

Summer undergraduate research projects in theory

“In theory” as in “in theoretical computer science”.

I am lucky to have a student through the CRA-W Distributed Research Experiences for Undergraduates program. Anna Harutyunyan joins me for 10 weeks from Utah State University.  I think it might be more of a learning experience for me than Anna (although my opinion is biased) and I appreciate Anna’s patience through my own growing pains as an advisor.  Hopefully there haven’t been too many pains.

Anna is working on a generalization of the string alignment problem.  I have an idea for an algorithm, and I have an idea of how one might analyze that algorithm, but it uses tools in which I am not so well versed.  In addition to reading up on these tools, Anna has implemented the algorithm.  This is not something I am in the habit of doing, but it is very satisfying to see an algorithm “work” when you are stuck on how to analyze it.

That said, my expectations for “proving something” with Anna are low – how does one prove something in 10 weeks?  With a new project, I feel that the chance of proving something in such a short amount of time is next to impossible.  With a project well underway, there is a much better chance, but there is a lot of start-up time involved in learning the state of affairs.  So I’m torn as to whether to start a new project with a summer student or include them on parts of an existing project.  The former must give the student a stronger sense of ownership over the work; the latter a better chance for the feeling of accomplishment.

Has anyone out there had luck or have advice on picking theory topics for research projects?

While my main goal is for Anna to have a positive experience this summer, at the very least I am having a wonderful time.  Anna has had some wonderful ideas that I know would not have dawned on me – it’s exciting!  I can’t wait to exploit educate more young minds.