Archive for June, 2010

Skip college to study computing?

This interesting piece in the NYTimes highlights the growing number of jobs that do not require a formal college degree.  Paul Goodman wrote about this in Compulsory Miseducation in the late 1960’s — that we increasingly require college degrees where they really aren’t necessary, and by forcing everyone down one path, we do many students and our society a disservice.

“It is true that we need more nanosurgeons than we did 10 to 15 years ago,” said Professor Vedder, founder of the Center for College Affordability and Productivity, a research nonprofit in Washington. “But the numbers are still relatively small compared to the numbers of nurses’ aides we’re going to need. We will need hundreds of thousands of them over the next decade.”

And much of their training, he added, might be feasible outside the college setting.

College degrees are simply not necessary for many jobs. Of the 30 jobs projected to grow at the fastest rate over the next decade in the United States, only seven typically require a bachelor’s degree, according to the Bureau of Labor Statistics.

via Plan B – Skip College –

What does this mean for computing education?  I’ve been thinking about this while reviewing chapters of Brian Dorn’s thesis.  His graphics designers value computing education highly, but don’t value College computer science classes at all.  They don’t see that we’re offering what they’re needing.

Should we have non-College paths for computing specialists?  I think that we already do, but perhaps we could use these alternative paths to develop expertise and avoid the confounds in our discussion of computing education.  We often struggle with creating deep thinkers, or skilled practitioners.  Those aren’t necessarily the same thing, and given the hours it takes to develop expertise, it may not be possible to generate both at scale.  In his work on the Great Principles of Computing, Peter Denning has pointed out that our current computing education system does a poor job of creating the experts, the master programmers.  Posters in recent discussions on the SIGCSE members list have emphasized that our current system is well set up for creating “software engineers.”  That’s not necessarily the master craftspeople that Peter is describing.  What would we do differently if our goals were to create the master craftspeople?  Would these master craftspeople be more highly valued and avoid some of the Geek shortage vs. layoffs that we’ve described here?

Could we produce these skilled programmers in our current college settings, or should we create a different path?  Richard Gabriel has argued for an “MFA in Software,” suggesting that we should create master programmers in the way that we create master artists.  In the MFA world, the education would still happen in college, but it wouldn’t have to.  We might create Plan B’s that better serve our students and our society’s needs, without involving colleges.

June 20, 2010 at 5:26 pm 12 comments

How important is a “useful” language for non-majors?

Jennie Kay of Rowan University asked a question on the SIGCSE mailing list: How important is it for the language in the non-majors CS1 course be “useful” to them?  Is important to use tools like Python, or is it okay to use a tool like Alice?  I posted a response this morning, and not wanting to lose the opportunity to reuse a post, I’m sharing it here:

It’s interesting what variables and constituencies we’re not considering so-far in this thread.  We’re talking about what content we should cover and what we feel is best for expressing that content, which are both important and good.

(1) What do the students want?

I’m not suggesting that we should give the students whatever they want, or that they know what’s best for them.  Carl Weiman told us in March that we should start by motivating the students.  (Former Sec’y of Education, Terrell Bell, is quoted saying: “There are 3 things to remember about education.  The first is motivation, the second is motivation, and the third is motivation.”)  Learning computing, especially programming, can be hard.  It’s worthwhile figuring out what motivates the non-major students to spend that time and effort.

In our interviews and surveys of non-majors studying Media Computation, we always find a significant percentage of the students who are worried that we’re teaching them a “toy” language.  It’s not that they want to learn to be professional programmers.  They want to learn something that “I might use later” (related to Brian Harvey’s comment about writing small programs for themselves).  They do worry that Python isn’t valuable enough to them, in terms of future recruiters/employers knowing what it is.  Now, that’s not all students, and I’m sure that different schools have different cultures (e.g., Georgia Tech tends to have a practical/pragmatic culture).  But it’s probably worthwhile asking the non-major students what they’re interested in learning.

(2) What do the non-major faculty say their students need?

Computer science is really general — I can teach variables using just about any kind of data.  I have lots of choices for contexts for homework and examples. I don’t presume to know what application areas or parts of computer science are going to have the most impact on the future of chemistry or sociology.

