Wednesday, July 31, 2013

Trick Questions Are A Bad Idea

Thanks to a post by Mark Guzdial I found What Makes Code Hard to Understand? This was a report of a study looking into what makes cade hard to understand even for professionals. I ran though one or two of the exercises and found that I came up with more wrong answers than I’d like to admit. (Actually any at all is more than I ‘d really like to admit.) I am tempted to just write this off as they examples being in Python which is a programming language I know almost nothing about. In reality I should know better than to make some of the assumptions I did make. In real life you wouldn’t want professionals to write code like most of these examples. A good code review (do people still do code reviews?) should correct most of them. On the other hand these are the sorts of “puzzles” that teachers like to include on tests and quizzes. I started to wonder if this wasn’t actually a problem that we have ignored.

There is a tendency to write test/quiz code that is less than completely clear. The theory is that this requires students to read the code closely and understand all the little details (things like side effects) of the code to properly answer the questions we ask. This is just one way that we use bad code with students though. A lot of times we do things to force a focus on specific features and functions of code. One of my forever students complained that the code in the AP CS exam has loaded with examples of how not to write code. And I could not disagree.

The problem that concerns me is that by using bad code (by various definitions of bad code) we expose students to more bad examples than good examples. We as teachers can say “don’t write code like this because we’re just using it to test you” but we know that “do as I say not as I do” is generally bad technique for anything. A student who spends time figuring out “trick code” is likely to start thinking that this is the way to write code. Oh they may even know that the code is hard to read, hard to understand and even risky for production code. At the same time they may see this as being an example of showing how smart they are – they can understand this tricky stuff. If so bad habits can easily be developed.

I’m going to do my best to write easy to understand and easy to read code even for tests and quizzes this year. I think I need to set a good example as much as possible.

Tuesday, July 30, 2013

CS Educator Interview: Peter Beens

Back to Canada for our interview today. Peter Beens teaches at Beamsville District Secondary School in a small town in Ontario. Peter is very active online but attends a lot of actual conferences as well. He often travels great distances by motorcycle to get to these events. It’s surprising how many CS teachers I have run into who are also motorcycle people. Not the stereotype of a “biker.” Or teacher for that matter.

Where do you teach? What sort of school is it?

I teach in a high school in the small town of Beamsville, Ontario. Its makeup is quite varied, with much of our population being bused in from the rural community. It is a small school, with a population of just over 500 students.

How did you get started teaching computer science?

I started as an electronics and computer technology teacher, and from the very early days I integrated computer interfacing and programming into my curriculum to make the content more exciting for the students. When my old school lost its CS teacher due to retirement, I was the principal's first choice as a replacement as he knew I was well trained in it and had been programming a long time.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

In our school we offer CS in the 11th (ICS3) and 12th (ICS4) grades, at both the college-prep (C) and university-prep (U) levels. Sadly, because of our small population it is quite a challenge to recruit students to take CS so I normally end up with a "quad split" class made of up grade 11's and 12's in both the college-prep and university prep streams.
Following is a diagram showing all the CS courses offered in our province. My school does not offer the intro grade 10 (ICS2O) class because of its small population.

The curriculum itself is a province-wide one that is written very generically so an instructor has quite a bit of leeway in how the content is delivered.
The following diagrams show the content of the grade 12 college-prep and university-prep courses:


If anyone is interesting in viewing the curriculum in its entirety, I have it posted here.
I always introduce CS with something graphical. I have mostly been using Turing to do this, as its graphical commands are quite easy to use. I am now toying with the idea of using Turtle Graphics as an alternative , or perhaps the PIL library in Python, but I haven't decided yet.
After the intro unit we normally move on Python, although this coming year I may do an App Inventor unit. In Python, I normally have the students do the tutorials at http://cscircles.cemc.uwaterloo.ca/. I love this website because the students can add me as their "guru", meaning they can contact me from within the website environment to ask for additional help, day or night, and also like it because I can track the students' progress.
I always supplement the tutorials with programming challenges, in increasing levels of complexity.
This year I also plan to introduce Arduino programming, to show students that programming is not just about programming computers, and also to make it more fun! (a working traffic light always gets a better reaction than Hello World!)
For the grade 12's, I handle it much more informally. I normally give them larger projects where they have to work in groups, with more of a project management emphasis.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

I love project-based learning, but I have to accept that there has to be some skills development before we can get to any meaningful projects.
I love the use of online tutorials for the students' learning, but I don't rely on the flipped classroom model to use those tutorials. (Instead, most of the students watch them in class, at their own pace.)

What is the biggest challenge in teaching CS at your school?

The small population of the school is the biggest challenge, with so many competing elective subjects. Add to that the negative stereotypes of computer programming, and it becomes a challenge to attract students to the program.

What is administration’s support (or lack of support) like at your school?

My administration is very supportive in allowing us to attend programming competitions outside the school, as well as by allowing us full autonomy to use our budget to purchase devices such as Arduinos and the supporting electronic components.

How do you measure success for your program? For your students?

Success for me is, of course, based on the number of students in the seats. For the four years I have been at my present school, I have seen an increase in the number of students, so I'm very happy about that.
I also measure my success by our performance at the local programming competitions, and this past year has been our best ever.
Lastly, I measure success by the diversity of the students. By making the environment more social and by being more creative in the types of projects we work on, I'm getting students that wouldn't have normally considered CS as an option.

What is the one thing you like to talk about regarding your program that I  haven’t already asked?

I just wanted to thank you for selecting me as one of your participants for your interviews. It seems we (teachers) all go behind our closed doors and do our own thing, but the truth is we are often doing the same as others, so a forum such as this lets us see that, and potentially reach out to each other to collaborate or share. 

More Peter Beens on the Internet
For a full list of interviews in this series please see CS Educator Interviews: The Index

Monday, July 29, 2013

Interesting Links 29 July 2013

Short week last week as my wife and I headed down to Walt Disney World for a bit of actual real vacation. That doesn’t mean I didn’t collect a good batch of links to share with you today before I left.

Google pilots teaching program in Berkeley County article from the Berkeley Independent. Some of these Google teaching fellows were at CSTA last week absorbing as much as they could. I was happy to see them there as that is a great place to learn. Wish I’d had more time to talk to them though. I’m not sure how this program will work out but I credit Google for trying something.

My time in the High School Computer Science by @DanKasun Dan is one of the people I met at Microsoft who really cares about education and is smart enough to know that he doesn’t know it all. Here he writes about some of the things he learned as a volunteer TA in a HS AP CS course.

I’m collecting resources around image manipulation for use in my honors programming course. Found a couple of new ones to share.

I’m also collecting more Kinect resources. Two articles that look interesting are here.

Really interesting research on how well programmers really understand code. What this article had me wondering was if we as teachers were creating too many trick questions when we should be demonstrating easy to read code. More on that later.

Google's Megan Smith On The 2 Innovations That Will Get More Women Into Tech Google and Microsoft are both concerned about the shortage of people in general and women in particular in the software industry. Both are also trying to do things about it.

The #makered Twitter conversation was about 3D printing. More and more schools are starting to use these devices as they become more affordable. Along the way was this link to Time to Start Making: Free Design Programs for 3D Printers

A Future for Computer Science Education is about the recent CSTA Conference event hosted at and by the Microsoft New England Research & Development Center.

Touch Develop on the Surface by Ray Chambers documents his experiments using TouchDevelop on a Surface.  I have a Windows 8 slate and have found TouchDevelop very easy to use on it.

Summer is not vacation time by Garth Flint @gflint outlines a lot of the behind the scenes work he has to do during the summer to make sure the computers at his school are ready for the new school year.  Most teachers do more over the summer than relax. BTW did you read my interview with Garth Flint earlier this month?

