How did you learn Computer Science?

Kim Cavanaugh, author of Macromedia Dreamweaver 8 Visual Encyclopedia, responded to yesterdays airport blog post about computer science and the AP exam. He asked his readers (educators and programmers and web developers) to share how they would teach computer science, and more to the point, how they learned to program.

I’ll tackle the last question, as I think that it may lead to insights about the first few. It started in the early 1980s, when my school purchased a Radio Shack computer, and then next year we received 11 TRS-80 Model III computers (16 kilobytes of memory) from a district grant, and I got all 11 in my classroom (no one else wanted them). In both cases, there was no software included. It is a testament to how little we knew about these things that we seemed to think that the green glow from those cathode ray tubes would make our children smarter.

Radio Shack, back then, had the best tutorial on programming (BASIC) I have ever seen. I poured through it, and it is no exaggeration to say that my life changed. I think that what impressed me the most was that this was a technology that you operated by communicating with it, by typing incantations into the machine. As an educator who’d taught history as a series of technological achievements (bow and arrow, agriculture, etc.) and their impact on societies, I saw the personal computer as one of those technologies that was going to change things.

No doubt, the novelty of a technology that you communicate with has worn off. It’s an old shoe for today’s kids. However, that you can make computers do things at a very fundamental level, through programming, and assemble those fundamentals together into useful and interesting objects and events, continues to hold potential to empower learning.

Early on, I tried my hand at writing video games. But what I discovered was that writing the games was much more fun than playing them. The adventure was in tracing pathways of thought and then testing them. It was clean, because it either worked, or it didn’t work — and if it didn’t, there was always a logical reason why.

I think that part of the problem is that we are trying to teach computer science or programming, rather than helping students learn to do interesting things with today’s prevailing information technology.

Blogged with the Flock Browser

Tags: , , , ,

16 thoughts on “How did you learn Computer Science?”

  1. I learned computer science back in the 70s in college. The thing that helped me the most was the mix of good teachers who let us have some fun with open computer labs that let us learn more on our own. As a computer science teacher (and textbook author) for high school I followed the lead of my own teachers and included some fun at all levels. Game programs were common projects for example. These days I see a good number of teachers using things like Gamemaker and XNA to bring game development into their courses so students can have incentive to learn so they can create things that interest them – games. I also see teachers teaching mobile device programming which is pretty easy in Visual Studio because of built in emulators. And then there are robots. Programs like IPRE in college and FIRST Lego League in middle schools (usually as after school programs.) There are tools out there.

  2. We have a 1:1 and no computer classes. No computer science. The children learn and explore by being given tasks. How they use the tools to achieve the goals of those tasks is up to them. Thankfully, we use Mac and many of the applications integrate tightly allowing for easy transition between programs (perfect example, iPhoto & Garageband–>iMovie–>iDVD).

    I very very rarely get a how-to question from the students.

  3. Something tells me that you’re a heavy Sid Meier’s Civilization fan, and if you aren’t you should do yourself a favor and pick up a copy of Civilization IV and give it a try. It’s the perfect “conquer the world” by making your way up the tech tree fastest, and that includes conquering via information technology, not just military technology.

    And you can get your hands dirty with some CSS to completely write your own scenarios, create your own units, and really give students a reason to pick up computer science again.

  4. I partially answered this question in 2001
    http://stager.org/articles/meandjones.html

    and more recently in http://www.districtadministration.com/viewarticle.aspx?articleid=1494

    The articles linked above are deeply personal reflections on learning to program.

    This is not a new subject to me. I learned to program more than thirty years ago and began teaching children programming (to learners 5-80 and from incarcerated at-risk to G&T) 26 years ago. That is unless you count being President of the high school computer club in 1978 and running afterschool programming classes for my peers.

    Programming allowed me to feel intellectually powerful and creative as a young person. It helped me develop habits of mind that serve me everyday.

    I cannot imagine why anyone would deprive children of such experiences.

    As I cleaned my garage today, I found articles I wrote about teaching programming to children that were up to 22 years old. Someday, I’ll scan this work or write something more substantial on the subject.

    Stay tuned…

    Gary

  5. David,

    This is a great topic, but do you really think we can explain how or why we would teach anything, especially a domain as rich as computer science, in the comment section of a blog?

  6. I was pretty much self-taught on TRS-80 Model III’s and RS Color Computer from 7th grade through 12th grade. I learned primarily by looking at existing code and figuring out what it did. There was one high-school comp-sci programming course that gave me a little structure.

    This was a great foundation for when I went on to college for a computer science degree which from 87-92 was mostly lecture/text book based with weekly programs of varying degrees of complexity.

    What helped me most was access to computers. When our school bought the Model III’s in 1982, so did my parents. I’ve had a computer(s) in my home since. This provided me ample opportunity to experiment.

  7. Oh, and my philosophy with most of my assessments is open internet(/book) as I’ve never been in a coding job that prevented me from accessing anything or anyone I wanted to (really, no job has ever been “closed book” for me EXCEPT as an EMT/Firefighter due to the immediacy of it.)

  8. WARNING! The following contains a lots of freewriting:

    When I was in 1st and 2nd grade I was labeled as a student with special needs. The problem was not that I could not understand the content my teachers were teaching me nor that I couldn’t answer questions about it verbally, it was because of my handwriting. This was in the early 1980s before our schools had special education teachers for nearly every different learning disability. So, I was placed for about half the day in a classroom with students with down syndrome, fetal alcohol syndrome, and numerous other disabilities.

    When I was in 3rd grad this all changed. My parents bought an Apple IIe as did our elementary school. With the computer I was able to type the things I could not write by hand. This had a profound influence on my education. I no longer spent half the day in the “resource room.” In fact, I quickly rose to the top track in all my classes. As a result I became fascinated with computers. It was not long before I could write simple games, create interesting screen savers, and modify software my father purchased to do things I wanted it to do. I learned programming by tinkering, by looking at what other code developers had done, modifying it, and seeing how it changed the end result. The school offered classes on programming for students who were interested but these classes were too analytical and sequential in their approach to learning programming and that I preferred a more holistic approach.

    I later found out that college computer science classes were even more sequentially structured than what I found in my k-12 experience. Frustrated by this, since my own learning style seemed contradictory to what was necessary to be successful in these classes, I decided to switch majors and take up my minor, art education, as my major. This decision was also inspired by a filmmaker I once heard say to a group of aspiring filmmakers, “If you want to be a filmmaker don’t study film. Study what you want to make films about.”

    After teaching for 5 years I decided to pursue my masters degree in education. In my MA Ed program I chose to focus on education technology both for my elective classes and the topic of my capstone. In my studies I discovered that the problem I had with the computer science programs I had been a part of both in my k-12 experience and in college was due to my bricoleur learning style, a learning/programming style Seymore Pappert observed in his research into how people learn to program. Bricoleur thinkers are more creative in their approach to solving programming problems and will often come to the correct conclusion or develop a program that does the correct thing but will take a very different approach than what the dominant sequential thinkers do in their field. With the rise of content creators in the IT and CS fields outweighing those responsible for the architecture of software I suspect these fields are becoming more welcoming of bricoleur learners. This is also probably somewhat effected by the massive outsourcing of they types of computer programming jobs that can be reduced to formulaic tasks. What we are left with are companies still needing creative programmers and creative problem solvers.

    With today’s focus on content rather than architecture, and with the rising need for creative thinkers in the IS and CS fields I think any restructuring of the CS curriculum needs to somehow look at how bricoleur learners or bricoleur programmers approach problems. CS should be less about how to solve an algorithm and more about different methods to approach problems. It should also be stressed that content today is more important than architecture. To separate the two is like separating grammar from literature. We do both in school but it is much more interesting to study literature. And could we not study grammar as a part of literature just as we could study CS as part of any other content area? When I was in high school the big thing was writing across the curriculum. Perhaps in the 21st century we need CS across the curriculum.

  9. Gary, You said in your one sentence what I’m trying to get at, though I’m not entirely sure you meant to. If I might pick that bit out, you said:

    ..do you really think we can explain how or why we would teach anything..

    I’ve been working with teachers, very fine teachers, pretty solidly for the past many days, and I think that part of our problem is that we keep talking about teaching. One teacher talked with me yesterday, just after my keynote, concerned that I and others of their keynote speakers seemed to be throwing the baby out with the bath water. I can understand this concern, because I’m (we’re) up there promoting something, and it sounds like we’re saying, “Don’t do what you’ve been doing. Do this!”

    In my case, this isn’t true. After all, I’m up there lecturing, and I’d hate to see good lecturers stop doing that all together.

    But to teach something, within the confines of a schedule, the four walls of a classroom, and a precisely defined set of standards that students will be tested on, requires that we define, classify, categorize, and sequence the subject — and then teach it. You seem to imply, and I believe, that this does our students an injustice, not that what they are learning is bad, but that are not learning to love learning, nor are they learning to appreciate and to work what they are learning in interesting and elegant ways.

    Again, “I think that part of the problem is that we are trying to teach computer science or programming, rather than helping students learn to do interesting things with today’s prevailing information technology.”

  10. And while it may be true that we should be teaching the kids to program, that would mean public schools, already strapped for cash, would need to employ yet another specialist to teach them how to program. I would have to disagree that we should teach this. Rather teach ’em how to fish….

  11. Hi David,

    I learnt how to programme, twice. Back in 1984 I learnt Pascal using Macintosh 128 machines in the ‘Skylab’ at the University of Wollongong. We were also taught introductory Unix. Our lecturer, Dr Ian Pirie, taught us the fundamentals of algorithms in an excellent manner. For example, what do you actually do when you make a cup of hot tea? What are the iterations and possible permutations? We were presented with simple problems and we had to come up with various solutions. Using MacPascal. A residence move brought that study to an end.

    I changed careers, again, to teaching in 1987. From finance to history. Then in 1992 I started playing with HyperCard as part of a Graduate Certificate at the University of Wollongong.We were shown good exemplars of HyperCard stacks. We could pull them apart as well to see how they worked. I bought a couple of books about HyperTalk, a scripted programming language, and went from there. The programming or scripting was largely self-taught.

    We were given opportunities to create HyperCard stacks for use in our teaching and learning. We were also taught the principles of interface design and the role of matching the tool to the curriculum need. Various topics that required differing solutions. It was exciting, fun and, frankly, changed my life. [I miss HyperCard actually ~ a pity that Apple stopped supporting the application].

    Later I taught and learnt HyperCard with my junior students aged about thirteen. I shared various HyperCard stacks with students, examples of code and the two books I had bought. They had to come up with their own topics and they ran with it. It was simply a lot of fun. When you made a mistake the software did not jump up and bite you.

    In short I was taught to do interesting things with HyperCard and HyperTalk. We were not taught the code. We jumped in and had a great deal of fun doing it. It changed my life. I just might blog about the experience in the near future. I agree with your sentiments and those of Carl regarding interesting things, problem solving and content.

    There are some small screen shots and information regarding that HyperCard stack about my dad if you click on the About link, if you are interested.

    http://pow.larkin.net.au/

    Cheers, John.

  12. I feel really old having had my first computer experience keypunching cards for FORTRAN programs in 1971 for a high school computer class. The school had to rent computer time from a local business to run our keypunched cards on an IBM computer. I purchased my first computer years later: a Kaypro with dual 5.25 floppies using CPM. Many computers later, I now use a Mac and have been using them since they first appeared. I still don’t know computer science but my brain would be putty by now had I not found an interest in computers.

  13. hi
    I am a computer science student for nearly 2 years.
    i feel i have to know and work much in it i am now trying to speak to people that know much aout it and people that have worked in it and working on it myself. i am not satisfied with the type of teaching in my university and i deserve better. i would be very happy to have some talks with experienced peaple about computer science

  14. The original posts ends with the statement:
    “I think that part of the problem is that we are trying to teach computer science or programming, rather than helping students learn to do interesting things with today’s prevailing information technology.”

    I think that the problem is that we *aren’t* trying to teach computer science or programming; all we are doing is helping students to learn to do interesting things with today’s prevailing information technology.

    Note the use of the term “prevailing information technology”. A generation in technology is about two years; this means that today’s technology will be obsolete before your students leave school. Teaching kids simply to use the current technology is doing them a disservice. Teaching kids the underlying foundations of technology (i.e., computer science) will allow them to learn to use any technology they face in the future. Showing kids how to use current technology is akin to giving them a fish; teaching them some computer science fundamentals is like teaching them to fish.

    BTW, Programming and computer science are not synonyms. Programming is a subset of computer science, albeit an essential one–it’s hard to explore computing without being able to talk to the computer. Computer science is a broader area of study. For example, how information is organized is one of the “big ideas” to come out of the technological revolution (not for nothing is it also called the “information revolution”). Representation of information is an important concept to understand in today’s world. Exploring these and other topics in any depth usually requires learning to program, whereas a programming course alone will usually not cover all of these fundamental topics.

    – marty

Leave a Reply

Your email address will not be published. Required fields are marked *