Posts tagged ‘CS1’
Definitely the most interesting MOOC experiment I’ve seen in the latest batches — an edX CS1 aimed at community college students, and offered in a blended format. I very much hope that they do good assessment here. If MOOCs are going to serve as an alternative to face-to-face classes for the majority of students, they have to work at the community college level and have better than face-to-face retention rates. Retention (and completion) rates are too low already in community colleges. If MOOCs are going to be part of a solution, part of making education better, then they need to have high completion rates.
The fast-moving world of online education, where anyone can take classes at a world-famous university, is making a new foray into the community college system, with a personal twist.
In a partnership billed as the first of its kind, the online education provider edX plans to announce Monday that it has teamed up with two Massachusetts community colleges to offer computer science classes that will combine virtual and classroom instruction.
Beginning next term, Bunker Hill and MassBay community colleges will offer versions of an online MIT course that will be supplemented with on-campus classes. Those classes, to be taught by instructors at the two-year schools, will give students a chance to review the online material and receive personal help.
“This allows for more one-to-one faculty mentoring” than exclusively online courses, said John O’Donnell, president of MassBay Community College in Wellesley. O’Donnell added that the schools’ involvement allows edX “to test its course content on a broader range of students.”
Students will pay the same amount they would for a standard class.
From Leigh Ann Sudol-DeLyser (firstname.lastname@example.org):
I am looking for faculty who are able to help me find subjects for my final study of my PhD thesis. I have built an online pedagogical IDE which uses problem knowledge to give students feedback about algorithmic components as they are writing code for simple array algorithms.
I am looking for faculty who are willing to assign a 5-problem sequence as a part of a homework assignment or final exam review in a CS1 course in Java. The 5 problems consist of writing code to find the sum of an array of integers, the maximum number in an array of integers, counting the number of values in a range of integers, and completing an indexOf method for an array of integers. These problems are similar to ones you might find in a system like CodingBat where students are given a method header and asked to implement code for the interior of a single method.
If you are willing to help me graduate (please!) send me your name, the university you teach at, and the number of students in your class and I will contact you with login codes for the students and further directions. I am looking for classes of all sizes from all types of colleges and universities. Please forward to your CS1 instructors where applicable.
This class sounds cool and similar to our “Computational Freakonomics” course, but at the data analysis stage rather than the statistics stage. I found that Allen Downey has taught another, also similar course “Think Stats” which dives into the algorithms behind the statistics. It’s an interesting set of classes that focus on relevance and introducing computing through a real-world data context.
The most unique feature of our class is that every assignment (after the first, which introduces Python basics) uses real-world data: DNA files straight out of a sequencer, measurements of ocean characteristics (salinity, chemical concentrations) and plankton biodiversity, social networking connections and messages, election returns, economic reports, etc. Whereas many classes explain that programming will be useful in the real world or give simplistic problems with a flavor of scientific analysis, we are not aware of other classes taught from a computer science perspective that use real-world datasets. (But, perhaps such exist; we would be happy to learn about them.)
Blockly is a web-based, graphical programming language. Users can drag blocks together to build an application. No typing required.
Check out the demos:
Maze – Use Blockly to solve a maze.
RTL – See what Blockly looks like in right-to-left mode (for Arabic and Hebrew).
Blockly is currently a technology preview. We want developers to be able to play with Blockly, give feedback, and think of novel uses for it. All the code is free and open source. Join the mailing list and let us know what you think.
CalArts Awarded National Science Foundation Grant to Teach Computer Science through the Arts | CalArts
Boy, do I want to learn more about this! Chuck and Processing, and two semesters — it sounds like Media Computation on steroids!
The National Science Foundation (NSF) has awarded California Institute of the Arts (CalArts) a grant of $111,881 to develop a STEM (Science, Technology, Engineering and Mathematics) curriculum for undergraduate students across the Institute’s diverse arts disciplines. The two-semester curriculum is designed to teach essential computer science skills to beginners. Classes will begin in Fall 2012 and are open to students in CalArts’ six schools—Art, Critical Studies, Dance, Film/Video, Music and Theater.
This innovative arts-centered approach to teaching computer science—developed by Ajay Kapur, Associate Dean of Research and Development in Digital Arts, and Permanent Visiting Lecturer Perry R. Cook, founder of the Princeton University Sound Lab—offers a model for teaching that can be replicated at other arts institutions and extended to students in similar non-traditional STEM contexts.
I’ve raised this question before, but since I just saw Nora Newcombe speak at NCWIT, I thought it was worth raising the issue again. Here’s my picture of one of her slides — could definitely have used jitter-removal on my camera, but I hope it’s clear enough to make the point.
This is from a longitudinal study, testing students’ visual ability, then tracking what fields they go into later. Having significant visual ability most strongly predicts an Engineering career, but in second place (and really close) is “Mathematics and Computer Science.” That score at the bottom is worth noting: Having significant visual ability is negatively correlated with going into Education. Nora points out that this is a significant problem. Visual skills are not fixed. Training in visual skills improves those skills, and the effect is durable and transferable. But, the researchers at SILC found that teachers with low visual skills had more anxiety about teaching visual skills, and those teachers depressed the impact on their students. A key part of Nora’s talk was showing how the gender gap in visual skills can be easily reduced with training (relating to the earlier discussion about intelligence), such that women perform just as well as men.
The Spatial Intelligence and Learning Center (SILC) is now its sixth year of a ten year program. I don’t think that they’re going to get to computer science before the 10th year, but I hope that someone does. The results in mathematics alone are fascinating and suggest some significant interventions for computer science. For example, Nora mentioned an in-press paper by Sheryl Sorby showing how teaching students how to improve their spatial skills improved their performance in Calculus, and I have heard that she has similar results about computer science. Could we improve learning in computer science (especially data structures) by teaching spatial skills first?
A common question I get about contextualized approaches to CS1 is: “How can we possibly offer more than one introductory course with our few teachers?” Valerie Barr has a nice paper in the recent Journal of Computing Sciences in Schools where she explains how her small department was able to offer multiple CS1′s, and the positive impact it had on their enrollment.
The department currently has 6 full time faculty members, and a 6 course per year teaching load. Each introductory course is taught studio style, with integrated lecture and hands-on work. The old CS1 had a separate lab session and counted as 1.5 courses of teaching load. Now the introductory courses (except Programming for Engineers) continue this model, meet the additional time and count as 1.5 courses for the faculty member, allowing substantial time for hands-on activities. Each section is capped at 18 students and taught in a computer lab in order to facilitate the transition between lecture and hands-on work.
In order to make room in the course schedule for the increased number of CS1 offerings, the department eliminated the old CS0 course. A number of additional changes were made in order to accommodate the new approach to the introductory CS curriculum: reduction of the number of proscribed courses for the major from 8 (out of 10) to 5 (this has the added benefit, by increasing the number of electives, of giving students more flexibility and choice within the general guidelines of the major); put elective courses on a rotation schedule so that each one is taught every other or every third year; made available to students a 4-year schedule of offerings so that they can plan according to the course rotation.
The key interesting phrase in Rich’s quote below is “higher-quality.” Could we get higher-quality on-line for CS1? And by what measure?
There’s been a huge thread in the SIGCSE members’ list asking, “Is Python better than Java for introductory computer science?” I thought that the best insight in that thread came from Doug Blank when he pointed out that we don’t have one outcome for CS1. How do you define “better” when we don’t agree on where we’re trying to get? Is “better” getting more majors? Getting more retention in CS1? Getting more retention into the Sophomore year? Getting more students into internships in the summer? Getting more access? Or getting more learning — and then, about CS knowledge or CS skills? And which knowledge and skills?
It’s an open research question (or maybe an engineering challenge) whether we can create an on-line introductory computing science course that is better than a face-to-face CS1. But a bigger challenge is whether we can agree on what “better” means.
Mr. DeMillo: All you have to do is add up the amount of money spent on courses. Just take an introduction to computer science. Add up the amount of money that’s spent nationwide on introductory programming courses. It’s a big number, I’ll bet. What is the value received for that spend? If, in fact, there’s a large student population that can be served by a higher-quality course, what’s the argument for spending all that money on 6,000 introduction to programming courses?
A YouTube video of my talk (with Alan’s introduction) at C5 is now available.
Interesting finding that supporting older adults learning better problem-solving skills seems to lead to a change in a personality trait called “openness.” I find this interesting for two reasons. First, it’s wonderful to see continuing evidence about the plasticity of the human mind. Surprisingly little is “fixed” or “innate.” Second, I wonder how “openness” relates to “self-efficacy.” We heard at ICER 2011 how self-efficacy plays a significant role in student ability to succeed in introductory computing. Is there an implication here that if we could improve students’ understanding of computer science, before programming, that we could enhance their openness or self-efficacy, possibly leading to more success? That’s a related hypothesis to what we aim for in CSLearning4U (that studying programming in the small, worksheet-style, will make programming sessions more effective — more learning, less time, less pain), and I’d love to see more evidence for this.
Personality psychologists describe openness as one of five major personality traits. Studies suggest that the other four traits (agreeableness, conscientiousness, neuroticism and extraversion) operate independently of a person’s cognitive abilities. But openness — being flexible and creative, embracing new ideas and taking on challenging intellectual or cultural pursuits — does appear to be correlated with cognitive abilities.
Mike Goldweber sent me a link to this video at BBC News – Newsnight – Is lack of computer science teaching failing pupils?. I’m a bit worried about the overall theme of this story, that it’s important to teach UK kids programming in order to save the British gaming industry. (Are there that many jobs available in gaming? So much that we should teach every kid in school to program?) But the quote right at the beginning, around 44 seconds in, is a thought that I’ve been mulling a good bit recently.
We’ve got to teach kids to program, but not as a subject in isolation.
That sentiment is in keeping with Seymour Papert’s original vision for Logo in schools. In his book “The Children’s Machine,” Seymour critiqued the process of “schooling” that took Logo out of its natural home as a tool for exploration and expression in mathematics and science class, and instead “schoolified” it. Logo was shoved into the lab (far away from the interest of teachers), and made into a separate subject to be taught, after the pre-requisite “Keyboarding Skills” course. Seymour saw programming as going beyond “the 3 R’s,” in an amazingly prescient Wired piece from 1993, where one can see the seeds of the Open Learning effort and individualized learning support through technology.
This issue of teaching programming in the context of other courses helps to address some of the concerns voiced in the recent discussion about computer science as a liberal art. It’s a point I hear often from high school teacher advocates. ”The curriculum is too full. If we put CS in, what comes out?” Seymour was saying that that’s the wrong way to think about it, and I’m starting to think he was right on this count (among many others–some of his insights take me longer to grok). It’s not about doing something more. It’s about teaching what we have now, but in a new and more powerful way. It’s Andy diSessa’s argument for computing literacy — how much powerful are we when we are as literate with computing as we are with numbers or text?
Set aside the issue of programming being a weird (and arguably, badly designed for the general purpose of insight and expression) notation, and even set aside the technology issue. Imagine that we had a new form of writing, that wasn’t that much different than English (e.g., it’s not Esperanto), but was significantly more powerful (e.g., more accurate, more understandable, more usable for mapping to theory, more practical for solving problems) for expressing science and mathematics. And what’s more, once you used that language, you could easily visualize and simulate what you described. Wouldn’t that be worth teaching to every science and mathematics student, at least at the undergraduate level? Certainly, we would want that for every graduate student. Why is it not worth teaching, just because it’s a notation that runs on a computer?
I have advocated for some years now “Computing for Everyone,” that Alan Perlis had it right when he argued in 1961 that everyone on campus should learn to program. Perlis advocated a required course for everyone, and so have I. Maybe that’s the wrong end-goal. I understand the argument from CSTA, that it’s hard enough to teach enough CS teachers in high schools — how in the world can we teach every mathematics and science teacher how to use and teach programming? I totally get that we don’t know how to get there. But that doesn’t make it the wrong desired goal. (I’m reading in the middle of Abelard to Apple now, so I might be particularly receptive to learning-with0ut-courses these days.)
How do we get there, where students have true computing literacy and programming is part of science and mathematics? Are required courses in computing part of the trajectory to the desired state? Or is there a different path to integrating computing into the rest of the curriculum?
I’ve been exchanging email lately with a CS teacher using media computation in Python with her 9th grade class this year. She has been pushing the boundaries of JES, trying to do more interactive programming. It’s hard to do with JES. Swing and Jython don’t get along all that well, particularly from within JES, a Swing application. I finally asked her: Why not just use media computation for what it’s good for? Play to its strengths: Make collages, sound collages, music, and videos. Interactivity is hard for early beginners. She had this response.
I need to develop an approach that appeals to all of the people who have traditionally signed up for programming classes (because they want to shoot things) along with the underrepresented groups who have not signed up for programming because they don’t want to shoot things.
It’s a great comment, and it’s a deep question. Does she? Does she need to serve both audiences? Do we need to teach, in every classroom, to engage every student?
This issue comes up when I talk to people about Threads. ”We love your approach, but we have a small school. We can’t cover all those Threads. What should we do?” The answer is not “whatever we have been doing, pretty much decontextualized, which works for any problem” (which is what I normally hear). Go ahead and specialize. Teach to a context. Students (especially novices who don’t understand what computing is for) will learn more, and more deeply, than by teaching in a decontextualized way. Your students will be more marketable by knowing about computing + X, where X is some interesting applications context. Pick a context that draws the students that you want to encourage and engage.
At the post-secondary level, you don’t have to please everybody in every class in every school. Students have choices. Colleges should play to their strengths. Larger Universities can offer more options on the same campus. For smaller schools, build coalitions so students have choices between the schools.
But the question is harder for the high school teacher. Her students don’t have a choice. If she doesn’t engage them, they’re not going to get computer science somewhere else.
Here’s my answer, though I realize that it comes at some risk: Give up on the shooters. There’s a lot more of those who weren’t interested in computing traditionally, than those that were. Computer science in the last decades has drawn from only a small demographic. Play to the larger audience. Play to the audience with different interests than those most commonly in CS today. Teach to those who don’t shoot.
I don’t disagree with the claim here, that students don’t learn to program that well in one semester of CS. But I think the author doesn’t also consider that maybe our expectations are too high in CS2, too. Programming isn’t learned quickly. If we don’t have it in high schools, most people are going to take multiple semesters in undergrad to become competent — for expertise, multiple years.
In particular, I believe that expecting a student to learn to program well enough to study Computer Science in a single 15-week course is almost as absurd as expecting a student with no instrumental musical experience to be ready to join the university orchestra after 15 weeks. There are, of course, musical prodigies that can handle this challenge. Likewise, there are many “natural born programmers” who learn how to program with very little apparent effort. However, these individuals are the exception, not the rule.
Project Euler sounds great! The author of the now oft-forwarded Atlantic piece is making a mistake by extrapolating from himself to everyone.
The article (linked below) tells the story of how author James Somers finally learned to program by discovering Project Euler, an effort to teach programming by leading students through a sequence of carefully constructed programming problems. Somers “finally” learned to program after first failing at reading one of the enormous tomes on how to program and then after failing to learn through AP CS.
I don’t doubt that Somers really did learn a lot from Project Euler, and I believe that thousands have and will in the future. The “inductive chain” theory described below seems plausible. Project Euler is a terrific idea! I also believe, though, that some people do learn (at least, get started) from those massive tomes, and others do learn through the more engineering-oriented approach that Somers dislikes in AP CS. Some may even learn from playing with digital media.
I personally don’t find Project Euler’s problems attractive. Somers gives this example of a Project Euler problem that inspired him:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
I completely believe that Somers was inspired by this. I do not have an “itch” to solve this one. I don’t find mathematical puzzles that fun. I like to make things, so when I was getting started learning to program, I was motivated to play around and explore by building things. My first sizable just-for-fun program played tic-tac-toe, and most of my just-for-fun projects were interpreters and compilers. Today, I like to make interesting pictures and sounds with Media Computation. My experience doesn’t mean that Somers is wrong about Project Euler working for him. He’s wrong in believing it can work for everybody.
We need multiple paths. Math works to motivate some. Engineering for others. Media for still others. I agree that getting the playful learning that Somers wants is about engagement and motivation. Math doesn’t engage and motivate everyone.
Project Euler, named for the Swiss mathematician Leonhard Euler, is popular more than 150,000 users have submitted 2,630,835 solutions precisely because Colin Hughes — and later, a team of eight or nine hand-picked helpers — crafted problems that lots of people get the itch to solve. And its an effective teacher because those problems are arranged like the programs in the ORIC-1s manual, in what Hughes calls an “inductive chain”:The problems range in difficulty and for many the experience is inductive chain learning. That is, by solving one problem it will expose you to a new concept that allows you to undertake a previously inaccessible problem. So the determined participant will slowly but surely work his/her way through every problem.
It’s Spring Break at Georgia Tech this week. Last week was crammed full of midterm grading. Now that it’s Spring, I’m traveling north to colder climates.
Today, I’m at Carnegie Mellon University to speak in their Program for Interdisciplinary Education Research (PIER) today, and at the “EdBag” tomorrow. I’m excited (and a bit nervous) — I’ve never spoken here at CMU before. Leigh Ann Sudol-DeLyser is my student host, and she gave me a great tour of the campus yesterday. For today’s talk, I’m giving a variation of my “Meeting the Computing Needs for Everyone” talk (describing Brian Dorn’s work and the role of contextualized computing education in this goal), but with special attention to the Alan Perlis lecture from 1961.
I re-read that chapter again yesterday. Wow — it’s really clear that the idea of teaching everyone an introductory course on CS has its home here, at the University that grew out of Carnegie Tech. While I had remembered that Peter Elias of MIT had pushed back against the idea of such a course as being unnecessary, I hadn’t remembered how J.C.R. Licklider and Perlis responded.
- Elias argues that programming is just a “mental chore” that the computer should be able to take care of for us: “If the computers, together with sufficiently ingenious languages and programming systems, are capable of doing everything that Professor Perlis describes—and I believe they are (and more)—then they should be ingenious enough to do it without the human symbiote being obliged to perform the mechanical chores which are a huge part of current programming effort, and which are a large part of what must now be taught in the introductory course that he proposes.”
- Licklider emphasizes what might be possible with this new kind of language. “Peter, I think the first apes who tried to talk with one another decided that learning language was a dreadful bore…But some people write poetry in the language we speak.”
- Perlis makes a really interesting pedagogical rebuttal. He says that what he really wants to teach are abstractions, and a course in programming is the best way he can think of doing that. He also says (not quoted below) that he has no evidence for this, but believes it strongly. “The purpose of a course in programming is to teach people how to construct and analyze processes…A course in programming is concerned with abstraction: the abstraction of constructing, analyzing, and describing processes…The point is to make the students construct complex processes out of simpler ones….A properly designed programming course will develop these abilities better than any other course.”
- John McCarthy (father of Lisp) also responded in opposition to Elias. “Programming is the art of stating procedures. Prior to the development of digital computers, one did not have to state procedures precisely, and no languages were developed for stating procedures precisely. Now we have a tool that will carry out any procedure, provided we can state this procedure sufficiently well. It is utopian to suppose that either English or some combination of English and mathematics will turn out to be the appropriate language for stating procedures.” Interesting how McCarthy and Licklider, as in Donald Knuth’s Turing award lecture, talk about programming as art.
Leigh Ann told me that the “EdBag” is a place to play with new and incomplete ideas. I’m planning to talk about the challenge of producing more high school CS teachers, including alternatives like Dave Patterson’s proposal. I’ve been thinking a lot about using a worked examples approach, informed by Ashok Goel’s structure-behavior-function model of design cognition.
Tomorrow, I fly to DC and spend two days reviewing NSF proposals. Still trying to get the rest of my proposals read today, and all the reviews written tonight. Thursday night, I’ll get back home to Atlanta where it really is Spring already.