Friday, July 26, 2013

CS Educator Interview: Louis Zulli Jr

Lou Zulli Jr is a quiet unassuming man. What he does with his students is anything but minor though. The projects his students have done with smartphones, SharePoint and other hardware and software have gotten him international attention. Most recently he was the invited keynote at an IT conference in Australia. Lou believes in real projects that make a difference locally in his school and in the long run more widely for his students. I’m thrilled that he agreed to this “interview.”alfred-Lou
Lou is the good looking guy on the right in this picture. I’m the other guy.

Where do you teach? What sort of school is it?

Public magnet program located in an urban/suburban high school in St. Petersburg, FL.  Highly diverse student body.

How did you get started teaching computer science?

Interesting story. I started my career as an English and Journalism teacher.  After 17 years in those fields I was asked to take on the Network Admin position at this new magnet program that had been around for three years.  The previous two network admins had messed things up and they wanted an educator in that position. I had been building journalism computer labs so they offered me the job.
After taking three years to undo the mess that the I inherited I began to build my program of network assistants. It first started out as an IT focus course but has dramatically changed to more of a practical CS course.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

    • Presently all incoming freshmen take Intro to IT (IIT)  where they earn the Microsoft Office Specialist certifications and an introduction to C#. 
    • Our sophomore computing class is a full year of C#.
    • Junior year we have APCS or Object Oriented Programming depending on the level of interest and rigor the students want to tackle. 
    • It is also in their junior year that students can apply to enter my course which becomes a two year commitment if they are accepted and where my students can earn some of the advanced Microsoft Certifications such as MCPD, MC
    • We also offer a Cyber Security course as another elective.
    • Having said all the above we are in the process of “adjusting” the scope and sequence of our CS offerings. We are going to become more relevant in our approach, offering CS courses in mobile app development for Windows 8 Phone and Windows 8 and Android. (We are not going to jump wholesale into Objective C for iOS, just too impractical and too wonky). We are also going to offer web development and game development courses. These new courses will be project-based learning courses using all the appropriate languages for the specific outcome of the projects.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

It is definitely Project based learning. I use IT as the context for CS.  Using IT allows the CS student to see the practical results of their projects and how everything they do affects the systems that are used to deploy the solution.  The projects the students work on all  must have a purpose for the campus community.  So in effect they are designing solutions for the teachers, students and staff of Lakewood  High School and their needs.

What is the biggest challenge in teaching CS at your school?

Keeping the coursework relevant to the students. Many of our students have started coding in some way before they get to us.  In the past we have been able to channel them into more structured CS classes all leading to the AP CS tests in their junior years. This just doesn’t work anymore.  We have to start offering classes that pique their immediate interests and excites them to want to go farther in IT or CS or both.  This explains the adjustment to our course offerings described in number three.

What is administration’s support (or lack of support) like at your school?

It is outstanding.  Computer Science has been a core component of the Center for Advanced Technologies graduation requirements since the program was established in 1991. (Imagine what we were teaching back then.) Our present director was one of the first faculty members of the CAT Program and understands the need, relevance and importance of a strong computer science curriculum and department.  He knows that as enrollment in the CAT Program declines for various external reasons it is more imperative than ever to have a strong CS curriculum.

How do you measure success for your program? For your students?

The recent national and international recognition for our program has been a fantastic validation of what we are doing. I always wondered if we were doing it right and now I know.  My students have always had a great deal of success once they left my program.  They get paid internships with local IT companies. My students are heavily recruited for their skills by the University of Central Florida. We have had one national and four regional winners of the NCWIT Award for Aspirations in Computing. I presently have graduates working for Microsoft, Apple, Google, Ebay, the NSA (sorry about that one) and other major tech companies.

What is the one thing you like to talk about regarding your program that I haven’t already asked?

I better not answer this question because I will just end up on a soap box and start tilting at windmills. I have a tendency to howl at the moon when I answer questions like this.

School name and web site: The Center for Advanced Technologies - www.cat.pcsb.org
(website fully designed and coded by the students in Lou’s program using SharePoint Portal Server 2010 as the base platform.)
Twitter: @lzulli
You can also find Lou on the Microsoft Partners in Learning website at http://tinyurl.com/m68gf85

For a full list of interviews in this series please see CS Educator Interviews: The Index

Thursday, July 25, 2013

CS Educator Interview: David Burkhart

Today’s interview is David Burkhart from rural Ohio. Dave is another teacher who has been very active in the CSTA and is a former board member. As you read though this interview you will see how helpful the CSTA has been for Dave. Like many CS teachers he is a bit on his own and CSTA resources are important for him.

Where do you teach? What sort of school is it?

I teach at Sheridan High School in Thornville, OH which is a rural school with about 500 high school students. Sheridan High School is a part of the Northern Local School District in Perry County serving the communities of Thornville, Glenville, and Somerset each with around 1,000 residents. Our communities are made up of several large farms and other agricultural related activities.

How did you get started teaching computer science?

I got started teaching computer science through my involvement with Computer Science Teachers Association. At the time, I was teaching middle school Science in another district that decided to add a technology teaching position. I applied for and was offered the position. In an attempt to create my curriculum, I came across the Computer Science Teachers Association’s website. After learning more about computer science, I added the curriculum to my middle school program. Three years later, the position at Sheridan High School became open and I have been developing a computer science program at the high school level.
Computer Science Teachers Association (CSTA) has been my main source of curriculum and help in creating my CS program. Our local chapter in Ohio has provided professional development and networking opportunities to assist me in my quest to offer my students a CS curriculum. The CSTA Standards have been integral in supporting me in defining my program. With the upcoming new state requirements, the CSTA Standards have given me something to use where our state technology standards have been found to be lacking.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

Word Processing – teaches the basics of Microsoft Word and word processing. As I add more computer science courses to my curriculum, this course has seen declining enrollment. I hope to combine this course with the Spreadsheets and Databases course to make more room in my schedule.
Spreadsheets and Databases – teaches the basics of Microsoft Excel and Access.
Multimedia – video production class. Microsoft Power Point, Google Presentation, Animoto, MovieMaker, Video Studio Pro 5, iMovie and any other program that a student might have access to on their own devices. This is the most popular course with students not interested in CS.
Web Page Design – teaches the basics of Web Page development using Microsoft Expression Web. I use the Microsoft Expression Web curriculum and I am looking at also using Code Avengers this year. Students learn HTML, design and how to use a web page editor.
Computer Science – teaches basic computer concepts using the Exploring Computer Science curriculum. Students use Scratch and Python to learn programming. We also explore the programming of robots using Lego Mindstorms.
Game Design – teaches the design and programming behind game development. We use Game Star Mechanic to learn the design concepts, Kodu to review basic programming concepts and Game Maker to extend the programming and design of games.
Java – this is my most advanced programming class with some students using Dr Java while others use NetBeans to complete programming assignments. This class is flexible depending on the students within the class. Some students remain at a very basic level while others move on to using one of my college textbooks to extend their learning.
Introduction to Microcomputers and Applications – this will be a new course for the 2013/14 school year and will be a dual credit course. Students will earn high school and college credit for this course. This course will focus on applications (MS Office) and some programming and networking concepts.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