When we designed Media Computation, I had an advisory board of non-CS faculty.  They wouldn’t let me pick Java or Scheme for their students.  They felt that those languages were too hard and were too much about “serious computer science.”  They liked Python (a story related in a SIGCSE 2005 Symposium Paper on how we designed our non-majors course).  Recently, we had a series of meetings with Biology faculty about creating a CS1 for them.  They didn’t want Java because they said that “nobody in Biology works in Java” (surely an exaggeration, but probably describes accurately trends in their field).  Most interesting was the battles between themselves — half the faculty wanted MATLAB or SciPy for large data analysis and simulations (e.g., for ecology), and half wanted Perl or Python for doing analysis of genomes (e.g., regular expression matching for bioinformatics).

The issues being discussed in this thread are important.  There are other constituencies and stakeholders in the question.

June 18, 2010 at 9:16 am 4 comments

Student-to-Student AP Computer Science Advice

Hélène Martin asked her outgoing AP CS class to give advice to the next class, and they came up with a terrific list.  Here’s only the first one, my favorite — especially the interaction between “tenets” #1 and #5.

The Five Tenets of Programming1. If you feel like you’re falling behind, ask for help, if not from Ms. Martin, then from other students.  You’ll save yourself hours of frustration.2. Don’t be afraid to try your own thing if you get the chance, even if you think it’s beyond your level.  You’ll learn faster if you’re interested in the project.3. Temp variables are awesome.  So are ArrayLists.4. Don’t let the sometimes snooty programming club people argue with you — by the end of the year, you’ll probably know more.5. And NEVER tell yourself you’re bad at coding.  EVER.  This just leads to failure.  See tenant 1.

via AP Computer Science Advice | Hélène Martin.

June 17, 2010 at 8:32 am 4 comments

Studying Engineering before they can spell it

I noticed that this article starts one paragraph with the phrase “Supporters say that engineering reinforces math and science skills,” but offers no phrase starting with “critics say.”  Still, I like the idea of starting kids out early in building and designing things, and reflecting on how they do it.  I do agree with Janine Remillard’s concern about teaching.  We know how challenging it is to teach high school teachers to become computing educators.  How hard is it to get kindergarten teachers to become engineering educators?

All 300 students at Clara E. Coleman Elementary School are learning the A B C’s of engineering this year, even those who cannot yet spell e-n-g-i-n-e-e-r-i-n-g. The high-performing Glen Rock school district, about 22 miles northwest of Manhattan, now teaches 10 to 15 hours of engineering each year to every student in kindergarten through fifth grade, as part of a $100,000 redesign of the science curriculum.

via Many Schools Teach Engineering in Early Grades –

June 15, 2010 at 8:27 pm Leave a comment

Explaining why we reinvent software

Why do we teach students to build the same software that many other people have built before?  Why do we have students build yet another payroll program, or “Hello World!,” or ray-tracing implementation, or fractal tree?  Mostly, these are questions that students have for us about authenticity, but we ask these kinds of questions about ourselves and our own practice too.  There is an on-going debate among data structures teachers about whether it really makes sense to teach students how to build yet another linked list or tree implementation, when almost no one implements their own data structures anymore, and the existing libraries are so good.  I have heard Systems Researchers complain that it doesn’t make sense for academic researchers to build their own operating systems and even compilers anymore, because nobody is going to use anything except Windows, MacOS, and *nix anymore and it’s too hard to compete with the existing offerings.

I heard two answers to these kinds of questions this last weekend.

The first was at the final meeting of our second cohort of Disciplinary Commons for Computing Educators (DCCE) teachers.  I was invited to the meeting last Saturday to hear the teachers (high school and undergraduate) talk about their course portfolios — their reflections on their own practice, assessment, philosophies, successes, weaknesses, and plans for the future.

I hope to post more about the DCCE later, because it was fascinating, but one quote from one teacher particularly struck me.  It was from Bruce Joyce, a teacher educator.

We need to reinvent the wheel every once in a while, not because we need a lot of wheels, but because we need a lot of inventors.

Thus, the point isn’t to build another linked list or tree implementation.  The point is to create people who know how to do those things.  The point of the exercise is to change the student, not create the product.

