Gas station without pumps

2015 August 8

Advice for CS students

Filed under: Uncategorized — gasstationwithoutpumps @ 20:48
Tags: , ,

Katrin Becker has collected advice from senior computer science students to those just starting out, which she has collected in her blog post Worth Sharing: Advice for New Students From Those Who Know (Old Students).   She summarizes the list as follows:

Top 10 list [Highlights]

  • Start Assignments Early: they will take longer than you think.
  • Make friends.
  • Ask questions.
  • Practice Programming. Try Stuff.
  • Make sure Computer Science is really what you want to do.
  • Choose options you will enjoy.
  • Go to class.
  • Don’t take too many CPSC courses in one semester.
  • Plan your programs on paper before you start typing.
  • Remember to have fun.

and goes on to give specific quotes from students for each of these categories (plus some other unsorted quotes).  Some of my favorites include

Be nice to people. You never know when they will be able to help (or hinder) you in the future.

You’ll enjoy it more if you treat your work as a full-time hobby, and not just a path to a job.

Working in groups tends to be harder, not easier.

Of course, a lot of the advice applies to any engineering major, and some to any college major.  Even the advice about programming applies to other design tasks.

2014 September 1

Where PhDs get their Bachelors’ degrees

Last year I wrote about a study that looked at where CS PhD students got their bachelors’ degrees. Now Reed College has extended that question to other fields as well: Doctoral Degree Productivity.  Their point was to show how high Reed ranked on the standard they chose: the number of students who went on to get PhDs divided by the number of students getting bachelor’s degrees.  I quote the tables and accompanying text below, but I take no credit or blame for the data—this is directly from Reed’s site:

Undergraduate Origins of Doctoral Degrees

Percentage ranking of doctorates, by academic field, conferred upon graduates of listed institutions.

Rank All Disciplines Science and Math Social Sciences Humanities and Arts
1 Calif. Inst. of Tech. Calif. Inst. of Tech. Swarthmore New England Conserv. of Music
2 Harvey Mudd Harvey Mudd Grinnell Curtis Institute of Music
3 Swarthmore Reed Reed Juilliard
4 Reed MIT Bryn Mawr Cleveland Inst. of Music
5 Carleton NM Institute Mining & Tech. Spelman St. John’s College
6 MIT Carleton Oberlin Reed
7 Grinnell Wabash Wesleyan Hellenic College-Holy Cross Greek Orthodox Sch. of Theology
8 Princeton Rice St. Joseph Seminary Swarthmore
9 Harvard Univ. of Chicago Harvard Oberlin
10 Oberlin Grinnell Pomona Amherst

Percentage Ranking by Specific Fields of Study

Rank Life Sciences Physical Sciences Psychology Other Social Sciences* Humanities
1 Calif. Inst. of Tech. Calif. Inst. of Tech. Univ. Puerto Rico – Aguadilla Swarthmore St. John’s, MD
2 Reed Harvey Mudd Wellesley Reed Reed
3 Swarthmore Reed Vassar Harvard Amherst
4 Carleton MIT Hendrix Grinnell Swarthmore
5 Grinnell NM Institute Mining/Tech. Pontifical Coll. Josephinum Univ. of Chicago Carleton
6 Harvey Mudd Carleton Grinnell Bryn Mawr Yale
7 Univ. of Chicago Wabash Swarthmore Thomas More College of Lib. Arts Thomas More College of Lib. Arts
8 Haverford Rice Barnard Oberlin Bryn Mawr
9 MIT Univ. of Chicago St. Joseph Seminary Coll. Bard College at Simon’s Rock St. John’s, NM
10 Earlham Grinnell Pomona Wesleyan Wesleyan
11 Harvard Haverford Reed Amherst Princeton
12 Cornell Univ. Swarthmore Wesleyan Pomona Bard College at Simon’s Rock

*Does not include psychology, education, or communications and librarianship.

Source: National Science Foundation and Integrated Postsecondary Education Data System. The listing shows the top institutions in the nation ranked by estimated percentage of graduates who went on to earn a doctoral degree in selected disciplines between 2001-2010.