I like to use project based learning. I try to introduce a concept, model the concept for students, and then give them a related assignment. Not all projects will then be exactly like I had it figured out. This helps me to see new ways to do things and allows me to talk to students about alternative ways to do this same idea. Having students show me something new is what makes teaching exciting for me.
I feel that I need to learn from my students just as I hope they are learning from me too. Some of my students will come into my class with some background in CS that they have learned on their own. Some come into my classroom showing me ideas and new applications that I don’t know about. I have had to convince my students that I don’t know everything and that I can learn from them too.
I also like to have my students think about what they are doing one step at a time rather than just have them find the right way of doing something. This can be frustrating to students as they are used to just getting the right answer, they haven’t been concerned with the process behind getting the answer in the past. This seems to be a product of our current “state testing” situation. Understanding how they have gotten to this answer, I think helps them understand algorithmic thinking.
I am also experimenting with a blended classroom this year with my new dual credit class. All students in this course will meet with me during a class period and then spend another class period at some other time of the day for a work/lab period.

What is the biggest challenge in teaching CS at your school?

I feel my biggest challenge is being able to keep up with creating new courses, continuing with the current load and being the only CS teacher in the district. I am constantly changing things in all my courses and plan to begin consolidating the MS Office courses into a single class in the future. This will allow me more time to focus on my CS courses and developing new ones.
Some of my freedom in creating new courses comes from the fact that I don’t often ask for money to create courses. I look for free applications, free curriculum or develop my own curriculum for my courses. This factor is what makes CSTA and networking so important to me. CSTA and my networking resources are so important to me in finding new course resources.

What is administration’s support (or lack of support) like at your school?

I have been allowed to develop new courses (all of the CS courses and multimedia) and have been supported to create the dual credit course. Budget constraints are tough, so I have been able to create new courses without any cost to the district. The administration provided me with a new computer lab three years ago which continues to work well. This year, I will have Wifi within my room. While neighboring districts have been cutting technology programs (many schools don’t have CS in my area), my district has seen to continue our CS/Technology program.

How do you measure success for your program? For your students?

I feel that my program is successful because I have students who want more courses than I am able to create. This coming year, I have a student who wants to take the APCS Exam on his own. He plans to create his own course through an independent study. I am working with him to find curriculum that he can use to study the concepts he needs to know to successfully take the APCS Exam. I have also seen a rise in the number of my students who are attending post high school programs for CS related careers.
For a full list of interviews in this series please see CS Educator Interviews: The Index

Wednesday, July 24, 2013

5 Programming Mistakes To Warn Students About

I like posts like 5 Programming Mistakes You Should Stop Making by Rahul Singh because they help me focus my thoughts. Through the summer I am working on planning out my teaching for the new school year and this post reminds me of many of the beginner mistakes that students tend towards. I recommend the whole put but I’m also going to give my take on these “5 mistakes” in the particular case of student developers.

Copy-pasting code without understanding it

Reusing code is a great thing but it is risky business if one doesn’t really understand what the code is doing and why. Side effects are only one risk but it gets a lot of people. More often than not though the code doesn’t do exactly what a student expects. It may be close. In other cases the inputs are not what a student has/needs/wants. Borrowing code without understanding it often leads to more work rather than less. And then when the teacher/grader asks a student to explain it it all starts to look a bit too much like cheating.

Starting from scratch every time

This one bites a lot of students on the APCS exam. Students are asked to write a method in one part of a question and then use it in the second or later part of the question. Too often students rewrite the method rather than just calling it. Errors are bound to creep in this way. During the school year I see the same thing where a bit of code from a previous project could easily be used but a student writes it all from scratch. This seldom ends well. Properly written, tested (and in school graded with suggestions for improvement) code can save a student a lot of time and heartache.

Searching Google/Bing without trying yourself

Students often think of search engines as a quick way to get an answer without thinking much. This causes them to completely miss the opportunity to learn from the lectures and demonstrations they have had in class. The process of taking what one already knows (or has heard in class) and building on that to discover knowledge though their own work is a real missed opportunity.

Ignoring warnings

I know experienced programmers who occasionally ignore warnings. Often times this is because they know from previous experience that in that particular case they can get away with it. Even then it is not really a good idea. For students it is never a good idea to ignore warnings. A warning means that something is not quite right. It may not signal a hard coding error but it is very likely to signal a logic error. Warnings are a clue and they should be looked at very carefully. It is easy to ignore a warning if things seem to be ok but down the road there is likely to be a case where serious trouble will result.

Making Quick fixes instead of Permanent ones

Oh boy have I seen this one. Especially from boys in a hurry. Throw in a semi colon somewhere/anywhere and see the code compile. That is the ultimate quick fix but it never lasts. Add in some hard coded numbers – just for now – and never get back to replace them with constants. Students do a lot of things to just get it working for now without giving thought to long term concepts like maintainability and enhancability.  It’s easy to write that off with “its just a school project and I’ll never touch it again.” The risk there is that this builds bad habits that are hard to break later on.

I’ll be talking about these things with my students this year. Weaving them into the conversation (again and again) if hope of building good habits and critical thinking. How about you?

Tuesday, July 23, 2013

CS Educator Interview: Mike Zamansky

Mike Zamansky (wearing the white shirt in the center of the picture) zamanskyhas created a very impressive computer science program at one of New York’s top entrance exam high schools - Stuyvesant High School. Coming from someone (me) who attended a rival NYC entrance exam high school that’s good praise if I do say so myself. Smile One might think that for a teacher in one of the best high schools in the country by many measures the CS program would have an easy time of it. Not quite. Mike’s story is worth the read.

Where do you teach? What sort of school is it?

I teach at Stuyvesant High School. A large (800 kids per grade) public magnet school in NYC. Close to 30,000 kids take an SAT style exam (math and verbal multiple choice, no essay). The top 800 kids are offered seats. The school has about one third of its population receiving free or reduced lunch. It's about 60% male and in recent years comprised mostly of students of Asian decent. It's a very well known school with people such as Morgan Missen tweeting last year that "Stuyvesant High School is the new Stanford."

How did you get started teaching computer science?

After college I worked for a bit on Wall Street but found that unsatisfying. After a little consulting, I tried this teaching gig. First at Seward Park High School and then being excessed to my Alma Mater, Stuyvesant. At the time, there was no real computer science (1992), just one or two sections of AP and a couple of random programming courses all taught by math teachers.
I started teaching math but soon wormed my way into the AP course and started to build the program from there.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

We have three years of classes. I created our tenth grade intro course in the late 90s. It was a one semester course with a focus on getting the kids to think and problem solve in a particular way. The tools we use are NetLogo and Scheme. Neither are going to be used in the "real world" but both are wonderful in teaching kids how to think.
I was eventually able to hack the school into making this class a requirement. We just added a second half which uses Python as the tool and has a number of wonderful units, some of which I've blogged about, but unfortunately, the principal is rolling that back so it's not a requirement.
Our juniors take our version of APCS which is a super-set of the old AB curriculum.
Seniors can take our System Programming and Graphics classes. In Systems they study inter-process communication, socket programming etc. and in graphics they develop their own rendering and animation systems from scratch in C, Java, or Python.
Seniors can also take our Software Development course where the kids do end to end development with real tools. Recently a couple of the teams presented their work at the New York Tech Meetup. Very exciting.
We get all 800 in a grade for our intro. About 400 request AP but I'm only allowed to accommodate 150 in most years and then I'm further restricted to between 60 and 120 seniors. One of the things I've tried to keep in mind when designing the courses is how to fill in gaps that colleges usually leave. Hence using revision control systems like Git, real world tools, end to end group development etc.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program you CS program?

What makes it my program? Well, it started as nothing and we've grown to 8 teachers. I've designed and developed all the courses and am generally considered the driving force.
Seriously, though, a lot is about culture and community. When my students nominated me to be graduation faculty speaker, I said I didn't know if I would win. One of the guys responded "but you lead the biggest cult in the school!!!"
We've managed to build our own subculture in the school where students and faculty work together in a relatively informal environment. I think this is what made it so easy to build a thriving alumni group, which I refer to as the Stuy CS family which has over 600 active members. Mostly doing tech and all willing to lend a hand to fellow family members.

What is the biggest challenge in teaching CS at your school?

StuyCS is very popular with the kids, the alums, many parents, and the greater NY Tech Community. The only place we don't get any support from is the Stuyvesant administration and NYC DOE. Unfortunately, that's a killer.
Despite building the program I have no real say in who teaches what, if the teacher even knows CS, what courses to offer, how many etc. I constantly have to try to convince the math chairman as to what the right thing to do is and of course when it's a math or CS thing, guess who wins?
It's the lack of support that actually has me thinking of leaving the school when I get my 25 years (2 years from now).

How do you measure success for your program? For your students?

Success for my student is simple: once out in the world, are they happy and productive doing what they're dong. For the program, I base success on two things.
First, feedback from my alums and the continued popularity of our classes.
Feedback from the alums tells us that we're giving them something of value. In kids in college always tell us how well and over prepared they are and those in the real world also sing our praises. I get positive feedback from kids that end up in tech and those that don't. While I only hear directly from the alums that like what we had to offer, those alums give me a window on the entire class of graduates so I'm pretty confident in the quality of what we do.
The programs popularity also tells me that we're doing something right.

What is the one thing you like to talk about regarding your program

that I haven’t already asked?

I'd say that in addition to the overall program, I'm very proud of the fact that we've brought in a number of raw teachers and successfully trained them. I'm also very proud of how we are received by the Tech community.

What is the one thing you like to talk about regarding your program that I haven’t already asked?

Since the city has shown no interest in supporting what we've built (see: http://www.nytimes.com/2013/03/31/nyregion/software-engineering-school-was-teachers-idea-but-its-been-done-citys-way.html?pagewanted=all&_r=0 ) we're working through our nonprofit CSTUY, to take the Stuy program out of the school and bring opportunities to more students. It's looking to be an interesting challenge.
More Mike Zamansky on the Internet
For a full list of interviews in this series please see CS Educator Interviews: The Index

Monday, July 22, 2013

Interesting Links 22 July 2013

The big thing for me last week was the annual CSTA conference. A great professional development experience as always. Almost 300 computer science educators were there. And they announced the dates and location for next year’s event. The dates for CSTA 2014 are July 14 & 15 2014 at http://pheasantrun.com/ near Chicago

I haven’t really blogged about the CSTA conference. I was pretty busy giving two talks and while I saw a bit of it I really didn't feel like I saw enough to blog. Fortunately a couple of other people have written some good summaries.

Computer Science Finally Part of Critical Federal Bill news on the CSTA blog  via @csteachersa

Check out: CS Educator Interviews: The Index  for the complete list of computer science teacher interviews including the ones I added last week:

Eugene Wallingford takes a look at AP Computer Science in Iowa High Schools  via @wallingf. It’s not a pretty picture.

Why scientists and engineers must learn programming – good discussion on the blog at CACM.

Nice interview with a good friend of mine: Jane Prey Targets The Gender Gap In Computing And Engineering   via @ElectronicDesgn

Becoming an Image Ninja with help from Dewald Esterhuizen via Coding 4 Fun - stuff I can use here!

Small Basic Guru - How to Make a Turtle Maze Game

Here is an interesting video of @natbro, co-founder of @Xbox, talking about the Inside of an Xbox http://www.youtube.com/watch?v=xQ4E1TjtVjc

Friday, July 19, 2013

CS Educator Interview: Robert Medrano

Today we return to Texas to talk to Robert MedroMedrano who teaches about as far south as you can get in the US. I met Robert at a TCEA conference a few years ago where I took an instant like to him.

Where do you teach? What sort of school is it?

I teach at Weslaco High School located in deeeeep south Texas referred to as the Rio Grande valley.  The area in general is considered to have a large population of low social economic families

How did you get started teaching computer science?

I was unable to get a job right away upon graduation from college and asked my high school principal if he could help me get into the districts I.t. department.  When I found out how much they paid vs. teacher pay I opted to go into teaching

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

I teach a pre AP course, a watered down version of my AP class. I cover basic programming concepts at a slower pace using Scratch, Karel and graphics.
I also have an AP section for the AP CS exam
Years 3 and 4 students can do independent study where we cover data structures, other programming languages and topics that students are interested in.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

I cover a concept and create an assignment that emphasis that concept based on something popular to students that year.  For example when iPods were first coming out I had an assignment where students created their own graphical MP3 player.   I have my own moodle page where I upload assignments, created my own jing videos and have  livescribe videos as well.  I have pulled resources from textbooks and other teachers to created my own worksheets.

What is the biggest challenge in teaching CS at your school?

Convincing students to take computer science regardless of what they intend to study.

What is administration’s support (or lack of support) like at your school?

They need to do a better job getting students who are capable of taking the class to sign up.  Many of our counselors keep these students from my course in fear it may affect their GPA. I am always disappointed when I see students and their majors and realize they are not prepared because of the lack of needed courses they should have taken in high school.  Admin and Counselors should do more than just give schedules but speak to students about what they intend to major in and guide them to the course work they should be taking.

How do you measure success for your program? For your students?

At the end of the year if they are able to complete the final project with little to no assistance.  AP course is based on how many students pass the exam. 

What is the one thing you like to talk about regarding your program that I haven’t already asked?

Unfortunately, we are located so far from big cities such as San Antonio, Houston, Austin that my students really do not get a chance to visit companies that do cool computer programming stuff.  Also, many camps are offered in these larger cities that my students can not attend due to the distance. 

School name and web site: Weslaco High School http://www.whs.wisd.us/

For a full list of interviews in this series please see CS Educator Interviews: The Index

Thursday, July 18, 2013

Thoughts On Mobile Phone Development

For the second year the annual CSTA Conference has had a mobile phone development “throwdown.” In this session each participant has 15 minutes to create a mobile phone app. We had someone developing in Objective C for iOS (iPhone), App Inventor for Android, and Visual Studio for Windows Phone. I recorded a version of my Windows Phone demo at Windows Phone Random Dialer Demo. I believe the whole session was taped and I’ll update this post with a link to that when it is available. But this post is about what I have learned and some opinions I have developed from watching the “other guys.”

Update: A video of the live session from the CSTA conference including the iOS and App Inventor for Android development is available at http://youtu.be/AD7PRDmYfaQ


Ralph Morelli(Android), Adam Howitt (iOS), Alfred Thompson (Windows)Picture by Peter Beens
The first thing I have learned is that I have no real interest in using iOS development in my classroom. If I were in the app development business I would probably go though the pain to learn it but since I’m not I will not. Objective C seems a little on the weird side to me. And I am probably spoiled by Visual Studio but attaching code to events and objects seems a lot easier in Visual Studio (and App Inventor for that matter) than in iOS development. I want something easier and smoother for teaching.
App Inventor is cool. No two ways about it. It’s fast, easy, graphical and there is a lot of good access to phone features. It’s not “real code” though to me. I have mixed feelings about that. I would love to see how the professionals develop for Android. In the demo at CSTA the presenter did have to go into Java tools to get access so random contacts in the contact list because App Inventor didn’t have a native way to do it. That was done hurriedly with a bit of “I prepared this earlier” so it wasn’t clear to me how it all fit together. Some of that was of course because of the severe time constraint.
I can see using App Inventor in some ways in a first course. In a more advanced course I was more traditional code.
Visual Studio is, in my admittedly somewhat biased view, just right in the middle between the drag and drop of App Inventor and the complicated Objective C of iOS development. It also has the advantage that the same languages (C# as I used in  this demo or Visual Basic) that are used in more traditional programming as also used for phone development. I like that.
An addition to the mix for me is TouchDevelop. It is somewhat similar to App Inventor in that syntax is largely taken out of the mix. It doesn’t have quite the same drag and drop user interface ability that either App Inventor, Visual Studio or even the iOS tools have though. On the other hand it allows the user to export to Windows Phone, Windows 8 or web apps. That’s cool!
It is also very easy to get access to phone specific functions. Take a look at this code that displays information about all the contacts on my phone.
image
And that is with some error handling to watch out for contacts without phone or email addresses. As TouchDevelop continues to improve that may be the way I do things if we do another ThrowDown in the future.
Something else I learned is that different platforms allow (or not) different things to coders. For example it is easy to get information (meta data) about phone messages or texts in Android. Not so easy at all in Windows Phone. On the other hand in Windows Phone development one is able to easily access random contacts while on Android (especially with App Inventor) some hoops have to be jumped though. There was also a lot of “set up” required in iOS development that neither App Inventor nor Visual Studio or TouchDevelop had to go though. So you have to do some homework to make sure your app is even possible on a platform.

An Hour of Code–Something for CS Ed Week 2013

CS Ed Week 2013At the CSTA Conference earlier this week Hadi Partovi from Code.Org announced some plans for this year’s Computer Science Education Week. Specifically providing an hour of code for every student in the US.

What is an Hour of Code?

It's a 1 hour intro to computer science and programming, to give beginners a taste and to demystify "code". For existing CS teachers, it can be anything you want - get creative. For everybody else, we'll provide self-guided tutorials anybody can do, with just a web-browser or a smartphone, no experience needed. Note:  HTML does not count as an Hour of Code.

This seems like a great idea to me. This idea is something that a lot of people can take advantage of. Special assemblies, guest speakers, and many other things are still great ideas and I hope many schools will still do them. But this suggestion could bring a lot of attention to CS education if enough local schools take part.

There are about 18 weeks until this year’s CS Ed Week but it’s not too soon to start planning your events. And to think about how you might get involved in an Hour of Code in your school.

Wednesday, July 17, 2013

CS Educator Interview: Tom Indelicato

I didn’t go far from home for this one. tom Tom Indelicato and I teach together at Bishop Guertin High School. Some years ago I hired him to be the fill a need for a computer science teacher. One of the best moves I’ve made. This past January he hired me to come back to BG as a teacher after I left Microsoft. Besides teaching computer science, Tom is also the faculty mentor for the school’s FIRST Robotics Team 811. He’s seen at a FIRST event in this picture.

Where do you teach? What sort of school is it?

Private Catholic middle class high school. (I’d say “urban”, but that’s giving Nashua a better rep than it deserves.) [ED: BG is a college prep school and on an average year 97% of graduates go on to attend a four year college/university. Yeah, I’m kind of proud to teach there. And my son is a graduate as are all three of Tom’s children.]

How did you get started teaching computer science?

After 17 years of programming in industry, I decided to answer what I considered a call from above and make change. Haven’t looked back.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

“Explorations in Computer Science”, a freshman class (which is a new replacement of a Microsoft Office class) that introduces CS concepts with a little programming; “Honors Programming”, the follow-on to ECS and preparation for APCS; “APCS” (self-explanatory); “MultiMedia”, a course focusing on the artistic aspects of Mac computers; and “Graphic Design”, a Mac-based Photoshop class. (“Yearbook” is an Art class.)

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

My goal is to “infect” as many students as possible with the same love that I have for programming. I use project-based lessons, and my lessons a rife with stories from my professional career.

What is the biggest challenge in teaching CS at your school?

As only one semester is required for graduation, my biggest challenge is getting kids to consider a second CS class. This was the inspiration for the new ECS class.

What is administration’s support (or lack of support) like at your school?

Generally, I’d say the administration is supportive of the CS program; there’s almost never been a time when resources were denied, and they’re open to suggestions for improving the program.

How do you measure success for your program? For your students?

I see success in the long list of students who’ve gone on to study CS or engineering, but my hope with ECS is to see this list grow faster.
For a full list of interviews in this series please see CS Educator Interviews: The Index

Tuesday, July 16, 2013

Windows Phone Random Dialer Demo

This is posted on day two of the annual CSTA Conference. This afternoon I am taking part in a mobile developer throw down. Three of us are writing the same program on different platforms: iOS, Android and Windows Phone. Guess which one I am doing? Yep, Windows Phone. The challenge is simple. Write an app that picks a  random contact from your phone’s list of contacts and then gives you the option to dial it.
Obviously I have been practicing. In fact I recorded some of my practices. Since time is short for the throw down and I will have to talk fast I decided I should make both the code and the demo available via this blog. The first, less than 3 minutes video, is of using Visual Studio 2012 to create the very simple user interface.
Creating a simple UI for a phone dialer app
No code in that part. Just drag and draw a button and two textblocks. Do a little setting of parameters but not much more. Obviously in a “real” app there would be a lot more. Next though is writing the code behind the app. Here is that video (about 10 minutes 30 seconds).
Writing the code
First we make sure we include some useful libraries. Specifically the ones for accessing user data and phone tasks.
using Microsoft.Phone.UserData;
using Microsoft.Phone.Tasks;


Next we create some code to respond to a click on the button. Not the ideal Windows phone way to do it but hey this is just a demo.


private void btnFind_Click(object sender, RoutedEventArgs e)
{
    Contacts cons = new Contacts();

   cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);

  cons.SearchAsync(String.Empty, FilterKind.None, "Contacts test #1");
}



The Contacts type is a collection of contacts. We’re setting up Contacts_SearchCompleted to be an event handler to execute when our asynchronous search completes. Obviously Contacts.SearchAsync starts our search. We want the search to run asynchronously so as to prevent the phone from getting stuck. We want other apps in the background to be able to do their thing. So what does the event handler do?


 void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
        {
            Contact c;
            int count = e.Results.Count();
            int tryMe;
            Random r = new Random();

            do
            {
                tryMe = r.Next(0, count);
                c = e.Results.ElementAt(tryMe);
            } while (c.PhoneNumbers.Count() < 1);

            txtName.Text = c.DisplayName;
            txtPhone.Text = c.PhoneNumbers.ElementAt(0).ToString();

            PhoneCallTask tsk = new PhoneCallTask();
            tsk.PhoneNumber = txtPhone.Text;
            tsk.Show();


        }


We’ve got some variables there. Since I have some contacts on my phone that don’t have phone numbers I wanted to make sure I only tried to call people with phone numbers. So after randomly selecting a contact I check to make sure the count of phone numbers is at least one. As long as I eventually find a phone number the code displays the name and number in textblocks. Lastly the code creates a phone call task, assigns the task a number and executes the call. The call task does ask if you want to call or cancel the call.

So there you have it. Not beautiful but just enough code to show you how to create a very simple app using the available phone libraries.

A video of the live session including the iOS and App Inventor for Android development is available at http://youtu.be/AD7PRDmYfaQ

Monday, July 15, 2013

Interesting Links 15 July 2013

Today is the first day of the CSTA Annual conference. Ten workshops today and later a tour of Microsoft’s New England Research and Development Center (Yeah I’ve been to NERD before but still …) I’ll be helping out with some demos at NERD – showing off TouchDevelop. I’ll have more on the CSTA conference later but for now it is Monday morning share some cool links time.
No US College In Top 10 For ACM International Programming Contest 2013 First time that has happened but no US team has won since 1997. What’s going on?
Have you been following my series of interviews with computer science teachers? Check out CS Educator Interviews: The Index  Now with seven interviews and see if you have missed any. Oh and yes more are coming.
Gail Carmichael@gailcarmichael on how Improving Computer Science and Programming Education for Women Improves It for Everyone!
Think that Lego is just for kids? Think again - Naval Academy to use Lego kits for robotics education
What's the Best Language for a Beginning Programmer? Popular Mechanics takes on this religious topic. Not sure I agree with all the conclusions but makes and interesting read.
Debugging TouchDevelop scripts : great new functionality in the latest online beta version of TouchDevelop.
Interactive chart on how programming languages have influenced each other Not perfict (I’m pretty sure that Visual Basic influenced C#  and that isn’t shown.) but very interesting. A lot of influence goes two ways with langauges influincing other language that influenced them. Very little is 100% origional.
8 iPad apps to Teach Coding and Programming I’m not sure how much of these apps is really teaching programming and how much problem solving. Not that problem solving is not a great thing but there is more to programming than that.

Sunday, July 14, 2013

What Is It With US Students and Programming Contests?

I saw this recently on SlashDot - No US College In Top 10 For ACM International Programming Contest 2013 Now the ACM International Programming Contest is sort of a big deal. In the first fifteen or so years US teams won first place every year. Since 1997 though a US team has not taken first place. In Microsoft’s IC LogoImagine Cup competitions there is no US winner in any of the 15 or so categories this year. In fact US results in programming and software development competitions have been pretty poor (one might say embarrassing) for a while. One has to ask why?

I don’t think it is because they US doesn’t have students who can compete. I think we do. I think many of the best and brightest choose not to compete. Why? Well I don’t think they see enough value in the competitions to take time from other things that they value more. If you are a top student in a top US university you probably already think your value is obvious. And realistically it is. Top companies (Google, Facebook, Microsoft, etc.) are recruiting on your campus. You are already doing enough to get their attention.  On the other hand if you are in a university in a small eastern European or Asian country that no one has heard of outside the area an an international contest victory may be just the edge you need to get noticed.

You may also already be working on your startup. You’re in the US, probably in a hub of startups, and money and resources are there if you can convince people they should invest. You don’t necessarily need a contest victory to prove that. If you are in a country, even and advanced country, where starting a business is difficult and raising start up capital is rare  for students you may again want the attention (and prize money) from a competition to help you get your start.

I think it is a shame though that more US students don’t compete. Call it nationalistic pride if you will but I’d really like to see more US students get this sort of recognition. It just makes us look bad when we don’t have winners in these events. Are they important in the great scheme of things? Maybe not. On the other hand perception is a huge influence on reality. If American students start to think that they can’t compete they may not ever try. And by try I don’t just mean trying programming competitions.

What do you think? Is this a problem? Are there no top 10 US teams in the ACM event because our best are not involved or is it because our best are not good enough by some definition of good enough? If it is a problem how do we fix it?

Friday, July 12, 2013

CS Educator Interview: Laura Blankenship

Laura Blankenship teaches at the all-girls Baldwin School.and is also one of my favorite CS education bloggers. In this interview she talks about some of the issues her students bring up about the role of women in computer science. I hope you enjoy reading her story as much as I did.

Where do you teach? What sort of school is it?

I teach at The Baldwin School, an all-girls pre-K - 12 independent school in the suburbs of Philadelphia.

How did you get started teaching computer science?

I have been a teacher since grad school, but I taught English for years.  I had been using tech in my classes since the beginning, making my students learn how to navigate newsgroups and email lists, build web sites and Flash animations, blog and create multimedia essays.  So, I've been on the edge of CS for years.  I worked in campus IT in the Ed Tech field where I did some web development and system administration in addition to the usual ed tech stuff.  I taught a summer program in multimedia development, mostly using Flash, HTML, CSS, and PHP. 
I made the leap to teaching straight-up Computer Science in 2010 when I moved across the street to Baldwin.  I had already been learning some programming besides PHP, so I learned Python and that's what I teach in--mostly--now.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

We CS from 6-12th grade, though students dabble in 1-5.  6-8 grade I teach a "technology" course that's required.  It meets once or twice a week (depending on grade and week) for 10 weeks.  I start with Scratch, then Jigsaw (a Python-based visual language), then straight Python.  We do games, graphics, art, and other fun activities.
9-12, I offer and Intro Class, then CS II, and now two Advanced classes: Physical Computing and Mobile Computing.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

I'm a project-based person.  I also use flipped learning, especially in the 6-8 classes, where I only have 10 weeks.  Basically, I teach a few fundamentals in class, have students practice them in a lab (similar to what you would do in a science class), and then they do a project (with lots of class time to complete) that covers the concepts in more depth.  We work with robots, graphics, games, music, etc. I try to let the students follow what they're interested in.

What is the biggest challenge in teaching CS at your school?

The schedule.  Most students have a packed schedule, taking all their required courses.  Plus there's my schedule.  Teaching in both the middle and high school means there are certain times I can't teach HS courses.  So I have a hard time finding a time slot that meets student needs.

What is administration’s support (or lack of support) like at your school?

I have great support.  My administrators have given me complete control over the curriculum and provide great financial support as well.  They're also really flexible about scheduling courses both for me and my students, so I've been able to accommodate students when necessary.  Next year, for example, I'm offering CS II as a semester course instead of a year because there were 4 students who wanted to take it plus the Physical Computing course and couldn't fit both in if CS II were a year.  It'd be nice to not have to juggle like this, but I'm glad my administration is willing to be flexible.

How do you measure success for your program? For your students?

I would measure success by having all my courses have at least 10 students.  I'm going to have about 9 in my advanced class and around the same in intro.
For my students, if they enjoy the class and learn something, I'm happy.  However, I've had students recognized by NCWIT as well as winning a grant from Google. I also have a senior headed to Purdue to study Computer Science.  Those are all good signs of success as well.  I don't think I've had a huge amount to do with all that. Basically, I'm a cheerleader for them and give them an environment in which to learn and thrive.  Next year, I'll have 5 seniors.  I can't wait to see what they end up doing!

What is the one thing you like to talk about regarding your program that I haven’t already asked?

I love that I only have girls in my classes!  I think they feel safe being around just girls and learning something that they believe is sort of hard and "for guys."  We actually talk a lot about gender issues in my class.  They usually bring it up.  They have questions about why there aren't more women, why the guys they know that like programming are so intense, or why they automatically think girls can't program.  We have lots of interesting conversations. My students are all very different, but they share CS in common and that really bonds them.  I think that's cool.

More about Laura on the Internet

For a full list of interviews in this series please see CS Educator Interviews: The Index

Wednesday, July 10, 2013

CS Educator Interview: Doug Bergman

Today’s interview is with Doug Bergman from Charleston SC. I first met Doug through the Microsoft Partners in Learning program. Listening to him has been influential in how I have changed some of my views about teaching computer science in the last few years. Doug has a lot to say here and I hope you’ll read it all.

Where do you teach? What sort of school is it?

I teach Computer Science in a private school (K-12) in sunny Charleston, SC. Total school population is just under 1000 students, with each grade level having approximately 90 students or so.  We have iPads for all students 3rd-7th grades, plus a variety of carts of Chromebooks, laptops, netbooks, iPads, and IPods.   Our school is a college-prep school that strives to help our students find their ways to colleges all across the United States.
Starting in the 7th grade, we begin introducing Computer Science to our students through programs such as Scratch, Lego Mindstorm, Sketchup, Small Basic, and Python.
Computer Science is required in the 9th grade for all students, then students can sign up voluntarily for Computer 2,3, and 4 in addition to their other classes. We are excited that our program is attracting 30+ students from each grade level. Since dropping the AP Cmp Sci from our curriculum and replacing it with a series of project based classes and curriculum, we’ve quadrupled the size of our program, and also have increased the percent of females in our program to about 30%

How did you get started teaching computer science?

I majored in Computer Information Systems at Clemson (go Tigers) and jumped into corporate America as a Systems Analyst.  I loved working, but I found myself pulled to more the people side of business, which eventually led to me heading over to Japan for 3 years to teach ESL to students from the age of 3 all the way up to 93. That introduced the world of teaching to me, so when I returned, the natural step was to get into teaching ….so I brought together my two passions and the next thing I knew I found myself teaching Computer Science at a small private school in Columbia SC.
I tried to work in public education, but S.C. did not have any type of certification for Computer Science (even though my PE teacher taught it to us when I was in school. Apparently she was more qualified to teach than I was according to their policy). I tried and tried, but could not make any headway. So, I called a private school with a position open, and within 48 hours I interviewed and had the job offer.  I was there for about 5 years, but felt the lure of industry and $$$, so I jumped back into business as a network-system admin down on Kiawah Island, SC and learned more in that year and half than I could ever imagine.  I was dealing with everything from running cable to email servers to touch screen POS restaurant systems to kitchen printers to website to training to video cards drivers to golf shop cash registers to database administration …..and then about 100 other jobs. Very fun.  What I loved was that each day I went in, I had no idea what I would be doing or who I would interact with; it might be the CEO or I might be a part time secretary.
But, the classroom has the uncanny ability to call back its teachers when it wants to…….and I found myself back in school at my current school, Porter-Gaud School, where I’ve been for the last 12 years…and loving every minute of it.
While I am a graduate of the public school system, as a teacher I had found a good spot in private education.

Describe the computer science curriculum at your school. What courses do you have and what are the focuses of each?

Computer Science as a core subject is fundamental to the success of our program.  With the demand for Computer Scientists increasing tremendously over the next decades, We designed an innovative 4-year Computer Science program whose goal is to attract a new kind of student: students who can design, be creative and create, solve problems, work together but who also can take their ideas, implement them, present them, and turn them into real products to solve problems or sell in the marketplace. 
Through a project-based curriculum which incorporates a complete immersion multi-media, hands-on,  multi-tasking approach to class, we incorporate live speakers, field trips, movies, books, games, puzzles, discussions, video clips, short stories, presentations, and of course hard-core programming.  One of the main goals for the program is to engage students and develop a strong interest and passion for Computer Science. What we’ve noticed is that many people do not really know what Computer Science is, so this experience is a learning experience for both our parents and our students.
In the first year, we “hook” students through a variety of engaging experiences designed focusing not on solely mastery of skills, but exploration of skills and introduction of Computer Science. We do this through contexts such as robotics through programming  sensors and motors. In the spirit of “serious games”, students also choose a worldly issue and design an actual video game around that idea; we are always amazed at the excitement this section generates as well as the quality of games and  the level of  programming required(and acquired) to code them.
In contrast to the programming side of Computer Science, we dive deep into 3D modeling in order to give students professional grade tools which allow them to take their imagination and recreate it on the screen in 3D.   Additionally, we go in-depth into the insides of the computer.  Students take apart and build computers, troubleshoot, buy replacement parts, and learn all the speeds, sizes, and other numbers associated with the hardware of the computer. Students even send a message to the Mars rover in binary.
Year 2 we explore mobile-based Computer Science through browser and mobile apps.  Students consider something that they are very passionate about in their own life and then dream up a school that teaches about that. Students design and maintain a fully functional interactive site for that school, including the backend database and savvy navigation, by using HTML, PHP, and MySQL. In the mobile app section, students learn to control and access accelerometer, touch screen, GPS, and voice recognition as they develop apps for the Android phone system.
Year 3 focuses on user interfaces, software development through XNA for Xbox game design, and entrepreneurism. Students study advanced computing concepts as they learn to program games and simulations for the Xbox game console. Students can choose to use a handheld controller  OR a dance pad for foot control interface, OR a Kinect camera for full body interface. Then they’ll spend the entire semester working on a single project.
Throughout the semester, they are also learn business concepts such as demographics of the target audience, missions statements, 360 marketing & promotion, copyright, and economics of pricing.   Students have a chance to demo and present their project in front of a group of venture capitalists, who will decide who to invest their money in.
The final year is a college level Object Oriented Programming class that is a dual credit class offered through the College of Charleston. It is split into two halves: One is studying OOP through JAVA and Alice 3.0. We use animation in Alice to explore (visually) concepts such as polymorphism, inheritance, and lists. Then we dive into actual code through JAVA to implement a series of robotics exercises and business simulations, such as the Verizon Phone network. The other half of class is an exploration of xCode for the iPad. It uses Objective C and is a combination of visual building and coding to produce interactive apps for iPhone and the iPad.

What is your overall teaching philosophy? Project based learning? Flipped classroom? In short, what makes your CS program “your CS program?”

I was honored to have been interviewed for Anthony Salcito’s Daily Edventures about this very topic: http://dailyedventures.com/index.php/2013/02/15/doug/
I am a believer in the discovery style of learning. Teacher as a guide, more than sage on the stage. That is hard for some people to comprehend because it involves the teacher giving up control of the learning. We’d all been through a system where we were told what to know, how to know it, when to know it, and for how long we would need to know it, and in what ways we would need to know it. And while it is possible to design a class like that, the natural way to learn Computer Science just seems to lend itself to hands-on projects.
If you look at the kinds of class and homework assignments I give, you’ll quickly see that I see my job more so as a teacher of motivation as compared to a teacher of skills. In the long run, I think my subject area is better served if my students develop a love for the area by learning about it through many lenses.  For example, in the robotics section, the goal is not simply to have students program sensors or motors. Sure they’ll get that , but that Is not what I want them to remember.  That’s why we talk about the 3 Laws of Robotics and discuss the need for a 4th.
And what exactly is a robot anyway? We watch clips from movies where those laws were applied. We discuss them as they relate to the characters in the Asimov story “Runaround”.  Students spend one evening in a chat room discussing robotics with fellow classmates. Students research and find leading edge uses of real robots in the world around them.  We discuss the ramifications of humans being part robotics and vice versa (Bi-centennial Man). So we study “robots” as  a context, and we learn to program them while exploring them.
Even our coding projects (we do about 10) are real world based. One has the students simulate a mode of deep sky searching in telescopes used by Meade and Celestron called Spiral Searching. Students program their robot to simulate that action and when it locates the target, it stops and makes a series of beep to notify the humans. Another has the students program their robot to find its way across the Mars surface, even though they do not know what that surface will be like. The robot has to be able to find its way around any large objects it encounters. 
Yet another has a robot that spends an entire night “casing” an area of the forest with a night vision camera attached to it. It records how many animal crossed it’s field of view(infrared sensors), and reports it to the user when the sun comes up. (i.e. when it senses light) What I love about the robotics section is that students are out of their seats most of the time in order to test their code on an actual robot. I love the fail-to-succeed cycle: Code. Try it out . Figure out what did and did not work. Modify code. Repeat. And they will do that for weeks.  By the end they will have learned to interact with over 7 sensors , 3 motors, speakers, and lights---but more than that they will have considered robots as part of society, which is crucial because over the next 20 years, these kids will be the leaders.

What is the biggest challenge in teaching CS at your school?  

Not so much at my school, but more so in the educational system of the United States. For some reason, even though we are right in the center of a digital age where technology is central to almost every industry in our world, Computer Science is still seen as an elective, if even recognized at all. 
Additionally, we’ve(Computer Science) got a huge identity crisis and image problem.  While we are seeing many college and universities starting to offer more Computer Science programs, some of those programs are still taught in the ways that we did 25 years ago. I recently looked at the curriculum for some colleges our students were going to and it was not too terribly different than it was when I was in school.  That might be ok in some area like Math where the material is more unchanging, but in our technology world, it is changing year to year in huge leaps and bounds. We need the education of our subject area to reflect that dynamic spirit—with technology that is so dynamic and engaging, it’s a shame that our classroom are the exact opposite of that. 
Our students are used to interactive experiences with technology, but some programs are still teacher centered, where learning happens passively. That is not going work in today’s world if the United States wants to continue to be a leader in the world economy. One a good note, we are seeing  some colleges recognize Computer Science as legitimate for consideration(or possibly even a requirement) in admissions.  Currently, most high schools are still using terribly outdated models of graduation requirements, and Computer Science has just not found a home in those schools, which means many of the best and brightest students are not getting a taste of it until they get to college.
At our school, we start to explore Computer Science as early as 4th and 5th grade, hoping that by the time they get to high school, they will already be seeing the value of it in their education plan.
We also have to help the world understand some basic vocabulary. Many politicians, districts, teachers, parents, students, and even technology teachers, still confuse Computer Science with keyboarding and applications. A class that teaches students how to use Microsoft Word is NOT a Computer Science course. A class which has keyboarding listed as a skill is not Computer Science. Those are all excellent tools , but should be done naturally throughout the entire education experience.
It makes sense that a math department uses spreadsheets as part of their tool sets.  When students enter the world, students are much more likely to apply math through a spreadsheet than they are a proprietary calculator or software package. Can an English or History department teach good presentation skills using a variety of tools such a PowerPoint or Prezzi? Those are incredible instruments of communication and presentation in the art of persuasion. Art programs must embrace video and image editing and manipulation. Foreign language programs can see the value of learning to use movie and audio recording with their students to practice language. You see how I am thinking.  Most of what many “accidentally” call Computer Science are simply tools that can be used to enable other subject areas to do what they do better.
Despite what you may know or believe, there is not really even a good definition of Computer Science. Sure, we’ve got some that were written 25 years ago when computing devices were the size of gymnasiums. I’d like to challenge all of us to re-create a new definition of Computer Science that makes sense in 2013.
Actually, I’d like to challenge us to change the name “Computer Science” It’s an outdated and misunderstood—as well as full of baggage from years of change and stereotype.
Here is a first rough draft stab, just to get the conversation started: Computer Science is the art and science of using technology, both hardware and software, as part of a solution to a real world problem. It is a tool that allows a person to take abstract ideas from their imagination and turn them into something real on a digital device. It forces you to think algorithmically, which is a fancy word for taking a larger problem and breaking it down into bite sizes chunks which can be handled step by step. And due to the way in which we design programs and work with hardware devices, the ability to fail and learn from those failures are what help us work our way through our project until we get to a working solution which suites our needs.

What is administration’s support (or lack of support) like at your school?

The administration at my school has always been extremely supportive of the efforts in our program. While at times it has been a real struggle to fit our entre curriculum into an already very rigid and defined hard-core college prep curriculum, we have made it work. I remember the advice of our head of school (Chris Proctor) who was instrumental in helping us get our program off the ground. He said, “You are going to get “no” everywhere you turn, keep moving forward anyway!” And there were times where it took that. So many people believed in what we were trying to do (Thanks Beverly ,Sarah, Karen, Phil, Dubose); it truly took a village!
And for me as a  teacher, it was an incredible amount of work to experiment with what fits and what works. Because we were designing a program whose specialty was leading edge (even bleeding edge), there was not a bunch of teaching resources available to design a curriculum. So, quickly I developed an international “learning network” of educators and leaders who saw education like I did….and with their help, I’ve been able to put together a dynamic, yet very organic, curriculum that seems to have found its place at our school.

How do you measure success for your program? For your students?

Unfortunately, no teacher ever really knows the true value of what they do because we don’t really see the effect for years after. And like any teacher striving for excellence, I am continuously tweaking, modifying, removing, and adding parts to my classes. I truly value student feedback and will gladly replace something I thought up with something they thought up…if it makes sense in the bigger picture.
So, the experience that one group of students may be different than another group depending on when they go through class; I welcome and embrace those differences. So, one way I gauge how we are doing is by reading and listening to the type of feedback I get. When I get students who put a great deal of thought and energy into their observation and suggestions and reflections…I can see that they care about the program that they are in…and they want to help me make it better.
One of the more gutsy things I do is submit my teaching style and curriculum, or parts of it, for consideration to present at national and international conferences. I love the challenge of that because while I may think we are doing some great stuff…you never really know ……..when I put it out there to be reviewed by educational leaders from all over the world, it can be very humbling, but it makes you learn how to sell it and actually prove that you are doing what you say you are; that the successes that you say you are seeing are in fact real and of value.
And I have certainly received my fair share of “thank you, but no thank you…”, I have also been honored to have received some awards and asked to present at conference across the US and also a couple internationally.  But what I value about those experiences is not what you might expect…I am rather selfish about why I do it: I simply want to meet other educators who see education and teaching like I do.  I want to connect with people who the same style of energy and passion that I do.

What is the one thing you like to talk about regarding your program that I haven’t already asked?

We all get those students that we don’t have to work for. You know the ones I am talking about…the ones who come early and stay late because they absolutely love the subject area that you are in and they respond to your style of classroom experience.   You could be absent for 2 weeks, and they would excel without you. While we love those because they are the ones who will help you push the envelope, those are the easy ones. It’s that next group down that we’ve got to work for. The ones who may not yet know your passion or even why you are so passionate; the ones who have yet seen the value of what you teach and why it is important to their own life; the ones who are sitting back saying, “Ok Mr. Bergman, you got me here for a semester….let’s see what you do with that time….I am a good student, but I have not  yet drank the Kool-Aid, so you are gonna have to work your butt off  to sell me on your program.
That is the type of student, good kids who are looking to find their own motivation and passion. And if you let them take an active part in their own learning and really dive into your content and do things with it….create something of their own using the skills and concepts you‘ve helped them acquire….then they will be your best cheerleaders. I may get pummeled by the Computer Science teachers out there by saying this, but our curriculum, and my own focus, is not on recruiting students who are going to major in Computer Science…because I do not believe that is what the world needs. WHAT? DID HE JUST SAY THAT? ALFRED, WHY IS HE PART OF YOUR BLOG?
Let me explain:  We have no idea what technology will be dominant 10 years, even 5 years down the road. So, most likely by the time students graduate college, things they learned in high school, and even at their own college, may be outdated or irrelevant.  How can we know what problems will be in that world. So, what is the best way to prepare students for that world? Encourage them to follow their dreams. If he want to be a veterinarian, go for it. If she wants to be a biologist, awesome. If she wants to be a doctor, fantastic. If he wants to be a politician or journalist or office manager or accountant or real estate agent…all wonderful. We need students who have the courage to follow what they love. 
My goal is that I want those students to be great at what they do, but also have a Computer Science edge to them that distinguishes them from their peers. I want Carter, who might be a cancer research scientist , to be able to write her own app or analytic software for her data---because she can’t go to Wal-Mart to buy Cancer Data Research Assistant 2.0. I want McLean, who is going to be a nonprofit leader saving the world in one way or another, to be able to research,  purchase, and then setup the technology to outfit her entire office network…thus saving her organization thousands of dollars. I want James, who might be a field engineer studying wind and rain patterns in forests, to be able to reprogram his tablet so that it incorporates the new sensors they just received. 
So, you see….what the world needs is people who think like Computer Scientists, but do so in the fields they have passion for. And when technology seems to be a tool that can be used to address and perhaps solve their problems, they will be the ones who not only lead, but commandingly understand, that charge.
More about Doug on the Internet

For a full list of interviews in this series please see CS Educator Interviews: The Index