Need More Software Engineers? Teach Thinking Skills Better

picture of Harry KellerBy Harry Keller
Editor, Science Education

We’ve seen much hue and cry about our schools being unable to meet the demand for “computer scientists.” What industry really misses is software engineers. The term “computer scientist” is misleading because the skill set of those who write computer programs is one of engineering. Science expands the boundaries of knowledge about the natural universe. That’s why just about every computer scientist worthy of the name is in academia.

Software engineers design computer software, and software coders are the technicians of computer software who implement those designs. Software architects work at a level above the engineers and consider much broader aspects of software creation. It turns out that really good software engineers can do architecture, design, and coding.

Should our high schools be preparing our young people for these careers specifically? Are our math classes geared to producing mathematicians? Are our English classes designed to produce novelists, playwrights, and journalists? Do our history classes create the next generation of historians? These rhetorical questions all have the same answer: no.

What is the most important skill that a software engineer can possess? It’s a strong analytical mind capable of advanced abstraction. No amount of practice with toy programming languages or simple subsets of industrial-strength programming languages will provide students with those thinking skills. However, good math, science, and even history classes just may do the trick if the talent is already there. Other courses can buttress this learning if they stop being memory courses. 

Furthermore, there’s a talent involved in writing good software efficiently. There’s also years of practice in a professional environment. Just as with any engineering discipline, you must understand myriad trade-offs to be made in creation of new things. Understanding those trade-offs well requires experience, judgment, and intelligence. Not every student is well suited to becoming a decent, let alone a good, computer programmer just as not every student is well suited to becoming a star football quarterback.

We’d do well to improve our emphasis on thinking in our K-12 schools without worrying about specific careers that may not exist in ten years or may have very different detailed characteristics. Thousands of young people have been trained to work with word processors that no longer exist. Many once knew the intricacies of PDP-8 assembly programming that no longer have any value.

Thinking never goes out of date. It may be even more important than it was 50 years ago or even 5,000 years ago. It was very important at those times too, incidentally. You sure wouldn’t know it to look at how we teach and measure our youth with cookie cutter high-stakes tests.

Also, thinking applies to just about any field of endeavor. Employers seek out thinkers. They don’t have to have as much training or oversight, and they are more likely to contribute innovative ideas to the enterprise.

Stop worrying about training tomorrow’s computer programmers and start worrying about training tomorrow’s citizens who will either raise us up or let us down. There’s little necessity for computer programming in K-12 education. A computer club can provide much better training than most high school teachers. The students learn from each other, and they learn with self-defined goals in mind. The club adviser fills the role of teacher that will eventually morph into mentor. This sort of learning is a model for at least a portion of our future education systems.

5 Responses

  1. So, how do you teach thinking skills? We all know that is the most important thing. Computer programming if taught using a design process, and not guess and check methodology, is a motivational tool to practice thinking and solving problems. And, assessment is built in and does not require a teacher to grade the product. It is rigorous and relevant, so I say it is necessary to give kids the opportunity to learn how to create their own games and apps. If you have a better tool to teach thinking skills, please let me know. Please rethink your comment: “There’s little necessity for computer programming in K-12 education.”

    • I learned to write software in 1960. I have taught computer programming in a number of places. I did contract programming on mission-critical projects for several Fortune 500 companies. I managed groups of programmers. My viewpoint comes from real experience in the real world.

      It is not necessary or even reasonable to expect every child to learn to write computer software. Many have trouble with something as simple as HTML. Any engineering discipline has similar characteristics, but I don’t see people insisting that all students learn chemical engineering.

      Which thinking skills do you wish to be learned? I guess that it’s design of engineering projects. Those are valuable skills but are different from those involved in scientific investigations.

      I’ve never seen computer programming (aka software engineering) done as guess-and-check methodology. Saying that is setting up a straw man and has nothing to do with what I wrote. For those unable to master it, writing software demotivates. Oh, you can have some easy program builders that let everyone have some success, but writing code from scratch is not for everyone by any means.

      If you have students writing programs, the grading effort is as great as, and perhaps greater than, writing essays in an English class. Students will not learn rigorous software skills if allowed to write any old thing that works. They’ll typically write unstructured, unmaintainable, “spaghetti” code. Engineering is a discipline that requires discipline. If you don’t mark the programs, you’re not teaching anything.

      I do have a better way to teach thinking. It’s called science, and I won’t bore you with the details because so many have written at great length about it. For example, check out John Dewey. To be sure, this is just one of many ways to think, and there are paths to each. My concern is scientific thinking, which is a form of critical thinking that involves accuracy, precision, and quantitative analysis.

      So, I have rethought my comment and wish to amend it.

      There’s no necessity for computer programming in K-12 education. There never was for thousands of years, and things have not changed. We had great education in the first half of the twentieth century without it and can continue just fine in that mode.

      Can learning computer programming in K-12 education have value? Yes, but it’s not NECESSARY. Lots of activities can have value in K-12 education, but we don’t inflict them all on our students. We choose from many options. The words “choose” and “option” clearly imply a lack of necessity.

      • Let me reiterate that students are better served by computer clubs where interested students can gather and truly learn software engineering skills than they are by “computer science” classes where at least some teachers, if the comment is to be believed, don’t even bother to grade homework. Shame on those teachers!

  2. […] By Harry Keller Editor, Science Education We’ve seen much hue and cry about our schools being unable to meet the demand for “computer scientists.” What industry really misses is software engineers. The term “computer scientist” is misleading because the skill set of those who write computer programs is one of engineering. Science expands the boundaries of knowledge about the natural universe. That’s why just about every computer scientist worthy of the name is in academia.  […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s