Gas station without pumps

2014 November 16

Good enough for what?

Filed under: Uncategorized — gasstationwithoutpumps @ 11:05
Tags: , ,

A blog post by Nick Falkner, Thoughts on the colonising effect of education, ended with the

I had a discussion once with a remote colleague who said that he was worried the graduates of his own institution weren’t his first choice to supervise for PhDs as they weren’t good enough. I wonder whose fault he thought that was?

Nick’s implied message was that it was the duty of the professors to make the undergrads they taught be good enough to go on for PhDs.  But I’m not sure he’s right here.

We do not need huge numbers of new PhDs—some, but not nearly as many as are being graduated from BS programs. Only about 10% of undergrads (or less) should be going on for PhDs, so the majority of graduates from any institution should not be “first choice to supervise for PhDs”. We should be bringing up as PhDs those most likely to be productive researchers and university faculty, and encouraging other students to find productive lives outside of academia (there is a world outside academia, though many professors prefer to ignore it).

If most of the undergrads graduating are top candidates for PhD programs, then perhaps the criteria for PhD candidates are wrong—or the undergraduate program is too small and selective, so that students who would benefit from it are being excluded.

I’m an engineering professor, and in most engineering fields the working degrees are the BS and the MS—the PhD is reserved for cutting-edge research that is not expected to result in products any time soon and for university teaching. I would consider myself a failure as an engineering professor if none of my students went on to become working engineers, but all went into academia.

I expect many of the best students not to be well-suited for PhD degrees—they want to go out into the real world and solve real problems (sometimes to make money, sometimes to save the world, sometimes just for the joy of solving problems).  The best PhD candidates are often not the best engineering students, because a PhD candidate has to be willing to work on an esoteric problem for a really long time with no promise of success, while good engineering often calls for quick prototyping and rapid development, dropping unproductive projects quickly, before they cost too much—not long-term projects that may never pay off.

So, while I certainly want some of my undergrad students to go into academia and to be top choices for PhD programs, I’m happy if most of them are not suited for PhDs, as long as they have acquired an engineer’s problem-solving mindset, enough skills to get them started in a job, and a lifelong habit of picking up new knowledge and skills.

2014 October 26

Critical thinking

In a comment exchange on the Cost of College post Trying to teach the enigmatic and increasingly popular skill of critical thinking, CSProfMom and I were discussing the relationship between critical thinking and the various modes of thinking used in CS and engineering.  I’ll pull out some of the highlights of the discussion to set the stage for this post, but I’m leaving some things out, so go read the original post and comments.

Grace, the author of the post, presented some of the definitions of critical thinking she had found, and CSProfMom replied with

I do not like these definitions of critical thinking because they are only based on verbal reasoning. Mathematical and computational problem solving are utterly ignored; yet I think more critical thinking goes on in those areas than in fields like literary analysis.

Grace defended the definitions, and CSProfMom responded with CMU’s definition of computational thinking:

Computational thinking means creating and making use of different levels of abstraction, to understand and solve problems more effectively.

Computational thinking means thinking algorithmically and with the ability to apply mathematical concepts such as induction to develop more efficient, fair, and secure solutions.

Computational thinking means understanding the consequences of scale, not only for reasons of efficiency but also for economic and social reasons.

I weighed in with

I think that CSProfMom’s point is that “critical thinking” is generally defined rather narrowly and generically, and so misses the important thinking styles that are crucial to some fields. “Computational thinking” is one that is missing. One I see students not getting in most of their college classes is “engineering thinking” or “systems thinking”—dividing difficult problems into simpler subproblems with clearly defined interactions between the subproblems. Although one can argue that these specific modes of thinking are somehow subsumed in “critical thinking”, classes that purport to develop critical thinking skills don’t generally develop these important modes of thinking.

CSProfMom responded with

I think there is a lot of overlap between “computational thinking”, “mathematical thinking”, and “systems thinking”. Abstraction and decomposition are key skills in all three. Your description “dividing difficult problems into simpler subproblems with clearly defined interactions” is absolutely critical in computer science. Maybe computational thinking is simply systems thinking + algorithms?

In any case, because the “critical thinking” term does not include this idea of systems thinking, we see students arrive into our engineering/CS programs utterly unable to think in this manner. I believe that is a major reason why we see the terrible attrition rates in these programs.

The rest of this post will be an expansion on the comment I left in response to this.