The second answer came from listening to Bob Edwards Weekend radio show while I cleaned and packed on Sunday. (Got back from Hawaii Thursday, and I’m teaching in Amherst, MA yesterday and today.  Still working on getting to sleep before midnight.)  His guest was Mark Frauenfelder who has just written a book Made by hand: Searching for meaning in a throwaway world. Frauenfelder talks about the complexity of today’s technology discourages people from exploring how to build things themselves, though programming reminds people that “the physical world is also hackable.”  Frauenfelder’s examples of people “making” range from chicken coops to gardens.

He emphasizes the importance of making as a way of changing our relationship with the things in our lives.  Bob Edwards pushed him, and Frauenfelder agreed that making things yourself was more expensive, slower, and resulted in a lower quality product than having an expert make something for you or buying it yourself.

Then why do it?  He had several reasons.  He argued, for example, that something made for yourself can be customized to your needs, and can work exactly the way you want it to.  I didn’t buy that argument.  Not only is it harder to build something ourselves, but I’m less likely to get the specialized parts to work just the way I want.  And how many of us have special needs for our chicken coops or gardens, anyway?  His stronger argument was that we make things in order to change how we think about them.  You don’t appreciate something that you buy to throw away.  You appreciate something differently that you have to work for, that you studied and built by hand.

That argument works for software and students, too.  I can see it with the teachers that I’m working with this week here in Amherst.  Yesterday, I had a teacher who repeatedly found paths to image files on her disk, by invoking the pickAFile() function in Python.  pickAFile() returns a string which is a path to a file.  She kept asking me, “Why isn’t the picture opening?”  I explained that she needed to create the picture from the filename (using makePicture()).  She had a hard time getting the idea of invoking a different function on the file path string, of creating an object, and mostly, of having to do something for herself that her software had always done for her.  By creating the process herself, she was making explicit a process that she had never even noticed before.

For any student in any discipline, most of what one is doing is learning what others have already learned.  Some of the process is re-doing what others have done — not to create something that we don’t already have, or to do something better.  It’s about creating the student, changing the way that the student sees the world.  No, it’s not “authentic” (in the Shaffer and Resnick sense), but it is sometimes necessary to create the kinds of inventors we need in the world, who can build on the shoulders of giants to make the truly new things we need.

June 15, 2010 at 7:08 am 7 comments

Fred Brooks says that we should pay teachers more

Interesting interview with Fred Brooks that touches on computer science education.

What’s the state of computer science education in the U.S.? Our Achilles’ heel is elementary and middle school preparation. We are not getting as many people prepared to go into technology — and well prepared to go into technology — as we should.

I see some remarkable accomplishments happening in strong schools. But I see disaster happening in many, many schools. I think there are organizational reasons why that’s true. I think the teaching profession is not paid and recognized as well relative to other professions. As a consequence, I don’t think that many people who two generations ago would have gone into teaching go into teaching anymore. I also think that bureaucratic requirements put on teachers now hamper teaching of a lot of substance.

via The Grill: Fred Brooks.

June 11, 2010 at 12:35 pm 2 comments

Core National Standards released: Got Computing?

The Core National Standards were released June 2.  While the draft had language about computer science, I don’t see any in the released document.  There is talk about spreadsheets and modeling and even “computer algebra systems,” there is no discussion of computer science or programming.  As expected, the creation of these standards is running into opposition from those who prefer America’s long tradition of local community control of curriculum.

The greatest fear is that America’s long tradition of local control of schools will be a loss for the nation. But what made sense when the U.S. was sparsely settled in the Colonial era is hard to justify in the new global economy. It’s no longer possible to argue compellingly that geography should determine curriculum. Yet it’s going to be difficult for many people to accept the change.

What may help them is the realization that the U.S. is one of the few developed countries that lack national standards for public schools. National standards alone admittedly do not guarantee better education. (Nine of the 10 lowest-scoring countries in math, and eight of the lowest-scoring countries in science have them, as well as eight of the 10 highest-scoring countries.) But local control often has resulted in weakened standards in order for states to make themselves look good under the federal No Child Left Behind Act.

via It’s Time to Adopt National Standards – Walt Gardner’s Reality Check – Education Week.

June 11, 2010 at 12:02 pm 2 comments

Back and Board

I’m back from an amazing vacation in Hawaii.  Highlights included running on a lava lake, exploring an undeveloped section of a lava tube, watching eruptions at night and from a helicopter, snorkeling in Kealakekua Bay with a dozen or more (hard to count fins on other sides of the bay) dolphins leaping and spinning around us, and watching fireworks while sitting in the warm sand at Waikiki.  I discovered again that I find surfing frustrating, and I newly discovered how much I enjoy Hawaiian Poke.

My inbox has an enormous unread count on it, of course.  My iPad arrived while I was gone, so I’m having fun using that to wade through the massive pile of missives.  Not all of my attention is on the email, though, since I am teaching five days of workshops in Massachusetts starting Monday.  This will be my first time to teach Scratch and only my second to teach Alice with Media Computation, and I have materials to prepare today.  I’m attending the last DCCE meeting of the year tomorrow.  If your note to me is in my inbox unread, my apologies and I’ll get to it as soon as I can, but probably not until next week.

One piece of relevant news.  You may recall that I posted my SIGCSE Board statement here last January. The election results were announced this last week, I’m honored to have been elected.  I am now a member of the ACM SIGCSE Board for the next three years, as one of the “members at large.”  It’s a great group of people on the Board, and I look forward to serving with them.

June 11, 2010 at 8:40 am 1 comment

Evaluation as a Voice for the Kids in the Back of the Room

I’ve been lurking recently on a conversation between K-12 computing teachers about learning in their classes.  One teacher (of elementary school children) spoke of how much programming her kids do.  She said that they easily use variables, tests, and iteration.  A respondent spoke of all that his young daughter could do in programming, including creating elaborate stories that she shared with others on the Internet.

So what exactly do those claims mean?  I’m sure that they mean exactly what they say, and that each speaker is telling the truth.  The first teacher certainly has kids who are mastering variables, conditionals, and iteration.  The proud father is certainly describing what his daughter can do.  Are there broader claims being made?  Is the teacher telling us that all her students are mastering all those things?  Or are the teacher and father saying that because some kids are mastering these concepts, it’s possible for any student to master those topics?  Is the teacher making  a claim about the methods or tools being used, that those are particularly effective technicques?

What if those broader claims are wrong?  What if not all students in the teacher’s class are mastering these concepts?  What if the techniques are not effective for all students?  What if it’s not possible for all students to learn to the same level with the same techniques?  I’ll bet that some of these broader claims are wrong.  But how would anyone know? How would the teacher know?

A Different Take on Evaluation

I often hear education developers and researchers bemoaning standardized testing — that it’s inadequate for measuring student learning (probably true), that it can cramp the style of a teacher (also probably true), that it encourages teachers to teach to the test (also probably true), and that good, veteran teachers already know how things are going in their classes.  That last part is the one that I now believe is false.  Without some kind of careful, systematic measurement, most teachers do not know what is going on in their classes.  University teachers are particularly ill-informed as to what’s going on in their large, lecture classes. The more that I learn about the Media Computation classes, the more I realize that I only knew about averages in the class, not the distribution of learning and performance across the class.

I do mean evaluation here.  Assessment is about measuring and improving students learning. Evaluation is about measurement that leads to decisions.  Most decisions about computing education (and probably education more generally, but my data are drawn from computing education) are made without measurement, without data, based on a teacher’s gut instinct — and that “gut instinct” is most certainly wrong.  “Gut instinct” told us that the Earth is flat, that the sun and moon revolved around the Earth, and that the only programming language we need ever learn is C and its variants.  A teacher’s “gut instinct” is probably informed by data. But which data, and how does a teacher avoid bias in interpreting those data?

Teachers are heavily influenced by the best students in the class.  In her book on Computers and Classroom Culture, Janet Schofield found that teachers tended to talk to the best students the most — they were the most interesting to the teachers, and the ones that the teachers wanted to please the most.  Thus, when a teacher says that something is “working” or “not working” without systemic, evaluative data, the teacher is most often talking about only the upper end of the class distribution.  As has been discussed previously in this blog, the higher-knowledge and lower-knowledge students have very different needs and respond differently to educational interventions.

Evaluation should not be about limiting the teacher or even needs to create an accurate picture of students’ learning.  Evaluation should give voice to the lower-ability kids, the kids who often hide out in the back of the class.  The teacher easily hears the kids at the front of the class, and most often tunes the class to their needs.  Careful, systematic evaluation is about hearing all the students, including those that the teacher may not be excited about hearing.

