EppsNet Archive: Problem Solving

Teaching Computer Science: It’s Not Easy to Teach a Subject in Which You Have No Training

29 Dec 2017 /
Mr. Rex Manihera, a teacher at the Glendowie South Primary School at Auckland

A recent issue of Science has an article on the pipeline for computer science teachers . . .

The first sentence says, “It’s not easy to teach a subject in which you have no training.”

That could be the whole article, really. That’s about all you need to know about the current state of computer science instruction: It’s not easy to teach a subject in which you have no training.

Cameron Wilson, chief operating officer and president of the Code.org Advocacy Coalition, is quoted as saying, “It’s really hard to convince a computer science professional to give up a job that pays up to three times more to pursue teaching. And I don’t think we should.”

Wilson’s opinion that computer science classes should not be taught by someone who actually knows something about computer science is probably influenced by the fact that Code.org is one of the leading providers of training programs and online curricular resources for in-service teachers tasked with teaching computer science.

How would this “train a neophyte” scheme work in other academic areas?

Assuming you could provide a one- or two-week training workshop to prospective teachers, would you:

  • Hire someone who has never played an instrument to teach a music class?
  • Hire someone who has never picked up a drawing pencil to teach an art class?
  • Hire someone who doesn’t speak Spanish to teach a Spanish class?

These all seem like absurd ideas with a very low ceiling on what you could hope to accomplish pedagogically. Why does anyone think it makes sense for computer science? Someone needs to explain that to me.

Putting non-practitioners in the CS classroom also requires, in addition to the teacher training, a second key component: the prefabricated curriculum.

Teachers are not able to design and teach a year-long class on a subject in which they have themselves only a week or two of experience, so Code.org and others offer packaged courses delivered to students online.

I’ve had an opportunity to see this in action. I volunteer two mornings a week at a local high school, helping out with the first period computer science class. It’s a mixed class, with most of the students taking AP Computer Science Principles, and a handful of kids taking an introductory programming class in Python.

The AP students are using UTeach, supplemented by the Berkeley BJC curriculum. The Python students are using CodeHS.

The teacher, a converted math teacher, does little to no independent instruction during the class period.

The material is too hard in my opinion for most people who are not programmers to read and understand and to figure out the assignments without a lot of help. Keep in mind that the teacher is also not a programmer.

The first two programming classes I took in college had a ~75 percent drop rate. Programming is hard but it can also be fun and beautiful. I don’t think a teacher who is not a programmer is able to convey that. Minus the beauty and fun, there’s nothing left but the difficulty.

I don’t see most students having what it takes to push themselves through difficult material delivered to them via a computer screen with no human interaction.

They give up and they blame themselves. I’m not smart enough for this. I don’t have what it takes.

It’s discouraging to see this because even kids who are not going to be programmers can learn useful ways of thinking about and solving problems from a computer science class . . .

  • How to break down complex problems into manageable parts
  • How to recognize patterns among and within problems
  • How to recognize important information vs. irrelevant detail
  • How to develop step-by-step solutions to a problem, or rules to follow to solve a problem

It’s a way of thinking that can’t be taught by someone who doesn’t genuinely think that way.

Thus spoke The Programmer.

What Does a Programmer Do?

8 Oct 2017 /

I was asked to give a talk last week to a high school computer science class on “What Does a Programmer Do?” (I’m indebted to Jim McCarthy for the “lords and ladies of logic” section.)


Programming is problem solving.


At the highest level, the problem that programmers solve is that people want to be able to do things with computers that they can’t do. And by computers, I don’t mean just the kind of computers you have on the desks here, I mean phones, watches, cars . . . more and more different kinds of devices are running software.

So one good thing about being a programmer is that pretty much every field of endeavor now uses software and data.

You can work at a tech company like Microsoft or Google or Twitter or Facebook, but you can also work in healthcare, finance, education, sports . . . you can work on cancer research, you can write video games . . . everybody uses software and everybody hires programmers.

Programming is a good job if you want to be learning new things all the time, if you don’t want to do the same things over and over.

The dark side of this is that it can be daunting trying to keep up with the pace of technological change. It can be overwhelming.

I was asked once in an interview, “What’s the coolest thing you’ve learned in the last week?” If you haven’t learned anything in the last week, it’s hard to answer that question, let alone if you haven’t learned anything in a month or a year. It’s easy to let your career slip away from you.

Programming has been a good job for me because I’ve been able to make a living doing things I like and things that I’m good at. I’ve always liked solving problems and building things.

To me that’s a good job: you do things you like and things that you’re good at. I don’t think most people can say that. Most people seem to be like “I hate Mondays,” “Thank god it’s Friday,” “Thank god it’s Thursday because it’s almost Friday.” If you spend a lot of time doing things you don’t like and you’re not good at, that’s a bad job.

As a programmer, you’re given problems to solve and a set of tools with which to solve them. You need to be able to figure out “what do i need to do, what do I need to learn, to be able to solve these problems with these tools?”

