Thinking about expression and ways of thought, and what happens to those who don’t C

April 27, 2012 at 8:30 am 20 comments

In his wonderful essay on Alan Perlis’ 1961 Sloan School lecture, Michael Mateas points out that Perlis explicitly saw programming as a medium.

Here Perlis makes it clear that programming is a medium, in fact the medium peculiarly suited for describing processes, and as such, a fundamental component of cultural literacy, and a fundamental skill required of new media practitioners and theorists.

I’ve always loved the idea of programming as a form of expression, and most CS departments used to teach different paradigms of programming as different ways of thinking about problems. Google searching, you’ll find that “Computation/programming as an expressive medium” is being taught out there — but not to computer scientists.  Film students, digital media theorists, even social scientists are being taught about programming as a medium.  But for the most part, not computer scientists.

I realized the costs of that when I talked to one of the Seniors in my educational technology class this semester.  She’s trying to figure out what she wants to do next in her life.  She came to see me at my office hours for some advising.  What does she want to do?  Maybe graduate school, “but definitely not in computer science!  I can code, but I don’t like it. It just looks like hieroglyphics.”  We talked a lot about her interests and her options, but then I circled back.  “What was your most fun programming?”  “When it was done! When I was finished with it.”  “Okay, what languages have you programmed in.”  “C++, Java, and C. A little JavaScript this semester, and VPython but only for physics labs.”  I realized that she’s only ever seen C, and forms of that.  She’s never seen another way of expressing ideas in code, another way of thinking about programming.

As I’ve mentioned, when I first got here to Georgia Tech, we taught Lisp and Smalltalk in required courses.  We did that explicitly to show students that there were multiple ways of thinking about programming. Every student used multiple styles of programming.  I taught a computer music class using CSound and Squeak, and people were able to handle it.  But we don’t teach that expressive purpose for programming any more, and few departments do.  I’ve even heard faculty talk about their departments as being “a Java shop” or “a C++/C# shop,” as if students should get a union card for finishing their undergraduate apprenticeship.

To be clear, the main force on the shift to C-based languages was the students.  They wanted to learn to be software engineers. They wanted marketable skills.  But in the end, they find that they hate coding.  They see it as so limiting, as so fixed.

I showed my student Alex Ruthmann’s video of live coding of music in Scratch, and the wonderful new Web Audio API (Thanks to Alan Kay for telling me about this at SIGCSE!), and her jaw dropped.  She didn’t know that you could do things like that.  “I’ve never saw anybody code anything cool!”

[Side note: My TA came in to talk to me after the Senior left.  I still had the Web Audio examples on my screen.  “What’s that?”  I explained what was going on.  “You know about samples, right?  You took CS1315 (Introduction to Media Computation)?”  “Yeah, but when I took it, they didn’t do sounds.”  Even when you design for expression, it doesn’t always happen.]

I find the Senior’s attitude about computing to be a sad statement on how we teach computer science today.  We have turned off a female CS major from entering the computing marketplace or graduate school, not because of what CS is, but because of how little of it we’ve shown her.  She only thinks coding is slogging through &*!{}++ hieroglyphics.  (That wasn’t swearing — I was simply showing some odd C syntax. I know that it looks much the same.) Coding is such a wonderful, flexible, and expressive medium, that allows you to think about problems and the world in so many interesting ways.  Computer science is related to philosophy, and I think we’ve forgotten that.  We graduate majors that have never even seen that perspective, who don’t even know what that means. We’re teaching computer science with all the life sucked out of it.

Entry filed under: Uncategorized. Tags: , , , .

UFlorida maintains CISE research, but still merges departments Facts on women in IT careers

