Computer Science in PAUSD | A Pragmatist's Take | Douglas Moran | Palo Alto Online |

Local Blogs

A Pragmatist's Take

By Douglas Moran

E-mail Douglas Moran

About this blog: Real power doesn't reside with those who make the final decision, but with those who decide what qualifies as the viable choices. I stumbled across this insight as a teenager (in the 1960s). As a grad student, I belonged to an org...  (More)

View all posts from Douglas Moran

Computer Science in PAUSD

Uploaded: Mar 13, 2017
As a former teacher of Computer Science, I am concerned about the developing curriculum for PAUSD. This was triggered by a quote from the co-chair of the committee "At young ages, instruction could take the form of concepts like 'tinkering' ...".(foot#1) The definition of the verb "tinker" includes "to busy oneself with a thing without useful results", "to work unskillfully or clumsily at anything", "to repair in an unskillful, clumsy, or makeshift way" ( "to attempt to repair or improve something in a casual or desultory way, often to no useful effect" (GoogleDictionary), and "to repair, adjust, or work with something in an unskilled or experimental manner" (Webster's).

Was she was being sloppy in her use of "tinker"? It is worrisome whether the answer is "Yes" or "No".
If YES: One of the big lessons from programming computers is the utter importance of the precision of language, a skill that can carry over from programming to other communication forms. Sloppy usage indicates that the example curriculums that the committee is using didn't incorporate these values.
If NO: "Tinkering" would be shortchanging the students: Research on using programming in education of young children goes back to the 1960s (Seymour Papert and the Logo programming languages) and reportedly demonstrated ability their ability to do much more.(foot#2)

Similarly, I hope that the usage the term "computer science" is simply puffery and not an indication that the committee doesn't understand the meaning. There is a rough hierarchy, with the lowest level being "computer usage", that is, awareness of the basic conventions, terminology ... (the culture) presumed by designers of computer hardware and software. The next level is "coding", that is, the knowledge of at least one programming language and the ability to write trivial programs (tens of lines of code). Above this is "programming" which involves more sophisticated design dealing with issues such as correctness, maintainability, interaction of subsystems. The disparaging term "code monkey" indicates the difference: The code monkey just keeps modifying and fixing code until he gets something that seems to work on his test data, that is, he engages in high-energy tinkering.(foot#3) Programming has many sub-specialties, but involves applying the results of computer science, and does not involve advancing the field. To enhance this differentiation, programmers are often called "software engineers", but actual engineers (rightly) object.(foot#4) Of course there are gray areas between these categories, and the work of many practitioners slips back and forth between the categories.

The current dynamics in many college computer science departments results in some of their graduates qualifying only as coders, and sometimes only mediocre ones. The problem is widespread enough that many companies have taken to having candidates for programming jobs write a small program to see if they actually have an adequate skill level. Aside: Some companies are abusive in this regard, but that is an unwelcome tangent.

I realize that we live in an age of inflated descriptions, but imagine if kindergartners play catch was labeled as "Introduction to Astrophysics" (develop intuitions about the effects of gravity on the motion of spherical objects). The role of education is not just to increase what you know, but give you a better sense of what you don't know. Inflated descriptions are harmful to students because the students can be deceived into thinking that they know more than they do.

----Problems with high school programming classes----

In the early 1980s, Intro to Programming college courses were seeing increasing numbers of students who had done some coding in high school. The CS Department I was in (Oregon State) explored whether there should be a separate track or sections for such students. What we found was that those students tended to do worse in the course (strong negative correlation). It seemed that those students had picked up bad habits in their high school work and were very resistant to unlearning them.

The programming course I taught grew in two years from an enrollment of 50 (just before I arrived) to 400 with a waiting list. From what the students told me, part of the reason was that they could easily tell which professors and teaching assistants had experience with nontrivial programming. I challenged them to go down the list, and they were quite accurate.

The combination of these two should serve as a cautionary note to question whether there are adequate teaching resources to achieve the goals of a coding or programming course, not just to avoid wasting the students' time, but to avoid teaching them the wrong things. And one of the worse habits I have seen is a programming style that could be characterized as tinkering.

----Computer Science for All----

When the Obama Administration announced its "Computer Science for All" program in early 2016, I took a look at the (College Board) AP courses and the PAUSD course catalog. What I saw was troubling.

I first looked at the new (College Board) AP course "Computer Science Principles" that was to launch in Fall 2016. My reaction to the syllabus and the example exam questions was "This is a course I wouldn't want to teach" and one that I would probably recommend against taking. Many of the topics were ones that are typically taught at the Junior and Senior level in college. From my experience teaching them, I didn't see where there would be enough time given to the various topics to provide the students with enough exposure and details to be useful beyond recognizing the basic terminology and the existence of the topic. In a teach-to-the-test approach, it is unlikely that time would be spent giving the students a sense of true breadth of those topics. While the claims made for what the course should cover are clearly wildly extravagant, I didn't see a way to cut the syllabus down enough to make it practical. (foot#5)
Note: The established course AP Computer Science A focuses on learning to code in an object-oriented language (Java) and seems to be reasonably structured.

I next looked at the catalog for Gunn HS (2016-2017) and the year-long course "Introduction to Functional and Object-Oriented Programming" (#8634)(foot#6) is listed as expecting only 1-1.5 hours per week to be spent on homework. I am skeptical that this is enough time for the typical student would learn the material. Yes, writing tiny programs similar to the examples in the text book could be done, but this is equivalent to regurgitation and doesn't provide real learning. I have seen such students being unable (unprepared?) to step up to slightly larger programs. I am aware of the legitimate concerns about homework burden. It is also a problem at the college level: For many students, the immediate feedback they get from programming assignments can draw them in to repeatedly doing "just make it a little bit better", and thereby leading them to neglect their other courses. Crafting assignments that are difficult enough without being excessive--or worse, only busy-work--is one of the crucial and difficult skills of teaching.

----PAUSD Curriculum Design----

I didn't find the notes of previous meetings of the Curriculum Design Advisory Committee to be illuminating, but that may be partly due to the documents being discussed not being available online. My impression is that the committee is overly focused on the details--the specific skills to be taught--and don't have a high-enough strategic vision. This is mildly incongruous because one of the key skills/big ideas being taught in programming is to abstract away from low-level implementation, that is, the current goals should be treated as means to much larger goals.

So what are some of the important skills that can, and should, be taught as part of this curriculum? Note: I know much too little about primary and secondary education to venture what can be taught when and how.

Rigor: Precision of language, complete instructions, accurate instructions. Testing/validation/verification. Due diligence.

Caution/Paranoia with your own programs is a motivation for rigor: You typically don't have an opportunity to fix errors as they occur, for example, because they occur so fast, because there are so many of them, or because someone else is running the application.

Caution/Paranoia with programs you are using. Be prepared for them to produce erroneous results or outright fail, and that the former can be the more dangerous situation.

Perspective of others: When dealing with other people, it is too easy to blame them for misunderstandings, both misinterpretations and doing what you said instead of what you meant. Shifting the blame to the computer doesn't work, although many have tried. Debugging of computer programming offers abundant opportunities to shift between your perspective--what you want done--and the computer's--what it understands you having told it to do.(foot#7)

Design and documentation: Computer systems and applications offer abundant examples of bad design and bad documentation. Use the opportunities of the students' frustrations with this to have them think about what was wrong, why and how it might be done better.(foot#8)

Atypical cases: With computers, the improbable --say one-in-a-million-- can happen several times a minute. Foster an attitude of needing to think beyond the typical situations to the full range of situations that might occur and then how to handle them.(foot#9)

Economics is often defined as the study of allocation of limited resources. In programming (beyond coding), you are routinely making certain categories of these decisions, for example, a tradeoff between having the program be more efficient or making it easier to modify. For example, producing a model of the real world that adequately represents what you are interested in. For example, at advanced levels, students learn that algorithms that work well on small scale problems may be horribly expensive for larger scale ones, and vice versa. Having control of the choices and seeing the results can be a much more effective introduction than reading about it, and can provide the intuitions for when students get to traditional economics teaching.

Clarity of expression: When I was a graduate student teaching assistant (TA) for Programming 2 I had a housemate who was a TA for English Composition. He was not the typical English TA: His attitudes about effective communication had been strongly shaped by his experiences as a lead helicopter pilot during the Vietnam War. My complaints about my students' programs were mirrored by his about his students' compositions. I have observed that students quite readily critique each other's programs, but are very reluctant to do the same to their compositions.

These are some ideas to get people thinking along similar lines. Note including ideas such as the above are difficult to incorporate into a curriculum because of the focus on what gets taught when ("In week 5, X will be covered") and how it will be tested (predominantly multiple-choice or short-answer).

Warning for those who might want to become involved: I have found the PAUSD community (staff and parents) tends to be highly insular, both in not seeing the value of including outsiders and in having a culture and jargon that impedes participation (this is a general problem, not just the PAUSD's).

The Committee's webpage has not been updated to include meeting times, but according to the PA Weekly story the next meeting is Monday March 13 (today) starting at 4:30pm.

1. Committee explores K-12 computer science curriculum, Palo Alto Online, 2017-03-09. In the 2017-03-10 hardcopy edition, it is on page 10 as "School district seeks to make computer-science ed mainstream".

2. Disclaimer: I do not have any expertise in this area. I took a class taught by Papert in 1973 and had various friends and colleagues in the area of Artificial Intelligence in Education.

3. An allusion to the "Infinite monkey theorem". I like the retort "We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true." (Robert Wilensky, Professor of Computer Science, UC Berkeley)

4. "Why Computer Programmers Should Stop Calling Themselves Engineers" - The Atlantic, 2015-11.

5. AP Computer Science Principles, containing links to course overview, details and description.

6. This year-long course was previously two single-semester courses meant to be taken in sequence (#8632 & #8633): 2015-16 catalog which listed an expectation of 2 hours/week spent on homework.

7. When I was an undergraduate working on a project, one of my teammates couldn't find a bug in his program. Even when I took him step-by-step through what was happening, he was unwilling to accept that what he saw could possibly be happening.

8. Examples of exploiting bad documentation:
1. Many applications use ambiguous terms, assuming that you know which definition they intended. Hint: The safe answer is "None of the commonly accepted definitions--they are using their own special version".
Aside: Computer industry saying: "Everyone is committed to the importance of standards. Why else would they have so many of their very own?"
2. Vacuous definitions such as defining a "tinker" (N) as "one who tinkers" with no definition of the verb.

9. Attempts to apply Artificial Intelligence to legislation and case law has highlighted the many contradictions, ambiguities and omissions that routinely occur. This happens even with new laws where considerable effort was expended to avoid these problems. A classic example from the 1980 is the work of Segot et al at Imperial College London on the British Nationality Act.

An abbreviated index by topic and chronologically is available.

----Boilerplate on Commenting----
The Guidelines for comments on this blog are different from those on Town Square Forums. I am attempting to foster more civility and substantive comments by deleting violations of the guidelines.

I am particularly strict about misrepresenting what others have said (me or other commenters). If I judge your comment as likely to provoke a response of "That is not what was said", do not be surprised to have it deleted. My primary goal is to avoid unnecessary and undesirable back-and-forth, but such misrepresentations also indicate that the author is unwilling/unable to participate in a meaningful, respectful conversation on the topic.

If you behave like a Troll, do not waste your time protesting when you get treated like one.


 +  Like this comment
Posted by the_punnisher, a resident of Mountain View,
on Mar 14, 2017 at 1:19 am

the_punnisher is a registered user.

Sigh. I see no emphasis on HARDWARE SKILLS. Programming is half the job, you still have to work within the limits of the hardware being used.
At Cray Research, we had the programmers located in Mendota Heights, MN. We had the Hardware Experts in and around Chippewa Falls, WI. I worked in the Development Building, upgrading the X-MP and helping build the Y-MP by using the tools I learned at AMD, my full time job during College.
My training was learning Analog through the " tinkering " around with tube type Television Sets I built my own test instruments through Heathkit. I was learning personal computers when they were all S-100 systems ( I had several kits: the IMSAI 8080, a BYTE-8 and a Northstar because I liked the wooden case ). I started work at AMD as a machine operator; Six weeks later, I was Test Area Lead Operator. My main work was using a microscope to repair damaged probe cards, used to test wafers. This started a crossover from Analog to digital. My final role at AMD was Senior Calibration Technician; you still had to know a bit of Analog to calibrate the big TEST systems.
The problem I see in future hardware development is an emphasis on straight digital hardware design. It is easy to write a program for run of the mill SLOWER PC HARDWARE. The real problems are technical. At Very High Speeds, an actual shift from a 1 to a zero looks more like an analog waveform. Then you end up by regulating parameters an you have a 0 limit and a 1 limit; the " in between voltage is at a " don't care " level. This is just one of the areas where my Analog training helped out. I took a special course taught by one of our Staff Scientists that introduced me to Quantum Physics level switching of electron states within the atom. This is where we need experts in both Digital and Analog Design.
I never got a degree, I was booted out of SJSU because I was learning more about my field at my full time job, I aced the FORTRAN Programming Course there. You had to submit Hollerith cards fed to the IBM 360. My little PC had MS-FORTRAN doing the same thing with a VDU ( CRT ) display.
A little comment about learning at SJSU: let them teach you HOW TO LEARN in your prospective field; that will make you know your profession well. The other half may get you in trouble; Colleges teach you how to kiss ass to go up a professional ladder. I got my first warning when I contradicted my Mat Sci instructor in class. I said: " we don't do that anymore " " How do YOU know so much? " " I work at AMD and we don't do that anymore ". Fortunately, it was said at the end of the period. Unfortunately for me, I got a D for that course. Shortly after that, I resumed my studies at Foothill College.

Arthur Blackwell

Test Engineer
Network Engineer ( TCP/IP used in DARPAnet before it became the www )
Network Security Engineer ( guess who got to remove Viri from Apple and IBM PCs including home ones )

Cray Research, Inc.

I have specialized in the Robotics and Energy Fields after leaving Cray Research ( for political reasons ). Adding Sensors and AI to my supercomputer will be interesting. HPC on a budget....

 +   3 people like this
Posted by Humble observer, a resident of Mountain View,
on Mar 14, 2017 at 9:32 am

No, the curricula described don't deal much with hardware (neither, it should be said, do many of the professionals this column mentions); some aspects of computer science do turn crucially on the relation of hardware to software (such as microprocessor design, or high-performance real-time software); and no doubt the previous commenter's detailed biography will interest some people, although it seemed to me pretty tangential to this blog post.

But what I took from the post was that even if you set aside considerations of hardware, the approach to computer science in high schools is *still* troubling and open to serious criticism by the professionals who see its consequences.

 +  Like this comment
Posted by the_punnisher, a resident of Mountain View,
on Mar 14, 2017 at 1:37 pm

the_punnisher is a registered user.

Sir : I wanted to show that just getting a certificate does NOT automatically get you a job. Learning the skill that a company needs is still the best way to get hired. Your hobbies included on the resume can indicate where your interests lie.
I lived a long time in both Mountain View and in Santa Clara. those PC skills may have had an effect on Cray Research taking a chance on me. So try to get Your Dream Job by adding details to your e-resume. Add yourself to LinkedIn: every exposure helps.


 +   4 people like this
Posted by outsider, a resident of Old Palo Alto,
on Mar 15, 2017 at 2:23 pm

The interesting thing to me is that there are men and women who did not have computers until they were 40 and they were able to "pick it up" and figure it out pretty well without have to code in Kindergarten. Reading comprehension, puzzles and a better strand of logic and probabilty a bit earlier would be great. Look at the apartments on first street near Cisco. Is that your goal for your child? It looks like a large beige colony with sameness, Starbucks and some pretty nice restaurants I guess, but nothing green and nothing for children growing up. Is coding what every child wants? Logic will help every kid in every field and so will reading comprehension.

 +  Like this comment
Posted by Yulia, a resident of another community,
on Mar 17, 2017 at 1:11 am

Do you know that the most popular language in 2017 is Java? Here's the research by one development company:

Web Link

 +  Like this comment
Posted by Allia, a resident of Slater,
on Mar 24, 2017 at 7:14 am

What about Swift? It is considered to be the most in-demand language Web Link

 +   2 people like this
Posted by Computer Guy, a resident of Midtown,
on Mar 26, 2017 at 11:10 pm

" What about Swift? It is considered to be the most in-demand language"

By some, at the moment. I've heard that same thing at various times about Algol, PL/1, Pascal, Ada, and Java. It is best to teach how to learn the current trendy dialect quickly than to become a deep expert in IDL or php or Python or Ruby or... during high school.

 +   1 person likes this
Posted by Truthseeker, a resident of Duveneck/St. Francis,
on Mar 27, 2017 at 9:48 am

Truthseeker is a registered user.

My Paly sophomore is reluctant to take the programming class at her school because she says it is reputed to be a "lame" class. She wants to take CS outside of school. Anyone else getting the same feedback from their kids?

Personally, I think every new CS student should start with C. Teaches the fundamentals. Once they learn that, everything else - Python, Java, C#, whatever - becomes easier to pick up. They will have to learn new languages and broaden their skills continually anyway. But the foundation has to be solid. C gives you that.

 +   2 people like this
Posted by Douglas Moran, a Palo Alto Online blogger,
on Mar 27, 2017 at 2:13 pm

Douglas Moran is a registered user.

One of the enduring observations in computer programming is that once you learn two or three programming languages learning additional ones becomes much easier, with 2-3 weeks often cited as the time needed. It was advantageous that the languages be dissimilar. For example, when I was teaching advanced computer programming in college in the 1980s, my choice was Pascal--which the students knew from earlier courses--and Lisp (object-oriented languages weren't yet available). My final programming assignment allowed the students to choose which language to use, but the problem was crafted to make it easy to solve in Lisp (about 40 lines of code) and difficult in Pascal (over 200 lines).

However, these days the notion of what a programming language is has expanded to include extensive libraries/packages. Consequently, what is regarded as the time needed to learn a new programming language is often dominated by learning what is in those libraries, with learning the language itself still relatively quick.

 +  Like this comment
Posted by maripetar, a resident of North Whisman,
on Apr 24, 2017 at 3:09 am

Apps written in Swift work really fast and are more resilient to errors rather than those written in Objective-C. Initially Swift was a proprietary programming language, but five years ago it became open source. According to TIOBE data, Swift gained four places up reaching the 10th place in the index of the most popular programming languages of 2016 -Web Link.

Don't miss out on the discussion!
Sign up to be notified of new comments on this topic.


Follow this blogger (Receive an email when blogger makes a new post)


Post a comment

Posting an item on Town Square is simple and requires no registration. Just complete this form and hit "submit" and your topic will appear online. Please be respectful and truthful in your postings so Town Square will continue to be a thoughtful gathering place for sharing community information and opinion. All postings are subject to our TERMS OF USE, and may be deleted if deemed inappropriate by our staff.

We prefer that you use your real name, but you may use any "member" name you wish.

Name: *

Select your neighborhood or school community: * Not sure?

Comment: *

Verification code: *
Enter the verification code exactly as shown, using capital and lowercase letters, in the multi-colored box.

*Required Fields

Food Party! 420
By Laura Stec | 12 comments | 2,110 views

What Are Your Gifts that Must Be Shared?
By Chandrama Anderson | 1 comment | 1,094 views


2017 guide to summer camps

Looking for something for the kids to do this summer, learn something new and have fun? The 2017 Summer Camp Guide features local camps for all ages and interests.

Find Camps Here