Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
Well that got quite a few lengthy and high quality comments in a short time. To briefly follow up on some of them:
Professor Ragde queries:
Erstwhile professor? I am still a professor.
English has ambiguous lexical scoping. When I said "my old friend and erstwhile professor", I intended to convey that though you may still be a professor and my old friend, you're no longer my professor. I suppose it's hard to know whether the "my" binds to both halves of the conjunction or just the first. Sorry for the confusion.
D. Brian Ellis avers:
the University was not there to teach me higher level theoretical CS for the pleasure of it. It was there to give me the skills to maximize my chance of getting a job in the real industry.
How interesting -- our views on what a university is for are diametrically opposed to each other. I certainly didn't go to University to gain practical skills that would get me a better job! If I'd wanted that, I'd have gone to community college and taken courses on practical programming, and then continued to go back for refresher courses on new technology every few years. (Or, had I been really after the money, would have chucked the whole programming thing and learned about plumbing.) I went to University to be exposed to the whole universe of knowledge, to gain understanding of underlying theory in a particular subject, and emerge with not a particular set of skills for a particular job, but with the ability to learn how to do any job in my field.
The implicit contract between the University and the student has changed. Nowadays, rather than demanding "show me the world and all that is in it, teach me how to learn and how to be an educated, ethical citizen in our complex modern world", students are demanding "give me a piece of paper that will get me a better job than my neighbour, and if you show me anything that offends my narrow view of how the world works, I'll sue."
Obviously I'm exaggerating. And maybe I'm being the old curmudgeon now. (Someone called me an "old timer" the other day, which is a little odd, being an old timer at 31!) Obviously there are good practical reasons for this trend -- people do want better jobs and the nice thing about money is that you can buy stuff with it. But I can't help but despair a little.
Also, I must reiterate that Waterloo is an extremely pragmatic school -- there have always been strong ties between academia and industry in Waterloo. But the way Waterloo teaches students given its close relationship to industry is to separate out the practical and the theoretical by providing a co-operative education program. I picked up my practical knowledge of how to ship quality software on time at WATCOM and Microsoft, not in Professor Becker's algorithms course. Twenty-four months of internship goes a long way!
Professor Thingo has several comments germane to the previous point in a private correspondence, which I will paraphrase:
First, speaking of those co-op interns, Professor Thingo wonders if as an employer I am less likely to hire a first-year intern who has got a background in Scheme rather than in C++ or Java?
No. Interns already know very little about the specific skills required to ship consumer-grade software to customers on time -- that's what I try to teach them. I hire interns based on raw potential and intellectual horsepower, not on skill set. I'd be thrilled to hire an intern who could break down a problem using functional programming style. (They'd be right at home -- there are already chunks of my code that resemble Scheme -- lots of parens, list-based algorithms, deeply nested function calls, etc.)
More generally, diversity is good -- we also hire intern testers and program managers -- people who require some programming skills but need not be the low level bit twiddlers who actually write the compiler optimizations. Any course that attracts a broader array of talent and gets them into the co-op program where I can hire them is goodness for me.
I will blog more on interviews at Microsoft soon.
Second, Professor Thingo points out that Brian Kernighan gave a talk at Waterloo yesterday on the subject "What Every Educated Person Needs To Know About Computers", and he now teaches a course at Princeton on computer science for non-computer scientists. Apparently Brian Kernighan believes, as I do, that producing well-rounded citizens who understand at least the basics of the world beyond the bounds of their narrow disciplines is goodness. Unfortunately, it's a little late to attend the talk.
Professor Thingo also notes that Brian Kernighan uses Visual Basic as the canonical language in this course, and wonders what my thoughts are on VB as a pedagogic language. I'd love to explore that idea in more depth, but I'm a little time constrained today. Suffice to say that I think it's a reasonable choice -- VB was designed for both professional and "opportunistic" programmers, and there's a lot of overlap between opportunistic programmers and novice programmers. I'll get into more details in a future blog I'm sure.
And finally, Mike Dunn asks:
The question I always ask when this topic comes up is, "Why do people think it's bad that there aren't more women in programming?" If programming is a profession that just doesn't appeal to women -- whether it's for social or biological reasons -- then what's the big deal?
That's an excellent question, and the answer is -- I reject the premise of the question. I don't think that "there aren't more women qua women" is bad.
Of course I want the field to be an open, fair, meritocracy -- and if there are unfair, discriminatory practices that prevent the advancement of women in this field, I want them to be mitigated. But my worries about the lack of women entering this profession have little to do with questions of fairness. I don't have an ideological axe to grind, I don't think that the ideal workplace must reflect the demographics of the broader society, blah, blah blah. No, I'm worried about the trend of women eschewing CS for an entirely pragmatic reason: my team is chronically short-staffed. Therefore, I don't think it's bad that there aren't more women in programming. I think it's bad that there aren't more talented people in programming.
How do you fix a performance problem? My favourite way is to find the worst thing and massively improve it -- that's the easiest way to get "bang for buck". That is why I put so much emphasis on women in computer science -- if we can make the profession more attractive to even 1% of the smart, talented, educated women in the world, that would be an ENORMOUS increase in the overall industry talent pool. And obviously the converse holds -- as the percentage of women interested in the profession falls, the overall pool gets smaller. (Remember that I introduced this topic under the rubric of a lack of qualified domestic workers of both sexes. I'm concerned with the overall trend, but I find the trend for women particularly worrisome.)
The set of smart, talented women out there is large and growing, but there's a problem: those women are increasingly choosing to utilize their talents in a way that doesn't directly benefit me! J That choice is motivated by barriers to entry to women (many of which are simple misconceptions about what the job entails, many of which are rather deep). Anything we can do to knock down those barriers is a win-win situation -- I get more qualified, talented people to interview, and women have a broader array of exciting, challenging, high-paying jobs to choose from.
I could make the further argument that diversity is good, that women are our customers (and competitors!), that a broader perspective is always helpful when designing tools, blah blah blah. Those are great arguments, but frankly I'm more worried about simply having the necessary talent in the form of warm bodies available to do all the incredibly cool stuff I want to help make happen in this industry in the next 25 years.