Examples from Media Computation

Lana Yarosh’s study of our Media Computation data structures class is a case in point.  Lana interviewed seven stdents in the class, analyzed those transcripts, and then developed a survey for the whole class in order to check the generality of her interview claims. One of the interviewed students hated the media content: “I didn’t take this class to learn how to make pretty pictures.” Then in the survey, 11% of all the students agreed with the statement that “Working with media is a waste of time that could be used to learn the material in greater depth.” However 60-70% (different for each statement) agreed with the statement that media made the class more interesting and that they did extra work on at least one assignment in order to make it look “cool.”  That last one is important — extra work means more time on task, which creates more opportunity to learn,

We don’t know the grade distribution of the students in Lana’s study.  Our hypothesis is that the 11% who didn’t like the media were drawn mostly from the top students.  Those are the students who want the content, as quickly as possible and with as few frills as possible.

At Georgia Tech, the teachers of the Media Computation data structures class are under a lot of pressure to reduce the amount of media coverage in the class.  The top students want less media.  Those top students are the ones who become undergraduate teaching assistants (TAs), and those TAs are not keen on the media, so the teacher also has the TA’s pushing for reducing the media content.  Without Lana’s study, the teacher would have no way to know that the majority of students actually like the media content.

Davide Fossati has been studying the Media Computation CS1 class recently.  We know that the Media Computation class has led to reduced failure rates, but we don’t know if it leads to similar learning to our other CS1’s. We have three different CS1’s at Georgia Tech: the Robotics one for CS and Science majors, the MATLAB one for Engineering majors, and the Media Computation one for Liberal Arts, Architecture, Management, and most Computational Media majors.  After the robotics course, CS majors take a course on object-oriented programming in Java.  (I actually designed the Media Computation data structures course to come between the CS1 and the Java course, but almost no student takes that path because of the cost of an extra course.  Design and implementation are different things.)  We can compare the three different CS1’s by looking at performance in that Java course.  That’s not a measure of learning, but it is an equal comparison point — it’s an evaluation measurement, even if it’s not a good assessment measurement.

Davide has looked at four years worth of data from these courses.  What he finds is that there is a significant difference between the three CS1’s in terms of performance in the Java course, but those differences are grade dependent.  Students who get A’s in these three classes perform identically in the Java course.  However, students who get lower grades in the Media Computation class do significantly worse in the Java course than the other two CS1’s.

Davide’s data are the first that we have that give us a comparison point between our three CS1’s.  His data tell us that the top students are doing just fine (which is just under half the class), but the rest of students, while passing, are not reaching the same level of performance.  Maybe that’s acceptable — that’s part of the decision part of using evaluation data.  My point is that without Davide’s data, we’d have no idea that the lower half of the students (in my metaphor, the students in the back of the room) were not performing comparably to the other students.  They would not have a voice in the decisions to be made about the course and how to support all the students in the course.

Conclusion: Consider Threats to Validity

As teachers, we’re used to making the decisions.  We make decisions about what “counts” towards grades and what doesn’t.  We decide standards on tests and grades for the class.  We also make decisions about what to teach and how.

Teachers often tell me about making changes in their class because “students don’t like this” or “don’t think that’s worthwhile” or “aren’t doing well enough in that subject.”  That may be right.  I am asking teachers to consider the possibility that they’re wrong, that they are only looking at some of the students.

In our human-centered computing classes at Georgia Tech, we talk about “threats to validity.”  We consider the possibility that our claims are wrong, and how we could know if we are wrong.  Teachers should do this, too.

Next time you make a class change because of a claim about “the students in the class,” please gather some evaluative data from all the students in the class.  Consider the possibility that you’re not hearing from the whole class.  Do a survey to find out what the whole class thinks.  Use an exam question that lets you see how the whole class is performing. Gather some systematic data that can speak for those kids hiding out in the back of your class.

June 5, 2010 at 4:48 pm 11 comments

Computing at odds with getting Faster

I just finished reading James Gleick’s book Faster: The Acceleration of Just About Everything.  It’s a 10 year old book now, but the story is still valid today.  I didn’t enjoy it as much as his books Chaos or Genius. However, the points of Faster are particularly relevant for computing education.