All the schools listed are private schools except Univ. Puerto Rico—Aguadilla and NM Institute Mining/Tech., but seeing dominance by expensive private schools is not very surprising—grad school is expensive, and students who can afford expensive private schools are more likely to be able to afford expensive grad school and are less likely to need to work immediately after getting their B.S. or B.A. A PhD is not a working-class degree—it is prepares one for only a small number of jobs, mainly in academia or national labs, so for many it is just an elite status symbol.  What is more surprising is how poorly the Ivy League schools do on this list—perhaps those who get their elite status conferred by their bachelor’s institution see no need to continue on to get higher degrees.

Reed does not report numbers directly comparable with the ones in the Computing Research Association report, which reports only on computer science PhDs, where

Only one institution (MIT) had an annual average production of 15 or more undergraduates.   Three other institutions (Berkeley, CMU, and Cornell) had an average production of more than 10 but less than 15.  Together, these four baccalaureate institutions accounted for over 10% of all Ph.D.’s awarded to domestic students.   The next 10% of all Ph.D.’s in that period came from only eight other baccalaureate institutions (Harvard, Brigham Young, Stanford, UT Austin, UIUC, Princeton, University of Michigan, and UCLA). 

Note that five of the top producers of bachelor’s in CS who went on to get PhDs were public schools.  The CRA does not report PhD/BS numbers for individual institutions, probably because the numbers are too small to be meaningful for most colleges—you have to aggregate either across many colleges or across many fields before the denominators are big enough to avoid just reporting noise.  Reed did the aggregating across fields, while the CRA report aggregated across colleges, finding that research universities sent about 2.5% of their CS graduates on to get PhDs, 4-year colleges about 0.9% and masters-granting institutions about 0.6%.  They did have one finding that supports Reed’s analysis:

The top 25 liberal arts colleges (using the U.S. News and World Reports ranking) collectively enroll slightly less than 50,000 students per year in all majors and were the origins of 190 Ph.D. degrees between 2000 and 2010, collectively ranking ahead of any single research university.

Reed’s findings are also consistent with the NSF report that put the “Oberlin 50” colleges highest at over 5% of their science and engineering graduates going on to get PhDs, compared to about 3% for research universities.  The NSF report supports somewhat the analysis that socio-economic status is important in determining who goes on to grad school—private research universities match the Oberlin 50, but public research universities have only about half as large a fraction of their graduates go on to grad school.

I found out about this site from The Colleges Where PhD’s Get Their Start, which has a copy of the tables that probably came from an earlier, buggy  version of the site, because Lynn O’Shaughnessy wrote

I bet most families assume that attending a public flagship university or a nationally known private research university is the best ticket to graduate school. If you look at the following lists of the most successful PhD feeder schools for different majors, you will see a somewhat different story. Not a single public university makes any of the lists. The entire Cal State system, however, is considered the No. 1 producer of humanities PhD’s.

I could believe that the Cal State system had the largest raw numbers of students going on to get PhDs in humanities, as they are a huge 4-year college, enrolling about 438,000 students [], with about 76,000 bachelor’s degrees per year []. Are there any other colleges in the US graduating so many BS or BA students per year? But the fact remains that Cal State is not the flagship university of California, and the University of California probably has a much higher percentage of its alumni go on to get PhDs.

In fact, one of the big problems with these lists is the question of scale—most of the colleges that come up high on Reed’s lists (which means high on NSF’s lists) do so by having very small denominators—they don’t graduate many students, though a high percentage of those go on to get PhDs.  In terms of raw numbers of students who go on to get PhDs, the public research universities produce many more than the private research universities, and the liberal arts schools are just a drop in the bucket. Of the top 25 schools in terms of raw numbers who go on to get PhDs in science and engineering, 19 are public research universities and 6 are private research universities—of the top 50 only 17 are private research universities.

When you are looking for a cohort of similarly minded students, you get slightly higher enrichment at some very selective private schools, but there are actually more peers at a large public research university—if you can find them.

2014 February 2

CS is not a foreign language

Filed under: Uncategorized — gasstationwithoutpumps @ 07:40
Tags: , ,

The Computer Science Teachers Association recently had a blog post about a recent development in high school CS teaching, Why Counting CS as a Foreign Language Credit is a Bad Idea.