There are several different terms floating around in our discussion, and I’d like to pull them out for closer examination:

critical thinking
This seems to be a subset of the medieval trivium (grammar, logic, and rhetoric), leaving out the grammar and being a bit light on the rhetoric. It doesn’t even cover modern mathematical logic, but only the simplest Aristotelian logic. The Wikipedia article on the trivium even points to the critical thinking article, which collects nine conflicting definitions of critical thinking, none of which include the other concepts that I list below, except in the vaguest ways.
mathematical thinking
Mathematical thinking is about setting up formal systems of rules and examining their properties very closely. Proofs are a major component of mathematical thinking, which has a much more formal and unforgiving definition of proof than other fields. Computation has created a lot of new formal systems to study, and has been a fruitful area recently for mathematicians, just as physics was in previous centuries. Theoretical computer science is basically a branch of mathematics, involving primarily mathematical thinking.
scientific thinking
Scientific thinking studies the real world, constructing models of how it functions and testing the models empirically.  Different branches of science differ in how much they are model-driven and how much they are data-driven. Physics is highly model-driven, with the models often coming out 40 or 50 years in advance of the data (see Higgs boson).  Biology is highly data-driven often with non-quantitative  verbal stories as the models.  The key concept throughout science is empirical validation of predictive models.
engineering thinking
Engineering is about designing new things.  An engineering question is more of the form “how can I make this work?” rather than the science question “how does this work?”  I’ve talked about the distinction between science and engineering in one of my early blog posts, so I won’t belabor the point here.  Although scientists and engineers often wander back and forth between scientific and engineering thinking, the two are really distinctly different modes of thought.
systems thinking
Systems thinking is an important component of engineering thinking, consisting of dividing difficult problems into simpler subproblems with clearly defined interactions between the subproblems.  But systems thinking cuts across many fields, including mathematical thinking and scientific thinking. 
Computer programming is one of the best subjects to teach systems thinking in, because computer languages provide formal (though still inadequate) ways of representing the modules that encapsulate the subproblems and the interactions between them.  Electrical engineers try to do the same thing with their block diagrams, but these formalize a little less of the interactions, relying on English-language descriptions that are often omitted or poorly written. 
Unfortunately, many of the lower-level computer science classes have the faculty or textbook authors do all the systems thinking for the students, so that the students never learn to do it themselves. The scaffolding put in place to help the students find good solutions is where all the systems thinking happened, and descaffolding so that students have to learn to subdivide difficult problems into easier ones is an essential, but often missing, component of teaching programming.
The “multiple levels of abstraction” mentioned in the CMU definition of computational thinking is really about systems thinking, as each subproblem gets broken down into still smaller problems. 
algorithmic thinking
Algorithmic thinking is coming up with very precise recipes for doing things—not just flailing around trying things, but having very specific methods that can be shown to work (and work efficiently). Algorithmic thinking is really a branch of mathematical thinking, interested in provably correct manipulations in formal rule systems.  Originally it was applied to computing numerical functions, first manually and later by machine, but now has been expanded to cover many different types of data that can be represented in computers.  This is the second part of the CMU definition of computational thinking.
computational thinking
I don’t like the CMU definition of computational thinking, as they seem to have picked up definitions of mathematical, systems, and algorithmic thinking, and missed the computational part entirely. Computational thinking, to me, involves using computation to solve problems (data analysis, algorithmic solution of symbolic problems, numerical simulation, …) and may not involve much systems thinking or algorithmic thinking—someone else may have done that for you to enable you to use a computational tool.  Using Google to search for information is computational thinking, albeit at a rather low level.
statistical thinking
Statistical thinking is distinct from all of the above, though it is often important in scientific thinking.  Statistical thinking involves reasoning about data that comes from random processes, or that can be modeled as having been corrupted by random noise.  Notions of probability, sample size, statistical significance, multiple-hypothesis correction, correlation, and causation are all part of statistical thinking, which has applications to decision making in all aspects of life.

Obviously, there are overlaps and intersections between these different modes of thought (proofs done with the aid of a computer are a combination of mathematical and computational thinking, for example), but there are important differences also.  For example, Engineering thinking is not just systems thinking, but includes attention to fine details in the edge conditions (a hallmark of mathematical thinking), making allowances for variations in manufacturing (statistical thinking), testing how the device works in the real world (scientific thinking), and, very often these days, figuring out how to use cheap microcontrollers to do tasks that traditionally were done with more expensive analog devices (computational thinking).

The UCSC general education requirements (see my blog post on general education) recognize mathematical reasoning, scientific inquiry, and statistical reasoning as distinct parts of general education, adding textual analysis and cross-cultural analysis to cover what is often lumped under “critical thinking”.  They did not include anything that guarantees exposure to systems thinking, and they tossed in a few other things, some of which seem to me to be more politically expedient choices or fashion following than fundamental modes of thinking, but a general education system is always a compromise between different beliefs about what a university education should mean.  I think they did a better job of defining the basis for their general education system than most universities manage.

There have been a lot of calls for more education in “critical thinking” lately.  I’m not really happy with these calls, because teaching only a weakened version of the medieval trivium instead of more powerful modern forms of thinking does not educate students properly.



2014 September 25

Details matter

Filed under: Uncategorized — gasstationwithoutpumps @ 11:57
Tags: , ,

In a comment on Mark Guzdial’s blog post Pushback in California on Computing in Schools, “lizaloop” wrote

2. While I support the effort to bring programming into schools I’d like to see us also emphasize the concept of each person taking charge of his or her own learning. Because programming languages change so rapidly anyone who intends to do serious coding will have to repeat the learning process over and over. Our introductory CS classes need to focus more on “learning how to learn” than on the specifics of any one coding language.

While it is certainly true that programing languages go in and out of fashion (where are the COBOL programmers of my youth now?), and it is also true that people need to keep learning if they want to remain in any technical field for long, that doesn’t mean that intro CS courses should give up on teaching specifics and instead tackle the nebulous goal of “learning how to learn”.

In fact, one of the things that distinguishes computer programming from many other courses of study is that you must learn the specifics of the programming language and tools you are using if you are to get anything done.  “Big picture” thinking does not get programs written.  It does you no good to “learn how to learn”, if you then don’t learn any of the details.

One of the major things that students new to computer programming (and to other engineering fields) need to learn is that details matter.  The specifics of the computer programming language they are learning matter—not forever, since they might never use that particular programming language again—but while they are doing what they are doing right now, the details matter.  That is an enduring, transferable lesson, but it depends on having a course in which the specifics of the coding language are viewed as important.

Of course, this does not mean that the teacher has to spend a lot of time on the details—the compiler or interpreter will make it abundantly clear to the students that details matter.  But the teacher can strengthen or weaken that lesson by their own example and by their grading.  Teachers who only do sloppy pseudocode on the board, never filling in the missing details or correcting mistakes, will convey the impression that the details are unimportant.  Teachers who don’t mark down sign errors, punctuation errors, and off-by-one errors in quiz or exam answers also give the impression that “close is good enough”, which is emphatically not the case in real programming.  Teachers who never read their students’ programs, but only do crude I/O testing to grade programs, will give the impression that documentation doesn’t matter.

On the other hand, teachers who spend all their time fussing over semicolons and never talking about the bigger ideas of algorithms, data structures, problem decomposition, and program documentation will produce low-quality copy editors, not programmers. One reason I like Python as a pedagogic language is that the syntax is simpler than many other languages, so that I can get the details right without having to spend so much time explaining the details (and the students can spend more time on more interesting debugging than chasing down punctuation errors).

But I’m not trying to dump on lizaloop’s ideas entirely.  Computer programming courses are a good place to teach students to “learn how to learn”, though not by ignoring the specifics and following some sort of touchy-feely metacognition curriculum.  Indeed, it is because of the specific details that students must master to get anything done that programming is such a good subject for learning how to learn.

Those specifics are essential to the task at hand (not some nebulous future need that is all most math or science classes manage), but they are easily looked up in on-line documentation with generic Google searches.  Try googling things like python reverse string, HTML color, or c++ function pointer to see how easy it is to get online tutorials and documentation on specific details.

It is completely reasonable for a teacher to give students concepts and keywords, but expect them to look up some of the details for themselves.  For example, a teacher might explain RGB color space and how colors are often encoded as three one-byte numbers in hexadecimal format, but not give any specific color codes, expecting students to find the codes they need either by experimentation or by on-line search.

In the approach I’m suggesting, the students are still focused on the details of the coding language, but they are also learning how to learn (at least at the lowest level of learning how to look up specific facts).

Teaching students how to learn more complex concepts on their own (like how to choose which color space to work in) is probably a forlorn hope, but getting them to learn to look up specific facts (like how to transform from HSV color space to RGB color space) and low-level details (like HTML color codes or how to reverse a string in Python) is certainly a reasonable expectation for an intro CS course.