One of Gleick’s anecdotes was on how AT&T sold Touch Tone dialing in 1964 as saving an average of ten seconds per seven-digit number dialed.  Now, we have speed dialing.

In the post-Touch Tone generation, you probably have speed-dial buttons on your telephone.  Investing a half-hour in learning to program them is like advancing a hundred dollars to buy a year’s supply of light at a penny discount…To save time, you must invest time.

Do some students and end-user programmers invest time in learning to program to “advance a hundred dollars to buy a year’s supply of light at a penny discount”?  Are they looking to program in order to save time, to do things faster and more efficiently?  Do they give up on learning to program when they realize that it doesn’t work that way?

The problem is that I don’t think that ever really happens for the individual writing code for him or herself.  It’s hard to program.  The time cost of programming amortizes over users.  The development cost of Microsoft Office, amortized over millions of users, results in a profit for Microsoft.  A few hours of a programmer’s time on some feature of Excel enables many hours of use of that feature by many users.  But for any individual writing code for him or herself?  Takes a lot more than 30 minutes of programming software to get the same usefulness of 30 minutes of programming speed-deal buttons.

So why program?  In the Media Computation Python CS1 class, we tell students that they should program in order to create a replicable process (if you need something to be done the same way, maybe by others, many times), to create a process that many people can use (like when commercial software is created), or to communicate a process (like when trying to explain a theory of how something dynamic happens, like DNA transcription or evolution).  Paul Graham tells us that hackers write software to create beauty.  But few people successfully program in order to save time for themselves — you’d have to do something many times to make the benefits of use outweigh the cost of development.

Maybe it shouldn’t be that way.  Maybe software development should be easier.  I wonder if you could make it easier, and still keep all the fun, all the communicative power of programing languages, all the “Passion, Beauty, Joy, and Awe“?

The overall story of Faster may be relevant for understanding the decline in interest in computer science.  Gleick claims that “boredom” is actually a modern word and concept.  “To bore meant, at first, something another person could do to you, specifically by speaking too long, too rudely, and too irrelevantly.”  Today, we are bored by simple silence — by not enough challenges, not enough multi-tasking, by too many choices.  We have so many options for entertainment that we choose many at once, so that we drive, while listening to the radio, and talking on the cell phone (not texting or doing email, of course).  Gleick (naturally, as an author) bemoans the death of the book, because readers are too easily bored to pay attention to a whole book, and always have the options of magazines or blogs or just 140 character “tweets.”  Why would anyone make a career choice like “computer science” when there are so many other choices that are less boring, take less concentrated focus, take less time?

Gleick provides an afterword for the electronic version of the book (I read it on my Kindle), where he speaks to some of these concerns:

I believed when I began Faster, and believe now more than ever, that we are reckless in closing our eyes to the acceleration of our world. We think we know this stuff, and we fail to see connections. We struggle to perceive the process of change even as we ourselves are changing.

Tags: ,

Powered by Qumana

June 2, 2010 at 11:14 pm 8 comments

How to help professional teachers share their practice

Reminds me of Josh Tenenberg’s and Sally Fincher’s Disciplinary Commons and our own Disciplinary Commons for Computing Educators.  There’s a real challenge in sharing our teaching practices, making them consistent (where useful, like for grading in this piece), and measuring teaching practices to determine effectiveness.  We know that teaching is really important, but we don’t have good ways of defining, showing, and teaching what makes for effective computing teaching.

A student taking an oral examination can be filmed and their performance ‘marked’ with written, sound or visual comments using a multimedia tool called LimSee3. The resulting multimedia document can be shared so that other teachers and examiners can develop consistent approaches to marking.

This innovative tool is just one of a series developed during the Europe-wide Palette project to help ‘communities of practice’, such as teachers. Communities of practice are disparate groups of people – usually professionals – who strive to define, shape, share and manage a body of knowledge.

via ICT Results – Re-learning how to help professionals share their practice.

June 2, 2010 at 12:37 pm Leave a comment

Newer Posts

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 9,005 other followers


Recent Posts

Blog Stats

  • 1,879,159 hits
June 2010

CS Teaching Tips