Mark Guzdial's Amazon Blog

 
« Go to Mark Guzdial's full Amazon Blog

The goal of any curriculum is to prepare the students for their future.  In just a handful of years, teachers aim to give the students the background to be successful for several decades.  The challenge of creating a curriculum is the challenge of predicting the future.

Alan Kay's famous phrase, "The best way to predict the future is to invent it," doesn't work so well for curricula.  There is always a temptation to create a particularly desired future by teaching students that that is the expected future.  Many societies have tried to change the culture through schools, perhaps by changing the history books to tell a story that leads better to the desired future.  The hitch is that schooling involves students, who think for themselves and have their own goals.

A group from the ACM SIGPLAN is proposing a new standard for computer science undergraduate curricula.  The proposal is to teach much more about functional programming -- explicitly, to teach as many hours on functional programming as we currently teach on object-oriented programming.  (Since functional programming is much easier to learn than object-oriented programming, the result might be that students know functional twice as well as object-oriented!)

I completely agree that all computer science students should learn about functional programming and functional programming languages.  I disagree that we should teach as much about functional as about object-oriented.  I completely disagree that we should try to mandate that much functional programming through manipulation of the curriculum standards.

Students have sensitive lie-detectors that are prone to false negatives.  Every semester that I teach Introduction to Media Computation, I get at least one student who asks, "Why are you teaching us Python, some toy language that you made up?  Why don't you teach us something real like Java?"  My students in that course are non-CS majors, who have even less understanding of what's "real" in the field of computer science than our majors.  Still, I would imagine that even CS majors would have a hard time believing that we faculty predict that knowing functional programming will be just as important knowing object-oriented programming in the students' future.  That's the message we would be sending by teaching as much about functional programming as we do about object-oriented programming.

By any measure that you care to name, object-oriented programming is a couple magnitudes more important, more useful, and more common than functional programming in any CS students' future.  Most programming projects in the future world will most likely be in object-oriented languages.  A particularly strong argument is the recent work by Beth Simon and Andy Begel, tracking new hires for a year at a large software development company.  These new hires wrote no new code in the course of that year.  They only fixed code.  All the code they fixed was in object-oriented programming languages.  Knowing how to write functional programs in functional programming languages would not help these students.

