Posts tagged ‘image of computer science’
Doug Engelbart, visionary whose inventions led to the modern mouse, hypertext, computer-supported collaborative work, died on July 2 at age 88. Bret Victor wrote a wonderful piece about how statements about Doug’s inventions (like I just made) miss the point about what he was really trying to do. Recommended, and linked below.
If you truly want to understand NLS, you have to forget today. Forget everything you think you know about computers. Forget that you think you know what a computer is. Go back to 1962. And then read his intent.
The least important question you can ask about Engelbart is, “What did he build?” By asking that question, you put yourself in a position to admire him, to stand in awe of his achievements, to worship him as a hero. But worship isn’t useful to anyone. Not you, not him.
The most important question you can ask about Engelbart is, “What world was he trying to create?” By asking that question, you put yourself in a position to create that world yourself.
Would love to be in London on 12 June to hear this debate! The blurb describing the debate does a balanced job of laying out the questions.
“This house believes that Academic Education will never meet the skills needs of the IT Profession”
‘Universities are failing to educate graduates with the skills we need’ – this is the oft heard complaint by employers of IT graduates. Does the problem start in school with the dire state of ICT teaching and assessment at GCSE and A Level? Should academia be trying to produce graduates with only ‘employable skills’ that have a shelf life of at best a couple of years? Are employers really expecting universities to produce a mature, rounded professional with 20 years experience straight out of university? Is it reasonable to expect Academia to bridge the skills gap when employers are not prepared to provide a robust career path for IT professionals?
Audrey Watters’ excellent post on Learning to Code in 2012 pointed me to Jeff Atwood’s piece (linked at the bottom). I want everyone to learn code, so I am in direct contradiction to his position, “Please don’t learn to Code.” Jeff and I disagree primarily on two points, both of which are issues of definition:
- Most people who write code are not trying to create code solutions. Most people who write code are trying to find solutions or create non-code solutions. By “most people,” I do mean quantitatively and I do mean all people, not just professional programmers. We know that there are many more people who write code to accomplish some task, as compared to professional programmers. When I visited the NASA Goddard Visualization Lab last month, I met the director Horace Mitchell, who told me that everyone there writes code, whether they are computer scientists or not. They write code in order to explore their data and create effects that they couldn’t given existing visualization systems. They are trying to create great visualizations, not great code. They simply throw the code away afterward. This is a critical difference between what Jeff is describing and what I hope to see. We agree that the goal is a solution. I want everyone to have the possibility of using code to create their solution, not to create code as the solution.
- Most people who program are not and don’t want to be software developers. Most of the people that I teach (non-CS majors, high school teachers) have zero interest in becoming programmers. They don’t want to be “addicted to code.” They don’t want a career that requires them to code. They want to use coding for their own ends. Brian Dorn’s graphic designers are a great case in point. Over 80% of those who answered his surveys said “No, I am not a programmer,” but everyone who answered his surveys wrote programs of 100 lines or more. Not everyone who “programs” wants to be known as a “programmer.”
The problem is that we in computer science often have blinders on when it comes to computing — we only see people who relate to code and programming as we do, as people in our peer group and community do. There are many people who code because of what it lets them do, not because they want the resulting code.
“You should be learning to write as little code as possible. Ideally none.” And people who want to do interesting, novel things with computers should just wait until a software developer gets around to understanding what they want and coding it for them? I could not disagree more. That’s like saying that the problem with translating the Bible is that it made all that knowledge accessible to lay people, when they should have just waited for the Church to explain it to them. ”Please don’t learn to code” can be interpreted as “Please leave the power of computing to us, and we’ll let you know when we’ll make some available to you.”
It assumes that more code in the world is an inherently desirable thing. In my thirty year career as a programmer, I have found this … not to be the case. Should you learn to write code? No, I can’t get behind that. You should be learning to write as little code as possible. Ideally none.
It assumes that coding is the goal. Software developers tend to be software addicts who think their job is to write code. But it’s not. Their job is to solve problems. Don’t celebrate the creation of code, celebrate the creation of solutions. We have way too many coders addicted to doing just one more line of code already.
Following the announced restructuring of the University of Florida CS program and this classic quote about how Yale shouldn’t be in the business of teaching “trade skills” (meaning, applied software engineering), I’m going to argue that more (not all, but more) academic computer science programs should be shut down or reorganized.
That’s an interesting claim. Unfortunately, the argument isn’t very convincing..
1. Most undergraduates and professionals actually want to learn applied software engineering, not “computer science.” So? That’s not all that industry most wants to hire. That’s not what society most needs.
2. University undergraduates are not discriminating consumers of education. Agreed, which again gets back to why we would care (in Step #1) that that’s what undergraduates think that they want.
3. It should not be necessary for two universities located within commuting distance of each other to have the same academic department. I guess it depends on how large you can make the classrooms and how effective the teachers are at motivating large groups of students to reach completion. Part of the growth of universities has been spurred on by increased demand. I’m not sure how this statement fits into the overall argument.
4. Applied software engineering is a discipline that lends itself to being effectively taught online. Definitely an intriguing claim, but I’m not sure that I agree. Really good software engineering is a design activity, which is best learned in a reflective apprenticeship setting — the kind of high-bandwidth communication that we can’t do yet well on-line. Further, online learning is still hard to do with multiple modalities (yes, you can watch a video, but you can’t read the screen well; and the tools to provide audio narration for clearly-readable code are still developing), and there’s evidence to believe that multiple modalities are key to learning to read code well.
5. Most university computer courses simply aren’t that good if your goal is to get a job doing applied software engineering. I might be willing to agree here, but it’s not clear (a) that we should be teaching only applied software engineering in universities, (b) that students most need applied software engineering, and (c) that it’s not better for everyone (industry, society, students) to aim to teach CS better.
6. University academic departments in general should have limited charters and should be reorganized frequently. That’s another interesting claim, and one I might support, but still doesn’t seem connected to the argument that University CS departments should be shut down.
Mike Hewner may be the most technically adept student with whom I’ve worked — he’s a former Senior Software Engineer from Amazon. He’s written probably the most intensely qualitative dissertation of any student with whom I’ve worked. Mike used a grounded theory approach with 37 interviews. The amount of analysis and coding he did is staggering.
His question is one that impacts all computer science teachers. We know (from lots of sources) that students don’t really understand computer science. Mike set out to document how students’ misunderstandings lead them astray in their CS undergraduate degree program, e.g., avoiding some classes because they misunderstood what they were about, or pursuing some specialization because they thought it was something that it really wasn’t. The surprising result was that he didn’t really find evidence of that. Instead, students simply trusted the curriculum — they didn’t know what was coming, but they didn’t worry about it.
As I learned from Mike’s process, grounded theory results in a “theory,” i.e. a description of a mechanism. Mike’s theory describes how students make educational decisions. His theory tells us that factors that shouldn’t really matter (like whether the intro course is at 8 am) do impact decisions like whether to pursue CS as a major. I’ll give away Mike’s punchline: Students use “enjoyment” to decide if they have an affinity for a subject. They turn the question “Should I be a CS major? Am I good at it?” into “Did I enjoy my CS class? Did I enjoy another class more?” They don’t really distinguish between “I have a hard time understanding functions” and “The class was at 8 am” or “That was a lousy teacher.” Not enjoyment means no affinity, which means look for something else. Once students decide that they have an affinity for something, they do develop a more goal-based decision making process — they’ll stick through the hard classes, because it helps them achieve the goal of the degree that they’ve decided that they have an affinity for.
Mike is defending on Friday — I’m really looking forward to it. I heard the practice talk Tuesday and was impressed. Assuming all goes well, Mike will be joining Rose-Hulman in the Spring.
Title: Student Conceptions About the Field of Computer ScienceMichael HewnerHuman-Centered ComputingSchool of Interactive ComputingCollege of ComputingGeorgia Institute of TechnologyDate: Friday, November 2, 2012Time: 1:00-4:00pmLocation: TSRB 132Committee:————-Prof. Mark Guzdial (Advisor, College of Computing, Georgia Instituteof Technology)Prof. Amy Bruckman (College of Computing, Georgia Institute of Technology)Prof. Keith Edwards (College of Computing, Georgia Institute of Technology)Prof. Ellen Zegura (College of Computing, Georgia Institute of Technology)Prof. Yasmin Kafai (School of Graduate Education, University of Pennsylvania)Abstract:————-Computer Science is a complex field, and even experts do not alwaysagree how the field should be defined. Though a moderate amount isknown about how precollege students think about the field of CS, lessis known about how CS majors’ conceptions of the field develop duringthe undergraduate curriculum. Given the difficulty of understandingCS, how do students make educational decisions like what electives orspecializations to pursue?This work presents a theory of student conceptions of CS, based on 37interviews with students and student advisers and analyzed with agrounded theory approach. Students tend to have one of three mainviews about CS: CS as an academic discipline focused on themathematical study of algorithms, CS as mostly about programming butalso incorporating supporting subfields, and CS as a broad disciplinewith many different (programming and non-programming) subfields. Ihave also developed and piloted a survey instrument to determine howprevalent each kind of conception in the undergraduate population.I also present a theory of student educational decisions in CS.Students do not usually have specific educational goals in CS andinstead take an exploratory approach to their classes. Particularlyenjoyable or unenjoyable classes cause them to narrow theireducational focus. As a result, students do not reason very deeplyabout the CS content of their classes when they make educationaldecisions.This work makes three main contributions: the theory of studentconceptions, the theory of student educational decisions, and thepreliminary survey instrument for evaluating student conceptions.This work has applications in CS curriculum design as well as forfuture research in the CS education community.
The NCWIT Aspirations Awards have highlighted the achievements of high school women aiming for computing careers. Last night, NCWIT started a new award, the Pioneer Award, given to women who paved the way for others in computing.
The awardees were Patricia Palumbo (left in picture) and Lucy Simon Rakov (right), who were both programmers on the Project Mercury Team. I loved their talks, not just for what they did on Project Mercury, but what they did the rest of their lives.
Patricia graduated with a mathematics degree from Barnard College, one of only two women. She was recruited by IBM and worked on the re-entry phase. I loved her story of what she did after that. She earned her Master’s degree in piano, and did work in computer music composition and image processing (Media Computation!). She has retired from computing, but still teaches piano and records in her home studio. She said that mathematics and music have always been her passions, and she saw the computer as “a general purpose tool” that could help any pursuit, any occupation, including music.
Lucy was on a team at IBM of 100 mathematicians, 10 of whom were women. They were among the programmers building the first real-time control system. She worked on the launch sequence, and in particular, worked on importing live radar data into the orbit computations. After IBM, she ran her own business, Lucy Systems Inc. (LSI) for 27 years. She encouraged the audience to follow their passions. She said that, when she’s doing mathematics and computing, she’s in “flow” and loses track of time. She told us to find those kinds of jobs.
We’ve talked here before about the issues of culture that drive women from computing. Here were two women who got into computing before the culture we know today was established, and they were driven by what the computer could do, and what they could do with a computer. That’s what we need to convey, in order to draw more diverse people into computing.
We’ve had Jesse Heines of U. Massachusetts at Lowell visiting with us for the last couple weeks. He gave a GVU Brown Bag talk on Thursday about his Performamatics project — which has an article in this month’s IEEE Computer! Jesse has been teaching a cross-disciplinary course on computational thinking, where he team teaches with a music teacher. Students work in Scratch to explore real music and real computing. For example, they start out inventing musical notations for “found” instruments (like zipping and unzipping a coat), and talk about the kinds of notations we invent in computer science. I particularly enjoyed this video of the music teacher, Alex Ruthmann, performing an etude through live coding.
Jesse and I talked afterward: Where does this go from here? Where could Performamatics have its greatest impact? We talked about how these music examples could be used in introductory computing courses (CS1 and CS2), but that’s not what’s most exciting. Is the greatest potential impact of computing education creating more CS majors, creating more developers? Developers do have a lot of impact, because they build the software that fuels our world (or maybe, that eats our world). But developers don’t have a monopoly on impact.
I argued that the greatest impact for computing educators is on the non-majors and their attitudes about computing. I showed him some quotes that Brian Dorn collected in his ICER 2010 paper about adult graphics designers (who have similar educational backgrounds and interests to Jesse’s non-majors) on their attitudes about computer scientists:
P2: I went to a meeting for some kind of programmers, something or other. And they were OLD, and they were nerdy, and they were boring! And I’m like, this is not my personality. Like I can’t work with people like that. And they worked at like IBM, or places like that. They’ve been doing, they were working with Pascal. And I didn’t…I couldn’t see myself in that lifestyle for that long.
P5: I don’t know a whole ton of programmers, but the ones I know, they enjoy seeing them type up all these numbers and stuff and what it makes things do. Um, whereas I just do it, to get it done and to get paid. To be honest. The design aspect is what really interests me a lot more.
These are adults, perhaps not much different than your state or federal legislators, your school administrators, or even your CEO. Brian’s participants are adults who don’t think much of computer scientists and what they do. There are a lot of adults in the world who don’t think much of computer scientists, despite all evidence of the value of computing and computing professionals in our world.
Will Jesse’s students think the same things about computer scientists 5 years after his course? 10 years later? Or will they have new, better-informed views about computer science and computer scientists? The 2005 paper by Scaffidi, Shaw, and Myers predicted 3 million professional software developers in the US by 2012, and 13 million professionals who program but aren’t software developers. That’s a lot of people programming without seeing themselves as computer scientists or developers. Would even more program if they weren’t predisposed to think that computer science is so uninteresting?
That’s where I think the greatest impact of work like Performamatics might be — in changing the attitudes of the everyday citizens, improving their technical literacy, giving them greater understanding of the computing that permeates their lives, and keeping them open to the possibility that they might be part of that 13 million that needs to use programming in their careers. There will only be so many people who get CS degrees. There will be lots of others who will have attitudes about computing that will influence everything from federal investments to school board policies. It’s a large and important impact to influence those attitudes.
I got beat up a bit after my talk at TTU Tapestry a couple weeks ago. Two teachers from the same school stopped me at lunch, after my keynote, and complained about how we at Georgia Tech run our CS1 for Engineers in MATLAB. ”How can you expect students to be able to succeed in a programming course, with no high school CS? Why don’t you offer some starter course with no programming first?” I tried to explain that students do succeed in all three of our CS1′s with no previous programming experience, and our data suggest that students learn and succeed (e.g., relatively small percentage drop-out or fail) in these courses. (This is in sharp contrast to the Peter Norvig piece about learning Java in 21 days.)
As the teachers went on with their complaints about me and Georgia Tech, more of the story came out. Some of their students had gone to Georgia Tech in Engineering, had floundered in the CS for Engineers course, and were calling these high school teachers regularly for help. ”They spend a huge amount of hours working in labs! More than others in their class, because they didn’t get the chance to take CS in high school. Some kids have band or cheerleading, and they can’t fit CS in. That shouldn’t mean that they have to spend so much extra time in lab to catch up!”
It’s that last argument that I had the most trouble with. Their students didn’t have the background knowledge in CS. It seems clear to me that those students should have to work harder than those that have the background knowledge. That the teachers thought that the extra work was unusual or extreme surprised me. There was an implicit assumption that, because these students didn’t get the background classes due to band and cheerleading, we at Georgia Tech should provide remedial classes. To be clear, it’s not that the CS wasn’t offered at their high school. Their school has two CS teachers. It’s just that cheerleading and band took priority over preparing for the Engineering program at Georgia Tech, which requires computer science.
What is the expectation of high school teachers for the workload in CS1? What is the expectation of high school teachers for what College CS classes will demand? Is it reasonable to expect Colleges to provide the introductory classes that others get in high school? Maybe it is reasonable for Colleges to provide more high school level classes, especially if we want to grow enrollment. But I do worry about the perspective that says that it’s reasonable to skip the intellectual background classes because of non-academic activities. I have nothing against non-academic activities like band and cheerleading. However, the non-academic activities are not an excuse for a lack of background knowledge for higher-education — and if you do miss the background classes, you should expect to have to work harder when you get to College.
A member of the SIGCSE mailing list asked the other day for recommendations on teaching a course on “HCI or Interaction Design.” We at Georgia Tech teach a variety of undergraduate and graduate courses like that, and I figured that lots of others do, too. I was surprised at some of the responses:
- “Our main theme was that computer scientists should know how to implement interfaces but should not try to design them. Frankly, I’ve not seen any evidence that has changed my mind since then.”
- “My personal experience with over 20 years of teaching GUIs is that CS students can be taught to be quite good at the software development aspects of GUIs, that they can be taught to at least understand good interaction design techniques, but that it does not really resonate with them and they do not tend to do it well, and that most of them are hopeless with respect to artistic design.”
Spending too much time in airports lately, I’ve been catching up on some of my TED video watching — the ones that everyone says I have to watch, but I didn’t have time until now. One of those that I watched recently was Stephen Wolfram’s on A New Kind of Science and Wolfram-Alpha. I realized that he’s really making a computing education argument. He explicitly is saying that computing is necessary for understanding the natural world, and all scientists need to learn about computation in order to make the next round of discoveries about how our universe works.
Really? CS is just another form of shop class? Really?
That response heartens Paula M. Krebs, a professor of English at Wheaton College, in Massachusetts, who said she has worried that higher education “could succumb to the language of utility.” Colleges shouldn’t be judged, she argued, on graduates’ first jobs out but rather on the intellectual foundation they provide.
After all, says Ms. Krebs, now an American Council on Education fellow at the University of Massachusetts, “no one thinks high school should be training for the work world only. No one advocates a high-school curriculum of just shop classes, or just computer-science courses. You have to take English, math, history.”
Getting high-quality computer science education into high school would likely smooth out undergraduate enrollment. Rather than the spikes that we get when a new computational technology makes waves, and the lulls when students realize that they don’t know what computer science is, we would have better-informed students. Getting computer science into all high schools would mean that a more diverse population would get to try out computer science, and may discover that they like it. But how do we get good computer science education into high schools? Maybe we take a lesson from Calculus.
In 2010, 245,867 students took the AP Calculus AB test (to contrast with 20,210 AP CS Level A test takers.) That’s evidence that there is a lot of calculus in high schools. How did that happen? Was there a drive to push calculus into all state’s curricula? (I don’t remember ever hearing about “Calculus in the Core”? Was there a national effort to convert existing math teachers into Calculus teachers? Did the Colleges tell the high schools, “We need students who are calculus-literate”?
Here’s my take on how it happened, based on what histories I can find and the growth of Calculus II in high schools. Colleges and universities taught Calculus to undergraduates. The best high schools decided that they would start to teach Calculus, to better prepare their high-achieving students (back in the 1960′s). More colleges and more universities started requiring or expecting calculus. More and more high schools tried to raise their prestige by preparing students to teach calculus. Several organizations (College Board, NCTM, MAA) and universities today train teachers to teach calculus, because those teachers and their schools want it.
If we want high schools to teach computer science to college-bound students, colleges and universities must require computer science of all their students. If not require computer science of all undergraduate students, require it for admission–but be prepared to offer remedial classes, since so few high schools do offer good undergraduate-level computer science. If computer science is important enough for high school students, it’s important enough for undergraduate students.
Efforts like Computing in the Core and the new AP CS:Principles are great ideas, and I hope that they succeed, but they are top-down efforts. A stronger effect comes bottom-up. We want teachers and administrators to say, “My local college requires CS for everyone. I want my students to be well-prepared for college by already knowing CS when they get in the door!” The bottom-up effort is slower — it’s taken decades for calculus to infiltrate high schools to the level that it has. But it’s less expensive and makes change happen pervasively.
If we can’t convince our peers in the colleges and universities that computer science is important, how are we going to convince the high schools? And if we convince our colleges and universities, the high schools will likely follow. We can follow the Calculus lead.
This article from Nature has been leading to a lot of discussions where I’m at. It relates to the CRA’s call for more discussion about post-docs. Are we producing too many PhDs? Or should we preparing more PhD’s for non-academic jobs?
In some countries, including the United States and Japan, people who have trained at great length and expense to be researchers confront a dwindling number of academic jobs, and an industrial sector unable to take up the slack. Supply has outstripped demand and, although few PhD holders end up unemployed, it is not clear that spending years securing this high-level qualification is worth it for a job as, for example, a high-school teacher. In other countries, such as China and India, the economies are developing fast enough to use all the PhDs they can crank out, and more — but the quality of the graduates is not consistent. Only a few nations, including Germany, are successfully tackling the problem by redefining the PhD as training for high-level positions in careers outside academia.
This is clearly the report that Eric Roberts was referencing in his recent (very popular) guest post (over 20K page views!):
For the third year computer science enrollments have increased, ending the precipitous decline in enrollments that followed the bursting of the dot-com bubble in 2000-2001.
When that speculative bubble burst, the subsequent shakeout and unemployment in the tech industry sent enrollments plummeting, raised concerns that the U.S. competitiveness would suffer in the long-run. Enrollments are arching up, but are still well below the peak reached nearly 10 years ago.
The Computer Research Association (CRA), which tracks enrollments and graduation rates for computer science students, says enrollments in computer science programs were up last fall by 10%.
One of our graduating seniors shared the below blog post with me, and I shared it with all the faculty who teach the lower division courses in Georgia Tech’s College of Computing. Andrew makes the strong statement in his blog post: “Students shouldn’t be able to graduate with a Computer Science degree from Georgia Tech without being able to read and write production quality code.”
My sense is that most of the faculty who have responded agree with Andrew. Our students should know how to read significant code (e.g., walking through the whole Linux kernel in OS course). One of our professors talked about the value of watching his own code be rewritten by a professional, expert programmer — it was stunning how much better the code got. We could teach more about reading production code at the University, but I’m not sure that we could teach enough about writing production code at the University. As Bjarne Stroustrup pointed out, faculty don’t build much these days. Programming well has much in common with craft and art, and it’s not something that the University does well.
If the University could not teach reading and writing production code well, where should students learn it? One answer is, “On the job.” Craft is often taught as an apprenticeship. I worry that the computing industry has given up on its professional development responsibilities. We talk about people being lifelong learners. Is that entirely an individual responsibility? When I was at Bell Labs and Bellcore, there were dozens of classes that I could (and did!) take. Where has that gone? Is everyone a contractor these days, or does industry have a responsibility to develop its human resources?
My research interest is more in the computing that everyone needs, and in that sense, I agree with Andrew, but without the word “production.” I fear that we focus too much on having students write code, and not enough time reading code examples. Worked examples are a powerful approach to learning that we simply make too little use of in computer science. We emphasize so much that computer science is about “problem-solving” that we only make students solve problems, as opposed to reading solutions and learning to learn from reading. I’m preparing my CE21 proposal now, and spending a lot of time learning what educational psychologists know about how to write examples that students learn transferable knowledge from – research that we pretty much ignore in computing education.
Literacy is about being able to write and read.
As I come closer and closer to graduation, I’m looking back at the Georgia Tech Computer Science program, the things it did well and not so well.
One piece I feel is missing in the curriculum is having students read good, high quality code. We’re asked to code alone and code in groups, code in labs and code in dorms, code on paper and code in IDEs.
It seems like the administration and professors think this skill just magically appears with practice. I disagree, and I think we can do better.