Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Saturday, November 7, 2009

Alice: the flexible tool for teaching programming.

This last Tuesday the Skyline High School was the featured school in the Colorado In Sync Expo in Longmont.

As you can see, there were four of the best MESA Intro to Programming students there to show off their skills to anyone who was interested.

Skyline is undergoing an interesting transformation as it is being remodeled and re-vamped to provide more resources and space for the schools two independant initiatives for STEM (Science, Technology, Engineering, and Math) and VPA (Visual and Performing Arts).

Right from the start I knew that the STEM and VPA spheres would overlap. In fact, if I had to poll my programming students and Computer Club members, I'd say they'd be split about 50-50 between choosing STEM or VPA if they had to choose just one. Luckily, Computer Science at Skyline has been able to walk that fine line between science and art. Because the Comp Sci department is not funded by outside interests (like many CS programs that exist in the business departments of other schools), the department has had the freedom to make choices based soley on the interests of the students involved. For this reason, Open Source applications are used exclusively, including Python, Java, BlueJ, GIMP, Oregano, and, of course, Alice.

This year has been quite a year already in the Intro to Programming classes. When students are allowed to freely explore ideas, some unexpected uses of applications can be discovered. This is very apparent in how Skyline is using the Alice environment to extend computer science beyond the usual territory of learning to program. When you look at Alice creations examples online, you see that they tend to ... well ... look like Alice programs. This Fall, however, many of the creations I'm seeing are making me say things like, "You did THAT in Alice?!"

