Presentation on theme: "Providing a Context to Motivate Non- Majors Into Computing Mark Guzdial College of Computing/GVU Georgia Institute of Technology."— Presentation transcript:
Providing a Context to Motivate Non- Majors Into Computing Mark Guzdial College of Computing/GVU Georgia Institute of Technology
Story Georgia Tech and the challenge of teaching programming to everyone Contextualized CS as a way of motivating the study of computer science What does contextualized CS look like? Introduction to Media Computation as an example Assessment results from three different CS1’s Where we’re going next
Georgia Tech Georgia Institute of Technology 28% female overall Colleges: Computing (11% female undergrad), Engineering, Ivan Allen (Liberal Arts), Sciences, Management, Architecture
Universal requirement of computing Georgia Tech requires a course in computing of every student. Consider computing a necessary prerequisite in a technological institution. Only a single course has been available: CS1321 Introduction to Computing Developed for our majors Uses Scheme with the text How to Design Programs
Universal access to computing In 1961, Alan Perlis argued that computer science should be part of a liberal education. Explicitly, he argued that all students should learn to program. Consider a contrast with Calculus Calculus is about rates, and that’s important to many. Computer science is about process, which is important to everyone The best uses of technology are going to come from outside of computer science. If we want computing technologies to become useful, they have to get out of our hands.
How close are we to being able to teach everyone CS? Not very: CS1 is one of the most despised courses for non- majors At many departments, CS retention rates are lower than the rest of campus At Georgia Tech: 65% for 1995 cohort, vs. 73% for Engineeering Drop-out rates in CS1 near 50% at many institutions At Georigia Tech: 28% WFD (Withdrawl, F, or D rate) typically; but with some spikes. Female enrollment in CS has been dropping nationally
Why? Several recent studies and books claim that CS instruction tends to dissuade anyone but white males “Tedious,” “taught without application relevance,” “boring,” “lacking creativity,” “asocial”
The Challenge In order to motivate students to care about computing, we need to make it relevant, social, and creative
Contextualized CS1 During Spring 2003, Georgia Tech offered three different CS1 courses: CS1321: Traditional CS1 (n=127, in section studied) COE1361: Computing for Engineers (n=75) Same conceptual content as CS1321 but in MATLAB and Java with data-first applications. CS1315: Introduction to Media Computation (n=121) Introduction to programming and computing concepts, using media manipulation as a context.
Comparing the three courses Learning Objectives Programming LanguageMajors CS1 (CS1321) Students as software developers SchemeAll, but designed for CS majors COE (COE1361) Tool buildersMATLAB & Java Engineering MediaComp (CS1315) Tool modifiersPython (Jython) Management, Liberal arts, Architecture, Biology
Assessment Led by Ph.D. student Andrea Forte With Lauren Rich (Undergrad) and Rachel Fithian (MS HCI) Surveys in all three courses: Beginning, midterm, and final survey Interviews with students in CS1 and MediaComp Demographic data
Start of term survey: What is Computer Science? CourseDon't Know How Computers Work Program- ming Scary/ Difficult Required Class Web/ Internet CS14.9%6.1%51.2%8.5%7.3%0.0% MediaComp4.7%7.0%48.8%10.5%15.1%8.1% COE11.4%18.2%45.5%2.3%4.5%0.0% The audiences for these classes come in with different preconceptions.
Particular Focus: Introduction to Media Computation 121 students in Spring 2003, with 300 planned for Fall 03 and 450 for Spring 04 2/3 female in Spring 2003 MediaComp Focus: Learning programming and CS concepts within the context of media manipulation and creation Converting images to greyscale and negatives, splicing and reversing sounds, writing programs to generate HTML, creating movies out of Web-accessed content.
Motivating the Computing As professionals, these students will often the use the computer as a communications medium. All media are going digital, and digital media are manipulated with software. Knowing how to program, then, is a communications skill.
def negative(picture): for px in getPixels(picture): red=getRed(px) green=getGreen(px) blue=getBlue(px) negColor=makeColor(255-red,255-green,255-blue) setColor(px,negColor) def clearRed(picture): for pixel in getPixels(picture): setRed(pixel,0) def greyscale(picture): for p in getPixels(picture): redness=getRed(p) greenness=getGreen(p) blueness=getBlue(p) luminance=(redness+blueness+greenness)/3 setColor(p, makeColor(luminance,luminance,luminance))
Use a loop! Our first picture recipe def decreaseRed(picture): for p in getPixels(picture): value=getRed(p) setRed(p,value*0.5) Used like this: >>> file="/Users/guzdial/mediasources/barbara.jpg" >>> picture=makePicture(file) >>> show(picture) >>> decreaseRed(picture) >>> repaint(picture) original
Recipe to Increase the Volume def increaseVolume(sound): for sample in getSamples(sound): value = getSample(sample) setSample(sample,value * 2) Using it: >>> f="/Users/guzdial/mediasources/gettysburg10.wav" >>> s=makeSound(f) >>> increaseVolume(s) >>> play(s) >>> writeSoundTo(s,"/Users/guzdial/mediasources/louder-g10.wav")
Generalizing Algorithms We talk about algorithm complexity later in the course, after the media is done. We talk about different approaches to the same problem, where the criteria might be aesthetics or correctness, instead of speed or size For example, generating greyscale During the media, we point out similar themes in different functions. We refer to them as “sub-recipes”
Scaling the picture down def copyBarbsFaceSmaller(): # Set up the source and target pictures barbf=getMediaPath("barbara.jpg") barb = makePicture(barbf) canvasf = getMediaPath("7inX95in.jpg") canvas = makePicture(canvasf) # Now, do the actual copying sourceX = 45 for targetX in range(100,100+((200-45)/2)): sourceY = 25 for targetY in range(100,100+((200-25)/2)): color = getColor(getPixel(barb,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) sourceY = sourceY + 2 sourceX = sourceX + 2 show(barb) show(canvas) return canvas
Scaling the picture up def copyBarbsFaceLarger(): # Set up the source and target pictures barbf=getMediaPath("barbara.jpg") barb = makePicture(barbf) canvasf = getMediaPath("7inX95in.jpg") canvas = makePicture(canvasf) # Now, do the actual copying sourceX = 45 for targetX in range(100,100+((200-45)*2)): sourceY = 25 for targetY in range(100,100+((200-25)*2)): color = getColor(getPixel(barb,int(sourceX),int(sourceY))) setColor(getPixel(canvas,targetX,targetY), color) sourceY = sourceY sourceX = sourceX show(barb) show(canvas) return canvas
Recipe for halving the frequency of a sound def half(filename): source = makeSound(filename) target = makeSound(filename) sourceIndex = 1 for targetIndex in range(1, getLength( target)+1): setSampleValueAt( target, targetIndex, getSampleValueAt( source, int(sourceIndex))) sourceIndex = sourceIndex play(target) return target This is how a sampling synthesizer works! Here are the pieces that do it
Compare these two def half(filename): source = makeSound(filename) target = makeSound(filename) sourceIndex = 1 for targetIndex in range(1, getLength( target)+1): setSampleValueAt( target, targetIndex, getSampleValueAt( source, int(sourceIndex))) sourceIndex = sourceIndex play(target) return target def copyBarbsFaceLarger(): # Set up the source and target pictures barbf=getMediaPath("barbara.jpg") barb = makePicture(barbf) canvasf = getMediaPath("7inX95in.jpg") canvas = makePicture(canvasf) # Now, do the actual copying sourceX = 45 for targetX in range(100,100+((200-45)*2)): sourceY = 25 for targetY in range(100,100+((200-25)*2)): color = getColor( getPixel(barb,int(sourceX),int(sourceY))) setColor(getPixel(canvas,targetX,targetY), color) sourceY = sourceY sourceX = sourceX show(barb) show(canvas) return canvas
Both of them are sampling Both of them have three parts: Setting up the objects: Source and target A loop where samples or pixels are copied from one place to another To decrease the frequency or the size, we take each sample/pixel twice In both cases, we do that by incrementing the index by 0.5 and taking the integer of the index Finishing up and returning the result Making it better: Averaging/blurring to smooth the result There are serious algorithm issues here, but it’s not sorting.
Using your personal pictures
And messin’ with them
Relevance through Data-first Computing Real users come to a user with data that they care about, then they (unwillingly) learn the computer to manipulate their data as they need. MediaComp works the same. We use pictures of students in class demonstrations. Students do use their own pictures as starting points for manipulations. Some students reversed sounds looking for hidden messages. They started doing this in the second week How often do students use their second week of CS1 on their own data? How does that change the students’ relationship to the material? In COE course, 30% of the students reported at midterm that they had used some of the course content.
Rough overview of Syllabus Defining and executing functions Pictures Psychophysics, data structures, defining functions, for loops, if conditionals Bitmap vs. vector notations Sounds Psychophysics, data structures, defining functions, for loops, if conditionals Sampled sounds vs. synthesized, MP3 vs. MIDI Text Converting between media, generating HTML, database, and networking Movies Then, Computer Science
Computer science as a solution to their problems “Writing programs is hard! Are there ways to make it easier? Or at least shorter?” Object-oriented programming Functional programming and recursion “Movie-manipulating programs take a long time to execute. Why?” Algorithmic complexity “Why is PhotoShop so much faster?” Compiling vs. interpreting Machine language and how the computer works
Assignments encourage learning in social contexts Homework are all collaborative Quizzes are preceded by nearly-identical, collaborative pre-quizzes Two “take-home exams” (programming assignments) are non-collaborative
Assignments encourage creativity For several homeworks, the task is to manipulate media in some way, but we don’t care what media For example, creating a collage or building an animation Encouraging homework results to be posted to CoWeb (collaborative website) in galleries
First Homework assignment Homework 1: Write a program named hw1 to accept a picture as input, and change its pixels as follows: Set the green component to 125% of its current value Decrease the blue by 25% Decrease the red by 75%
Solutions shared in the CoWeb
Homework #3: Make a collage with images that you modify by code only—any images you want
End of term results Of the 121 students who started, only three dropped MediaComp. When asked “What part of this class should not change?” 19% of MediaComp students mentioned the CoWeb 20% mentioned “collaboration” in some form WFD Rate CS142.9% COE18.7% MediaComp11.5%
Midterm survey: “What do you like best about this class so far?” Don't like it /Nothing Enjoy Content Content is Useful Traditional CS118.2%12.1%0.0% COE12.9%16.1%25.8% MediaComp0.0%21.3%12.4%
Midterm MediaComp Survey: “What do you like about the class?” “I like the feeling when I finally get something to work.” “Very applicable to everyday life.” ‘I dreaded CS, but ALL of the topics thus far have been applicable to my future career (& personal) plans—there isn't anything I don't like about this class!!!”
Non-majors surprised to find that they like contextualized computing Interviewer: Has this class changed your opinion of computer science? MediaComp Student (female): Yes, I’m not intimidated by it anymore. My mom was so surprised when I told her I want to be a TA she almost fell on the floor, ‘cause she’s heard me complain for years about taking this class and now I want to go do it to myself again!
Non-major students want to learn about computing From an interview with an Engineering student in traditional CS1: “I think if anything [should be required] it should be the second one [course], like Java. A lot of people know that Scheme isn’t used and so a lot of people want to copy the homework and get through it. They’re not very motivated. I’ve heard that Java and C and all those, they are different, and I’d like to learn C and Java and all that.”
Where we’re going next This was only the pilot. We should still be skeptical. Where do these students go next? Does MediaComp influence how they use computing in their own major? Does it influence any of them to take more CS? How does it change as it goes out beyond? Spring ’04: Others teaching it at Tech. Already being trialed elsewhere (at Gainesville College) How well does Python transfer to other languages and contexts? Exploring a high school version of the course.
Conclusions Our classes are driving people away from computer science. Part of the problem is that we are too abstracted away from the relevant problem domains. We are not Mathematics. These students won’t use Calculus every day, But they will use Computing. We have to teach better. Contextualized CS seems to be leading to more motivation and better performance. Hard issues here: Budgets and teaching loads—”for non-majors?!?” But it may be our greatest impact as a discipline— extending CS beyond our borders.
Acknowledgements Course materials development: Jason Ergle, Claire Bailey, Ellie Harmon, Toby Ho, David Raines, Joshua Sklare, Adam Wilson, Andrea Forte, Mark Richman, Matt Wallace, Alisa Bandlow, Keith McDermott, Derek Chambless, Larry Olson, Eric Mickley, Lauren Biddle. Assessment: Andrea Forte, Rachel Fithian, Lauren Rich Thanks for support to Vice-Provost Bob McMath and the Al West Fund, to GVU and the College of Computing, and the National Science Foundation
For further information Course CoWeb: Where we planned the course: