Changes to Intro to Computer Programming

This will be my third year teaching Introduction to Computer Programming. The first year I had 15 students which was a good showing, but last year I only had 5 students. It turned out to be a scheduling issue, but I was still worried about the health of the course, and whether or not it would continue to be offered. Good news is that there are about 30 kids enrolled this year, so there are two sections. Enough inside baseball.

I’d like to outline some of the changes that will be made for this upcoming year.

    1. Standards Based Grading
      The majority of the grade for this class will now be based a list of skills. Unlike in math, there will still be significant other parts of the grade (like projects) but the SBG list will be the majority of the grade. I’ve just made up the following list of skills for class, so this list will be volatile. A massive benefit to being the only person who teaches this course, is that things can change quickly on my whim. It’s a luxury.
      List of standards for class.
    2. Robots
      I saw these Finch robots in a news article somewhere and asked our District Technology Head to buy one for testing. They are pretty cool. No batteries or wireless connectivity so the cost is quite low (~$90 each). A bunch of different features, and the Development Environment is already fleshed out. You can program the robots using all the languages that we’ll be using in class (Java, Greenfoot, and Python). I was lucky enough to get a class set of robots. Super excited. Kids will love them.
    3. Python
      After “discovering” Python this past year and throwing it at the kids and seeing some great success, Python will replace parts of the previous Alice and Java curriculum. Python code is as clean as it gets, and it’s also quite powerful. I’d actually say that its the best “learning” language I’ve seen. Java really sucks for beginning programmers, the conventions and syntax are just painful. Python is simply the best.
    4. Project Euler  
      I’ve already written a love letter to Project Euler. I’ll be expanding on PE this year with the students. There are probably 10 problems that any Intro to Programming student should be able to solve (with some help). The best can grow from there.
    5. Greenfoot 
      This tool makes Java extremely approachable for the beginning student. Greenfoot is a 2D development environment for Java and it allows students to easily manipulate complicated environments. The best thing about this tool is simplicity in describing objects and object inheritance. If we have 3 different things (eagle, fish, minnow) that all can move, should we make the same move command in each object type? Or should we put all three of these in an Animal class that has a generic move command so that they all get it from inheritance. I had struggled on explaining this concept to previous students, but this exact case came up in Greenfoot and it was much easier to explain with this example.
      Also Greenfoot makes creation of a game quite easy.
      (My Greenfoot game: Chuck Norris Shooter.)
      Click on image to play game.

      (edit: Forgot to mention the following!)

    6. Fantastic Resources
      There are a bunch of great free(!) or cheap resources that I’ve found online to help the students out.
      1. Dive Into Python is a great book for learning Python.
      2. How to Count is a nice book to remind you of the basics.
      3. Learn Python the Hard Way is a superb DIY guide to learn python and programming.
      4. Think Python is an open source book that is very handy.

I don’t think many of my 3 readers are Computer Science people, but please let me know what you think. Also let me know if I’m missing something important or there is some great tool out there that I should know about. Thanks!

16 thoughts on “Changes to Intro to Computer Programming

  1. I was thinking of using Greenfoot, and I spent an afternoon playing around with it. How will you be using Greenfoot in your class?

    From my afternoon of messing around, my sense was Karel the Robot and Greenfoot are aiming at similar goals, and that I had more freely available Karel resources available.

    1. I found Greenfoot to be a nice way to learn Java because they provide so many examples to modify. It was excellent for teaching Objects and Object Inheritance. They also provide many basic essentially skeleton classes that the students need to flesh out to make useful. For instance, they provide a move class for an object, but the move class doesn’t move like the students want, they need to modify to make it look nice.

      I’ve never even heard of Karel, so I’ll put that on my list of stuff to check out! Thanks!

  2. Pretty exciting to see that the class is growing! Having gone throught the class in glad to see Alice is going away! Python does seem like a language that a lot of basic programmers have . . . I should probably learn that. . . Hope you have a successful year! (I’ll probably stop by in December when I’m home from college!)

  3. Hi Dan,

    I am hoping to integrate Python into my math courses more. I am looking forward to reading more about your computer science courses (I want to learn how you teach it).
    Bret

  4. Hi Dan-

    I taught an Intro course last year with Python as a main language and really enjoyed it. It seemed to me to be a very productive step away from the syntax-questions that dominated my experience with early Java. That said, there is syntax. Especially when working with various text editors or, as my students often did, posting and pasting code on and off our wiki and IRC channel, it’s easy to lose indentation or make an invisible switch between tabs and spaces. Searching for an errant tab is actually *more* annoying than looking for a missing semicolon.

    I also spent a week this summer with the Program By Design workshop, looking at Racket as an intro language. http://www.programbydesign.org/

    It was a week full of major inspiration, including a realization that I had horrifically bungled the introduction of many central concepts about objects and data structures, because I approached them from “how do I perform this task with LISTS” (or other structure) instead of “what kind of data will this task require.”

    If you’re interested, take a look at Picturing Programs ( http://picturingprograms.com/ ) or the Bootstrap ( http://www.bootstrapworld.org/materials/) curriculum. DrRacket is FOSS, but even better is the WeScheme web-based REPLY, which allows easy saving and sharing using Google accounts ( http://www.wescheme.org/ ).

    I’m not knocking Python or any the resources you listed above! They’re all still the list for my class this year, and I’ll continue to use Python as the primary language. I just gained so much by taking that orthogonal turn this summer, and I hope my students this year will find some similar benefits.

    1. I’m with you on the tab / spaces thing. It happened early on when I was switching back and forth between a mac and windows with different editors.

      I had horrifically bungled the introduction of many central concepts about objects and data structures, because I approached them from “how do I perform this task with LISTS” (or other structure) instead of “what kind of data will this task require.

      INDEED. I need to work on this. Great point.

      I did briefly teach Scheme (or I guess Racket now?) in an Intro to Prog class in 2004, but haven’t returned to it since. I remember the students struggling, but I’ll certainly give it another look.

      Keep in touch, and let me know how Scheme works for your class!

  5. Dan,

    I’ve taught Python at a 3-week summer program for the last 2 summers and I’ve loved every second of it. I found myself making heavy use of the interpreter and basing instruction around questions – ‘what happens if I do this? will I get an error? What will the value of variable x be after this?’. In my opinion, it’s the definition of an inquiry based classroom – I would let kids play around on the interpreter and see what they can do, and let all of the instruction be based in questions rather than exposition. I hope you enjoy the switch from the ‘well, you have to do this and this and this exactly like this’ of Java to the ‘try stuff and see what happens’ approach of Python.

    I also used Project Euler as a carrot for my students. The other carrot I used: Facebook’s Puzzle challenges: https://www.facebook.com/careers/puzzles.php. Also, if you intend to teach GUIs, I highly recommend this packet: http://infohost.nmt.edu/tcc/help/pubs/tkinter/tkinter.pdf

    I’m currently a math teacher at a public high school with ambitions of starting a programming class at my school – I’d love to hear how your experience with Python goes.

    1. Great!
      Three years ago I was in your shoes (public high school trying to start out a programming class), and I luckily had a supportive administration. It very much helped to have an extremely small budget (no books, no software cost, etc). The Finch robots were the first things that the district has provided for class. This no-cost approached helped grease the wheels.
      I’ll check out the Facebook Puzzles and the GUI with Python stuff too. Can’t have too many tools at your disposal.
      Much thanks.

  6. Hey Dan,

    Thanks for the positive comments about the Finch, and I hope they work well for you. Since you’re using Python, I wanted to make you aware of our new environment for the Finch and Jython using JES. I’m excited about it because it makes setup very easy (compared to getting Jython working with other IDEs like Netbeans/Eclipse) and includes built-in help and a debugger. It came out a couple of weeks ago, so I just wanted to make sure you knew about it:
    http://www.finchrobot.com/Creating%2C%20Compiling%2C%20and%20Running%20Programs%20for%20Finch/jes-jythonpython

    1. Man, that JES installer makes it pretty easy to get Jython up and running (unlike before). Awesome. I’ll definitely be using it with the students.
      Cheers.

  7. Coming in late to the show, but here’s another thing which I think could be a fantastic intro coding language but haven’t had an opportunity to try at a high school level yet.

    http://processing.org/

    It’s made by/for artists, so it’s very good at visuals and interactivity. In its most basic form, it strips away all the “public system main” blah blah crap you need to start a basic Java program. It scales incredibly well, conceptually. You can do any of the above:

    – write just a list of steps to be run in sequence, without having to even create a function
    – write procedural code, where the setup() function you create is run once at start and the draw() function you create is run once per frame
    – create and use your own classes within Processing when you want to start doing full OOP
    – transition to using Processing as a Java library within Eclipse if your project outgrows the minimalist Processing IDE (although I love the Processing IDE as it is)

    The biggest tradeoff I see between this or something like Alice (or, from what I can see, Greenfoot) is that Processing doesn’t hide the fact that coding is primarily a textual activity – kids write text, they still get the annoying error messages when they forget a semicolon. However, they don’t have to write *more* than is really necessary, and you can go from zero to drawing-stuff on screen very quickly. It’s also a different kind of visual environment than Greenfoot or Alice; it doesn’t cartoon things up for you or give you a visual hook to the ideas of objects. However, it does make it very easy for you to draw basic visual components in interesting ways, and hook that to, eg. mouse input to create your own sketching program, etc.

    Geez, why do I find it so hard to just stop typing when I push Processing? tl;dr

  8. Thank you or this great discussion. Our middle school students have always loved Karel. We primarily use Java at the pper shool, but have installed Python and I plan on having students learn it as a second language.

Leave a Reply

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