When these policy makers look at schools, they see that computer science is not part of the “common core” of prescribed learning for students. And then they hear that Texas has just passed legislation to enable students to count a computer science course as a foreign language credit and it seems like a great idea.

But all we have to do is to look at Texas to see how this idea could, at the implementation level, turn out to be an unfortunate choice for computer science education. Here are the unintended consequences

  1. If a course counts as a foreign language course, it will be suggested that a new course must be created.
  2. If a new course is created, chances are that it won’t fit well into any of the already existing course pathways for college-prep or CTE.
  3. This new course will be added to the current confusing array of “computing” courses which students and their parents already find difficult to navigate.
  4. There will be pressure brought to ensure that that course focuses somehow on a “language”. For the last ten years we have been trying to help people understand that computer science is more than programming. Programming/coding is to computer science as the multiplication table is to mathematics, a critical tool but certainly not the entire discipline.
  5. If this new course is going to be a “language” course, we have to pick a language (just one). And so the programming language wars begin.

I agree that computer science should count as a math or science credit, not a foreign language credit.  CS and foreign language use different mental skills. For one thing, the “grammar” taught in programming languages is deliberately very much simpler than natural language grammars—so much so that there is little transference between learning on and learning the other.  Also, foreign language courses include a lot of memory work (particularly vocabulary, but also conjugation and declension patterns in many languages), while beginning computer science courses are more about learning how to design and debug—that is, to develop problem-solving skills, not memory skills.

Foreign language instruction is also very important, and replacing it with computer science would not be helpful for the cultural understanding and ease of relations between different countries that is an important reason for teaching foreign languages. Decreasing foreign language to make room for computer science is short-sighted.

The most sensible classification for CS (if it needs to be classified in the narrow categories that guide secondary school administrators) is with math.  The reasons for learning CS are much the same as the reasons for learning algebra, both in terms of the underlying set of mental skills that one hopes would transfer to other fields (but usually don’t) and the usefulness as a base for future study in STEM fields.

I think that the claim “Programming/coding is to computer science as the multiplication table is to mathematics” is a bad analogy.  Closer would be “Programming/coding is to computer science as algebra is to mathematics”.  Programming is a much larger and more complicated skill than multiplication, and it underlies most of the rest of computer science. Multiplication is primarily a memory skill (multiplication tables and a simple algorithm), while programming is primarily a problem-solving skill.

I also agree with the concern that making CS a “foreign language” skill will put even more pressure on high schools to adopt a common programming language.  The College Board AP test has already blessed Java, which I think is a poor choice for a first teaching language (though I know that many computer science professors like it as a first language, for many of the same reasons I dislike it).  I prefer Scratch followed by Python, as I’ve explained before on this blog.

Standardizing the way computer science is taught would be a moderately bad thing, as there is no “one true path” that produces great programmers and computer scientists. I see value in having a variety of different pedagogical approaches to teaching programming (and computer science), as the first few programming languages one learns tends to color the way one things about programs for several years.  I believe that a diversity of different approaches to programming is important to the health of the computer science both as an academic pursuit and as an industry—and different initial programming experiences is as important to that diversity as different people are.

Note: I tried to post a comment on the original post, but I kept getting

Server error!

The server encountered an internal error and was unable to complete your request.

Error message:
Premature end of script headers: mt-comments.cgi

If you think this is a server error, please contact the webmaster.

Error 500

You’d think that the Association for Computing Machinery could keep a blog running, but I guess their disdain for mere “programming” extends to the programmers who set up their website.

2014 January 1

Technical entitlement—is it a thing?

Filed under: Uncategorized — gasstationwithoutpumps @ 18:49
Tags: , , ,

I learned a new buzzword yesterday: “technical entitlement”.  I encountered the phrase on  the blog On Technical Entitlement |, though apparently Tess Rinearson originally wrote it in June 2012 and also published it on

I’m the granddaughter of a software engineer and the daughter of a entrepreneur. I could use a computer just about as soon as I could sit up. When I was 11, I made my first website and within a year I was selling code. I took six semesters of computer science in high school, and I had two internships behind me when I started my freshman year of college.

Despite what it may seem, I’m not trying to brag—seriously. I’m just trying to prove a point: I should not be intimidated by technical entitlement.