2014 June 20

Male- and female-dominated fields

In Percentage of Bachelor’s degrees conferred to women, by major (1970-2012), Randal S. Olson posted the following image:

History of gender balance in different fields in college.

History of gender balance in different fields in college.

He makes the point that there is no “STEM” gender gap. Indeed, the sciences and math are doing fine on gender balance. There are, however, large gender gaps in the engineering and computer science on one side and health professions, public administration, education, and psychology on the other. The post with this graph talks mainly about the computer science and engineering gender imbalance, which is somewhat larger than the gender imbalance on the other side (particularly if you take into account that about 60% of bachelor’s degrees now go to women).  He talks about the other side of the gender imbalance in The double-edged sword of gender equality, though without shedding much more light on the subject.

Computer science is a particularly strange case, as it has seen more fluctuation both in raw numbers of students (data not shown here) and gender balance than any other field. Other fields have seen large shifts in gender balance, but they have generally been gradual and nearly monotonic—not reversing course in the early 1980s.  It seems to me that the biggest drops in the ratio of women in CS came at times when the overall number of students in CS was dropping (like after the dot-com bubble burst in the 2000).  When CS grew, the number of women grew faster than the number of men.  When CS shrunk, the number of women shrunk faster than the men.  Perhaps if CS education had had a steady growth, rather than the boom-and-bust cycles that have plagued it since the late 1970s, it would not have had such a mysterious rise and fall in proportion of women in the field. The boom-and-bust cycles are not driven by the real need for CS degrees, but by media hype about relatively small shortages or excesses of personnel.  I believe that the demand for CS degrees has been stabler than the supply (unlike most other fields, where the supply has been steady even as demand has fluctuated).  Sorry, I don’t have statistics handy for that, and I’m too lazy to spend hours going through the government databases trying to match up labor market information with degree information.

Fixing the gender gaps so that most fields can draw from the full population will be difficult. Getting more men into the health professions and education could probably be solved fairly easily by paying more—and there is no societal need for more psych and public administration majors than are currently being produced. But, because CS is already a high-paying field for which there is more demand than supply, the difficulty of getting more women to choose and complete the major is a societal problem that seems difficult to address.

Some people have suggested that eliminating H1B visas for importing temporary CS workers (who are predominantly male) might help.  I don’t think that the number of H1B visas is large enough to make that big a difference, though I support replacing the H1B visas with green cards.  If there aren’t enough American workers in a field, we should import the workers on a permanent basis, not with a temporary indentured-servitude system that just serves to export the technical expertise when the workers are sent home.

Some people have suggested that a big part of the problem is the disrespect women are treated with in some workplaces—which would help explain the “leaky pipeline” phenomenon, but not why female high-school and college students are not entering the field. Student choices in high school and college are shaped much more by peer pressure and mass media than by anything about the future workplaces—so the problem is one of changing the culture in high schools and colleges—a difficult task.  There has been some success at some smaller schools (like Harvey Mudd), but a large part of that has come from aggressive admissions policies that aim for gender balance in the field at admissions time—a route not open to public schools, who can’t apply large differences in admissions based on gender.

I’m currently in charge of a bioengineering program, whose graduating class was about 36% female (13/36), and a bioinformatics program that is so small that statistics are pretty meaningless (only 2 graduates a year, both male this year). I would like to see the number of women in majors increase, particularly in the concentrations that lead to higher paying jobs (the concentrations that are further from MCD biology).  We get a few students switching to the bioengineering from MCD biology, but not many, as those students don’t take the rigorous math and physics needed for the bioengineering degree—we really have to get our students in the first year.  I’m still trying to find ways to reach those students who would be good engineers, but don’t realize it until too late.


2014 May 21

Establishing the habit of writing

Filed under: Circuits course — gasstationwithoutpumps @ 09:19
Tags: , , ,

In Preparing for AP Physics 1: establishing the habit of writing Greg Jacobs writes

I’m in the infant stages of planning my AP Physics 1 course. The big trick is going to be establishing my students’ ability and willingness to write their reasoning, to get them to focus on communication rather than on getting a correct numerical answer. Once it’s clear that they are not taking a math course—once they see that the solution to a problem looks much more like what they’ve done in biology or economics than in calculus—I think the students will be able to move along quickly and enthusiastically through the material.

