I’m pissed. My whole point for coming into the office this afternoon was to attempt to dig up a number of early articles regarding computer science education research from the 1970′s and 1980′s. These articles are ridiculously difficult to find; as an example, consider the two technical reports from Yale I went looking for back in July, which are simply unavailable at this point.

This research does not exist as far as I’m concerned: I cannot read it, but I can find articles that reference it. How am I able to trace ideas back to their source if things written a mere 20 years ago can’t even be had from the publisher (as is the case with a university tech report)?

I’m currently working on an article from the Journal of Educational Computing Research by Carver and Klahr. It was published in 1986, and can be had from the publisher for twenty-five dollars ($25)! For that $25, you get a PDF file emailed directly to you. If I subscribed to the journal today, for one year, I’d pay $130 as an individual. This is for 8 issues, so they’re charging me roughly $16 per issue. If I want an article from last year, it costs me $25. And I don’t even know if Acrobat Reader will allow me to print the document they send me.

How much of that $25 does the researcher see? None. How much does the researcher’s home institution (that possibly “paid,” directly or indirectly, for the research described) receive per copy sold? None. How much did the publisher make (or loose) on the first run of that article? Probably very little.

I’m sorry. It’s disgusting. I’ve known I don’t like the publishing industry in general for some time, and the industry knows that change is coming. As it stands, the research can’t be searched, it isn’t circulating the web where it can be found, it’s ideas are gone and dead. And no, don’t get me started about how bad the inter-library loan situation looks here at Kent. As far as I can tell, I might be out as much as $15 per inter-library loan request. My hope is that I’ve misread the confusing webpages regarding document delivery services at the University of Kent, Canterbury, and I’ll be able to put my hands on articles for some reasonable fees. Just to check, Indiana University’s library (where I did my Masters) has no fees associated with their Inter-Library Loan (ILL) services.

Grr. Did I say I was going home for dinner?

From Joe Luft over at Brooklyn BloggEd: an excellent pointer (as opposed to his many “merely very good” pointers) to a set of facts and figures at the U.S. Census Bureau site.

Postscript: I like data.

PostPostscript: I think that sums up anything else I might say. I should say, I don’t like bad statistics that hide real meaning, though. Of course, most of that site probably qualifies, but hey… oh, hell. Now I’m thinking about it. It’s time for dinner, anyway. :)

Its hard to find. By and large, all the research I’ve put my hands on so far is strictly cognitive in nature. People are exploring things like

  • The mental models used/had by novice and expert programmers,
  • Theories of cognition/representation/perception,
  • Programming knowledge and “knowing,”

the list goes on and on. The typical model is that several researchers think they have a handle on the mental model novices are employing, so they go out and collect some data to verify that model. Rarely do you find any studies explicitly looking for ways to disprove a theory… granted, there aren’t enough warm bodies in CS-ED research to go about hammering on every theory and model that comes out.

What is interesting about all these studies, however, is that you find snippets of behavioral accounts of novices intermingled throughout their dialogue. They’ll occasionally describe how a student seems to be “editing and executing their code in a trial-and-error fashion,” but at no point is the behavior explored for what it is.

I have a suspicion that radical behaviorism (a la Skinner) was the rage in education for a while, and then programmed education (which probably became Computer Aided Teaching) fell out of favor as cognitive accounts of learning and instruction moved to center stage. However, I don’t actually know my history of philosophical and theoretical movements in education that well; I can’t say for sure what the “current status” of behaviorism is in educational research.

I don’t think it’s critical at this moment, but (even if it is just for myself) I want to situate this work in the larger context of educational research: where do I stand, methodologically? What movement(s) will I find the most support from? How closed-minded is the world to behavioral research and accounts of what have (in my case) been treated as purely cognitive domains for the past twenty-plus years?

This is such a far cry from the body of constructivist and constructionist literature I’ve buried in for the last few years…

Forever? How about “on sale now for $5 a caret!” I really like Wired’s article The New Diamond Age. Joshua Davis did a nice job of reporting on the cutting edge of technology in the world of artificial diamonds while telling a good story at the same time.

I’m quite pleased; the tension I was feeling over the behaviorist/cognitivist point of view was, primarily, my wondering what would come of conversation with my supervisor. But we were in complete agreement on what I thought was the right way to proceed; as such, I’m going to concentrate my efforts on exploring the role of timing in novice programmer compilation behavior from a behavioral perspective.

As for teaching, I will probably end up teaching what I know, but I did make a request to be kept in mind if anything “interesting” comes along. We’ll see what happens, but at worst, I know what I’m dealing with, and will have that much more time to focus on my research. That can’t be all bad.


The Programmer

I’ve been wrestling with behaviorism for the last few weeks. Granted, most of that time was also time spent travelling, but while on the plane, the train, or other “dead” times, I’ve been trying to wrap my head around a behaviorist’s view of compilation. This post is a “think-aloud” that I can point a few friends at and ask them to weigh in with some thoughts as well.