And yet I am. I am very intimidated by the technically entitled.

You know the type. The one who was soldering when she was 6. The one who raises his hand to answer every question—and occasionally tries to correct the professor. The one who scoffs at anyone who had a score below the median on that data structures exam (“idiots!”). The one who introduces himself by sharing his StackOverflow score.

That’s technical entitlement.

“Technical entitlement” seems to be the flip side of “imposter syndrome”. In imposter syndrome, competent people question their own competence—sometimes giving up when things get a little difficult, even though an outside observer sees no reason for quitting.  “Technical entitlement” seems to be blaming those who have both competence and confidence—as if it were somehow deeply unfair that some people learned things before others did.

Certainly some things are unfair—as an engineering professor I’ve been able to provide opportunities for my son to  learn computer science and computer engineering that would not be available to a parent who knew nothing about those fields.  And some of the characteristics she lists would apply to my son—I can see him correcting his professors, and although he’d never introduce himself by sharing his StackOverflow score, he did include it in some of his college essays, as evidence that he was knowledgeable and interested in sharing what he had learned.

But Tess Renearson goes on to say

It starts with a strong background in tech, often at a very young age. With some extreme confidence and perhaps a bit of obliviousness, this blooms into technical entitlement, an attitude characterized by showmanship and competitiveness.

While my son has confidence in his abilities and “perhaps a bit of obliviousness”, neither showmanship nor competitiveness are big factors in his behavior.  I think that Ms. Renearson has confused a personality trait and stereotypical US male behavior (showmanship) with early technical education. I see the arrogance as a bad thing, but the early technical education (which she herself had) as a good thing.

The rest of her post goes on to talk about ways that Amy Quispe and Jessica Lawrence managed to increase participation (particularly by women) in tech events.  But the analysis there really addresses imposter syndrome more than it does “technical entitlement”.  She quotes Jessica Lawrence: ‘“There is,” she said, “an under-confidence problem.” But Ms. Renearson then says

Sound familiar? Yep, it’s exactly the kind of self-doubt that can arise when there are so many technically entitled people around.

Somehow blaming “technically entitled people” for the under-confidence of others seems to be imposing blame where none is warranted.

Now imagine someone starting out as a college student taking their first CS course. Imagine how the technical elite make them feel.

I can understand someone being intimidated when entering a new field if they are surrounded by people more skilled in the field—but that is hardly the fault of the those who are skilled.  Newcomers anywhere are going to feel out of place, even when people are trying to welcome them. The “technical elite” are not making the newcomers feel intimidated.

If Ms. Renearson’s point is that some of the tech communities are not sufficiently welcoming of newcomers, I agree.  I’ve seen snarky comments in places like Stack Overflow that offered gratuitous insults rather than assistance.

But Ms. Renearson seems to assume that anyone who is more experienced than her is automatically trying to put her down, and that this is the way that everyone should be expected to feel.  When one starts with that assumption, there is no remedy—no matter what those more experienced or more skilled do, they will be seen as threatening.

Perhaps she has not identified those who should be getting blamed precisely enough.  I don’t think that it is “The one who was soldering when she was 6” who is a problem, but those who refuse to give children an opportunity to learn (no public school in my county teaches computer science, except one lottery-entry charter) or who force students who’ve been programming for 6 years into the same classes as those who have never programmed, as many college CS programs do, providing no way for more advanced students to skip prerequisites.

Unfortunately, identifying the problem as being “technical entitlement” makes the problem worse not better, as it encourages public schools to suppress the teaching of technical subjects, rather than expanding them.

If she means to attack the arrogant culture of “brogrammers”, mean-spirited pranks, and other unpleasant culture that has emerged, then I support her, as I’m not happy with some of the culture I see either.  But don’t blame it on the kids who learned tech early, nor on the parents who taught them—the late-comers are more likely to be the arrogant bastards, since that arrogance is mainly a defense mechanism for incompetents.  The competent tech people are much more likely to be eager to share their enthusiasm with newcomers and help them join in the fun.

2013 November 12

Grading programming assignments

Filed under: Uncategorized — gasstationwithoutpumps @ 09:48
Tags: , , ,