Students must get comfortable with calculation. However—as was correctly pointed out to me at the AP consultant meeting in April—if we start the course with lots of pure calculation, students will think that getting the answer is the holy grail of physics problems. If instead we begin the course demanding description, explanation, and all sorts of prose, students may become accepting of the idea that a numerical answer is merely the result of careful reasoning.

If this change in AP Physics actually works (something I’m always skeptical about in any curriculum reform, particularly at the high school level), it may help engineering students in college. Engineers do far more writing than most professions, with far less training at doing it.

I don’t think that a prompt that just says “In a clear, coherent, paragraph-length explanation, describe how you would figure out …” is going to do the trick, though. If they could already write clear, coherent paragraphs about how they would figure something out, then they would not need the curriculum change—they might not even need a physics class at the level of Physics 1.

I’m struggling with this problem in my applied circuits course, in which I require weekly design reports for the circuits they design and build. The students are staying in lab until they finish the designs and demo them, so they are clearly capable of doing the work (though not always as quickly as they should). But only a few students can explain their computations for the design parameters (like gain, corner frequency, and component values) clearly—others put down any nonsense that has a few of the right buzzwords in it.

The top students have gotten better at their explanations as a result of feedback, but the bottom students are still often producing word salad. Although there is some indication of a general writing problem (lack of topic sentences, poor grammar, and misused vocabulary), the problem is most pronounced when they are trying to explain how they selected component values. The more steps that there are in the underlying math, the more jumbled their explanations, even if the problem is just a chain of multiplications.

From time to time, I’ve suspected that the students don’t produce coherent sentences about how they computed something may not have actually done the computation, but “borrowed” the result.  This is not an explanation I believe in strongly, though, as the students have been (mostly) coming up with different solutions to the design tasks, so there isn’t simple copying going on. I’ve also seen the design process the students use, as they have been doing their pre-lab work in lab (instead of at home), so I hear them discussing the problems.  They do ask each other not just what answer they got, but how to get the answers, so they are trying to learn the method.

In looking at the pre-lab homeworks that were turned in on Monday I realized what part of the problem is—the students keep absolutely awful design notes. What the students turned in on Monday (even the top students) was mostly incomprehensible scribbling of numbers, with no indication where the numbers come from or what they were attempting to compute.  Half an hour after writing down the notes, I’m pretty sure that they could not reconstruct their reasoning—hence the often magical methods in their design reports, where they copy numbers out of their notes (some of which are correct), but can’t put together a coherent chain of reasoning that leads to those numbers. On the long multi-step computations needed to figure out what gain an amplifier needs, they can usually do each step (though often needing coaching on one or two of the steps, either by me or by one of the better students in the course), but they don’t record the meaning of each step or even what the sequence of steps is, and the “answer-getting” mentality causes them to flush the process from their minds as soon as they have a number.

I’ve seen a lot of lab exercises for other courses that try to scaffold the process by providing worksheets that give the step-by-step process and have the students fill it out as they go along. I don’t think that this is helpful though, as it encourages students to solve one step at a time and then forget about it—the scaffold prevents the students from exercising the very skill that I most need them to learn. Showing them worked examples, as I have done in class, doesn’t seem to help much either—they can follow along as I break the problem down with them, and think they understand, but then not be able to do the same thing themselves.  Again, the scaffolding prevents them from exercising the skill I most need them to learn—identifying problems and them into subproblems.

For next year, I’m probably going to have to come up with some exercises which get students to organize their thoughts external to their heads. So far, the only thing I’ve thought of is to have them create a fill-in-the-blank worksheet for each lab (like an income tax form), and turn in the blank worksheet and try filling out each other’s worksheets.  If they get in the habit of writing down the steps as steps, it may help them be able to reconstruct their work when they convert it into full sentences for the final reports. It may be too late for me to do anything formal this year (only 2.5 weeks left), but I’ll suggest it to the students anyway.

The advice I’d give to Greg Jacobs is to leave the “clear, coherent paragraph” until later in the quarter—get them to create worksheets first.

I’d welcome any suggestions from my blog readers on ways that I can get students to learn to organize their thoughts in a way that they can present them coherently to others. Block diagrams alone don’t seem to be enough, and vague things like “mind maps” are likely to do more harm than good.

Next Page »

The Rubric Theme. Blog at


Get every new post delivered to your Inbox.

Join 305 other followers

%d bloggers like this: