Tuesday, December 05, 2017

Some Thoughts on Drag and Drop Block Programming

I’ve toyed with drag and drop or block based programming for a bunch of years now. I even keep a list of block programming platforms. But this year I am really using them a lot with students. It’s been a real learning experience for me and my students. I’m using AppInventor with my mobile application programming students and code.org’s AppLab with my APCS Principles students. Now the AP class is using AppLab with JavaScript now but we started with the blocks and the interface is still very much drag and drop related.

I’m thinking about this in two ways. One as for my own projects and one as a teaching tool. I’m old school – started programming with punch cards and FORTRAN – so I confess that I am still most comfortable doing my own programming in traditional languages (mostly in C# these days with some Visual basic depending on my mood0. For for students things are different.

First the good. In many ways my mobile apps students are doing more advanced things than my Honors Programming students (C# there). For example connecting to Amazon’s API is a snap in AppInventor. Setting up things like nested code is also very easy. Syntax problems are pretty much not an issue. So we are covering a lot of concepts. That’s all great. I wonder how it will translate for learning text based languages. My AP students all have previous (to applab) experience with text based languages so they are not a control group for me.

One the down side, debugging block based code is different for me. I’m used to traditional debuggers and I haven’t figured out how (or if) that can be done in AppInventor. So of course I go old school with taking code out or adding messages in different places. Error messages in AppInventor are an area where I am facing a learning curve. The idiom is different and I’m teaching myself so it can be slow at times. Next time I teach this it will be better though as my students are showing me a lot of bugs learning opportunities. Still I have had the AppInventor emulator crash with no usable error message and that is a problem. I want to see if I can get some cheap devices to use next year. I think that will make some things better.

UI formatting is an other area I am struggling with. I think this is both a lack of experience and practice with the tool combined with different limitations on a mobile device screen. I am less than happy with my UI for my Windows Phone app which I wrote in C# and Visual Studio which suggests I need help with small screen UI design anyway.

In any case the students in my mobile app class are learning a lot (I think) and enjoying the course (I think) which are good indicators of success. I’m pretty happy with that. I’ll use AppInventor for future sections of Mobile App Programming.

I still feel like blocks are best for small apps and for beginners. Yes, I know people make some pretty sophisticated programs with them but I struggle to wrap my head about that being as easy as text based languages. Maybe 45 years of experience writing text based code is a learning disability for me. Or maybe I just need the right teacher? I’m taking blame here and trying not to blame the tools.

Today block programming languages seem to be mostly designed as teaching tools and they are good at that. I think a lot more has to be done to really make them usable as general purpose languages for more complicated large projects. I do think they can get there even if the path isn’t obvious to me.

Thursday, November 30, 2017

CS Educator Interview: Sheena Vaidyanathan

Sheena is a wonderful innovative teacher who I have know for several years. We also served on the CSTA Board together. She works across grad levels (K-8) at a school district in California. She’s doing some very cool things. I am so grateful that she agreed to do this interview. I think you’ll find it interesting.

WHERE DO YOU TEACH? WHAT SORT OF SCHOOL IS IT?

I teach in the Los Altos School District, in the San Francisco Bay Area, California. It is a K-8 public school district with approximately 4500 students.  We have seven elementary schools that are K-6, and two Jr High schools (grades 7 and 8).

HOW DID YOU GET STARTED TEACHING COMPUTER SCIENCE?

My background is in computer science. After working for several years in Silicon Valley,  I decided to take a break and go to college to learn art.  During that time, I had an opportunity to volunteer in the local art docent program, and  discovered I loved teaching. I became the art teacher for one of the schools in the district and along with watercolor, clay etc, I showed the kids how to create on the computer . When the art teacher position went away, my administrator suggested I teach those digital art lessons across the district. I used Scratch programming as a tool for  the art program in the district in 2009, just a couple of years after Scratch was launched. Later this digital art class was converted into a CS program for sixth graders, and then expanded to all other grades. Today, every child in the district learns computer science.

DESCRIBE THE COMPUTER SCIENCE CURRICULUM AT YOUR SCHOOL. WHAT COURSES DO YOU HAVE AND WHAT ARE THE FOCUSES OF EACH?

Currently I am the computer science integration specialist for the district. This means that besides teaching I work on curriculum, PD and integration across the district. Every one of our seven elementary schools has a STEM teacher and this teacher integrates computer science in K-5 STEM lessons. I work with this STEM team, introducing new tools, and doing PD when needed. The sixth graders have the same required CS program that I started, and it includes units in Scratch, JavaScript/Processing, and Arduino. I currently teach this 6th grade program in one of the schools.  I also teach a Python based CS elective in 7th and 8 grade at both Jr High schools. I also work with the 7th and 8th grade Science teachers to integrate CS into the Science classes.   See more details on our CS programs at https://www.lasdschools.org/District/Portal/Computer-Science

WHAT IS YOUR OVERALL TEACHING PHILOSOPHY? PROJECT BASED LEARNING? FLIPPED CLASSROOM? IN SHORT, WHAT MAKES YOUR CS PROGRAM “YOUR CS PROGRAM?”

If I had to pick one overall philosophy, it would be ‘CREATIVITY’.  My CS program was created from an art program, where the focus was on creating something that was personally relevant and where programming was just one more medium to express your creativity.  I use mini projects to teach specific content, with challenges to differentiate instruction, and with as much flexibility as possible. The focus is to get students to work passionately on projects they care about.

WHAT IS THE BIGGEST CHALLENGE IN TEACHING CS AT YOUR SCHOOL?

Differentiation. After teaching CS for several years ,we now have students  at widely different levels in our classes and we must differentiate in many ways to make sure we keep all students engaged. After taking the required CS classes at our schools, some students continue to work on coding projects at home, and even enroll in summer camps/clubs and more, while others have only done what is done in class (or have forgotten it!) . In our classes today, we work continuously on the challenge of  creating a comfortable environment where each student can move at their pace. 

WHAT IS ADMINISTRATION’S SUPPORT (OR LACK OF SUPPORT) LIKE AT YOUR SCHOOL?

Our administrators are very supportive of the programs. In 2009, when very few public schools were doing any CS (there was no code.org or much advocacy material 8 years back!), the Los Altos school administration showed that they were early adopters and innovative . They launched a district wide computer science program because they believed in the idea that this would encourage creativity and help students see computers in a different way. At every step during the last 8+ years, they have encouraged computer science in our district. We are constrained by the number of dedicated teachers available to teach CS, else we would have moved even faster than where we are today.

HOW DO YOU MEASURE SUCCESS FOR YOUR PROGRAM? FOR YOUR STUDENTS?

Success is measured by just one factor - ‘Do they want to do more?’. The answer is yes for all grades. The K-5 students love STEM time and welcome any open coding time. The sixth graders often tell us it is their favorite class and at their end of year showcase, we have a packed room of students showing their final projects. Our 7th/8th grade CS elective is over subscribed. Kids are using code in other classes on their own. A Chemistry or English teacher for example will sometime sends me a Scratch or Python project that was submitted to show learning in their class. Our students are not afraid of coding, and are always ready to learn more. 

WHAT IS THE ONE THING YOU LIKE TO TALK ABOUT REGARDING YOUR PROGRAM THAT I HAVEN’T ALREADY ASKED?

Students are curious, creative and eager to learn.  It is so much fun watching them discover the magic of coding. Hearing that shout of joy, when a student fixes a bug can keep you going for hours even when you are tired.  Computer science education is moving at a fast pace, and I am always learning new ideas, experimenting with new tools and looking for ways to improve our CS programs.

TELL ME ABOUT YOUR ONLINE PRESENCE (IF ANY)

See also Computer Science Educator Interview Series Index (2017) for other CS educator interviews.

Tuesday, November 28, 2017

How (Some) Schools Sabotage Computer Science Education

There are many problems getting more computer science into schools. There is a shortage of teachers. There is a problem with room in the schedule. I could go on but there are also problems for schools who have computer science programs caused by people inside the schools. And I keep hearing about them.

Problem number one seems to be the people who manage the school networks. Now you might think these people would be natural allies of computer science programs and you’d be right in some cases. In far to many though your would be wrong. A lot of school network managers have priorities that can run counter to those of teachers. Not just computer science teachers mind you but they can hit computer science teachers especially hard.

There is always a trade off between keeping a network secure and keeping it easy to uses. Finding the right balance is key though. One of the biggest issues I keep hearing about is technology decisions that don’t involve the teachers who will be using the technology. For example lately I have been hearing a lot of teachers complain that their PCs are going away to be replaced by Chromebooks. Now one can do a lot with Chromebooks. One can even teach computer science with them. More or less. But telling a computer science teacher that they are losing the tools they have used for years and asking them to figure things out on their own is not fair.

Far to many hardware decisions are made in schools based on cost and ease of system management without considering the impact of teaching.

Sometimes decisions are made that actively prohibit teaching some things. IT people block useful websites. IT people refuse to allow some software to be installed. All this with the goal of locking down the systems and making them easy to manage.

And then there are administrators who don’t seem to understand the needs of computer science courses. I recently heard from a teacher who was told they were losing their computer lab for two weeks so the school could do testing. What? Teach computers without computers? OK sure there are many CS concepts you can teach without computers. CS Unplugged is a wonderful resource for that. But to have that decision made for you one short notice – for and advanced placement course? Can you imagine?

Picture the music department told they would have to teach music without instruments for two weeks? Or the art department being told to teach without art supplies?

It’s hard to get too upset with the principal here though. They are in a hard spot and need the computers to do the standardized testing that people who know nothing about education insist that they administer. On the other hand since it is unlikely that these tests come as a surprise to the principal they should at least let the teacher know long enough in advance so that they can properly plan. But they don’t understand what it is like teaching computer science. How could they if they never even took computer science as a student?

We really do need more educators to understand computer science better.

BTW my school has an administration who absolutely do understand enough about CS to bring the department in on decisions that impact them. And our IT people put students and teachers first and do all they can to make teaching easier for us. Faculty has lots of input on new devices. We do it right. I just wish every CS teacher had the support we do.

Monday, November 27, 2017

A Rose By Any Other Name Gives An Error

There is an old computer science joke that goes more or less like this:

There are two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors

Now I don’t have to cover cache invalidation in my high school courses and I do see an awful lot of off-by-one errors from students but today I’m thinking a lot about names. Names and how students  get them wrong.

Today I had students write code along with me as I demonstrated in on the board. As usual with any GUI interface the first thing I did was draw objects on the form and name them. I’m pretty careful about giving each item a meaningful name. I spend some time talking about why we do that. OF course a larger group of students than I’d like skips that step.

Next I write the code behind being very careful to use the correct names for the objects that I am requesting information from or sending information to. I talk about how having meaningful names here makes like easier. Students diligently copy the code. Anyone experienced with students knows what happens next.

Students insist they did exactly what I did get build errors. Remember how I said some of them don’t name things the way I show them to name them? Yep, this is where they expect the computer to do what them mean even if that isn’t what they told it to do.

Others have the right names but for the wrong objects. “Mr Thompson, why did that show up here and not their?” Answer: Because that is where you told it to display. Try as I might students take a while to understand how important getting the names right really is.

Somehow getting this right is a struggle for some students. I want to believe it is all their fault – they were not paying attention. That has to be it right? But maybe not. Maybe it’s me. Clearly I need a better way of explaining things.  Maybe visual aides? Boxes with names on them? Something. Figuring this out before the next class starts is a priority.

Suggestions are welcome. What works for others?

Monday, November 20, 2017

Learning From My Students

Some days I think my greatest edge over my students is that I am better at debugging than they are. Well there is that I actually read documentation as well but putting that aside for now.

This semester I am teaching with AppInventor. It’s a pretty cool development tool and I have been playing with it off and on for some time. I’m far from expert at it though. Usually I am happy to keep a couple of lessons ahead of the students. There is only so much I can learn on my own though. So I learn a lot from my students. While anyone can learn from their own mistakes the really smart people learn from the mistakes of others. So I learn a lot because I see a lot of mistakes.

Students make all sorts of mistakes. I’m not sure mistakes is the right work though. Perhaps I should say they try all sorts of things that don’t work as they expect them to work. At some point it becomes my job to help them figure out what is going on. Since they are so clever about try9ing things that would not occur to me this is a wonderful learning experience. Fortunately I have seed a lot of things go wrong using a lot of programming languages and tools over the years so I can usually figure things out pretty quickly.

The advantage of this style of learning is that it helps me anticipate things – misunderstandings, incorrect assumptions, and what not – that I can build into my teaching going further. While I can’t cover every possible error even if I knew them all I can at least point students in better directions.

At the same time I have been having students learn things beyond what I am teaching on their own. I have a couple of students who just love to try things in Appinventor on their own. Sometimes in class but often at home. These students are more than happy to share what they learn. They share with me and they share with their peers. Encouraging this sort of experimentation is, I believe, key to being a good teacher as well as being a life long learner.

Teaching this course has probably taught me more about Appinventor than I could ever have learned on my own. I call that a win.

Thursday, November 16, 2017

Resources for Teachers and the AP CS Principles Tasks

If you are teaching Advanced Placement Computer Science Principles for the first time as I am you probably still have lots of questions about the performance tasks. I know I do. Well it look like Jill Westerlund has our back. She has a series of blog posts on the subject that look very useful to me.

Exploring & Creating 101 — Part 1

Exploring & Creating 101 – Part 2

Exploring & Creating — Part 3a

Exploring & Creating – Part 3

Check out her abstractingCS blog regularly. I do.

Building off of Jill’s work, code.org has created an "Explore PT Survival Guide" that also looks helpful.

abstractingCS

Tuesday, November 14, 2017

Joint Task Force on Cybersecurity Education Draft Report

The Joint Task Force on Cybersecurity Education is working on curriculum recommendations for post secondary schools but I think their work will be of interest to teachers of other levels as well. It is probably going to be interesting to cyber security professionals as well. Their latest draft report is now available for download and comments at CSEC2017 v. 0.95 Report

Take a look. More information at the Joint Task Force on Cybersecurity Education website.


The JTF was launched in September 2015 as a collaboration between major international computing societies: Association for Computing Machinery (ACM), IEEE Computer Society (IEEE CS), Association for Information Systems Special Interest Group on Security (AIS SIGSEC), and International Federation for Information Processing Technical Committee on Information Security Education (IFIP WG 11.8).

The JTF grew out of the foundational efforts of the Cyber Education Project (CEP).

Purpose...

The purpose of the Joint Task Force on Cybersecurity Education (JTF) is to develop comprehensive curricular guidance in cybersecurity education that will support future program development and associated educational efforts.

The curricular volume, CSEC 2017, is estimated to be published in December 2017.