After corresponding with the Alice team at Carnegie Mellon University, I've decided to showcase these creative ideas and send them to Don Slater, from the core Alice team. Haven't decided yet where to post these for the public to see, but when I do (and I'll ask Don for advice on this), I'll put a link here. Hopefully you too will say, "Wow...that's done with Alice?!"

Of course this is just confirmation that Alice all along has been a great tool for teaching programming and comp sci. I think most people never really push a tool to it's limits, finding new ways to use that tool to create beautiful and expressive works of science AND art.

Tuesday, March 17, 2009

Sometimes They Come Back

So I'm working through a great Python book by Andy Harris, and I'm running a little orbit simulator.

You can the original orbit that my space ship was in (the oval shape that fits on the screen). I hit the thruster a bit too much and altered the orbit (the oval that goes OFF the screen). My ship seemed lost in space and time, as I started to think about Kepler's brilliant 2nd law. In short, if my ship was to return, it would be a while.

Python, however, deals well with really large numbers. If your program requires them, Python will supply them. Printing a googol in Python is no problemo. So I waited.

And waited.

And waited.

My wife came in and asked me to help her move some furniture in our guest bedroom. Later, I came back and the orbit was complete: my ship had returned home. Sometimes they come back.

Sunday, March 15, 2009

Pygame for Flocking Behavior Simulation


Back in the 80s, Craig Reynolds did some great work on simulating the flocking behavior of birds on a computer. I've always been fascinated by his results, as they look so much like a real flock of birds.

Since then there have been numerous implementations of his approach.

While programming Alice with a student recently, we came up with a way to simulate fish swimming in schools. Our method was nowhere near as complicated as flocking boids, but it was quite effective nonetheless. It merely involved random movement with boundary checking: get too far away from the "center" and the fish decided to head back towards the "center". Of course the "center" here may be a physical location, or the average location of the fish.

To study this in more detail, I decided to use Pygame, a module for Python. Pygame makes writing little graphical simulations a piece of cake. Add to it the functionality of Numpy or Scipy and you have a very powerful environment for scientific simulations.

Tuesday, March 10, 2009

My Ping Pong Problem

While writing up some new and original logic problems for the PyWhip site, I came up with this one, which kept several teachers in our math department (and a student) entertained during lunch:

Imagine that we have some ping pong tables and need to have them "sealed" before the next round of competition. It takes one worker 10 minutes per table to get it properly sealed and cleaned up. It takes two workers 5 minutes per table, as they can each work on a half. Only two workers can work on a table at one time, though, so three workers also would take 5 minutes on one table. All we care about in this problem is how long it takes for the work crew to be done with the table "resealing" job so we can get the next round of a tournament started.

Your job:

Write a function that accepts two parameters (numberOfWorkers , numberOfTables) and have it return the total number of minutes it will take for the work crew to get the job done.

Saturday, March 7, 2009

PyWhip and Javabat ?!

If you are a member of Edu-Sig (the Python in Education group), you may have heard talk recently about creating a Python alternative to JavaBat, a tool used by almost every AP Computer Science teacher on the planet.

JavaBat is almost universally loved and used by high school APCS teachers. Students can sign up easily and then start solving the 250+ challenges they are presented with, ranging from simple String manipulations to hard core recursion methods.

One of the difficult aspects of Java is that it never was designed as a nice language to quickly write up some code and let it run. Old farts will talk about the golden days of BASIC, but Python is really a great language for Computer Science education. Javabat helps by letting students write simple methods (functions) without the need to enclose everything in a Java class with public static void main (String[] args) . In short, it let's students and teachers focus on the login involved in a particular method--which is a good thing. Teachers can track student progress, browse their code, etc.

So the reality is that Javabat is one of the most used tools for teachers of AP Computer Science. I have yet to meet a teacher of APCS in my state that does not use Javabat.
If Python is to ever gain a foothold in secondary school CS education, having a Python alternative to Javabat is a very good idea.

Right now it's just beginning, but if you want to contribut to PyWhip, head on over to edu-sig or contact me on how to get involved. Since I haven't really asked the two main contributers for permission to put there contact info here, I'll leave their names out of this, but they're doing a great job on this so far.

Thursday, February 5, 2009

Alice 2.2 Video Export Test



Just seeing if this works. Recently we upgraded to Alice 2.2 in my Intro to Programming classes and we are now testing out the cool features 2.2 has that 2.0 did not. Exporting videos is one of them.

Wednesday, January 28, 2009

Scratch on Ubuntu

Today I had a personal visit from Bud the Teacher. We had a few things to discuss about our upcoming district tech fair, but as usual we soon were talking about big ideas and all sorts of stuff that we would like to see reach fruition.

Bud mentioned the possibility of using Scratch with some of our district Gifted and Talented student. Bud didn't even start by saying, "have you heard of Scratch?" No, by now he knows that if it deals with teaching programming and/or is open source, I probably have looked into it. I told Bud I would be happy to help teach Scratch to any interested teachers, possibly this upcoming June.

When I got home, I fired up my Ubuntu laptop, opened the command line and typed "scratch". I got the cold and impersonal Linux response of "command not found" and realized that I had NOT installed Scratch on my current Ubuntu version (8.10). I did recall, however, installing it on Ubuntu 8.04 and having it work great. A quick visit to this page had me up and running, scratching my way along in a neat little world of click and drag logic. I remember the days when Linux versions were a ton of work. That's changing, though, and more and more great apps for teachers are fully supported on Linux, with Ubuntu being the most common choice.

Gotta go. My Scratch is rusty....

Oh, and if you're like me, you'll want the source code. Happy {code} reading.

Sunday, January 4, 2009

Leaving on a jet plane

Tomorrow is the first day of the Spring semester. While my students are filing into my classroom, I'll be on a jet flying to Carnegie Mellon University in Pittsburgh for a one-day workshop on Alice 3.0, which I'll be using in my Intro to Programming class this semester.

My students will be official bug reporters for Alice 3.0, a scary and yet exciting job for us. I'm also hoping to put a word in for Linux support while I'm there. Wish I was better at tweaking Java in Linux, so I could help out more. :-(

Spent most of today packing up and storing away my NES and SNES game collection. Had to make more room for some recent book acquisitions....

Thursday, January 1, 2009

When worlds collide....

My online identity is pretty diverse. Each different facet seems to interact with a large web or sphere of somewhat similar individuals. What surprises me, though, is how little the various spheres tend to interact with the other spheres.

For instance, I see very little overlap between these three spheres: math teachers, programmers, and technology in education experts. All three of those spheres accept me and allow me to contribute and ask questions--and yet I know very few individuals that exist in even two of those three spheres.

For instance, take a look at this recent post about a probability question on a programming blog. The immense number of comments arguing one solution over another reminded me of the Monty Hall problem, which is taught in IMP 3 Math. In fact, there's almost nothing in those comments (other than the occasional coded "solution" to the problem) that would tell you that these are primarily programmers--not math teachers--arguing their view of the problem.

I found the comments amusing. I haven't necessarily found that being a natural at math makes a student a natural at programming--although I must say that almost all of my best programmers are very good at math. I've done research on a correlation between language acquisition aptitude and programming ability, but the results, of course, were unclear. What I do know, though, is that very few programmers (aside from a few Linquistics experts) ever think much about language acquisition.

Let the fun begin:

Let's say, hypothetically speaking, you met someone who told you they had two children, and one of them is a girl. What are the odds that person has a boy and a girl?

Tuesday, December 23, 2008

Object-Oriented Programming Example

My Java programming project is going a bit slow, but I have many excuses. The one I like to use in OOP (Object-Oriented Programming) is "well, I'm still working on some design issues before I start writing all the code."

So I'm converting Football Strategy, the old Avalon Hill game into a modern Java version, complete with opposing coach AI. OOP will allow me to extend the coach class through time, making better and better opponents for humans to face.

But that all comes later. Since I give my AP Computer Science students the whole year for their project, I too have a lot of time to develop this application. Recently I've been hitting my head against the wall trying to come up with a system for encoding play results that include all the relavent information in one result. For instance, a result of 723 may have used the 7 as a play-type indicator (say, "complete pass play that went out of bounds"), and the 23 might have been the net yardage. On the suggestion of one of my students, however, I have decided to encode all the play results as String objects. Perhaps something like "15cpno023" for complete pass no fumble out of bounds and 23 yards, with the play taking 15 seconds. I don't know, I'm not there yet.

The point of using an OOP approach, however, is to allow you to think of things as actual objects. What better way to do that then open up the Football Strategy game box and see what objects in the game may lend themselves to objects in Java. One that clearly lends itself to being a Java class is the scoreboard. Before OOP, making a football simulation would have been a long and tedious process, as the data would just be flying around the program, jumping from function to function. With OOP, though, you get to break things up and decide where the data lives. In the case of a footballScoreboard class, you can easily think of the data fields (homeScore, awayScore, down, yardsToGo, fieldPosition, etc) and the various behaviors (incrementDown, incrementHomeScore, etc). What was so nice about this, though, was that there is an actual object in the real world that is so familiar to anyone who has ever been a football fan. Ask some football fans at random to draw a football scoreboard and a lot of them would draw something like this post's image.

Coming from a procedural programming background, OOP was a bit strange at first. Now I can't imagine programming relatively large projects without it.

Monday, December 22, 2008

Ubuntu Gets Even Better

Joey Stanford's recent post about Ubuntu Ethos came at a perfect time for me.

Last night I did a fresh install of Ubuntu 8.10: Intrepid Ibex. I had avoided switching to the new Ubuntu version simply because I had a lot of things set up on my laptop that I use for teaching math and teaching programming classes.

After copying most of my home folder files to an external hard drive (I love the Western Digital Passport series), I did the install from the live cd.

After install, I did the usual updates and installed all the Linux applications I use for programming: things like Eclipse, Geany, IDLE for Python, Comix for reading comic books, and so on. I also installed the Sun Java 6 JDK using the package manager. After a nice little test of HelloWorld.java, I got the latest versions of BlueJ and Greenfoot and installed them.

Now this is where things were different than in the past. Back in the days of Feisty Fawn, I had to mess around a lot with the xorg.conf file and set some class paths for Java. I always considered these steps to be necessary evils and a small price to pay for a great, free alternatives to MS Windows.

This time, however, I didn't have to do any of those steps. None. Everything worked correctly right away. I even was able to turn off tapping on the touchpad without having to do anything on the command line.

I like the command line. In fact, I use it quite a bit. The point here, though, is that you really don't have to use it anymore. That's a good thing for helping spread Ubuntu. If you have ever considered Linux, but were intimidated for one reason or another, now is the time. The Ubuntu community can help you with the switch.

If you're a math or computer science teacher, you'll be amazed at how Ubuntu can help you with your job.

Saturday, December 20, 2008

Java for the Holidays


I've blogged about Cay Horstmann before. In the world of Java books there is no shortage of "so-so" tomes that "kind of" teach you the language. Then there are a few truly great books that are several levels above the rest. One is Head First Java, but that book is in need of a rewrite soon. The other great Java book is Core Java Vol 1: Fundamentals by Cay Horstmann and Gary Cornell.

What makes a great programming book? For me, the author must get to the heart of the language. Mark Lutz and Wesley Chun have written truly "Pythonic" books about the Python language. Their books are miles ahead of many of the other books on Python programming, which seem sloppy and inefficient.

Horstmann's Core Java is a great book. So I finally went to Borders and bought my own copy. I worked through the first 138 pages today (as review) and can't wait to revisit the chapters on Swing GUI development. If you really want to understand Java, try this book.

Teachers who read this books will have a big advantage in teaching Java, no matter what textbook they have officially adopted for their class.

Tuesday, November 25, 2008

Designing a high school computer science curriculum

For years I have run a computer programming club at different schools. From the days of QBasic on IBM 486s to Java and Python on duo core laptops--well, I've been there.

I would teach math during the day and then the fun would start after school, when the programming students would stop by to program and/or just hang out.

This year, however, is different: 75% of my time is spent teaching programming classes. Sure I still have the programming club, but now I don't have to wait until the school day is over before I get to work with students creating cool programs--it's part of the curriculum now.

Our school is working on becoming a Science Technology Engineering and Math magnet school. The funding is finally starting to appear, so now the real planning is starting to take place. We'll be adding a lot of classes for our STEM program, including more computer science classes. Because I'm pretty much the entire CS department, I get to work on designing a high school computer science curriculum for our STEM program.

I plan on getting help with this. I have some contacts at the CU Boulder CS department that I hope to work with. I'll also be in touch with the Alice team from Carnegie Mellon, as we're about to pilot Alice 3.0 at our school. Also, there are recommendations from the CSTA that I'll be using.

At the same time, though, I'm trying hard to see what I can come up with on my own. May as well enjoy this freedom of choice while it lasts. Maybe there are possibilities here that have never been attempted, or thought of. So when I was asked to come up with a list of possible computer science classes to offer, I spent a lot of time brainstorming.

Here are some of my rambling thoughts:

  1. A class in video game creation would be cool (using Pygame or Greenfoot?).
  2. AP Computer Science will remain in our curriculum.
  3. A class in programming that could directly support our math department would be cool. Maybe something on Algorithms and discrete math problems.
  4. A class on Web design would be nice (XHTML, CSS + PHP + JavaScript?).
  5. The Intro class with Alice should remain the first class in our curriculum.
  6. A class that focuses heavily on digital media could complement our Visual and Performing Arts academy.
  7. A class that combines linguistics and programming would be interesting....

I will also need to train more teachers for teaching these classes. Most of the teachers that are possibilities have no experience with Object Oriented Programming, so I think some professional development there may be necessary....

Saturday, November 15, 2008

Converting a Classic

In my AP Computer Science class, one student has been working overtime on a pet project of his that deals with cryptography. Watching his project evolve over time made me assign a project (of their choosing) to all my students. Not wanting to be left out, I decided to join in with my own Java case study project: converting the 1972 Avalon Hill game Football Strategy to a computer version.

Football Strategy was a great game. Luck played a very small role in the game and both teams were equal and ... generic. The game was not like most football simulations like the Statis Pro games or even Paydirt, which attempted to reproduce the results of a real NFL season, statistically basing it on the real NFL results. No, Paydirt ignored that and instead based the game entirely on your playcalling and your opponnent's playcalling, resolving each play by cross referencing your choices on an ingenius 10 by 22 matrix. If you thought your opponent would call a long pass, you could call the appropriate defense to stop him cold. However, if he suspeced you would call that defence, he may instead call something like an End Run and bite off a big chunk of yards. So...do you stick to the long pass defence or switch to a spread defense--or choose something else entirely? That's what made the game so fun.

Without an opponent, though, Football Strategy was a real bore. For solitaire play I prefered Paydirt. In fact, I'm still finding on the net some old text files I wrote describing the AI solo play system I developed for Paydirt. Yes, I was a lonely boy.... :-)

Anyway, the goal is to write up a good version of Football Strategy in Java. The focus on OOP will allow me to develop the game through time, having the AI Coaches evolve to get better and better. That would have been nearly impossible in the past, when Football Strategy was just a paper and dice game.

Thursday, November 6, 2008

Zombie reclining in the school gym!

That has got to be one of my strangest blog post titles ever, but look at the picture. That was created by a student of mine today in my Intro to Programming Class. We've completed the 9 week Python curriculum and are now enjoying programming with Alice, a great tool for teaching the concepts of programming.

Having already learned loops, functions, and decision structures in Python, it has been a breeze to watch them dive into Alice. Although I do like the suggested curriculum for the Alice software, I have modified it somewhat. Here's how:

A while back--actually several years ago--I started writing math quizzes that had four problems on them. Those four problems corresponded to the four levels of proficiency that we used on the Colorado CSAP exam: 1=Unsatisfactory, 2=Partially Proficient, 3=Proficient, and 4=Advanced. There's really no point to link those to a traditional grading scale, but if you did, it could roughly translate to 1=D, 2=C, 3=B, and 4=A.

So my four math problems on the quiz were chosen with those proficiency levels in mind. The level three problem was one that if they could solve it I would consider them to be proficient in the task at hand. Level 1 problems were so easy that if a student missed them I'd know we had real problems. If a student could get to level 2 but not 3, I'd know we were getting close to our goal and I'd have to work more with those students. Of course the level 4 questions were usually pretty tough--challenging enough for those few students that can quickly complete the first three levels. [I hate to have my brightest students bored--they need to be pushed, too!]

Anyway, I've using a similar approach in my programming classes. Whether it be Python, Java, or Alice, you can go far by creating a set of four programming challenges--one for each level of the proficiency scale. For instance, our first group of challenges in Alice were simply designed to get students familiar with the positioning of objects in the 3D world of Alice. Here's what I came up with:

Level 1: Character Pyramid: make a pyramid of characters in Alice so that the characters are properly placed, with their feet on the shoulders of the people below them. [I showed them an example of this.]

Level 2: Salute! Make a character look as if he or she is giving a proper military salute. The more real it looks, the better. [Again, I showed an example for this one.]

Level 3: Shoot out at the So So Saloon. Using the Sheriff and Cowboy characters from the Old West folder, set up a scene that looks as cool as you can. Your goal is to make the scene look like a real action scene, not stiff characters in a primitive video game. If you don't like the western theme here, go ahead and choose your own scenario--a pillow fight on the moon, for instance!

Level 4: Sitting at the Table. Position at least three characters sitting as naturally as possible at a table, seated in chairs. The more you can make them look like real people, the better.

Now, that was their assignment. Nearly every group of students reached level 4, and had a lot of fun getting there. There were questions--plenty of questions. Some I answered by showing a mini lesson to the whole class (for the setVehicle, orientTo, and drop dummy object methods, for instance). These mini lessons were short, though, and often demonstrated with the help of students. As much as possible I try to let students learn from doing, and then have them help each other with their challenges.

What has worked so well with this approach, is that I actually have time to walk around and visit with pairs of students as they program--which allows me a little extra time to work with my English Language Learners. So far my ELL students have soared with this approach, and my energy level has never been higher.

Sunday, November 2, 2008

Website Updated!

I must be getting better, as my productivity has just increased. This morning I got some grading done and revamped my teaching website. I had a lot of help from fonrus, one of my students. Fonrus has good taste in HTML and design, so things I do usually look a lot better with the fonrus touch--like they're actually from this millenium, not 1996.

I think what really helped me get going this morning was that one of my AP Java students shared the source code for a basic cryptography application he has created. You can see the application here, which is pretty nice. Nothing makes a teacher prouder than to see his students making contributions to the world of programming. Now hopefully other students will view the code and maybe get ideas for their own Java GUI applications--or ways to improve the code as it is. The code used is very basic cryptography, but last year another student wrote a nifty RSA encryption approach in Python that could easily be used with this application. At any rate, I now have more material for discussion during our next AP Computer Science class. :-)

One of the things I did this morning when working on my website was to install Zen Photo for managing my digital photos online. Zen Photo is a nice and streamlined open source application that will allow me and my students to easily share our digital creations. You can go straight to my gallery here.

Thanks to all the kind emails, messages and cards that people have given me the last week. You've helped me recover and I'll be back in the classroom in a day or two--I'm almost ready.

Saturday, October 4, 2008

My Three Name Tags

I've now been teaching long enough at my school to have accumulated three name tags--all different in their job titles.

Although all are for teaching roles, one is for MATH, one COMPUTER SCIENCE, and one is for ELL (English Language Learners--formerly called ESL).

Each one of those name tags is special to me, and I still wear them all--not at once, though.

Teaching computer science is the most recent role of the three. Still, my background teaching math is clearly on display when I have students writing code. Recently we've been having fun with the classic number theory problem "Getting Down to One." Also, my programming classes have a large number of ELL students in them. My graduate research was specifically aimed at teaching ELL students to learn programming languages. During the research, though, I was able to calmly calculate and plan various tactics and strategies for supporting ELL students in my programming classes.

That was the plan. Now, the reality is a little different.

Even though I have filled quite a toolbox of ELL techniques through the years, I'm still amazed at how challenging it can be to shelter instruction properly for ELL students to have the same chance at success as mainstream students.

Case in point: Mayra (not her real name). Mayra's English level is clearly lower than her peers. She's at level 2 in our school, which means she's just starting to use conversational English at a basic level. Her academic English level, however, is much lower. Still, she has a great attitude and never complains.

Still, it ain't easy. Python is one of the easiest languages to learn, and yet syntax errors are so much more numerous for Mayra and my other ELL students. Then, Mayra had a little bad luck of sorts. Although she had virtually the same code as the students next to her (they were programming in pairs), Mayra's code wouldn't run. It was driving her nuts and I couldn't figure out the problem either, as all her code looked fine. Then, I realized that she must have named her program the same name as a built-in module in Python that she was importing in the code itself. This makes Python import the program itself, rather than the module she was trying to import. A simple change of name for the program fixed the problem, but it was unfortunate that it had to happen to Mayra, when syntactical errors are tough enough without a little bad luck thrown in.

Teaching ELL students at the high school level can be really tough. As much as you love the students, you realize that they are somewhat caught between worlds. Their literacy skills in both English and their native language (usually Spanish in our school) are often low. Their thinking skills may be advanced, but literacy problems often trip them up. They have so much to say, they just have a tougher time saying it.

So I guess in many ways I'm most proud of my ELL teacher name tag. I may not feel successful as often with my ELL students, but that's only because the challenge is so much more difficult. The successes we do share, we share in our hearts and our minds.

[This post's image is a GIMP original.]

Thursday, September 25, 2008

Programming Turtles to Paint in good taste

My Intro to Programming classes are finally getting to be a lot of fun. Having learned the basic tools of functional programming (control flow, types, functions...), my students can finally reap the rewards using the turtle module that's included in Python--and learn some OOP at the same time.

Teaching students to program turtles goes way back, but for me it never gets old. The image shows what a turtle can do when it moves to a random location, puts down it's pen tip and draws a somewhat randomly colored circle. I say somewhat because the parameters are tweaked in ways to prevent total random ugliness that comes from choosing colors totally randomly. Here, you see some beautiful shades of blue and purple blending together.

It hasn't been all that easy in my first semester teaching Python to students new to programming. My ELL students really struggled with syntax errors. Now, however, all my students have some of the basic tools of programming. Now it's time to let 'em go and be creative. At this point it's fun to write 3 or 4 sample programs and then watch as the students copy them, run them, and then start to alter them. When I learned to program I never had a teacher give me code to alter. Not sure why. Seems like a natural form of communication between teacher and student. It's fun to put comments in code like:

## Okay, try messing around with these variable settings
## and see what you can come up with. If you find
## something cool, share it with others!

Sunday, September 7, 2008

Sunday Morning Java

Spent this morning drinking java and programming Java.

BlueJ and Greenfoot are great student IDEs for programming Java. Traditionally I would just use a good text editor (Geany is my favorite) and then compile from the command line. These IDEs, however, make it a lot easier in many ways to write simple Java programs. At first I had a real aversion to BlueJ, but I've become more comfortable with it over time.

The other java--as in the coffee--is the real delight. I learned how to cold brew coffee a while back and can't believe how much better it tastes. I'm no coffee snob--I just wondered why our coffee always came out bitter and tasting a lot worse than a cup you buy at Borders or Starbucks. Give me some time and I'll post my method here, along with photos of the process. If you like a good cup of coffee (and I do drink mine hot--even though it's cold-brewed) you'll have to give it a try.

Tuesday, August 12, 2008

The Joys of a nice Programming Environment

If you click on the image for this post you can see a full size screenshot taking by me while programming today.

One thing that strikes me about programming is how important it is for the student to feel comfortable in their programming environment.

This was made very clear to me when I attended the AP Java workshop at Carnegie Mellon a few weeks ago. I left my Ubuntu laptop at home and used Macs exclusively that week. The first day I was feeling shell-shocked trying to code there. Things that I never think about were so hard to figure out. I use multiple desktops on Ubuntu and can quickly jump from my IDE to Firefox if I need to look something up. Of course I have Amarok playing in the meantime.

Now, all of that is absolutely easily done on a Mac--it just takes a while to get used to the new environment. By the end of the week at CMU I had developed a new like for Macs and I kind of miss using one at times. I've never really liked the Windows environment for programming, although I'm sure some people do.

The point is: students need time to adjust to the environment you use in class. This is even more true when you are using IDEs that students are not familiar with--like Eclipse.

NOTE:

The program I'm writing there on the screenshot is one of the programs from Think Python: An Introduction to Software Design by Allen B. Downey. If you have not read any of Allen's books on programming, check it out. Think Python is the main textbook for my Introduction to Programming class.