Dwindling CS enrollments PDF Print E-mail
Written by Vince Huston   
09/10/08

I keep finding articles that report enrollment numbers in college computer science departments continue to dwindle. A dominant reason suggested is the perception that programming is hard, boring, and no fun. One of those articles reported ...

Tucker Balch, an associate professor at Georgia Tech, told the AP that the [school's Robotics course] is an attempt to combat "prime number" syndrome. That disease, he said, afflicts computer science departments that typically ask newcomers to write dull programs performing mathematical algorithms.

Other programs use drag-and-drop, GUI driven, multi-media rich, programming environments to stimulate interest.

The former approach requires the purchase of (and its labs are constrained by) robotics hardware. The latter requires installing a development environment like Alice or Scratch.

Instead - I suggest that games and puzzles are an excellent vehicle for stimulating interest and practicing programming. Consider Mastermind - the simple code-breaking board game. What do you think about the following series of labs? Does this pilgrimage address the "boring and no fun" rap on the study of programming? Does this pilgrimage make the Mastermind domain doable in an introductory course?

  1. prompt, receive input, report input
  2. in a loop: prompt, receive input in 4 scalar variables, report input
  3. replace 4 scalar variables with one array of 4 elements
  4. convert 4 integer inputs to 1 string input, validate input, tokenize input
  5. add hard-wired answer array and compute "totally correct" response
  6. populate answer array with random values
  7. compute "partially correct" response

Other games and puzzles that could contribute to this approach are: Cracker Barrel peg game, fifteen puzzle, Set card game, alphametics puzzles, Sudoku, Wheel of Fortune, jumble word puzzles ... www.vincehuston.org/teaching

Additionally - I propose an earlier emphasis on the concepts of algorithm and data structure. Are we otherwise guilty of low expectations? I'm not talking about: lists, trees, graphs, search, sort, O-notation. I'm thinking about a lunch-bucket worldview that: life-on-the-job is a daily pilgrimage to craft algorithms and data structures. The indirection and leverage of using arrays to access arrays is not a traditional data structures topic, but it is life in the real world. Using a map of pointers-to-function (or the dynamic binding of a virtual function hierarchy) to replace an ungainly "case" statement is an act of obstinate elegance.

In the Mastermind example, suggesting that the computation of the "totally correct" response is an algorithm, may seem trivial; but for the beginner - it is an act of algorithm. Computing the "partially correct" response may seem too advanced for the beginner; but I propose that it is an invaluable challenge. Someone once suggested, "If you can only think of one way to solve a problem - you don't truly understand the problem." For the "partially correct" algorithm, I created a "brute force" solution; and then upon further reflection, I created an "elegant" solution whose correctness is demonstrably easier to argue.

In the Cracker Barrel peg game: how should jump requests be validated and implemented? Is it algorithm or data structure? Does this strategy to emphasize "a higher moral order" in a first semester programming course address the "boring and no fun" rap on the study of programming?

A totally miscellaneous quote ...

There are lots of applications in service where the most sophisticated algorithm is bubble sort, and the most sophisticated data structure is linked list. [Scott Meyers]
Comments (8)Add Comment
Is vince on to something?
written by Mark Nelson, September 10, 2008
Thanks for the great post Vince.

Your ideas for punching up the curriculum sound good to me, but there's a problem - computer science already sounds good to me!

I apologize in advance for saying this, but don't you think the world divides into two classes of people: those who think Mastermind is fun and those who would rather have the pegs shoved in their eyes than play such a boring game?

And if that's true, the real challenge (I think) is to get the people who *don't* enjoy problem-solving in and of itself. You know those people. (Hint: if they actually do make it through the CS program, they usually end up floating into either managment or product development.)

- Mark
What planet was I inhabiting?
written by Vince Huston, September 10, 2008
Mark -

Thanks for pulling me back to reality before I slipped into the abyss!

>> those who would rather have the pegs shoved in their eyes

I am reminded of three quotes. Problem solvers can't help themselves ...

An engineer takes a problem and fixes it. A humanist takes a problem and celebrates its complexity. [Robert Weisbuch, English professor]


The paradigm of predilection ...

A poet walks through the woods and those little spurs catch on his wool pants. He describes it esthetically: "How nature attaches itself to man, as the spur does to the wool of my pants as I walk through the greenery." The same thing happens to the scientist, but because he has a scientific mind, he spends 11 years in a laboratory and invents Velcro. Then a comedian walks through the woods. That night, he gets onstage and says, "What is it with these spurs? God's way of getting even with me for stepping on the grass?" That's the comic mind. [David Brenner]


Outlook limits (or leverages) outcome ...

Sherlock Holmes and Dr. Watson went on a camping trip. After sharing a good meal and a pleasant evening, they retire to their tent for the night.

At 3 AM, Holmes nudges Watson and asks, "Watson, look up into the sky and tell me what you see?"

Watson said, "I see millions of stars."

Holmes asks, "And, what does that tell you?"

Watson replies, "Astronomically, it tells me there are millions of galaxies and potentially billions of planets. Astrologically, it tells me that Saturn is in Leo. Theologically, it tells me that God is great and we are small and insignificant. Horologically, it tells me that it's about 3 AM. Meteorologically, it tells me that we will have a beautiful day tomorrow. What does it tell you, Holmes?"

Holmes responded, "Someone stole our tent."
Golden Age vs. Now
written by Jack Woehr, September 13, 2008
In the late 1990's my hiring process was overwhelmed in part by CS graduates who had no real calling to programming. There was gold in them thar hills, you see. Perhaps now it is slacking off and increasingly only those who actually want to program computers are attempting to do so. Is there a problem here that needs fixing? smilies/grin.gif
Golden Age vs. America's Future
written by Vince Huston, September 15, 2008
I enjoyed the "them thar hills", and appreciate the observation about separating the wheat from the tares; but how to reconcile this contender/pretender issue with the larger issue of "America needs beaucoup STEM"? Perhaps the answer is ... (wait for it) ... (wait for it) ... price controls. We need to entice (or seduce) young people who don't initially have the "aptitude" for math and science, to get them over their personal hump of disproportionate "effort". But - to keep their motives chaste, we'll set salaries sufficiently low to ensure that love (not money) is the goal.
Gotta get over that hump
written by Mark Franjione, September 29, 2008
The point being, too many people are getting into CS and getting caught up in the syntax of C or C++ as their "intro to my major" class. Can you imagine trying to learning simple constructs like if/else, looping, functions, in C?

Alice, Karel the Robot, et. al., can help you get over that initial hump of thinking logically and critically, with just enough syntax.

I'd say make it the first 6 weeks of a freshman programming class, then the last 9 weeks you get into Java or C# - some language that has soft corners and round edges. Second semester can get into pointers, resource management, et. al. of C or C++ or...

I learned BASIC in 8th grade, then FORTRAN in 9th-12th grade, then Pascal at Carnegie-Mellon, then C and C++ on the job, then a little Java and C# more recently. I honestly can't say I would have embraced Computer Science if my introduction to programming was spent debugging invalid pointer bugs. Don't get me wrong, this needs to be learned, just not in the first semester Freshman course.

How many high schools have good CS curriculums? Most? Few? If I was a university with some $, maybe I would even start there.
HS CS
written by Mark Nelson, September 29, 2008
>How many high schools have good CS curriculums? Most? Few

Almost none, here (US).
...
written by Vince Huston, September 30, 2008
Mark F -

I enjoyed your "soft corners and round edges". I think I must reluctantly agree with your roadmap that puts "thinking logically and critically" before (riddle(enigma(mystery(language syntax)))). Here is a similar opinion that Uday Pidikiti shared in a recent email ...

"I have been teaching an introductory course for software engineers for two semesters. We use Alice for this course. You might know, how easy it is to program with Alice. Even then some of the students struggle a lot initially. What I feel is that the problem is not with the programming language, the problem is that they can't understand the logic behind the solution. Unless they understand the logic and visualize the steps involved in solving the problem, they can't program. So, I think your proposal would be better for the people who has a little knowledge of programming. I mean they should know the basic programming skills like how to break down the problem into smaller modules/functions."

On the relative merits of different languages - I continue to be puzzled by the "easy" reputation of Java, and the "hard" reputation of C. The latter requires some amount of "pay no attention to that man behind the curtain." But Java initially requires at least twice as much. C pointers and memory management are hard; but that's semester two. And what about Java's "one and only one parameter passing mode"? Technically that's true; but passing an object reference by value offers the power of C's pass by reference, yet it doubles the complexity by calling it one thing and doing another.
...
written by Mark Franjione, October 01, 2008
I did not mean to imply Java (or C#) as being simple or shallow, but just that the architects of those languages did a great job of making the grammar and syntax (relatively) simple for introductory programming constructs like conditionals, looping, variable initialization, modular programming, et.al. I am blown away by what has been done with Java (and C#) in your browser (or even on your desktop, ala Open Office and JUDE).

I was blessed to have Guy Steele during my junior year Comparative Programming Languages class back in Fall of '82 - the dude knows his languages. That semester, he taught us APL, SNOBOL, and LISP, and showed us just enough FORTRAN grammar to be dangerous with various compiler implementations.

I know that I know that I would have been lost if I didn't have a good foundation in an "academic" language like Pascal (although I used MetaWare's Professional Pascal back in the early 90s in an embedded/realtime triple 80186 processor system! smilies/grin.gif).

Write comment
You must be logged in to a comment. Please register if you do not have an account yet.

busy
 
< Prev   Next >

Get your FREE Subscription to Dr. Dobb’s Digest today!

Look Who's Code Talking


John Katzendorn
City: Atlanta

Jesse Slicer
City: Olathe

Arunachalam Muthu
City: Hosur

Simon Parker
City: Camberwell

Aleksandar Fabijanic
City: Mount Pleasant

Walter Bright
City: Kirkland

Dobbs Code Talk Tags

.NET abstraction Ada Adobe Agile Ajax algorithm Algorithmic complexity ALM Analogical reasoning Android Anecdotes Apple Application Development AppStore Architecture and Design ARM Artificial Intelligence Artificial Life Assembler Programming Audio files AVX AWK Banking Bazaar Best Practices Blender Books Brain computer interfacing Build C C Programming C Sharp Cartoon Category theory Cellular automata Clojure Cloud Computing Cobol Cocoa Coder Of The Month Cognition as compression Collaboration Common Process/Frameworks Compilers Computational humour Computational narrative Computational politics Computer Science Computers in art computing pioneers concurrency Conferences Consciousness research Contest Contest140 contests CPlusPlus crime CSharp D Programming Data Centers Databases Debugging Delphi Deployment design Design Patterns Digital Signal Processing Distributed Django Documentation DSL dynamic language Eclipse EDA education Emacs Embedded Systems Encryption engineering Erlang Etymology Excel exception handling Facebook Financial computing Five Questions Flash Flash Lite Flex Forth Fortran Fraud FreeBSD Fun Functional Programming gadgets Games Gender Git gnuplot Go Google Graphics GUI hardware Heron High School High-Performance Computing History Holographic reduced representations HTML5 Humanity Humour Hungarian Notation Identity Inkscape Innovation Intel Interview iPhone J2EE Java JavaFX JavaOne JavaScript language engineering Legal lex LINQ Linux Lisp Literate Programming Logic Programming m4 Mainframes Make Mathematica Mercurial Mesh messaging Metaprogramming Microsoft MID Miscellaneous Musings ML Mobile Software Mobility modeling modular programming multicore Music MVC myblog Natural Language Processing Networking Neural networks newspeak Nokia numerical computing Object Rexx ObjectiveC Office Office 2007 Online spreadsheets OOP Open Source Openaccess publishing OpenBSD OpenSolaris Operating Systems Optimization Oracle Pair Programming Parallelism Concurrency Parsing Pascal Patents Patterns Performance Perl PHP Podcast Pop11 Poplog Privacy Processing Productivity Programming Language Implementation Programming Language One Programming language semantics Programming Languages Programming Style Project Management Prolog Psychology Public understanding of science puzzle Python QA Quantum Computing Quotes Rails Realtime recls Requirements Research practice REST Review RIA rich internet applications Robotics Ruby SaaS Software as a service Scala Schadenfreude Science fiction Screencast Scripting SD Best Practices Search Security Semantic Web Silverlight Snobol SOA social Social Networks Society for the Study of Artificial Intelligence a Software Development Methodology and Management Songs and poems Spending Priorities Spreadsheets SQL Startups Statistics Storage String pattern matching Survey Teaching Testing The Business of Programming The Dobbs Challenge The Future Theory Topology Transhumanism Travel on the Job Twitter Types Unix Upgrade Usability Use Cases USENET User Experience User Interface Design Version Control video virtual machines Virtualization Visual Studio Visual Studio Sponsored Post WCF Web Development Windows Windows 7 Windows Live Wireless WOA WPF X Window System yacc

Subscribe to Dr. Dobbs Newsletter

Email:
Dr. Dobb's Update
Delivered twice a week, Dr. Dobb's Update provides unbiased and objective news, commentary and technical features spanning the entire software development marketplace.

Latest Comments

Jonathan's Last Day at Sun
For the 8 years I worked there, it was fantastic. I worked there under McNealy and I have undying admiration for the guy. I only knew Jonathan periphe...
Implementing Thread Local Storage on OS ...
Back in the day, I did a fair amount of work with PThreads. Wonderful design. Some quirks, but basically really, really nice. Although I wrote a lot ...
More Technonecrophilia with Snobol One-L...
Yeah, It's probably identical except for the (embedded) copy number, I would think. Once it became freely distributable, the copy I've been distribut...
More Technonecrophilia with Snobol One-L...
There's a spitbol-3.7-win.exe at http://code.google.com/p/spitbol/downloads/list . I found it via Dave Shield's blog page http://daveshields.wordpress...
Jonathan's Last Day at Sun
Sadness.
DDJ