Compilation is how a computer program gets changed from something people can read (arguably) to something a computer can run. Most code written today is compiled, and certainly all introductory students use a compiler of some sort. Typically, students encounter their first compiler as part of an “Integrated Development Environment” like BlueJ or DrScheme: a pedagogical piece of software that wraps up all the tools necessary to write and run code in one language or another.

I’d like to focus my research on the way students use the compiler. Literally, in many environments, this means I want to know when and why do students press the button that compiles (and runs) their code? That might not even be it, though; a substantial goal of any first course in computing is to provide students with some facility to express core concepts of computing in code. We are, at some level, concerned with producing a facile programmer… but I’m about to get ahead of myself.

I need a picture.

Students working on code go through a cycle of Editing code, Compiling code, and Executing code. Each of these represent a set of activities; so, Editing implies typing in new code, fixing old code, searching through the documentation regarding part of their code, etc. Any one program undergoes iteration after iteration as students work towards, say, completing a homework set for an introductory course in computing.

If I were playing the part of a cognitivist, I’d (perhaps?) be interested in what is going on in the student’s head. For example, I’d want to understand how each incremental change of source code (each “code delta” that took place between compiles) mapped onto some kind of plan or schema the student might have for solving a particular problem, how change episodes manifested themselves (and the relation of their mental state during the changes they made to that particular episode type), or any of a host of other questions trying to get inside the Thought Bubble in the picture above.

However, Compilation is a behavior.

Assuming the editing takes place in the boxes, the arrow indicates the place where the student presses a button, telling the computer to do some work proofreading the student’s code, making sure all the semicolons and parentheses are in the right places, etc. As a result of this automated process, either: A) success occurs (and the program is executed for the student, or some indication that the program can be executed is given), or B) a whole mess of garbage comes back.

A few things for the casual reader:

  1. It is likely that most introductory students don’t actually understand (in any significant way) what is going on when they compile (and execute) their code.
  2. Compilers are typically written for use by professional programmers. For example, many novices use Java in their first course in computing. The Java compiler they use (the one provided by Sun Microsystems) is NOT designed for use by my mother. It is designed for use by a trained software engineer. Therefore, the
    1. method of invoking the compiler (running it) may be obtuse, as well as
    2. the vocabulary and necessary interpretation of the error messages it produces.

All this said, the Environment the student is working with while programming (the operating system, text editor, the room they’re working in, the music they’re listening to, etc.) is very complex. The compiler makes up part of this environment, and it is, while programming, most likely the primary agent a student is interacting with. And the pattern is roughly:

  1. Edit some code.
  2. Press the button.
  3. Be rewarded with success, or punnished with failure.

This is a classic behavioral loop. That couldn’t stop me, of course, from taking a cognitivist’s view of the process; I could explore how code changes from Edit episode to Edit episode, and attempt to map the mental states of the programmer in some way.

Or, I could take a behavioral perspective, and begin by doing a behavioral analysis of novice programmers in classroom settings (and perhaps home settings as well), attempting to identify what behaviors are associated with Editing, Compiling, and Executing code. Once these behaviors are identified, I can then begin exploring the behavior of Compilation systematically, and attempt to identify the key Antecedents that lead to Behaviors with positive Consequences.

A : B -> C

Put another way, I can begin looking for the environmental conditions that engender compilation behaviors with desirable outcomes, where desirable is defined (perhaps?) as a compilation event with no errors.

There are lots of problems here, certainly. For example, perhaps a desirable outcome would instead be any compilation event where there were fewer errors than during the previous compilation event. I could also challenge a commonly held view that student’s don’t think enough before compiling their code: from a behavioral perspective, you can actually force the issue of time, and make it impossible for students to compile any more frequently than, say, every 3 minutes. (Assume for the moment I’m discussing laboratory, not classroom conditions.) From a behavioral perspective, there are many controllable variables with respect to compilation that could be explored, and I’m getting bogged down in them.

Once upon a time, I had a hard time coming to grips with qualitative research methods, perhaps because of my background in Physics. Among other things, I think I’m rebelling against the behaviorist’s mindset, which is that we can explain a great deal about Earth’s creatures from a purely behavioral perspective, including (gasp!) people. Leaving a cognitivist framework for my research seems… I don’t know. I feel like I”m just putting students in a box with a lever and a food-pellet slot when I start thinking along behaviorist lines. But, at the same time, the analogy between the two is clean, and there have been few behaviorist studies of programmers and programming behavior. Almost all of the research in CS Education to date takes a cognitivist approach, and attempts to understand the mind of the programmer, and largely ignores the behavior.

Hmm. Comments welcome.

A search for “marketing new product wal mart” brought up some simple, well worded wisdom to the would-be entrepreneur (emphasis mine):

Entrepreneurs must come to terms with the fact that while they can be creative, I have never met an entrepreneurial innovator who can be everything to everybody. It is my wish that all market-worthy new products have their shot at success, but the real probability for those that enjoy success is limited only by the reasoning the entrepreneur puts into his marketing plan.

