Friday, December 22, 2017

Looking Back on Computer Science Education in 2017

Time to look back on the past year I think. I wrote a post in January about what I was watching (Computer Science Education Things I’m Watching in 2017) so I think a wrap up is called  for. So what was I watching and what did I see?

Computer Science for Everyone – I think we’ve seen a lot of progress here. States continue to write standards and develop plans for teacher certification. My own home state of New Hampshire had certification requirements approved for example. Now we’re working on K-12 standards. We’re ahead of some states and behind others. I think we’ll all be looking at the leading edge states going forward. There is still some discussion over if “for all” means it is offered to all of if it means everyone has to take it. We’ll see that continue to shake out this coming year I think.

Advanced Placement Computer Science Principles – I think the number of students who took this last May surprised a lot of people. I know it was even more than I expected. I have been teaching it this fall (I’m using the code.org curriculum but there are other excellent ones available). My students seem to be enjoying the course and learning a lot. While I am curious to see how they do on the exam I am more curious to see what they think of the course a couple of years down the line. That is the real judge of a course in my opinion.

Enrolment in APCS A is down in my school but I am not sure if that is a result of the APCS P course (some of my APCS P students already took APCS A) or some other factor. This is something else to watch going forward.

Expanding CS Education Before High School – The #CSk8 twitter chat continues growing by leaps and bounds. My feeling is that we saw a lot more K-8 CS people at the CSTA conference this past summer as well. I think in some regards we’ve seeing faster growth here than we are at the high school level though I don’t have actual data. code.org and organizations affiliated with the CS for All Consortium have done a lot of training.  The CS for All Consortium says they have worked with 5% of all the schools in the country. That is huge for year one.

Making and CS – I haven’t seen as much here as I had hoped. Where I do see it most is in K-8 though. I think that makes sense as K-8 CS curriculum is starting from a much smaller base and has a lot less inertia from existing CS curriculum to work around. Plus younger students are used to making things in school.

There are some curriculum resources using making but they tend to cover the range of grades 6 through 9 (or maybe 10). That’s good as far as it goes but I’d really like to see an advanced CS course involving the Internet of Things or serious making that is different from robotics. The AP courses may be more of a barrier than a help there though.

What Else? Looking back I see that government interest in CS education continues to grow. Even the Trump administration seems in favor of it. They may not be pushing it as hard as the Obama administration but they are doing more than just not getting in the way. Real progress requires work at the state and local levels and that support seems as strong as ever.

What were the highs and lows of computer science education that you observed in 2017? And what should I be watching in 2018? That blog post comes out after the first of the year.

Monday, December 18, 2017

What Do You Do Besides Write Code?

A bunch of years ago I read an op-ed piece in one of the news magazines. I forget the one but the piece itself has stuck with me for years. The Op-ed was written by a guy who was critical of software people. He was in construction and built things. And on the weekend he built more things. Software people just wrote code and didn’t, in his view, do useful things with their free time. At least they didn’t do construction type things on their own houses.

My first reaction was, clearly he wasn’t watching me as I built a large deck for my house or any of the other projects I’d done around the house. He clearly didn’t know my friend Philip who is building his own house. Yes, with his own hands. The man is an amazing carpenter who is also quite the software person. And he doesn’t know my friend Clint whose projects over the years have amazed with with their creativity and complicated construction. Or many of the others I know who build things with their hands and make their homes or cars truly their own.

My second thought was, the man wants me to be impressed that he does the something on weekends as he does for work? That’s crazy. He should be doing something else to stretch himself. If he really wanted to impress me he should tell me about the code he writes in his down time. People need something other than what they do for a living to keep them really grounded.

An article in Medium (“Every Computer Scientist Should Have A Creative Hobby” by Yash Tulsiani https://medium.com/@ytulsi/im-a-computer-science-major-interning-at-a-creative-agency-325bee27ed09 ) got me thinking about this again today.

Generally the best technical people, especially computer science people, I have known have had some sort of other creative outlet. Some music, some wood working (amazing how many CS people love power tools), and some write fiction. A bunch of them are seriously into photography.  

Computing used to be something that stayed locked into environment controlled glass rooms that people might be able to see into but not interact with. The opposite is true today. While once upon a time you could get away with esoteric and complex user interfaces or boring simple ones – card readers anyone? Today we talk to our computers and expect them to talk back. Today we want it all to be easy – swipe left, swipe right, swipe down.

Today computer science is never in isolation Today it’s “computer science and …” where the “and” is anything and everything. People who can’t see past the computer and not very useful. People who are not creative and innovative are not the idea computer scientist today.

One of the things that creative hobbies have in common with computing is that they force one to look at things. To look closely at times, to look from far away at other times, and generally to look differently. A person who only has code as a tool and programming as a way of looking at problems is as bad as the carpenter who only has a hammer and sees all problems as nails.

As a teacher I occasionally see students who get totally immersed in one thing. It may be sports, it may be their music or art, sometimes it is computing, sometimes it is in some other academic subject. What ever it is I worry that they lose sight of the big picture. That can be a fatal trap in a future where most people will have multiple careers.

So you can code? Great! What other creative outlets do you enjoy?

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.