I was at the NISO forum with my Library Automation class yesterday. Couple of interesting talks, particularly Annette Bailey‘s, and my notes have all these “blog this!” memos, none of which I’m blogging about right now because it turns out what I’ve been thinking about overnight is how her presentation reminded me of a chat I had with Jon Herzog once about women (or, more particularly, the lack of them) in CS.
One of the things that struck me about Bailey’s talk is that she’s made geniunely interesting and useful widgets, but she characterized her programming knowledge in very modest terms — not much above what I would use to characterize mine. And it was eye-opening to me that you can actually do something worthwhile without being some kind of a ninja.
Because my experience of programming in high school and college was that you could learn a little bit of code, and then make something that didn’t do anything useful, assuming it even worked, which, if it was one of those BASIC things out of a magazine, it usually didn’t. (“Hello, World” is charming, but not fulfilling.) And all the people who were actually doing interesting things with code knew multiple programming languages, and OSes, and had knock-down drag-out arguments about which commands were better in which situations and why. And, indeed, the ability to have those sorts of arguments seemed like the marker for membership in the club. And I didn’t want to be in the club, because arguments like that don’t play to my strengths, and anyway it seemed a bunch of obnoxious posturing. And if the bar for being in the club was that high, I was so far behind I might as well give up and do something else. So I did.
(Oddly enough, this hasn’t been my experience of post-collegiate code. I taught myself enough perl one summer to limp along making something partway functional. And I was able to do something actually useful and comprehensive for my databases class with shockingly little SQL and PHP. But mentally, I’m still in the “not a coder” camp.)
“Make it easy,” Bailey said. She can figure out enough stuff to do what she wants to do in a world without standards or APIs or any kind of handholding. She’s not dumb. But she just wants to make a damn widget to extend user experience in the midst of a busy job that doesn’t pay her to be a full-time programmer. She doesn’t, it seems, want to have to be in the club to make something meaningful.
And neither do I. And I don’t think I realized before last night that being in the club, and being able to do something worthwhile with electrons, aren’t the same thing.
I think what I’m trying to say here — what I’ve been trying to say in a lot of those conversations, and what I was wanting without knowing it as a teenager — is that I’m looking for an intermediate point. I thought I lived in a world where you could be incompetent, or you could sacrifice your life on the altar of code — make it your job and your hobby and your pop culture and your obsession — and here comes Annette and says, no, it can be this thing that fits in amidst your job and your life, and you can still do something cool with it. Maybe you won’t invent Lisp or Linux, but you can still do something cool.
I’ve wanted code to be just a tool. Like a screwdriver — I don’t have to know the entire vocabulary and history and typology of screwdrivers just to fix my glasses. I’m not going to be a master metalworker, but at least I can see. (I also don’t expect to get much respect from the master metalworkers of this metaphor for any code I write with this attitude — and that’s also a huge problem — but maybe that can be not important if I like seeing, and even fix some other people’s glasses while I’m at it.)
Seriously, this changes everything.
LikeLike
What you’re saying is you’d like to write software occasionally, but not participate in the butt-sniffing rituals of professional code jockeys. Sounds good!
It’s a hard thing to get the word out about, though. Most of the industry is still wildly excited about butt-sniffing (e.g., stackoverflow.com)
LikeLike
Yes, exactly. I’m *so* tired of the buttsniffing. And I have neither the time nor the inclination to master billions of piles of arcane syntax. But maybe sometimes I want to customize something, or make a widget to make something work better. Be nice to also get some respect for that, but first I guess I have to write something ;).
(Installed Drupal on my laptop this morning, though, in a fit of inspiration. Have future ideas for installing it somewhere internet-facing, but I want to sandbox it first.)
LikeLike
This is really interesting to me — in part because I have long believed myself to be in just that interstitial space that you’re talking about! I really enjoy programming to solve problems, but I’m fluent in no language and I’m definitely not in the club. And like you I’m not sure I want to be in the club; arrogance turns me off, and there’s just so much of it in CS boys — I think it takes the place of testosterone. Nevertheless, when I see a bunch of boring work that a short script could make faster, I’ll write the script rather than doing the work by hand. Sometimes even if the script takes longer. 😉
LikeLike
So, there are three issues here:
1) Programming vs. using computers to solve problems: I think part of the context is that most programming languages were designed by programmers and for programmers. In fact, I’m having a hard time thinking of a language designed for non-programmers. Despite this, however, it has become exponentially easier for people to configure and customize their computers in the past decade as software companies figure out better and better ways to present configuration-options to their customers. (For example, the ‘smart folders’ found in Mac products allow the user to build boolean queries through a GUI, without calling them boolean queries.) So, I think you’ll find more and more of the ‘just solve my problem without making me program’ functionality exposed on an application-by-application basis, but not in any way that can be transferred from application to application. And you’ll always have more power as a user if you can program a little bit. Which leads to…
2) Useful widgets with only a little code: Part of the issue is that software libraries (pre-written bits of generic functionality) have *really* matured in the past ten years. (Thank you, Python and Java.) It is now standard that a programming language will come with GUI widgets, networking libraries, XML parsers, cryptographic algorithms, etc. etc. etc. in the *standard library* (the libraries that come with the language for free). That wasn’t the case when Andromeda and I were in college. Back then, you needed to write these things for yourself every damn time. So, no! You’re not crazy, Andromeda. You really couldn’t make anything useful in an introductory programming class. But the world has come a long way since then, and even beginning programmers have access to the magic one-line library functions to get a web-page from a server, parse it, pop open a window on the screen, etc. It’s a lot easier, these days, to write useful widgets in a screen-full of code. (From what I’ve heard, MIT is revising its Intro to Programming curriculum to reflect this new reality in that they are going to emphasize library-use from the beginning.)
3) Testosterone in CS: I’ve been doing a lot of thinking about sexism and gender-bias in CS recently, and this ‘butt-sniffing’ (I use a less polite term on my blog) is clearly only part of the problem. But even on its own, it’s disturbing to those of us who care about the leaky pipeline in CS. One tactic, which Andromeda and I have batted about, is to deliberately level the playing field by teaching the Intro to CS class in an academic language such as Scheme or Prolog. These languages are so, so very different than any language your typical butt-sniffer would know that they might even be at a disadvantage compared to the rank beginners. (For example, Prolog erases the distinction between a function’s input and output. It’s sorta mind-blowing if you have any kind of real-world programming background.) While this might level the playing field, however, it will just exacerbate the ‘programming is useless’ impression that Andromeda describes above.
LikeLike
I’ve run across this tension between #2 and #3 myself. I wonder if it isn’t the same as the tension between software engineering and computer science — engineering and science being, of course, perfectly valid and excellent ways of approaching the world, but generally applied with a different ethos to different things.
Which suggests that either the widget-oriented approach or the Scheme-oriented approach would be fine things to try — maybe even have both as options! — but one or the other might be a better fit for a particular major or student population. (Honestly, for all that I’d like to build something that works now, as a 17-year-old I would have been much more intrigued by a more theoretical approach.)
LikeLike