Self-reliance is good. Persistence is good. Floundering is bad. Know when to ask for help.

Asking for help is a no-lose strategy. Worst case, you ask for help and someone can’t help you or won’t help you, but you’re not any worse off than you were in the first place.

The demand for programmers exceeds the supply and it doesn’t look like that’s going to change anytime soon.

Nearly 30 percent of Americans ages 18 to 24 cannot locate the Pacific Ocean on a map, and 25 percent of Americans think the sun goes around the earth. Those people are not going to be programmers.

In a time of ubiquitous software and intellectual lethargy, programmers are like the priests in the Middle Ages. We are the lords and ladies of logic. We’re in charge of rationality for our era. We’re bringing common sense and sound judgment and aggregated wisdom and glory to everyone.

That’s our job.

The ‘Why’ Technique

16 Feb 2014 /

The usual purpose of ‘why’ is to elicit information. One wants to be comforted with some explanation which one can accept and be satisfied with. The lateral use of why is quite opposite. The intention is to create discomfort with any explanation. By refusing to be comforted with an explanation one tries to look at things in a different way and so increases the possibility of restructuring a pattern.

— Edward de Bono, Lateral Thinking

Challenge Assumptions

15 Feb 2014 /

General agreement about an assumption is no guarantee that it is correct. It is historical continuity that maintains most assumptions – not a repeated assessment of their validity.

— Edward de Bono, Lateral Thinking

How to Be a Genius

11 Mar 2011 /

You have to keep a dozen of your favorite problems constantly present in your mind, although by and large they will lay in a dormant state. Every time you hear or read a new trick or a new result, test it against each of your twelve problems to see whether it helps. Every once in a while there will be a hit, and people will say, “How did he do it? He must be a genius!”

One Problem After Another After Another

29 Aug 2010 /

I could see life being a long sequence of one problem after another after another. After quite a while of thinking I decided, “No, I should be in the mass production of a variable product. I should be concerned with all of next year’s problems, not just the one in front of my face.” By changing the question I still got the same kind of results or better, but I changed things and did important work. I attacked the major problem — How do I conquer machines and do all of next year’s problems when I don’t know what they are going to be? How do I prepare for it? How do I do this one so I’ll be on top of it?

By changing a problem slightly you can often do great work rather than merely good work. Instead of attacking isolated problems, I made the resolution that I would never again solve an isolated problem except as characteristic of a class.

Why People Don’t Succeed

12 Aug 2010 /

In summary, I claim that some of the reasons why so many people who have greatness within their grasp don’t succeed are: they don’t work on important problems, they don’t become emotionally involved, they don’t try and change what is difficult to some other situation which is easily done but is still important, and they keep giving themselves alibis why they don’t. They keep saying that it is a matter of luck.

Thought for the Day

13 Apr 2010 /

Sometimes it is worth trying to find a way to solve problems that doesn’t involve more structure, more meetings, more roles, more documents, more setup.

Drop an Assumption

19 Dec 2009 /

Link: http://creativethink.com/8dv

Twitter: 2009-12-18

18 Dec 2009 /
  • RT @capricecrane: "Twitter" was the most used word of 2009. Numbers two and three were "I'm" and "broke." #
  • RT @Aimee_B_Loved: Sometimes I drive between lanes and pretend my car is Pacman gobbling up the dashed lines. #
  • RT @FakeAPStylebook: Use "can of whup-ass" only, as whup-ass is not sold in jars, squeeze tubes or resealable bags. #
  • RT @RogervonOech: Never state a problem to yourself in the same terms as it was brought to you. [More at:]
    http://j.mp/cthirsh #
  • RT @HarvardBiz: Government Health Care: Like the Postal Service? http://bit.ly/4IzozI #
  • RT @capricecrane: I don't know how your car got dented. Maybe it's God saying you shouldn't have cut me off for that parking space. Or me. #
  • RT @diablocody: Eating a gingerbread house for breakfast. A new low. #
  • RT @capricecrane: According to Billboard: "Nickelback: 'Band of the decade.'" That's all. Enjoy the apocalypse. #
  • RT @TheOnion: "Why do all the girls I like think of me as just a friend? And why isn't there a term to describe that relationship?" -Plato #

Urgent vs. Important

20 Jul 2009 /

From the Lean Enterprise Institute:

  • Are we all clear on what is really important for our organization in order to solve customer problems and succeed in the long term? (Or, stated another way, can we get past the merely urgent?)
  • Are we agreed on what big problems we need to solve as a team?
  • Are we sure what obstacles are in our way and their root causes?
  • Have we — or will we now — assign responsibility for determining the best countermeasures and removing the obstacles?
  • Critically important, do we have a way of surfacing and resolving all of the cross-function, cross-department conflicts that stand in the way of resolving all major problems in any multi-functional organization including ours?