20 Comments Add your own

  • 1. Baker Franke  |  April 27, 2012 at 8:56 am

    Day 1 in Mr. Franke’s AP Computer Science class: “You all need to understand RIGHT NOW that programming is a form of human expression. When you write code it is for humans to read. Not something or someone else. When you write a program you are expressing to another human being, me, your creative process for solving a problem.”

    Reply
    • 2. Mark Guzdial  |  April 27, 2012 at 9:42 am

      Absolutely. I say something similar in the MediaComp books. What we say and what students learn are two different things.

      Reply
  • 3. Brandon Rhodes (@brandon_rhodes)  |  April 27, 2012 at 9:05 am

    Mathematicians often seem to share the same talent, for taking a quite interesting subject and somehow teaching it with all of the spark and excitement drained out of it.

    Reply
  • 4. Errol Thompson  |  April 27, 2012 at 3:15 pm

    I have been thinking more about thinking as computation and have just ordered a book that teaches programming that way. I am planning to move our introductory programming paper for none CS majors to multimedia computing or game programming. I want them to understand programming as thinking process.

    I have been reading a book “The Logic of Failure” and it has made me realise the importance of helping students develop the thinking processes rather than simply the programming constructs. I am conscious that will be a struggle when the students are so focused on grades rather than learning. The challenge is to introduce enough fun that they forget grade issues and begin to focus more on learning.

    Reply
  • 5. Barry Brown  |  April 28, 2012 at 4:46 am

    This got me thinking: Do C-like programming languages appeal more to men than women? To put it more provocatively: are programming languages sexist?

    I’ve heard that cars designed and sold in Korea have cluttered, hard-to-use dashboards, filled with gadgets, buttons, and knobs, because mastering a complex machine like that is seen as a “macho” kind of thing. (Those same cars sold in the US have simplified dashboards.)

    Perhaps programming languages with complex syntaxes appeal more to men than women. After all, they were designed by men. Is mastery of an arcane syntax a macho kind of thing, too?

    Is there a correlation between the popularity of C-like languages and the decline of female interest in programming? If women were to design modern programming languages, what would they look like?

    Reply
    • 6. Mark Guzdial  |  April 28, 2012 at 12:49 pm

      Excellent question, Barry. I suspect that the culture of the language matters even more than the syntax. For example, I suspect that most Web startups use Ruby, Python, or even Perl, not C/C++. Computer art is mostly done with higher level languages. What languages you teach says something about you are expecting students to do with what you’re teaching. Only teach C and its variants, and you may be implicitly suggesting, “I don’t see any of you as Web entrepreneurs” and “CS is for systems-level programming.” I may be wrong, but it’s worth studying.

      Reply
  • 7. Barry Brown  |  April 28, 2012 at 2:01 pm

    Over the past couple of years, I’ve started hearing a sort of conflict or confusion among my students. We use Java in CS1/CS2. They know that Java is a “real” language. (In part because Java uses braces, a trait common to all “real” languages.) They know there is a large demand for Java programmers in the workforce but, aside from Android development, the jobs don’t seem to be in any of the new, sexy areas they are interested in.

    That may very well be a good thing; it opens their minds to the possibility of learning other languages. But they are starting to wonder why we are teaching Java in the first place.

    I imagine a study in the area of gender vs. language preference would be difficult to perform. Just about any person in a position to have a good opinion about languages choices will have been trained in the C/Java/C++ world.

    Reply
  • 8. Where I’ve Been This Week (weekly) | The Becker Blog  |  April 28, 2012 at 8:48 pm

    […] Thinking about expression and ways of thought, and what happens to those who don’t C « Computing … […]

    Reply
  • 9. Mark Miller  |  April 29, 2012 at 11:02 pm

    “To be clear, the main force on the shift to C-based languages was the students. They wanted to learn to be software engineers. They wanted marketable skills. But in the end, they find that they hate coding. They see it as so limiting, as so fixed.”

    Is this not indicative that the idea that the department should listen to the students’ preferences is flawed? I am struck that this idea keeps coming up on your blog (though I’m not pointing the finger at you) that at GA Tech the students’ preferences are in some way driving the curriculum.

    I suspect, as I’ve seen indicated in past discussions on your blog, that CS has turned its focus almost exclusively to engineering. If the concern is about being a training program so that students can be assured job prospects upon graduating, then this focus is, I think, rational, since most of the IT industry is solely focused on engineering as well, but it’s a poor variety of it. However, it puts industry in the lead, and my experience has taught me, when it comes to a higher goal of designing systems that serve long-term goals (if that concept is even operative) of interoperability, scalability, maintainability/clarity of design and purpose, and maintaining a culture that encourages differentiation for the purpose of allowing for the improvement of computing system models, industry is a terrible leader in this field.

    The senior’s observation that she’s been programming in hieroglyphics is perceptive and accurate. I’ve only seen a couple computer scientists suggest that we need a new alphabet for computing, though perhaps that would require getting farther along in the science first. It seems to me we still haven’t gotten to a point where we can combine elements with the facility we have in natural languages, which indicates that the field (if it exists) hasn’t distilled computing down to some base elements yet that apply to computing broadly enough to encompass most conceivable designs.

    I know what you mean about the C languages seeming fixed. They are. After getting to understand Smalltalk, and seeing the ability to define my own operations to some extent, looking at the C languages again (or any of the follow-ons like Ruby) feels restricting, disappointing.

    If the CS culture at GA Tech is as you say, it would be a sea change if incoming students were to say, “Aww, man! You mean I can’t define my own conditional operators, or redefine the semantics for the arithmetic operators without having to deal with type tags, or change the function/method dispatch semantics, define my own execution model, or define my own language? That sucks!”

    Reply
    • 10. Mark Guzdial  |  April 30, 2012 at 9:40 am

      Mark, I don’t mean to implicate Georgia Tech alone in my post — I see little difference in most other departments’ curricula (Northeastern and Rice, clearly among the exceptions). Relatively few aim to give students a breadth of notations and semantics.

      I wouldn’t agree, “CS has turned its focus almost exclusively to engineering.” Many departments have. I see a large variance among the foci of CS departments. Look at Florida, where the Dean of Engineering seems to want to turn over computing to liberal arts. I just met Thursday with Mark Newman of the School of Information at Michigan where they design introductory computing courses for students studying HCI and Library Science. You are clearly right, but for only some values of “CS.”

      Reply
  • 11. Bri Morrison  |  April 30, 2012 at 9:08 am

    I’m not sure about the Georgia Tech students, but at SPSU, students want to learn a “real” language because most want jobs or internships during their college years. With the cost of college degrees skyrocketing and competition for jobs fierce, they want every advantage they can get, and this includes having “real” jobs on their resumes by the time they graduate. To get those “real” jobs, they need tangible skills that employers are willing to pay for. So while learning Lisp or Smalltalk may be what we as academics think is best for them, there is a reason we listen to student preferences as well. To recruit new students you need to show that current students get jobs and internships, and just knowing languages that are “good for you” won’t accomplish that. I’m not sure what the answer it, but thought I’d throw out the other side…

    Reply
    • 12. Mark Guzdial  |  April 30, 2012 at 9:35 am

      I wonder how segmented the market is now. If you are an ace C++ hacker, can you get a job programming Ruby on Rails with the startup down the street? If the local video game company needs C++ programmers, will they take someone with four years of Java? Or if you wanted to launch a startup developing games in Lua, how does knowing C# or Python help you? I know that the answer is, “We are teaching transferable skills!” If you’re teaching four years of the same kind of language, you’re not.

      Reply
      • 13. Mark Miller  |  May 1, 2012 at 4:38 pm

        You raise a good question. I have heard complaints re. this from developers in the field, that programmers who only have experience in Java, or something similar on a technical level, are not good candidates for hiring in C++ positions, since they do not understand issues of memory management and pointer semantics/arithmetic. In a lot of cases I’ve heard complaints that with the decision by a lot of departments in recent years to go Java-only, developers from those programs end up using these features of the VM as a crutch. Incidentally, I’ve heard a similar complaint about Lisp programmers (in fact it was Perlis who said it), that they “Know the value of everything, and the cost of nothing.”

        Experienced developers have noticed that the more a development environment demands of the programmer, in terms of dealing with the underlying machine architecture, the better the programmer tends to be in terms of creating a technically tight solution that runs in a small amount of memory and is efficient in its use of computing resources. There is the other side of the coin, however, that the more the development environment demands of the programmer, the less able the programmer is to deal with the complexity of large software systems. This is where VMs or better hardware architectures can be helpful. The truth of the matter is that it’s not the dev. environment that’s necessarily the problem. In the context of what we’re discussing, it’s a matter of having a consciousness that architecture matters, and understanding where it is best applied. This is a reason it’s valuable to expose CS students to a variety of languages, like assembly, C, C++, Lisp, Smalltalk, etc.

        Developers tend to implicitly imprint on the architecture and system semantics implemented by the language they’re used to. So being presented with a radically different kind of semantics is quite a shock, and demands more time be spent on understanding what’s going on “under the covers.” Without expanding the viewpoint to understanding the power of the concept of architecture, even if a developer learns a language to the point that they can get something to work, they’re not able to use it to best effect. What often ends up happening is they program using the old architectural semantics as much as possible. “You can program in Fortran in any language.” I’ve found that understanding this takes a while longer. I didn’t really learn this in college. It not only requires understanding the underlying semantics, but a different way of thinking about what you can do by programming; what programming represents in a system context. A lot of programmers never understand this. I’ve met some who’ve worked in Smalltalk systems for several years, and never understood that they were dealing with an operating system that contains a system programming language, and not just a language/VM that for some unfathomable reason has its own GUI.

        Reply
      • 14. Mark Miller  |  May 1, 2012 at 4:49 pm

        Correction: A bit of an editing problem…

        “In a lot of cases I’ve heard complaints that with the decision by a lot of departments in recent years to go Java-only, developers from those programs end up using these features of the VM as a crutch.”

        Meant to say, “In a lot of cases I’ve heard complaints that with the decision by a lot of departments in recent years to go Java-only, developers from those programs end up using the features of the JVM as a crutch, almost unconscious that they exist. They’re just part of their expectations. They don’t think about memory management, since the VM takes care of that for them, or so they think, leading to sloppy implementations.”

        Reply
    • 15. Mark Miller  |  April 30, 2012 at 7:10 pm

      I think you’ve put your finger on the issue, that the focus is on “what comes after college.” This serves the financial concerns of students and parents to some extent, but what I don’t see being asked is does it serve society well? Who is setting goals in that regard? Is the university the hapless victim of the preferences of parents, students, and industry? Does it have intrinsic worth that it can assert, and can be respected by these other parties?

      When I took CS 20 years ago the CS department thought it had something valuable to teach that went beyond what industry wanted. I remember having an argument with one of my professors about it. I argued for industry preference. My professor argued along the lines of what Mark said. Further, he told me, “The language that’s ‘hot’ right now will not be ‘hot’ forever. In my time writing software for industry, the language du jour changed several times. What we intend to give you here is enough background so you can acquire the skills you need on your own.” What he was saying fit right in with the saying, “Give a man a fish, and you feed him for a day. Teach a man to fish, and you feed him for life.” I wonder what happened to that ethic.

      In the junior and senior level courses, it was just expected that a teacher could choose whatever language they wanted, and the students would have to learn it during the course themselves. Students struggled with that, and there were some complaints, but they got through it alright.

      On the other hand, the job market for software developers has apparently changed. Since the dot com bust, it’s become the norm for IT shops to demand that entry level developers have 1 year of experience in a set of skills that often reads like “the kitchen sink.” They want skill in a lot of other technologies besides Java.

      What’s always been true is when an employer asks for “experience” they’re not talking about school. They’re talking about work that the developer got paid/volunteered to do. Hence the reason internships are valuable. Some developers have taken to doing volunteer work for charities as a way to build up their resume as well. Developers are often expected to “hit the ground running” now when entering a job. This is not realistic, since the real challenge when entering any new job is understanding the pre-existing software that’s already been written, and what the project goals are, not so much the tools, but that’s the expectation nevertheless.

      I’ve found that if I look hard enough, I’ve been able find exceptions to these conditions; opportunities where an employer is willing to take me on an entry level basis just demonstrating a facility with the primary language and its associated API, even though I don’t have “years of experience” with it, since I only learned it on my own. As I demonstrate my skill, I get promoted to more responsibility, with a higher rank and pay. The most challenging thing I’ve found from working in IT is developing skills in dealing with management and customers, because it’s been a pretty universal experience that these two parties, and IT, have difficulty getting on the same page. The technical stuff is easy compared to that.

      Reply
  • […] final goal.  I really do mean programming in Andy Ko’s sense and for all the reasons that Alan Perlis said.  The ability to define processes for an insanely fast agent to execute sometime in the future […]

    Reply
  • 17. chaikens  |  May 6, 2012 at 12:30 pm

    No matter where their curriculum starts, well-educated computer science students should end up having learned several different families of languages including assembly and its relationship to C, object oriented design and programming, operating system, web application and hardware architecture, command line and scripting technologies as well as a taste of IDEs, and theory including data structures, algorithms, computing models, formal languages and grammars, and complexity (including decidability, NP-completeness and analysis of polynomial time algorithms).

    Reply
  • […] now. I do see the possibility of Udacity of filling other holes in formal computing education, like seeing multiple languages, which doesn’t happen much now. It showed to me that there are many people out there programming without truly understanding the […]

    Reply
  • […] study and understand processes. Alan Perlis (first ACM Turing Award laureate) argued in 1961 that everyone on every campus should learn to program. He said that computer science is the study […]

    Reply
  • […] study and understand processes. Alan Perlis (first ACM Turing Award laureate) argued in 1961 that everyone on every campus should learn to program. He said that computer science is the […]

    Reply

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed


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

Join 11.4K other subscribers

Feeds

Recent Posts

Blog Stats

  • 2,096,368 hits
April 2012
M T W T F S S
 1
2345678
9101112131415
16171819202122
23242526272829
30  

CS Teaching Tips