What would happen if all computer science curricula increased their teaching of functional languages so that they taught as much functional as object-oriented?  Based on my reading of the research, I would predict even greater attrition and even fewer women in computer science.  The studies of why students, particularly women, leave computer science emphasize how "irrelevant" computer science classes are (see Margolis and Fisher's Unlocking the Clubhouse).  Students come in wanting to know what underlies the great technology in their lives, and we teach them about fibonacci numbers and Tower of Hanoi.  If we were to start teaching significantly more about a programming paradigm that is rarely used for the technology in their lives, I think we would have an even harder time arguing for the relevance of our major.

We couldn't really mandate functional programming, not in a free market society.  Students will simply go elsewhere.  They will go to another field, or they will find a CS program that bucks the standards, that teaches them what they find relevant.

I certainly could be wrong in my prediction!  It might be that students who learn more about functional programming are more motivated and program even better in the more dominant object-oriented programming.  (The evidence of Singley and Anderson, showing only a little transfer from Lisp to Pascal, isn't promising here, but I know of no studies exploring the transfer of knowledge from functional to object-oriented.)  It might be that employers prefer students who know functional programming paradigms, and that those students are more successful in their careers.  If any of these statements were true, the departments who teach more functional programming ought to use that to their competitive advantage.  Trumpet your great results!  Let other departments envy your success, and then let them try to copy it!  Then, when teaching more functional programming becomes a recognized best practice, it will be obvious that it should be part of the curriculum standards.

In a free market, it is not wise to attempt to mandate change, even if it's "good for you."  That was the lesson of Prohibition.  We should teach more functional programming to computer science students.  We should not in such a way that we appear to be claiming that functional is as important as object-oriented.  We definitely should not try to mandate this kind of change, until we see it reflected in existing curricula as a recognized best practice.

[Add comment]
Post a comment
To insert a product link use the format: [[ASIN:ASIN product-title]] (What's this?)
Prompts for sign-in
 


Sort: Oldest first | Newest first
Showing 1-20 of 22 posts in this discussion
Initial post: Jun 28, 2008 4:49 PM PDT
 Alan C. Kay says:
Hi Mark --

I think the more important point here has to do with the differences between education and vocational training. Neil Postman wrote a number of essays lamenting the huge change in universities -- which have pretty rapidly shifted from being the definers of "what higher education means" to vendors serving customers. He pointed out how ludicrous it could be to have uneducated people demanding courses and rejecting others, largely driven by perceptions of what would help with future jobs as opposed to future abilities to think well and with perspective.

I think these are important distinctions even outside of the liberal arts, and are even relevant in the engineering disciplines. But once universities start saying "we have customers, and we must cater to them", real education goes out the window, especially for the undergraduate years.

In the case of computing, it's not clear just what do to since a strong case could be made that academics also have very weak and career driven ideas of what computing and they should be doing. As you know, I thought that the ARPA/PARC conceptions of what we should be doing were pretty good, and they were built on the premise that our field had not been developed yet, and so most of the education and training in university should be devoted to helping the students do better than the previous generation in not just advancing things, but in trying to invent the twin fields of computer science and software engineering.

However, given that the strong research funding is not with us and there is no longer a strong research community devoted to the above, I would think that it is the universities that just have to wake up and get better. The biggest initial need is to arrive at a much more fruitful perspective on computing itself that can be used to both to understand the past better, but also to see that the present "normals" are much more arbitrary and accidental constructs than most people think. Once "normal" is made visible and can be seen as a construction, then it is much easier to see possible futures that were quite hidden by convention.

Cheers,

Alan

In reply to an earlier post on Jun 29, 2008 4:15 AM PDT
 Mark Guzdial says:
Hi Alan!

It's a delight to chat with you here! Thanks for visiting and responding.

For me, the issues that the SIGPLAN Proposal raises are about how we explore and diversify educational approaches. I do not see evidence that the proposal (to teach functional to the same level as object-oriented) has been tried and is successful. The proponents of the proposal are saying that they have a good idea (doesn't really matter whether the support is educational or vocational) that they want to be part of a standard that is applied to all schools for determining an adequate computer science degree program. I believe that standards should be used to highlight and recommend best practice, not to inflict an untried and unproven proposal.

I sincerely hope that some schools will try to teach as much FP as OOP, and I hope that some schools will try teaching MORE FP than OOP. We should be exploring more options, more approaches to computing education -- especially when enrollments are low. We should not assume that we know how best to educate students about computing. I am confident that we do not. We need heterogeneity in our offerings to students, not homogenization. Most critically, we need real measurement of results and sharing of those results, so that others might learn from them, perhaps copy them, and perhaps improve on them. The last thing we need right now is to declare overbearing and unsupported standards.

On the proposition you raise, Alan, I do believe that universities have to change. Universities have always catered to their students. Teaching should always adapt to the needs and backgrounds of the students. In the idyllic time that Neil Postman describes, the student population was a magnitude less than it is today, and was drawn primarily from high socioeconomic groups and families with a history of attending University. Those students wanted an education, not a vocation, and were willing to follow the faculty's direction on attaining that education.

Today, students enter University to improve their job prospects, to have the potential for at least a middle class life. A large percentage of students today are the first in their families to ever attend University. There is evidence, though, that students leave University today valuing education for its own sake. The University has a role now to explain itself, to explain both its relevance (vocational) and its greater purpose (educational). It is a harder job than we have had in the past. I believe that we still have the same desired outcome.

I do completely agree that the "normals" are a construct, and many parts of them are arbitrary. That is another good reason for having a diverse range of approaches, measuring the results, and reporting on them. We need to explore what's arbitrary, and what makes for a better "normal." We don't need to define yet another arbitrary "normal" and make it part of the standard to be applied to everyone.

How is your new class developing? I'm eager to see what you come up with!

Cheers!
Mark

In reply to an earlier post on Jun 29, 2008 7:33 AM PDT
Last edited by the author on Jun 29, 2008 11:26 AM PDT
 Alan C. Kay says:
"He who knows only his own generation remains forever a child" -- Cicero

Having "skilled children" as ever more of the output of universities may be just what students desire, but it is a disaster for society. Another of Neil's observations is particularly interesting: that a society's educational systems should act like a thermostat, and do the opposite of what the society is doing. So if the society is hidebound and rooted in the past, then the university should be unconventional and pushing for change, if the society is trying everything with little sense of perspective, then it is up to the educational systems to provide context and perspective.

Both points are essentially systems principles which look at not just what a student wants, but at the ecology in which the students and the rest of us live. American public education was set up when most of the country was agrarian and the biggest issues had to do with thresholds of thinking and judgment that could allow "the democratic experiment" to succeed and prosper. Jefferson had a nice quote about this:

"I know no safe depositary of the ultimate powers of the society but the people themselves; and if we think them not enlightened enough to exercise their control with a wholesome discretion, the remedy is not to take it from them, but to inform their discretion by education." -- Jefferson

I posit that this is still the main issue in America. "Skilled children" is too low a threshold for our system of government: we need "educated adults". Many people mistake "participation" for a working democracy. So we see endless piles of unsubstantiated opinions from all quarters, backgrounds, ages, etc. But, to go back to Neil's first observation and question: If one goes for an education to gain perspective, does one have the perspective beforehand to decide about education? In many cases the answer is "no", and this is why schooling is mandatory. The 1-8 and now K-12 system has quite broken down, and the universities are well on their way to breaking. But I think the principle is clear and simple: there are thresholds that have to be achieved before one can enter various conversations and processes. "Air guitar and attitude" won't do.

Science is a pretty good model (and it was used by the framers of the US). It is a two level system. The first level has to admit any and all ideas for consideration (to avoid dogma and becoming just another belief system). But the dues for "free and open" are that science has built the strongest system of critical thinking in human history to make the next level threshold for "worthy ideas" as high as possible. This really works. Similarly, the basic idea in our society is to allow as much experimentation with "how to live" as possible ("freedom") and the Constitution and its processes serve as the thresholding "systems thermostat" to detect deadly experiments and keep them from bringing the whole system down.

Most Americans don't understand this, nor do they understand the best thought processes behind the invention of our society. (One of the main functions of real education in our society is supposed to teach just this, and we can judge where things are by looking at all aspects of this topic and the general results.)

"Air guitar" is a metaphor for choosing too tiny a subset of a process and fooling oneself that it is the whole thing. You say "Teaching should always adapt to the needs and backgrounds of the students." I agree. Students need real education and their backgrounds make this difficult (but not insurmountable). But this is just what we should be doing. You say "needs" and I agree, but you are using it to mean the same as "wants",and it is simply not the case that education should necessarily adapt to the "wants" of students. This is where the confusion of education and marketing enters. The marketeers are trying to understand "wants" (and even inject more) and cater to them for a price; real educators are interested in "needs" and are trying to fulfill these needs. Marketeers are not trying to change but to achieve fit; educators are trying to change those they work with. Introducing marketing ideas into educational processes is a disaster in the making.

Compared to this, the problems of computing and its educational and vocational confusions are not really important. But I think there are many parallels. As I've already alluded: diversity is a very good thing, if and only if there are high thresholds of "discretion and discernment". It is this latter that is escaping the notice of too many people. Because of the whacky way our brains work, the pooled diverse human opinions for a hundred thousand years on the planet don't get above threshold compared to the invention of better thinking and discerning with the advent of real science only 400 years ago. This invention was very rare in human history, and it is so far away from normal ken that it is dangerously fragile, and actually invisible to most people even today. Both the invisibility and the actual processes are what real education is all about. In this case, what is absolutely necessary for the society will also spill over into the academic disciplines as well, and then into helping learners gain the width and breadth of perspective to get their diverse opinions into serious discourse. Diversity without thresholds is simply Babel.

Cheers,

Alan

P.S. re: the course we are working on.

Next year we will test out quite a few ideas in other people's courses, plus will do a longer version of the seminar we did last term.

There are a number of shaping considerations so far.

(1) we are looking at a two year experience -- on the grounds that one can get quite a bit going in almost anything in two years, even when starting from scratch. Some past experience in both math and music learning (etc.) are being drawn on here. One of the real and central difficulties in any curriculum, however well thought through, is helping learners manage their "7+-2 chunks" and other limits to capacity during the learning process. We are giving this 2 years at present (even if we finally wind up with more like a one year experience).

(2) We are thinking of this as a liberal art rather than a vocational prep or engineering experience. So, we are not worrying about the "sell" at present, but what the actual content of such an introduction to computing might be like. The advantages and disadvantages are pretty obvious.

(3) We want this to be "real computing" and "real education". So it won't be like a "music appreciation" or "science appreciation" class, but very like teaching real music (helping grow a real classical or jazz player in two years) or real science (really able to now deal with more advance ideas in the any of the sciences). To take mathematics as an example in prior eras of liberal arts education, the aim would be to help learners gain fluency above some important threshold in mathematics after two years (e.g. solid enough calculus to deal with the dynamics of modern science).

We are probably going to be very style-oriented as opposed to coverage oriented (the latter would come as part of the perspectives on the style ideas). We are still thinking this through. One of my favorite books is "The Molecular Biology of the Cell" which I think is a real masterpiece in being able to present the real deal as a highly readable evolution of a "style for life". Our field is synthetic -- a science of the artificial -- and so it lacks the kind of coherence that one gets from having the DNA style win out very early in biology. So, our current thought is to pick "one great and highly successful style" from the numerous styles found in computing. But this style will not be simplistic and hide-bound (like picking "functional programming" or "object-oriented programming"). Instead, we are looking to capture the dominant style of the classic ARPA/PARC research community -- which I have taken to calling the "no-centers style". This is essentially an attempt to look at complexity from the standpoint of systems which scale well, and virtually all of these are non-hierarchical (Marvin called them "hetarchical") which have a number of desirable characteristics.

We think we can characterize things in such a way that what really needs to be thought about in computing will be emphasized and so that tendencies toward the deadly simple minded religions so often found in our field's adolescence are minimized.

In a number of ways a pretty good analogy to the scope that is really needed can be found in Marvin's Society of Mind (though we will be very much about systems in general rather than the difficult to model processes of intelligence). Still, I've always felt that the future of our field is more to be found in what the AI folks were trying to do, than in what the workaday programmers in academia and business concern themselves with.

Cheers again,

Alan

In reply to an earlier post on Jun 30, 2008 8:49 AM PDT
 R. H. Sloan says:
This has been an interesting exchange between two deep experts in computing and learning.

My take on Alan Kay's post is that a heavy majority of computing education in colleges and universities in the U.S. and similar countries is professional vocational, in the same way
as is true for civil engineering, nursing, medicine, and law.

There is a much smaller field of computing, in which both theory and AI play especially prominent roles, that is close in spirit to (pure) mathematics and physics. Alan Kay seems to recognize only this second field.

In my role as an educator of undergraduates at University of Illinois at Chicago (and temporarily as department head for other such), my allegiance is to the professional vocational field. I'd go farther and say I was failing the purposes for which the State of Illinois and its citizens keep us
in business if my allegiance was elsewhere.

Of course, in my other roles, I'm interested in both.

Best regards to two experts whose work I deeply admire,

Bob Sloan
Professor and Acting Head
Department of Computer Science, U. Illinois Chicago

In reply to an earlier post on Jun 30, 2008 11:53 AM PDT
 Alan C. Kay says:
Actually, almost all of my comments were not about computing education at all, but about "real education" compared to what you term "professional vocational" as they relate to the larger ecology of a democratic republic in which the "ultimate depository of the powers of the society lie in the people themselves". I don't see anything about the prep for CE, nursing, medicine and law (etc.) that precludes inducing and helping the students to gain the important perspectives that go far beyond what is needed for a career (but can also help mightily in a career).

As regards computing education and training in colleges and universities, I'm quite worried about pretty much all of it: both the "professional vocational" and "the much smaller field of computing". I do recognize both of them (and do not like what I see in either). However, I don't think opinions derived from my feelings have any importance.

One observation is that teaching people just to "cope with a given" is often not only not enough, but can compound the problems by increasing what's wrong with the "givens" (and also by making the givens seem real and important).

For example, not thinking through programming enough -- and especially not thinking through the design of a programming language enough -- can produce a complete rat's nest of more complexity, where what was needed was a much better approach to architectures that can better handle various kinds of scaling. Or,making a partial solution to visualizing data structures on the web, but not handling the kinds of authoring and environments needed -- i.e. the web browser -- can lead to the most horrible situations and gunked up media, especially for the end-users. Both of these examples could be termed "reinventing the flat tire", which is a much worse sin than merely reinventing the wheel.

Tiny limited-perspective views which make a bigger mess in a environment are not just found in computing, but in many areas in which people are working from confined goals that have little systems sense. However, to have computing be one of the worst offenders -- the field that created some of the best systems ever invented: Ethernet, Internet, etc. -- seems both wrong and even embarrassing.

As I said previously, since the ARPA/PARC funding and research community is no longer around with a vision to improve things mightily, and with businesses driven by their short cycles, it seems it should be up to "institutions of higher learning" to have more perspective and to take a stronger stand (and to tell the citizens why if they complain).

Best wishes,

Alan

Posted on Jun 30, 2008 3:25 PM PDT
 Stuart Reges says:
I think, Mark, that you have misunderstood the SIGPLAN proposal. Of course, perhaps that indicates that those of us who put it together didn't explain it well. A lot of this has to do with esoteric details about "knowledge units" and the way the ACM curriculum has changed over time. Let me try to give a few clarifying comments.

First of all, it is misleading to say that the SIGPLAN proposal mandates that universities cover FP as much as they cover OOP. The ACM curriculum mandates 10 lecture hours devoted to OOP, but in practice we know that most universities are spending much more time on OOP. The ACM curriculum was purposely designed to be flexible in this regard. For example, there are 38 required lecture hours for "Programming Fundamentals." Most schools combine these 38 hours with the 10 for OOP, but they aren't required to. A school could instead teach much of this material using a functional language. The point is that no matter what schools do, they are required to somehow fit in at least 10 lecture hours on OOP.

The SIGPLAN proposal seeks to have parity between OOP and FP in this regard by saying that no matter how far you might be in some other direction (OOP, procedural, etc), you must manage to fit in 10 lecture hours on FP. That's a little over 3 weeks of some course. It can be accomplished many different ways (as part of an intro sequence, as part of a programming languages course, as part of an "advanced programming" course, as part of a discrete structures course, etc). Schools can continue to do most of their teaching in OOP and get credit for it under "Programming Fundamentals" and other categories, but they have to somehow fit in those 10 hours of FP. That's not the same thing as saying that they have to devote the same amount of time to each.

I also think it's unfair to characterize this as trying to use curriculum standards to impose some new and untested approach on the rest of the community. As far back as Curriculum 68 the ACM mandated a "programming languages" course and this has generally been understood to include coverage of alternate programming paradigms. As recently as Curriculum 91 there were still 46 required hours for programming languages. The big break from the past came with Curriculum 2001 when this material was suddenly slashed to just 21 core hours, 10 of which were for OOP! So the earlier "paradigms" mandate was removed starting in 2001.

The SIGPLAN proposal is not an attempt to take us in some new untested direction. It's an attempt to restore some small part of what was stripped away in the 2001 revision. The proposal is actually rather modest. That's on purpose. The group discussed various things we could try to mandate and the sense was that if there was one thing we could convince people to put back into the core requirements, it's a minimal exposure to functional programming (10 lecture hours). You yourself said that you think students should be exposed to functional programming and there are dozens and dozens of people who have responded favorably to the SIGPLAN proposal.

There are many ways to fit in the 10 hours. Many schools can do it simply by retaining their required programming languages course that ACM recommended for over 30 years that they have. That's not an untested approach. That's a recognition that something that has been a required part of the curriculum for decades continues to have relevance today.

--Stuart Reges, Senior Lecturer, University of Washington

Posted on Jul 1, 2008 5:04 AM PDT
 Mark Miller says:
Hi Mark. I found the student comments real interesting: "Why are you teaching us this toy language called Python instead of a real language like Java?" If I were the teacher in that class I can imagine myself saying, "Python is a 'real' language just as Java is." If they bring up the thing about "Java gets used", I could say, "So does Python." I know this is getting into pop culture, but there are commercial sites on the internet that use it, like YouTube. There are some others, but I can't think of them off hand. I really agree with Alan Kay's comments. I'd add that you could use languages that best illustrate some computing principles. I agree that in order to "reel them in" a nice approach is to show the students how what they're learning relates to technology they already know. I think what would be even more interesting to them is to get them to a level where they can actually create a version of that technology and even critique it in comparison to products that are on the market. I wouldn't expect this necessarily in an introductory class, but the promise could be there if they continue into the higher level courses.

My family has a history of going to college, though for the most part not to prestigious institutions. I took undergraduate CS from 1988-1993 and I may have heard a little criticism from my fellow students about the languages they were learning (that they were "irrelevant"), but it wasn't pervasive. Heck, at the time Pascal, the main language we used up until the senior-level courses was largely "irrelevant" by then, but we understood that it was an educational language. By and large the students worked on the languages they were assigned to learn, and did their best to learn what they needed to.

I may have mentioned this before in response to another post. One of my memories from that time was having a friendly argument with one of my CS professors about teaching C. The introductory freshman course was preparation for using Pascal. Senior level courses tended to be taught in C, though there was no preparatory course for it. It was also the "hot language" of the day. A lot of employers wanted that skill. I didn't argue for substituting C for other languages, just including it. My professor opposed the idea vigorously. He said that the CS program was NOT vocational. The idea was to teach us enough theory, and to expose us to a bunch of different types of languages, to expand our minds, so that we would be skilled and flexible practitioners and learners. He expected that students would learn C on their own if they needed it for a course. I argued that while they may have intended for the curriculum to teach this, some students struggled with learning C on their own while taking a course that required it, and complained about it.

He told me that "The hot language today will not be the hot language several years from now." He also objected to the idea that the curriculum needed to adjust itself to whatever the market was doing. He told me, "It's YOUR job to learn the language required to do whatever you need to do. Our job is to prepare you to do that." Nevertheless about a year later the CS department decided to offer a half semester introductory course on C. I took it, and it was great. One of the reasons was the teacher gave us some assignments where we could just experiment free-form, with a sort of open ended goal. As long as the result was "in the ballpark" of the goal that was fine with him. He wanted to see if we were learning something.

In hindsight the professor I argued with was right. C is not used so much today as it once was. Today the dominant language in industry is Java (last I checked).

The main languages we used in CS were Pascal and C. In a required "comparative languages" course I was exposed to Lisp, Prolog, and ICON. By "exposed" I mean we spent a couple weeks on each one, doing a couple assignments in each. In a senior course on programming languages I was exposed to ICON (again), SML, and Smalltalk, which by the way was my FIRST exposure to object-oriented programming. I took to it pretty well, as I did with functional programming, once the principles were explained to me. So I don't understand how FP somehow interferes with learning OOP. An idea that can be put forward is to think about how computing can be different, depending on what representation and architecture is being used.

I think the reason I didn't really challenge the languages I was being taught is I could see some of the ideas in them, and I thought they were useful. For example, before going to college I had programmed in BASIC for years on 8-bit microcomputers. After a while I started getting tired of its limitations and I started to program in a procedural style, even though the BASIC of the time (with line numbers) didn't support that well. When I was introduced to Pascal it was a relief to me. I saw that I could organize code into manageable, semi-isolated chunks. I didn't have to worry as much about side-effects. Maybe the thing was the programming environment I had used for years wasn't that great to begin with, I recognized that, and when I was shown a better method for programming I didn't question it, but welcomed it. Maybe your students haven't had much prior programming experience, so they don't come to that realization.

A challenge I see with Alan Kay's approach is you in effect have to first "deprogram" the students to get them out of the mindset that the pop culture has inculcated in them, and then begin to teach them what real computing is like.

As I read your article, specifically about the vocational needs of your students, and the comments, I thought of an Atlantic Monthly article I read in the June 2008 issue called, "In the Basement of the Ivory Tower", penned by Professor X (anonymous), an adjunct English professor. It basically talked about a conundrum universities have now. There's this idea that there should be universal access to higher education, and it's embraced by many parties, but there's a dark underside to it that doesn't get discussed: a lot of the author's students (he was speaking mainly of his non-traditional aged students) are not prepared to learn what a university has to teach. Most of his students are there for vocational reasons. They need college credits to get a job or a promotion. So they weren't there because they wanted to be there, but because they had to be there to accomplish a primary goal that was only obliquely related to what he taught. What I found interesting is that while he tried to find something for his students to study that they could relate to (the only common denominator he could find is that everyone had seen the movie "The Wizard of Oz"), he did not lower his standards to eliminating some great works, like Hamlet. His students REALLY struggle with it, but he lets them struggle, because he expects his students to at least be at that level. The one thing he has going for him, though, is that a couple English courses, which he happens to teach, are *required* for all students to graduate. CS courses, I assume, doesn't have that distinction.

I think what Alan Kay is advocating is real literacy in computing, and the kind of students that would be amenable to that kind of program are people who are interested in exploring a new way of thinking about and seeing the world, based in (please, correct me if I'm off-base here) the disciplines of math, science, logic, and engineering, using computers as tools for doing that. I think these skills would be quite valuable to employers, if they'd recognize them. It's just not a straight Point A->Point B career initiation program. It would probably be more in line with majors in philosophy, English, etc. in terms of its relationship to corporate careers.

In reply to an earlier post on Jul 1, 2008 7:20 AM PDT
Last edited by the author on Jul 1, 2008 7:20 AM PDT
 Colin M. Cole says:
graduate program --> teach theory and provide greater understanding of different issues
bachelor's program --> allow for job. broaden minds (ie: liberal studies)
tech program --> allow for job.

changing bachelor's program to add "useless" functional programming... seems ok to me, as long as you aren't removing important OOP programs. i don't have the money to pay for "greater understanding." if i did, I'd take a graduate course. if i was *only* looking for getting a job, on the other hand, i'd go to a tech school.

i took a functional course and loved it. it also provided no use to me in the real world. for a bachelor's degree though, you're talking about removing either liberal studies classes, OOP classes, or science classes? seems that instead of broadening students minds, we're just trying to push them to think in a particular way.

functional programming is great for an elective. there are other great "theory" classes out there also, like cryptography and parallel algorithms. Why not allow students to choose which "theory" they desire to learn. (note: there's probably a lot more use of both cryptography and parallel in the real world, anyways)

sorry to be a jerk, but most people going for a CS degree desire different results than people going for a liberal arts degree... but who are they to have their choices matter?

In reply to an earlier post on Jul 1, 2008 12:30 PM PDT
Last edited by the author on Jul 1, 2008 12:33 PM PDT
 Alan C. Kay says:
Hi Colin --

I don't think you are being a jerk. One large part of the responses to Mark Guzdial's original screed have been about "what are the best trade-offs between the desires of individuals and the needs of the society whose processes have allowed the individuals to even be in the position to have desires?".

I think you will agree that in a society that is really working -- not perfectly but above important thresholds -- it is hard for people to even realize there is something working well -- one has to visit elsewhere in the world to appreciate how difficult it is to set up a process that can enable millions of not too cooperative or enlightened people for hundreds of years.

Our dues for this are not the taxes we pay, but in whether we can participate in any reasonable way in the process of this highly distributed system.

One of the thoughts I'm putting forward here is that there is something other than "people desiring different results from liberal arts or CS". To me that is not the issue so much as whether anyone is getting above threshold for being citizens, not whether they are getting about thresholds for earning some kind of living of their choice.

The trick of "freedom" as contemplated by the inventors of the US is to somehow have people's choices matter without giving up what is needed for systems integrity. A poor analogy would be computers on the Internet complaining that they have to learn and follow TCP/IP rather than spending all their time just computing for their users.

Poor as this analogy is, it isn't too far from what all educational systems should be concerning themselves with.

Best wishes,

Alan

In reply to an earlier post on Jul 1, 2008 4:43 PM PDT
 Nathan Mckenzie says:
The nasty thing with education, though, if it's trying too hard to be "relevant", is that sometimes things are useful or useless for very provisional, very transient reasons - generally social ones. For example, I've spent the last decade (off and on) in the commercial game industry. In the last few years, I've started taking a serious shine to functional programming. For most of my career, training in functional programming techniques would have been absolutely _useless_, not because the techniques are inappropriate for game development, but because everyone else working in games was reasonably literate in OO styles of programming. If all of your coding standards, APIs, code bases, tools, and peers rely on specific techniques, those techniques are, by definition, the useful things to know - regardless of the practical merits of those techniques.

But here's the question - who, exactly, is in a position to evaluate whether or not functional techniques have merit for games (as an example)? No offense, but it's certainly not professors in academia, nor, really, is it up to students. Ultimately, it's up to practitioners buried deep in the specific domain with all the ugly, complex problems the domain entails to determine if certain skills or paradigms have value in those domains. And that's only possible if those practitioners had good, broad exposure to a lot of powerful ideas earlier, quite possibly in degree programs. If functional techniques seem useless and theoretical to you, that might mean that they don't have merit in the domains you work in... but it could also very well mean that universities and degree programs haven't done nearly good enough of a job getting across why functional techniques matter to the practitioners who go on to shape practices in various domains.

This is far from an academic concern for me, to be honest. My experience with programmers who work in games who identify strongly with their university educations has been starkly uneven. On the one hand, they tend to be more aware of things like, say, Big O notation, which is good, of course. On the other hand, my experience has been that they have the least fluid and most brittle value systems of all programmers I've worked with - I've known far too many people who come out of universities with their ideas about what constitutes good (as in, approved by authorities and the powers that be) being frozen in the specific year they left the university. Given how quickly techniques go from sanctioned by consultants and taste makers to angrily rejected (like, say, implementation inheritance), this leaves a lot of collateral damage. Working with such people is like navigating layers of geological sedimentation - lots of bands of color indicating when they were imprinted.

Picking up functional techniques (particularly closures and higher order functions) has been a profound revelation for me, akin to discovering I'd been working with one hand behind my back for the last decade. To be honest, I'm not sure if I would have reacted thusly if I had been exposed to functional stuff earlier in my career, particularly in the context-free, tiny code base situation that marks a lot of classrooms. It turns out that certain functional ideals are stunningly good fits for a lot of the problems that show up in games. Nevertheless, it'll be a long while yet before such techniques become the norm, if ever, in games (particularly because of the continued reliance on C++ and manually memory management). Is it useless that I know this now? When won't it be? Or is it people like me who make a technique transition from useless to useful, if it's all socially determined anyway?

Posted on Jul 1, 2008 7:06 PM PDT
 Enthusiast says:
[Deleted by the author on Jul 1, 2008 8:01 PM PDT]

In reply to an earlier post on Jul 1, 2008 7:49 PM PDT
Last edited by the author on Jul 1, 2008 7:51 PM PDT
 Alan C. Kay says:
Hi Nathan --

Thanks for your very nice summary of the dilemmas (or is it n-lemmas?) in CS education.

I don't know how to write a short and coherent (or long and coherent) attempt at solving these and other problems in our field -- or even to summarize what is wrong with our field in a way that doesn't sound like an old fogey harping about the good old days.

One observation uses an analogy for the "dues" required of those privileged enough to learn and grow up in a great community. I've talked about what is required of citizens beyond their own personal pursuits to sustain and grow the ecology around them. I think this works in other important artificially invented and sustained communities, such as those in the sciences. I think there is much more of a sense of this in the physical (and even natural) sciences.

For example, it would be unthinkable for a physicist not to either know what Newton did, or be incurious about what Newton did. But I found in visiting and giving talks at many conferences, universities and businesses in 2004 that most computer people I talked to (including the academics) were both hazy and incurious about what Doug Engelbart did. A few thought he might have invented the mouse, some were aware of hyperlinking -- but astoundingly, I could not find anyone who actually knew about Engelbart's ideas. When I asked if they had ever typed E n g e l b a r t into Google, none of them had, so none of them found on the first page of hits both all of Doug's papers and also the complete "mother of all demos" from 1968. And, of course, this was also true of some of our other "Newtons" and "Galileos". No real field acts this way.

This is a very strong indication of a present-oriented "pop culture", which is mostly about individual identity and demands for participation, and quite incurious, if not antagonistic to anything that might have happened in the past. As de Toqueville observed about Americans in 1840, "they have no past but live in an extended present". The Cicero quote (way above) expresses that those who choose this attractive but dead-end perspective "remain forever a child".

In any case, what's being missed in computing is that while a special pop-culture computerist could very well be as smart as the smartest computerist who ever lived, they cannot be as smart or smarter than the *community* of the smartest who came up with most of the technologies that are used willy nilly today. This means pop cultures will occasionally come up with something interesting, but they are basically doomed to "reinvent the flat tire" -- and this is largely done by resetting the thresholds lower when they start getting so developed that actual learning has to be done.

You ask "who, exactly, is in a position to evaluate whether or not *any postulated* techniques have merit for *any particular purpose*?" And you don't think it is professors, or students. I would agree. You propose practitioners, with some important side conditions, but it seems you realize that most practitioners are so driven by near-term goals that they are unlikely to be able to widen their focus and learning enough. I think you come to the correct conclusion at the end of this paragraph by complaining about what universities haven't been doing with regard to "powerful ideas" in computing.

So, I've been positing that it is precisely "powerful ideas in computing" that needs to be taught more in universities, even as I doubt seriously that most professors in most universities are up to it. The reasons for this are partly the difficulties of academia in general with respect to a developing field. There were only a few dozen university degree programs (and pretty much no undergrad programs) in the 60s through most of the 70s. The explosion to 4000 degree granting institutions happened mostly in the early 80s at a time when I could only count about 500 really good computer scientists in the entire world. Another part of the problem has to do with the psychology of being a programmer (I worked my way through college as one) and it's mostly about *coping* (with someone else's computer, OS, programming language, problem, techniques and architectures, etc.). I did just that until I got into an ARPA grad school by complete accident and into a culture that was as "anti-cope" as one could imagine -- they were quite happy to invent everything they needed, and to build from scratch everything they needed, including every gate of the HW if necessary, and every bit of the SW.

This was a shock and a revelation to me. And it was followed quickly by an even bigger shock: it wasn't as difficult to work from scratch as it seemed from the outside. And it got much much easier when techniques from real math, science and engineering were adapted to the weak shapes of computing. The results from this "ARPA/PARC" community are well known and revolutionized computing. But in spite of their success, essentially none of the processes, techniques and learning curves used and invented by ARPA/PARC are taught anywhere today.

It's worth pondering just why this might be.

My former colleagues in my previous field of Molecular Biology (which developed pretty much contemporaneously with computing) found several ways out of similar dilemmas in their field. If you go to UCLA, you will be able to count just one Department of Computer Science, but quite literally 25 full and distinct departments of Biology (not including the medical ones). Why is this? "We have met the enemy and they are us", says Pogo. Everytime academia imposed the sludge of conformity on a successful offshoot of Molecular Bio, some brave pioneers pushed on to found a new department based on the next great ideas that were needed in the field.

Two things made this work like gangbusters. The first is that the main Bio-funder NIH was willing to fund these new departments. (This is not the case for computing. ARPA of old no longer exists. And NSF has never taken a leadership position in helping computing evolve.)

The other thing that makes this work is that the biologists absolutely did not dilute their field by devolving into an "air guitar" pop culture. (Having an unforgiving Nature as the ultimate critic really helps here. Computing, being a synthetic design oriented field is not governed strongly by Nature and is all too prone to mindless fads and enthusiasms.)

One of the things I've been trying to get NSF to wake up about is the need for new fresh but highly developed points of view on computing that are radically different from the low level "normals" that are wrongly accepted as "reality" in today's computing departments. For example, we could imagine a new department of "System Sciences", and a two year undergraduate concentration in viewing all manner of natural and artificial phenomena as dynamic systems.

Best wishes,

Alan

In reply to an earlier post on Jul 2, 2008 11:46 PM PDT
Last edited by the author on Jul 3, 2008 12:53 AM PDT
 Mark Miller says:
Hi Alan--

I've been coming to terms with our field's lack of knowledge of its history lately, and I think I may have an explanation as to why this is happening. I won't say it's the only explanation, but I can draw some from my own experience. For most people in this field the history of computing did a "bypass" around Engelbart. When I was in public school in the 1980s, whenever I had the opportunity to pick an open ended research topic I picked "history of the computer". I would get about 3 sources, or as many as I could find. As I recall I went (roughly) from Blaise Pascal and his addition machine, then proceeded to Charles Babbage and Ada Lovelace with the Difference and Analytical Engines, then to Herman Hollerith, then to Konrad Zuse, then to Colossus, then to ENIAC at the University of Pennsylvania (though I don't think there was a mention of Eckert and Mauchley), and EDSAC. As I went further my sources got farther away from individuals and even university institutions, and started focusing on machines produced by companies like Rand Corp. and IBM. My sources covered business machine development into the 1960s and then stopped. The only sources I had on a history of microcomputers were a collection of computer magazines I had, which started in 1983. It would've been considered "current events" at the time, not so much history.

So by the time Engelbart and the work at PARC had happened, the historical narrative had already distanced itself from that level of inspection. It was as if ENIAC was the last computer produced in a university research environment.

I did not hear about the Smalltalk project at PARC until I took a senior course in programming languages in 1991. My first exposure to Engelbart's work was in a PBS miniseries called "The Machine That Changed The World", which I believe aired in 1993. It showed a clip of his 1968 demo, talked about his invention of the mouse, and said, "You've probably never heard of him." You were in it, too. :) I don't have the whole series, but I still have "The Paperback Computer" episode on videotape. There was some coverage of Engelbart in PBS's later series, "Triumph of the Nerds", aired in 1996, but it covered the Smalltalk project more.

The conventional historical narrative that I grew up with focused on the gradual process of improved engineering and miniaturization of the hardware. There was a sense of a linear progression from mechanical computers, to vacuum tubes, to transistors, to ICs, to microchips. There was no sense of a history of programming or software, except I think there was a mention that Ada Lovelace was considered the inventor of the first programming language. Perhaps I wasn't looking for it, though I think I would've been interested had I stumbled upon it. The first hint I got that there was a history of the science and engineering of software development was years later when I watched documentaries, like the ones I mentioned earlier.

When I took CS from the late 80s into the early 90s there was a shallow sense of software history. There was a history given on programming languages, though it stuck mainly to features of the languages, not background concepts and inspirations. The exception was Smalltalk, where my professor actually described it as the operating system of the computer it ran on, that it could be modified while it was running, and that it was used through a graphical interface.

When I took a course on operating systems I got a similarly shallow treatment of their history. When I took computer graphics we learned about Ivan Sutherland's Sketchpad project, but only as a pioneering "graphics system" that allowed the user to "draw shapes" with a light pen. The sense that was always given was, again, this gradual process of improvement. So there is this sense that "what is old is old." It's not better than what's available today. It's probably worse, so why think about it? It's hard to say why they even bothered to give us the history at all, except perhaps as an "FAQ" for anyone wondering, "Where did this come from?"

The only historical figure we studied in any depth was Alan Turing.

Within the pop culture of computing there is a sense of "not beating a dead horse". If a technology fell out of favor at some point, well there must've been a good reason for it. Move on.

One of the most pernicious ideas, I've come to realize, is that a computer is just a utilitarian tool, like a car. I can remember discussions going back to the 1980s where the "car" metaphor for computers was used. People, including myself, would argue, "People just want to use a car. They don't want to pop the hood and figure out or know how it works."

I can remember there was some discussion here and there at the time along the lines of what you talked about, that the personal computer was a new medium. At the time that I heard this I could only imagine it in terms of digitizing old media like documents, images, video, audio, etc. That's what "media" represented to me. It's only been recently that I've been able to see that what you meant was computers ARE a new medium, which is not the same as transposing media onto a computer.

The problem with the "car" analogy that's so often thought of in this field is that it's nowhere close to this powerful idea. It makes it all too easy to think of a computer and everything that's used on it as a "tool". This is reinforced by the system architecture of having an operating system with separate utilities and applications.

This whole setup fits in well with commercial computing, because different vendors can sell different tools with different and overlapping capabilities. Just an aside, but it seems like perhaps an aspect that's missing from the POV you espouse for computing is an allowance for commerce to take place within the context of this new medium, and perhaps one reason why the old way of viewing computers persisted despite your efforts is because vendors found it more amenable for creating a market for their brand and products. The internet creates an opportunity here, because commerce can take place "in the cloud", and services (basically taking on the role of applications, though creating greater possibilities for adaptability to other uses) can be located there, rather than on everyone's computers. This might create an opening for the "new medium" idea of the personal computer to return.

In reply to an earlier post on Jul 3, 2008 6:58 AM PDT
 Alan C. Kay says:
Hi --

I think you capture some of the phenomenon. And, McLuhan had a more general observation about media that a new medium almost always takes its initial content from the old media. There are many interesting reasons for this. We had read McLuhan by the time PARC rolled around and put forth some serious effort to make the take up of old media not bring something worse (like poor readability and inadequate visual fidelity). The history of the printing press shows that this take up period can be long (100-200 years for the press depending on how you argue) -- the general use of the press in the new ways for which it was really suited didn't happen in any comprehensive fashion until the 17th century.

But my main observations in this thread were about the incuriousity, not of the general public, nor of pop computer wanabees, but of folks with PhDs in universities "professing" CS. When these folks don't act like members of a scientific field and be curious about its origins, what the most powerful ideas might be and how they were invented and improved (or devolved by misunderstandings), then it's hard to see CS or SE as real fields because the whole process needed isn't there.

Cheers,

Alan

In reply to an earlier post on Jul 8, 2008 12:07 PM PDT
Hi Alan,
what is the course you are working on exactly? is it at some university or is it part of ViewPoint Research Institute?... I'm curious about it.

Thanks,
Hernan.

Posted on Jul 9, 2008 3:38 AM PDT
 Joel Neely says:
I must confess to an intense feeling of irony; I am reading this discussion the day after hearing a news item that a major American automobile company is considering significant layoffs after discovering that -- in an age of $4/gal gasoline -- few people want to buy SUVs and large pickup trucks. I'm sure that the decision-makers thought they were doing the right thing in maintaining those vehicles as core parts of their product line. After all, that's what customers have been buying!

I hope that graduates of CS programs designed around "what industry wants to hire" find that their degrees have a longer half-life than the sticker price of an SUV. Do I think that OO is going to disappear abruptly? No. Do I think that a student who is educated with a broad spectrum of computing concepts will find it easier to adapt to changing circumstances than one who is trained only to currently popular techniques? Absolutely!

In reply to an earlier post on Jul 9, 2008 8:31 AM PDT
Last edited by the author on Jul 9, 2008 9:28 AM PDT
 Alan C. Kay says:
Hi Henran --

One of the main projects at Viewpoints is the STEPS initiative -- the "preposterous proposal" (as one NSF reviewer termed it). The result will be small and interesting if the research is successful -- and could possibly provide some of the same ground as my favorite "Molecular Biology of the Cell" does in its field. There's a fair amount of stuff about this "project so far" on the vpri.org website.

However, it's always fun to think about "more simply Model-T" or "Model-T of Model-T" versions of ideas for younger learners. For example, the current high school AP stuff is pretty appalling (or just simply appalling). But as various people have pointed out, the high schools tend to follow what the universities seem to want or be doing (the blind leading the blind, etc.), so one way to get people thinking about changes (and even about CS itself) could be to try to come up with some kind of lower division undergraduate experience that could also be adapted for HS AP.

We are doing our experiments at UCLA (I'm an adjunct prof there and occasionally teach classes there), and are combining various resources of both Viewpoints and UCLA. As I've said elsewhere, a big deal in any kind of curriculum design is simply pacing and accommodation to George Miller's "7+-2 chunks", and at least in my experience, this requires lots of experiments and testing on real students. One of many prejudices I have is that you'd like the students to have a little fluency in programming before starting to drop a lot of meta-design and meta-programming on them (while too much fluency in programming tends to imprint the students like Lorenz's ducklings with "the wrong mommy").

So we are currently thinking of this as a two year experience and are thinking about both the target phase in the second year, and how to get the students fluent enough in the first year without getting trapped in weak generalizations and abstractions.

I've been following what Mark has been doing with great interest, and like a lot of it, but definitely have a different slant on what could and should be done.

I said a little about this in my second reply to Mark above.

I'll just pick two subtopics for discussion here: (1) self-reliance & (2) systems.

(1) The STEPS project is partly "self-reliance" on a very serious scale, and I think a good question is whether there could be a "self-reliance" experience for relative beginners in the first two years of college.

I feel this is important for everyone in computing because much current perception is that there is so much stuff that took so much work that only increments to existing systems and structures can be attempted. The idea that you can control your own destiny - in my view, one of the most important properties of computing (if you have a computer, you not only have the artifacts, you also have the steel mills and factories for designing and making any of the artifacts) - has almost disappeared in the fog of enormous and generally bad systems that require a lot to do very little.

So, one of the most important things to learn early is not just the fact of self-reliance, but to acquire the actual first level skills to take your own path whenever you need to.

One of the most useful pieces of work that I came across in my first months of grad school (in 1966) was Wirth & Weber's "Euler" papers (Jan, Feb CACM 1966), in which they take a second generation extreme generalization of Algol (originally done by van Wijngaarten, then by Wirth) and show how to translate it into B5000 like byte codes and write a VM interpreter for this. Weber later jimmied the microcode for a 360 to run these byte-codes.

I wound up using this as a lot of the basis for the FLEX machine via coming up with two much simpler and self-embedded ways to do the translation, simpler byte-codes, adding objects, etc.

And much of this experience later wound up in a more concerted and concentrated fashion in Smalltalk at Xerox PARC. This was written up in considerable detail in Goldberg & Robson "Smalltalk-80: the language and the interpretation" - too much detail for lower division UGs today I think.

Euler was (and still is) pretty interesting because it (a) covered deep parts of Algol, so the semantics were not toys, and (b) the treatment of the system was both complete and very small, so one could contemplate something real in an eyeful.

It was interesting to contrast this with McCarthy's approach, which was smaller and more profound, but which did not illuminate the mapping of his scheme to an actual computer.

It was particularly interesting because Wirth & Weber almost reinvented Lisp in their extreme generalization.

Decades later, when Abelson & Sussman SAIOCP came along, it occurred to me that it would be of much greater understandability and interest if the treatment had been done more Euler style. Today, e.g. the subset that is OK in Javascript could be treated this way. Etc.

So, as we've been working away at a "practical Model-T", we've also been trying to make a "Model-T of a Model-T" for this LD UG course that decomposes into a complete implementation in a few pages of itself and really does map to computer hardware. (And as one would expect, the extreme simplicity and general nature of this thinking is helping some of the more elaborate schemes we are trying to devise for STEPS.)

(2) Systems have (oddly) taken back seat to algorithms and data structures (and still today). We plan to make this a first class set of considerations from the very beginning of the course (and actually the whole underpinning of it). I won't say much more here, except that the rubric of "systems" admits the study of systems of various kinds in nature, as well as human-devised systems. This is a very rich area and it really needs to be part of the outlook of a computing course from the very beginning.

Cheers,

Alan

In reply to an earlier post on Jul 9, 2008 4:51 PM PDT
 Scott Peterson says:
Alan,

Could you please elaborate on what it is about high school AP coursework that you find to be bad? Having taken and passed multiple AP courses more than twenty years ago, I felt at the time, and in retrospect still feel that all of the courses were valuable and challenging. I think the best aspect was that in AP courses your classmates were far more likely to be genuinely interested in the subject matter, as opposed to standard high school classes.

On the subject of college CS curriculum, I think that starting from a high level or systems approach at the introductory level and moving down toward the gate-level logic in the more advanced courses makes a lot of sense. I think that is what you are saying you will do with the new course you mention.

I think that your desire for universities to improve is unlikely to be realized any time soon, as university research is driven by outside funding, and the majority of funding comes from government(particularly the federal government). As you point out, such funding is scarce; therefore change at universities is unlikely to occur.

Regards,

Scott

In reply to an earlier post on Jul 9, 2008 6:08 PM PDT
Hi Alan,
(my name is Hernan actually, but I can not change it in Amazon because it is written like that in my credit card!! computer programs you know :-) )
I knew about your work with STEPS but I did not know you were working also at a university. It is good to hear that!.
I have to tell you that I really enjoy what you have said in this blog. I'm a professor at a public (free) university in Argentina and I think we have not loose the "north" as happens with most of "paid" and "free" universities. Of course we have other problems (mainly lack of money) witch opens the door to companies to give us some money as a "favor" for using their technology, but we are free to use the technology we think it is better. As an example, I teach OO with Smalltalk and Self and although students at the beginning of the class ask for Java or .Net, they really appreciate we used Smalltalk at the end course.
I completely agree with you when you say that people of our profession do not know about computer science history. I find students (at this and other universities) that know a little about Turing and nothing about Church, do not understand how Lisp works (if they know Lisp at all!), etc. I believe that research would be more "productive" and software development less painful if we knew and could apply the teachings of our "ancestors"... As you said, I have seen the "flat tired" reinvented so many times...
We need people to be able to "get out" of the system to look at it, do some "reflexion" about it and make some changes to it! we need people to be able to work at the meta-level! but that is impossible if we don't know what changes were made (history), if we have short term goals and we are always in a hurry.

Bye,
Hernan

In reply to an earlier post on Jul 10, 2008 6:13 AM PDT
 Alan C. Kay says:
Hi Scott --

I don't know how to keep this reply short except by ignoring "dozens" of serious problems with High School AP. One that I found particularly egregious was the "fish simulation" in Java that was obviously considered too much work for high schoolers to do so the program is furnished and they get to change parameters and add a subclass, etc. By contrast, the 10-12 year olds using Etoys make a more elaborate simulation quite from scratch, and they are able to do it with "live coding" (a term that had to be made up for what is unusual today that was normal practice in the 70s). Etc.

In short, I think the HS AP misses almost everything that is important about computing and neither looks back to great stuff from the past nor forward to what needs to be done to make a better future -- instead it is all about gratuitous difficulties that are artifacts of badly designed programming languages, poor to bad perspectives on computing, and very weak curricula.

Re: universities. I agree that improving them in general would be crushingly difficult, but they do realize that their introductory courses are both not very good and also are partly responsible for the attrition in students taking such course, and especially deciding to become CS majors. So I thought that a successful attempt to do something better at one of the flagship universities such as UCLA could possibly get a higher level of conversation going. Also, NSF (for one) is quite concerned about the general state of computer science in the US and might just be able to provide stronger influences for better approaches.

Cheers,

Alan
‹ Previous 1 2 Next ›
 
RSS Feed for Mark Guzdial     

Bio

I started teaching computing in February 1980. I was 17 in my senior year of high school, and I taught "Bits, Bytes, and Basic" in a community education class. I taught through my undergrad years--community education, afterschool classes, GED classes, and even community college in 1984. I read "Personal Dynamic Media" by Adele Goldberg and Alan Kay while on an internship at Bell Labs in 1982. I'd never before thought about computing FOR learning (as opposed to learning ABOUT computing). Adele and Alan's thoughts and words set me on the road to my PhD in Education and Computer Science at the University of Michigan in 1993. Nowadays, I focus on using lessons from learning sciences and educational technology for teaching about computing.



Where's My Stuff?

Shipping & Returns

Need Help?

Conditions of Use | Privacy Notice © 1996-2009, Amazon.com, Inc. or its affiliates