Having said this, I strongly urge any new product innovator to seek competent and professional help in determining market direction and strategy. Realize your limitations, and further realize that yours may be the best new product since shoes, but your chances for success are greatly diminished if you try to strike out on your own with the attitude that you are indeed capable of “doing it all”. There are probably those among you who have the ability, but they are very rare birds indeed!

This excerpt made me think for a moment; I’m naturally a “big ideas” person. I like to brainstorm, to dream, to create well outside of the realms of what I am personally capable of. This has made it, shall I say, challenging to keep my focus narrow and topical as I work towards a thesis for my Ph.D. Furthermore, I have a relatively wide skill-set, and too easily find myself doing too many things.

In light of my previous post, it makes me think that I should stick to teaching the things I know how to well, that will take the least amount of time away from my thesis work, and will keep me focused on what matters at this stage of the game:
GETTING MY DEGREE

(As a postscript, I really need categories for this weblog. Is there a way to get Moveable Type to publish my main blog and different categories into separate “mini-blogs” with their own separate pages a la Radio Userland? The idea being someone can subscribe only to, say, my “research” related posts, and not other rambling bits?)

This post was inspired by this pair of articles on finding your own tech support work in a down economy.

While doing my Masters at Indiana, I managed to accrue no additional debt. This is a nice way to live. With the passing of my first year in England, my wife and I have managed to accumulate a rather distressing amount of debt. This number will continue to grow over the next two years. At the end, we’ll have two Ph.D.s between us–one in Computer Science, and one in Literature. My argument is that the loans are worth it for the advanced degrees, but would not be worth it for similar undergraduate degrees. We’re pursuing our passions and seeing the world–it must, I hope, be the right decision.

At Indiana, I had my own course for two years (here’s a few links regarding the course, Introduction to LEGO Robotics). The course was a 200-level, non-major’s introduction to computer science and programming, and a non-major’s exploration course of it’s ilk hadn’t been taught for years. Given Introduction to LEGO Robotics’s unique character and infamy on campus (due to some good press in a few places), I was free to do as I pleased. As I had no supervision at all, I did the only thing I knew how to do: I did the best damn job I could, and I loved every minute of it.

As I look towards this next year, I’m faced with a question about teaching: should I? I taught two laboratory sections of CO313, an introduction to Information Systems. I had forgotten what it was like to be teaching someone else’s content; some, not all, of the material we were given was so poor that I apologized to my students. In my opinion there was no excuse for some of the crap I was expected to present. I, personally, would have given up sleep for a week to produce something better before I would have presented anything half as bad in my own course. But I have no control in this situation: like my first years at IUB, I’m back in the position of a TA who has little to no say in what material is presented, how it is presented, when, or why.

Teaching will pay, roughly, $1500 for the year. A pair of round-trip tickets home, to put a face on a number. Three months rent. At IUB, a load of one more course would pay tuition and $5000/term, roughly. This would be enough to pay rent and live on. Here, it’s tuition and $750/term.

I love teaching, but I have a hard time shoveling shit down the throats of students; if I’m going to teach, I’d like to have some control over what I’m expected to teach. I’d rather not have to tell students ever again: I’m sorry guys: this stuff is so awful, there’s nothing I can do but give you the answer key, and help you as best I can to understand what the hell is going on. It’s what I’ve been given to teach you… and it’s going to be on the exam. I’m… I’m just sorry.

Assuming I want to make enough in the next year to at least pay for a pair of round-trip tickets home, would I be able to find other work? Will I be happier doing something else? Or, will I miss teaching, despite my grumbles?

I’m creative, fast on my feet, have excellent communications skills, have the endurance to focus on a problem for a long time when motivated–and I’m a powerful self-starter capable of motivating myself to work and focus in many situations. I’m a competent programmer in several languages (Scheme, Perl, Java, and Python, in that order). I do well in new and challenging situations, and love synthesizing information across disciplines and domains. Can I find something I can do part time locally and/or remotely that will pay at least as well as teaching that will entertain someone with a BA in Physics, an MA in Computer Science, and a lifelong love for music performance?

Or, do I do my best to improve the material I’m given, and teach the course again?

As an after-thought, I forgot how much fun Intro to LEGO Robots was to teach; perhaps that’s a topic for another post… or series of posts… sigh. Challenging students to think hard about things they haven’t encountered before, instead of cramming their heads full of facts they’ll be tested on at the end of the year…

All I want is a plain-text version of the timetables for the train lines in the SE of England. HTML. Anything. Something simple, that I can quickly and easily download and look at. Hell, I’d like a Palm database with the data–anything that would make planning travel around here much easier… as it is, the PDF files (79 pages!) are the complete pocket references, so they’re some weird, tiny page size… grrr.

Travel has almost come to an end; in mere days, I’ll be fully grindstoning. Then I’ll get back to posting, oh, something related to CSED, perhaps.