In Critiquing code, I mentioned that I spend a lot of time reading students’ code, particularly the comments, when grading programming assignments.  For the assignment I graded this weekend, I did not even run the code—grading students entirely on the write-up and the source code.

The assignment is one that involves writing a simulation for a couple of generative null models, and gathering statistics to estimate the p-value and E-value of an observed event.  Running their code would not tell me much, other than detecting gross failures, like crashing code.  The errors that occur are subtler ones that involve off-by-one errors, incorrect probability distributions for the codon generator, or not correctly defining the event that they are counting the occurrence of.  These errors can sometimes be detected by looking at the distribution of the results (particularly large shifts in the mean or variance), but not from looking at a small sample.  The students had available plots of results from my simulations, so they could tell whether their simulation was providing similar results.

So I read the write-ups carefully, to see if the students all understand p-value and E-value (this year, sadly, several still seem confused—I’ll have to try again on improving their understanding), to check whether the distributions the students plotted matched the expected results from my simulations and previous years’ students, an to see whether the students explained how they extracted p-values from the simulations (only a a couple of students explained their method—most seem to have run a script that was available to them without even reading what the script did, much less explaining how it worked).

Whenever I saw a discrepancy in the results, I tried looking for the bug in the student code.  In well-written, well-documented code, it generally was fairly easy to find a bug that would explain the discrepancy.  In poorly written, poorly documented code, it was often impossible to figure out what the student was trying to do, much less where the code deviated from the intent. Even when the results appeared to be correct, I looked for subtle errors in the code (like off-by-one errors on length, which would have been too small to appear as a change in the results).

There was only one program so badly written that I gave up trying to figure it out—the student had clearly been taught to do everything with classes, but did not understand the point of classes, so he turned every function into its own class with a __call__ method.  His classes mostly did not have data in the objects, but kept the data in namespaces passed as arguments.  The factoring into classes or functions bore little resemblance to any sensible decomposition of the problem, but had arbitrary and complex interfaces. The result looked like deliberately obfuscated code, though (from previous programs by this person) I think it represented a serious misunderstanding of an objects-first approach to teaching programming, rather than deliberate obfuscation.  I instructed the student to redo the code without using any classes at all—not an approach I usually take with students, but the misuse of classes was so bad that I think that starting over with more fundamental programming concepts is essential.

Some of the students are now getting fairly good at documenting their code—I don’t seem to have any superstar programmers this year, but there are a couple of competent ones who are likely to do good work on their theses (assuming they don’t discard the documentation habits I’m enforcing in this course).  Some of the students who started out as very poor programmers are beginning to understand what it takes to write readable, debuggable code, and their programs have improved substantially. Many of the students have figured out how to separate their I/O, their command line parsing, and their computation into clean separate parts of their code, without sacrificing much efficiency. Even several who were writing very confusing code at the beginning of the course have improved their decomposition of problems, simplified their style, and improved readability of their code enormously.

In one comment on Critiquing code, “Al” commented “I would guess it has more to do with grit and the ability for a student to stick with a tough problem to find a solution.” I rejected that interpretation in my reply: “some of the worst programmers are putting in the most effort—it is just not well-directed effort. The assignments are supposed to be fairly short, and with clean design they can be, but the weaker programmers write much longer and more convoluted code that takes much longer to debug. So ‘grit’ gets them through the assignments, but does not make them into good programmers. Perhaps with much more time and ‘grit’, the really diligent students could throw out their first solutions and re-implement with cleaner designs, but I’ve rarely seen that level of dedication (or students with that much time).”

Now I’m not so sure that my reply was quite right. Some of the biggest improvements seem to be coming from students who are working very hard at understanding what makes a program good—when I complain about the vagueness of their variable descriptions or their docstrings, they improve them in the next assignment, as well as redoing the programs that elicited the feedback. But some of the students are falling behind—neither redoing assignments which they got “redo” on, nor keeping up with the newer assignments.  So there may be some merit to the “grit” theory about who does well—it isn’t predictive for any single assignment, but it may help distinguish those who improve during the course from those who stay at roughly the same level as they entered the course.

Next Page »

The Rubric Theme. Create a free website or blog at


Get every new post delivered to your Inbox.

Join 323 other followers

%d bloggers like this: