Friday, May 17, 2019

ACM CompEd Conference

Brett Becker has been blogging about the ACM CompEd conference now taking place in China. See his blog post at ACM CompEd daily update 1: Day 1 for example.  Looks to be a great conference. Not a lot of high school teachers have travel budget to attend of course and a lot of us are wrapping up the school year so it would be hard to get away anyway. But there is good news.

On his post you will find a link to the ACM Digital Library where the conference proceedings are currently open.

Reading the papers is not quite as good as hearing the talks but it is a lot better than missing out completely. There are things of interest to middle and high school teachers as well as some papers about integrating CS into other subjects. Like I said, things to a wide range of CS education interests.

I've downloaded about 18 papers to read. Hopefully once the school year is over in a couple of weeks I'll be able to give them the right amount of attention. But grab them now as they will not be available to people without a subscription to the ACM digital library for long!

Thursday, May 16, 2019

Computer Science And x

For most of my teaching career I have been focused on teaching computer science in stand alone computer science classes. And  I really like teaching computer science as a standalone class. But lately I have been thinking more about where CS can/should fit into the greater education process. This is not completely new thinking for me. I’ve always thought that computing tools are great for teaching other disciplines.

Spreadsheets are awesome for dealing with data in science classes, math classes, and even social studies (think graphing population growth) for example. Even early in my teaching time I said that there is a time for teaching tools to learn the tool but eventually using the tool to learn other things is or should be the goal.

We teaching reading as an independent subject in the early years but over time it become less an independent subject and more a tool for learning other things. The same is largely true of mathematics.  I believe that computer science in academia will be at its best when we reach a point where it is more and more a tool for learning other subjects.

CS teachers like to believe that somehow the knowledge and problem solving schools in CS transfer magically to other disciplines. Research show that any transfer is minimal at best. We in computer science have to stop ignoring that research is we really want to add value to education. Helping teachers on other disciplines learn to use CS in their teaching has to be part of that.

Mark Guzdial, who has taught me more about how to teach computer science than any other individual, is focusing his current research on to help teachers in other disciplines integrate computing into their teaching. This is important research in my not so humble opinion. I think that a lot of us who are already teaching CS need to start thinking about this as well.

At one point I thought technology integration specialists would carry this load. Many of these people are computer science people but many more are not. SO far I see computer science being integrated across the curriculum mostly in elementary and some middle schools. I really admire the K-8 teachers who have taken on the task of learning CS, largely on their own, and finding ways to incorporate it in to their teaching. There is little if any room for an independent CS course in elementary schools. There is a bit more in middle schools but the time is limited in most of them.

I don’t see much work on integrating CS in high school courses. The Physics department at my school would like to see us teach Python as they are seeing more of that in use by physicists. That my be an opening and we may add Python to our program at some point. Change is slow in education. Even sometimes in computer science.

Still, change has to happen. Change has to happen not just in standalone courses but who computer science departments in schools support other departments. For transfer of skills and knowledge to transfer it has to have context. And context doesn’t just happen. We have to make it happen.


PS: I really should have included this from the start. Bootstrap has courses aimed at algebra, statistics, business, social studies, science AND physics. GO check it out. It’s the sort of thing we really need.

Saturday, May 04, 2019

Migrating to Android–an early trip report

One of the reasons I held on to my Windows Phone as long as I did is that it was so easy to program apps for it. I had come to depend on one particular app I wrote to help with with the rotating schedule we run where I teach. I finally gave it (too many apps I could not run on the Windows Phone) and got a Google Pixel. Programming an iPhone would mean I also have to buy a Mac and that was a bridge far to far for me. Of course the first thing I wanted to do was to migrate my app to the Android platform. Visual Studio, Xamarin, and C# seemed the way to go.

The code and logic moved almost transparently. The user interface not so much.

One thing that complicates things is that the tools change so quickly. UI code that I created with Visual Studio 2019 Preview seems different from what was created by Visual Studio 2017. This also means that a lot of videos and tutorials are already aged out of usefulness for me. I’m still looking for some videos that work both with beginners to the Android API and Visual Studio 2019.

I finally got something working. It’s ugly but it works. The next step is to learn how to do decent screen design with the Android API. It is not as intuitive as Windows Forms was/is. Not even close. I feel like I am back in the 1980s. It feels like we are regressing in making user interface programming.

At least we still separate form and function. As long as the UI objects have the same names all my C# code seems to work quite nicely. This wasn’t the case in the 1970s and early 1980s. Back then UI code was usually integral with the logic code. That changed over time and the idea of separating form and function moved from new to controversial to the way things were done. It’s the idea that lead to front end and back end developers. But I digress.

Being able to drag objects where ever I want them is a wonderful thing about Windows Forms Design. Microsoft seems to be moving away from that easy to use tool to making programmers write more code by hand. I’m not a fan. Like I said, a return to the distant past.

At this point I have confirmed that coding Android apps is easy and all my C# knowledge is still usable. I’ve also confirmed that I have a lot to learn about creating an Android UI. I’m starting to look for a good book or some up to date videos that are not just marketing demos. Marketing videos focus on showing off features rather than teaching. Teaching videos are a completely different emphasis.

Anyone want to recommend a book or a set of videos that worked for them?

Wednesday, May 01, 2019

With Great Code Comes Great Responsibility

Omidyar Network, Mozilla, Schmidt Futures, and Craig Newmark Philanthropies recently announced the winners of the Responsible Computer Science Challenge. The challenge, and grants of up to $150,000, go to universities but the programs might have some use in high schools. Maybe. At some point.

The winners’ proposed curricula are novel: They include in-class role-playing games to explore the impact of technology on society. They embed philosophy experts and social scientists in computer science classes. They feature “red teams” that probe students’ projects for possible negative societal impacts. And they have computer science students partner with local nonprofits and government agencies.

Of course it is wonderful that these universities are integrating ethics into their courses. Society will benefit more as these universities package, promote, and see their programs expanded into other universities. That is the goal of the Responsible Computer Science Challenge. There is a second round of grants with that as the prime goal. It makes sense to develop and test programs before expanding them.

I hope that these institutions will seriously consider helping to adapt these programs, tools, methods, and other resources so that they can be incorporated in high school (maybe even lower grades) in the future.

Responsible Computer Science Challenge banner with logos

Monday, April 29, 2019

Game of Thrones and Computer Science

I confess that I have not watched a single episode of Game of Thrones.  That doesn’t mean I am oblivious to the social impact of the show. My online social media is full of it. So when Rita Tillson Vasak linked to this Slate article explaining why a recent episode was so hard to view I jumped to read it. The article talks about data compression and how a lot of compression made it hard for a lot of people to really view the scenes.

It talks about data compression in a way that assumes the reader has a clue as to what they are talking about. It uses the term “lossy video compression” and talks about the layers of compression involved in getting the digital image to your screen. I wonder how many people read that article without comprehending it very well. Hopefully my Advanced Placement Computer Science Principles students would get it all.

We talk about compression in AP CS P. I’ve also played with lossy compression with my Programming Honors students (Lossy Text Compression Project ). I talk about compression in terms of text, images, video, and music. I think students mostly get it.

Rita suggested this article as part of review for the APCSP exam (coming in less than two weeks!) and I think that is a great suggestion. I may use it next year when we talk about compression as well. I think it is a good visual and discussion as to what can go wrong in our attempts to get the most data through the smallest “pipe” in the least amount of time.

Showing specific examples of the effects, positive and negative, of computer science technology when it also ties into a social event can make a great impression.

Sunday, April 21, 2019

More Than One Way To Code a Solution (to a programming project)

Garth Flint has an interesting post about grading programming projects (It is never easy) in which he talks about the interesting solutions students come up with. It struck a cord with me on a couple of levels. Yes, it makes grading more difficult but it also means that students are thinking for themselves.  Or so I chose to believe. Sure some of them look up solutions on the internet but they have to understand them well enough to explain them and make them their own.

I figure that on average a class full of students will come up with three different ways of doing things. Sometimes only two but sometimes more than three. Sometimes I will take samples of the various solutions (with no names) and discuss them with the class. It gives me a chance to show that there is more than one way to do things AND to discuss optimization a little bit.

Occasionally students have come up with solutions that I had never thought of and were even better than how I had done it. I love it when that happens. I love new solutions. To it also emphasizes the value of a diverse group of people looking at a problem.

As Garth mentioned in his post, student ideas move quickly through a computer lab.  I struggle with that a bit. How much help is too much help? Where is the line between “he helped me with it” and “I copied it from her?” And how do you tell where the students are around that line? I could get pretty fanatical about it. I’m not sure how productive that is though. It probably adds as much stress on me as it does for students. I toss in quizzes as well and students who understand what they are doing do a lot better on then than students of get too much “help” with their projects. Using multiple forms of evaluation is a good practice anyway I’ve been told.

Generally I see projects as more effective as a learning experience than as an evaluative tool. Sure they help evaluate learning but a practice, an exploration of ideas, and a way to learn things is their highest value. If students come up with implementations differently for what I would come up with I see that as a learning win.

Thursday, April 18, 2019

What is in a name?

It’s been said that the three hardest things in programming are naming things and off by one errors. For some reason, this semester, my students are having the most trouble with naming things. Specifically, they seem to have trouble making the connection between names and objects.

For example, they will use the name of what looks like a text box but without actually instantiating the text box firs Or they will use a different name for the textbox than the name the textbox actually has. And they’ll be surprised at getting an error message that says “the name ‘x’ does not exist in the current context.” The same is true with undeclared variables. Often this is caused by not paying attention. I will set the name of an object while live coding and then use that name later in the code. If they were not paying attention any of the three times I point out the name declaration they may not use the same name in their own code but expect it to work later. After all, it worked when Mr. Thompson did it.

Now of course I have explained all of this numerous times. I think many times students are just expecting the system to fill in the blanks for them. It would be nice if the system would. Maybe one day we’ll have artificial intelligence built into development environments that will help with this sort of thing. But we are not there yet.

Our IDEs do a lot for us (developers) that they didn’t do for us back in the day. No autocorrect in punch cards. I know that some educators believe that using a fancy IDE with automatic features is a bad idea. Students should learn without them. They may have something of a point but I resist the idea because I don’t want to make programming to hard. I don’t run a weed out course. Plus these modern tools open the door for students to experiment. Intellisence in Visual Studio lets students see a lot more options then I have time to cover in class.

I keep coming back to naming things though. Selecting meaningful names is important. Making the connection between declaring and defining objects/variables and the names themselves is important.

Spring break started tonight. Figuring out how to address this is something to think on in a couple of days when I’m relaxed.

Monday, April 08, 2019

Teach Programming or Teach a Programming Language

For me, teaching is all about the concepts. Programming languages change. My first programming language was FORTRAN. This was the big language with I was in university. Today? Not so much. But loops and decision structures still exist. Over my career, I have learned a bunch of programming languages. I’m not sure I want to know how many but its a lot.

This morning I was reading Mark Guzdial’s blog as one does (Why we should explore more than one programming language across the curriculum) which comes as I am looking hard at my school’s computer science curriculum.  We teach several programming languages. Visual Basic in our freshmen course, App Inventor for our mobile app development course, C# in honors programming, JavaScript in AP CS Principles, and Java in AP CS A. SO potentially students can learn a bunch of languages during their time here.

Is this good or bad? Are there too many languages? Are these even the right languages? I believe that much is dependent on ones goals. Is our goal (in HS CS) to teach a programming language or to teach how to program (programming concepts).

As I started off this post, I believe that in the real world people who develop software, professionally or other wise, will need to learn new languages as time goes on. Mark has been writing a lot about task-specific languages (Task-specific programming languages: People aren’t dumb. Programming is hard.) and it is pretty clear to me that is a coming thing.

Teaching all programming classes using one programming language is probably a great way to teach that language but to quote Mark’s blog “We have no evidence currently that language-specific programming knowledge will transfer” So how do we prepare students who will have to learn new languages for new tasks?

Someone once said that the second programming language is the hardest one to learn. I can see how that could be the case. On the other hand learning programming languages does seem to get easier after that second one. I believe it is because learning a second language forces one to think beyond the syntax.

In one class, some years ago, I started showing my AP students who to do the same loop in a number of languages, including assembly language, and one student claimed later that was the most valuable lesson of the course. I still try to show multiple languages at times but since most of our students have already been exposed to several by the time they get to Advanced Placement that seems less necessary today.

Still I toy with the idea of writing a parallel programming book using several languages.  This is an idea borrowed from parallel translation Bibles where several translations of the Bible appear side by side on the page. A great study tool for religion that might work in programming as well.

Coming back to goals, I can see teaching a lot about one and only programming language as a somewhat reasonable way to prepare for a job but not for a career. I still remember getting my first programming job because I knew one language pretty well. Six months later I was handed a project specification and a language reference manual for a language I had never heard of and told “go to it.”

I truly believe that having a background in multiple languages was the difference between success and failure for me.

Friday, March 22, 2019

Debugging Student Code for Fun and Learning

Students are really good at creating strange hard to solve bugs in their code. I am convinced that the code of a raw beginner can easily be harder to debug than that of a professional coder.

I had a couple of good ones today. One was actually pretty easy once I realized the cause. I have some international students. Great kids, very smart, hard workers. English is not their first language though. In fact, English letters are not their first character set. In one class I have boys from Cambodia and Viet Nam. The character sets they grew up with are very different from English characters. This means that sometimes English characters confuse them. l, I and 1 can all look alike to them especially in some fonts. Like this one. So I had some non obvious "spelling errors." They and I have a better idea of what to look for next time.

The other one was harder. We’re using C# and Windows Forms. Now normally this makes things easy. But you can also cause some very puzzling errors. In this case, the code seemed to be doing everything it was supposed to do EXCEPT showing the results in a list box. I tried a lot of my bag of tricks. Single stepping through code, displaying intermediate results (that didn’t work because nothing was displaying in the list box). I copied the code into a new project. I created new objects. I tried a lot of things.

Finally, I did a side by side comparison with a project that worked and that showed me the problem. For the curious, Windows Forms projects run a subroutine to initialize and instantiate the objects on the form. Some how, probably a copy paste error, this student was calling it twice. Without going into detail, this resulted in two sets of objects with one of them covering the set that was actually being acted upon for the display.

I try to look on the bright side of things. In this case, I have new things to look for that I didn’t have before, I have gained insight into issues that my international students have (and may change some variable names I use), and I got to demonstrate debugging techniques to some students. That’s a win right?

Tuesday, March 19, 2019

Interesting Links for Computer Science Educators 19 March 2019

I haven’t done one of these for a while. I still Tweet or retweet a lot at @AlfredTwo but I needed a break. I’m not sure I will do this every week but I think I will shoot to do it from time to time.

Microsoft Education posted a bunch of resources on Ways to encourage girls to keep pursuing STEM this Women’s History Month There are some posters I think will show up in my computer lab soon there as well as other helpful links.

David Renton is doing some amazing things with his students who are programming virtual reality applications. Currently he is having Students Build International VR Prototypes for Children This is more than about computing. It is a multi-national effort with some support from Microsoft in the UK and deployment at a hospital in Sweden.


Mike Zamansky has a  great post about Adapting A Nifty Assignment  You may or may not be familiar with the SIGCSE Nifty Assignments sessions, check them out if not, but they are pretty nifty but many of them really do benefit from adaptation to a particular environment.

I found this on the Blog at CACM I don’t know about you but calculating with Roman numerals (what no zero?) was something I wondered about. This article explains it all. I wonder if this might make a nifty project? Calculating With Roman Numerals is Not So Difficult 


Speaking of SIGCSE, Bryan Twarek provides a nice list of K-12 Teacher Takeaways from SIGCSE 2019  on the CSTA Blog. Not as good as being there but Brian includes a bunch of related links.


Under my list of things to keep an eye on, Microsoft had a post called Achieve more with Microsoft Game Stack It looks mostly like a repackaging or rebranding of a number of new and existing resources for game developers. Will it have application for schools? Maybe in game development courses but even there it seems like Game Stack is more for professionals than beginners. But we’ll see if anyone in education takes it on and provides information.

Thursday, March 14, 2019

Awards I Wish We Didn’t Need

Last week my school was told we had earned the College Board’s Female Diversity award for both Advanced Placement Computer Science A and Advanced Placement Computer Science Principles based on how many female students we had in those courses last school year. Yeah!

We’re one of two schools in the state to get this recognition. That’s a bit disappointing. The more I thought about it the more I thought how sad that getting to adequate female representation was so rare that schools were getting special recognition for it. Are there similar awards for other AP courses? Are their awards for schools for getting to Male Diversity numbers in courses were male students are underrepresented? Is that even a thing?

Don’t get me wrong. I am thrilled that we have good representation of female students in our AP CS courses. And I’m not shy about sharing news of the College Board's recognition. 

It’s hard to get solid APCS enrolment period. I teach at a private Catholic school that requires four full years of religion. That has a serious impact on electives. We have even better female representation in our lower level CS courses because we require a full year of CS for graduation. AP CS is going to be an elective so we have to have a good environment to get students to want to fit it in.

With cultural norms the way there are, a lot of female students are encouraged to follow other academic paths. World languages, for example, fit the stereotype and it often feels like that is a more common, if not natural, path for female students. And the boys seem to be less excited about languages.

Our goal at my school is to ensure that all students are comfortable and feel like they belong in computer science courses. We are careful about room decorations. You’ll see women in computing highlighted in posters and bulletin board items for example. I think the most effective effort it that teachers encourage all students, reassure them that they mistakes they make don’t mean they are stupid or incapable, and include projects that are not gender biased. You know, be a good teacher.

For now we all need to make efforts to include a more diverse set of students. And it is nice to be recognized for the success of those efforts. But I’ll tell you, having a diverse group of students is all the reward I really need.

Tuesday, March 12, 2019

High School CS Education: Where Do We Start and Where Do We Go?

There are a number of sets of standards with most based on the CSTA standards (https://www.csteachers.org/general/custom.asp?page=standards) and the K-12 CS Framework (https://k12cs.org/). A lot of really smart people (and me in the case of the framework) worked on them but I've been thinking about creating my own set to use.

Why? Difficult to explain but in large part to get things clear in my own head. What do I see as the concepts and ideas I should be teaching in my high school? How do I want to express my thoughts – the same as the existing standard or will putting them in my own words help me understand them better? An open question.

Now one might think this is easy with the standards already written. But it is more complicated than that. High school is very much in the middle for computer science. We’re not yet college/university but we want students to be prepared for that level of education. At the same time, there is no standard of knowledge that universities are expecting all incoming students to have. That makes their lives difficult but they have been living with that as long as there have been CS courses. It’s leaves us in high school a little more free to determine our own output goals though.

On the other end, there is no standard set of CS knowledge that high schools can expect all students to have. That is especially true for a school like mine that takes in students from over a score of different middle schools and two different states. Like the universities, our curriculum has to start assuming no background at all. Oh sure students are somewhat tech savvy compared to many of their parents but I still spend time teaching how to move files from one folder to another. Being great with Instagram doesn’t translate to computer science knowledge.

We see some students who come in more advanced as well. They may have done a lot of programming in middle school. Many in an enrichment course, a summer program, or FIRST Lego League or some other opportunity. They may even be programming in higher level languages. Can they skip the first course? Sure, as long as we have something more advanced to help them continue to grow and learn. It would be a shame if they were effectively done before high school and spent 4 years forgetting things before university.

As I think about high school computer science curriculum holistically I think about the Computer Science Curricula 2013 (CS2013) document. One key take away for me there was the three levels for university curriculum. Basically it was things all CS departments should offer, a level that all departments should offer “all or almost all”  and electives. For high school I don’t know that I want three levels. Maybe two would be enough. Things that all high school curriculum should offer and electives. Earlier version of the CS Curricula had only two levels. I am not sure there is room in the schedule for three levels in high school. Electives should be offered in schools where there is more room.

I hesitate to specify standard or required or even recommended electives for high schools. Gradually CS, and other subjects, move down from universities but there is no clear vision for what will move down from universities to high schools in the near future.
An other idea I like from the CS 2013 document in the Knowledge Area breakdown of concepts. This sort of breakdown is also included in the CSTA Standards of course. Do I want to come up with my own breakdown or use the CSTA version? I’m undecided.

Seems like a big task and it is. But I really feel like I need an expression of my personal (well researched and thought out) ideas of what should be taught. Anyone else feel like this?

[Note: I was on the CS 2013 ACM/IEEE Task Force and the K12 CS Framework writing team. And I still think I need to think about this stuff.]

Monday, March 11, 2019

Don’t Cross The Data Types

Remember in the first Ghostbusters movie where the ghostbusters are told not to cross the stream of their ghost busting guns? And then at the end they do cross the streams? Mixing data types is like that some times. You really have to know what you are doing when you mix data types.

The Facebook group for AP CS A teachers recently had this Java example:

Can anyone explain why a + b is NaN but a+=b is zero?
int a = 0;
int x = 0, y = 0;
double b = (double)x/y;
System.out.println("a: "+ a);
System.out.println("b: "+ b);
System.out.println("a + b: "+(a+b));
a += b;
System.out.println("a(2): " + a);

//output

a: 0
b: NaN
a + b: NaN
a(2): 0

NaN is not a number and is the result of the divide by zero. You probably shouldn’t do that anyway but it happens. What is interesting here is the different way that (a + b) is handled compared to a += b

a += b does a conversion of b to integer before it does the addition while (a + b) does a conversion of a to double. That explains the different results. Of course if you were to do a = (a + b) you would probably get a compiler complaint. I think. I know you would in C# but I haven’t tried Java yet. FWIW C# also complains about a += b and demands an explicit cast. Different languages and compilers handle these things differently.

So what is the message here? I think the message is that programmers should usually make explicit casts when they mix variable types. Maybe you know what will be cast to what for different variable types and different operations but a) how much do you want to bet you’re right and b) how much to you want to bet that the next person to look at your code will understand what is going on behind the scenes?

Mixing types causes a lot of confusion for beginners. SO does how numbers are stored (some kids never seem to understand that 0.1 is an infinitely repeating fraction in binary and what that means) of course. Encouraging students to cast or at least to be very careful about the types they use and the types they mix is an important lesson.

Friday, March 08, 2019

Making Projects More Interesting With More Data

My students are working on the palindrome project. You probably know it – enter a string and report if it is a palindrome or not. In my case, I have them create a method to “clean” the string by stripping out all of the characters that are not letters and a second method to reverse the string. My goal is practice in creating methods as well as string handling and loops.

It’s always more interesting if the test data is more interesting. There are lots of common palindromes that students are familiar with such as “Madam I’m Adam” and “Race Car” and the ever popular “Mom”, “Dad”, and “Bob.” My favorite is “A man, a Plan, a Canal – Panama” because you can read it dramatically. This week I stumbled on a web site dedicated to palindromes - http://www.palindromelist.net/ There are probably other palindrome related web sites as well.

I’m thinking about supplying a file with lines that are and are not palindromes and having students modify this first program to read the file and report.  More data is better data.

Another idea I have percolating is asking students to write code that creates palindromes. I’m not sure how hard this would be as I’m still thinking about how I would do it. Again, data is important. You want to use real words and ideally the phrase should make sense. Does it have to though? Hum.

I have a dictionary file – a text file with almost 114,000 words in it. I figure that should be useful for something. I keep thinking it would be useful for a lot of interesting projects – things like word games (Boggle, Scrabble, etc.)  or maybe spell checkers.

There are sources of large text files on the internet as well. I have files with the full text of some books (in the public domain of course) and Shakespeare's sonnets. Check out Project Gutenberg which has some 58,000 public domain books

I’m thinking some interesting word and letter count projects are a natural. A lot of the projects that have been presented at the SIGCSE Nifty Assignments session (collected here at http://nifty.stanford.edu/) involve working with data sets of words or text. You all know about the Nifty Projects resource right?

You can also make interesting data. For a long time I have assigned a project that creates driver’s licenses based on name and birthday. New Hampshire recently moved away from this scheme for privacy reasons but it was/is a fun project. I grabbed first and last name data from the Census Bureau (there are other lists) and wrote a program to create a data file of random names and birthdays. I’m toying with assigning something like that as an assignment some day. Making sure the dates exist (no February 30th for example) makes it fun. OK, harder, but harder is fun right?

What sorts/sources of data do you use to make projects more interesting?

Monday, March 04, 2019

Remember The Ladies–And Act

In March of 1776, Abigail Adams wrote to her husband who would be the second US president “I long to hear that you have declared an independency. And, by the way, in the new code of laws which I suppose it will be necessary for you to make, I desire you would remember the ladies and be more generous and favorable to them than your ancestors. Do not put such unlimited power into the hands of the husbands. Remember, all men would be tyrants if they could. If particular care and attention is not paid to the ladies, we are determined to foment a rebellion, and will not hold ourselves bound by any laws in which we have no voice or representation.” [ emphasis mine]

After all this time, we, mostly us men, seem to forget the ladies. Most of us are aware that there is a shortage or at least an imbalance of women in the computing field. It’s men’s fault mostly.  We make it worse when we ignore the efforts and accomplishments on the many wonderful women in our field.

We talk about Ada Lovelace and Grace Hopper but use them as tokens too much of the time. Today there are a number of wonderful groups whose focus is directly on bringing more women and underserved minorities into the computing field. Unfortunately, they don’t get the attention they deserve.

Reshma Saujani, founder and CEO or Girls Who Code gives an important response to this problem with her post Erasing Women in Tech: How 60 Minutes Ignored Women’s Voices, Stories, and Expertise

Now I can hear someone saying, well, yeah, but code.org is doing great work and they are helping girls and young women. Plus the 60 Minutes piece was a good promotion of computing for all. There is some truth to that but it misses a point.

These other great efforts, those that Ms. Saujani names and more need their own recognition. How else are they going to attract the participants, the supporters, the money, and build sustainability if no one knows they are out there? Outstanding programs like these need the sun shown on them so they can grow and thrive.

The truth is that we need some special programs for girls and minorities because the male dominated organizations are still not making them as comfortable as they should. Oh sure some of us are trying. I like to think my classrooms are safe spaces for everyone. I’m sure most of my regular readers feel the same way about their classrooms and computer labs. We may even be right. But we’re not everywhere.

As a community, we in computing have to be more generous and favorable to women than we have in our more recent history. Our future depends on it.

Wednesday, February 27, 2019

What Are You Reading?

We all get asked this question – What are you reading? Often this is the context of an interview and the person asking is really asking “how are you keeping current in your field?” For computer science educators there are few things better to read than SIGCSE papers. Right now the Proceedings of the 50th ACM Technical Symposium on Computer Science Education are open for download. I think they’re only open (FREE) to non-members for a few more days. The conference closes this Saturday.

I’ve been downloading anything and everything that looks interesting or useful to me as a high school CS teacher and as someone interested in learning more about the field. I have about 35 papers downloaded. It’s going to take me a while to read them all.

I am a member of ACM and SIGCSE so I will be getting these papers in hard copy so you might wonder why I am downloading PDFs. The short answer is that I lose paper documents but I have a lot of room to store soft copy. And I confess that I want to start reading now.

I can’t make it to SIGCSE (it started today BTW) but I will be following Tweets and other social media updates. Having the papers available will help me understand what is going on better.

So are you taking advantage of paywall free access to SIGCSE proceedings? What other places do you go to learn what others are doing?

Tuesday, February 26, 2019

CSTA Board Elections 2019

Wow! Computer Science Teachers Association members should all have gotten an email about this year’s election for the CSTA Board. It is a remarkable slate of candidates. It seems to get stronger year after year. We, members, have to make decisions though. Not that anyone really cares but I am sharing my thoughts.

The K-12 seat is between Doug Bergman and Art Lopez. I’m sure Art would do a great job but I’m voting for Doug Bergman. I’ve know Doug for years and pushed him to run for the Board for several years before I got him to throw his hat in the ring. I’ve been impressed with his performance over his first term on the Board. He is a tireless worker, a leading edge teacher, and a strong promoter of computer science education. Doug gets things done.  Doug Bergman has earned a second term on the Board.

K-8 has another good pair of candidates - Vicky Sedgwick and Alana Robinson. Coming from a big city system and a special education background is a strong plus for Alana. On the other hand, Vicky has been a remarkable advocate for K-8 teachers inside and outside CSTA. Her work with the #CSK8 Twitter chat has been a phenomenal community builder and educational experience for K-8 teachers everywhere.  I would like to see Vicky Sedgwick have another term on the CSTA Board.

School District representative is also a tough choice. Dan Blier and Byran Twarek. I met Bryan while working on the K-12 CS Framework and was very impressed with his work ethic and commitment to computer science education. His experience and performance on the board suggest that Byran Twarek should have a second term.

At-Large is the toughest decision. There is no incumbent nominated for one thing. And both candidates are seriously strong. Lien Diaz has done a lot of work growing computer science education both at her time with the College Board and since moving to Georgia Tech. She’s smart and understands the sort of politics that are involved in growing CS education. Michelle Friend was very important to the creating and early years of CSTA.  Her institutional knowledge of CSTA is very valuable.

I’m still thinking about this one and hate not to vote for Michelle but am leaning towards Lien Diaz.

[Full disclosure: I suggested myself as a nominee for the At-Large opening. I don’t doubt that either of the nominated candidates will do as well or better than I would.]

OK people. My two cents are out there. The CSTA Board candidate bios are available. Read them critically and make your own decision. Agree or disagree feel free to add you two cents in the comments.

Friday, February 22, 2019

Don’t Trust Algorithms You Can’t Read

I admit that I am a sucker for “the best [what ever] in each state” lists. I want to see how many I have visited and what is “the best” in my state. Most of these are based on someone’s personal opinion but others are based on some sort of data and an algorithm.  I think most people are aware of bias in the subjective lists and take them with a grain of salt. It is tempting to look at lists based on data and computer algorithms and more accurate though. I mean, look, it is supported by data!

The most recent example of this was a list of the most boring towns in every state. I was sure the town I live in had a short at that one. There is nothing to do. One country store is the only retail operation I know of in town. There are no attractions, unless you count the beehive hut or maybe our historic meeting house. We didn’t make the cut though.

The town that did make the cut for New Hampshire was Bartlett. Now Bartlett has an outstanding ski resort, Attitash, an amusement park, Storyland, and a lot of good places to eat. There is a lot to do in Bartlett. It is anything but a boring place.

The problem, of course, is the data selected for the algorithm. They based their decision in large part on average age and population density. My observation is that a lot of resort areas, which are almost by definition not boring, have low full-time population densities and older permanent residents. Now they also look at “things to do” but it is far from clear where they get that data.

Choosing the right data is part and parcel to getting a good result for any sort of algorithm. This is why transparency of data and algorithms is important in evaluating any conclusion.  This is an important concept for our students to understand. To me it is as much a computing topic as it is a societal topic. As we get more and more data and more and more people try to make sense of the data we have to understand that just because there is data in to an algorithm and a result coming out that is not enough.

I haven’t heard it said much recently but we used to say it a lot.

Garbage in, garbage out!

Friday, February 15, 2019

Minecraft Curriculum for Teaching Computer Science

I'm not a Minecraft person. I've had the demos. I know that some kids really get into it but … Well, some teachers love it as much as the students. For them it’s probably a great thing if there was some curriculum to use with it.

So, if you do like it and you think it would be motivating to teach computer science using Minecraft for Education there is new Computer Science Curriculum From Minecraft

Thursday, February 14, 2019

US Department of Education Needs CS Experts as Reviewers

I recieved this from Pat Yongpradit of Code.org and thought I should share it.

The US Department of Education has announced the EIR grant competition for FY 2019. This year EIR incorporates an exclusive priority for computer science with a focus on increasing diversity and equity in access, as compared to last year where the highlight was that CS was merged with STEM as a combined priority. See more detail in our blog.

There are many moving parts to the federal grant review and award process, including a merit-based review process. In order to adequately score grants featuring computer science, the US Department of Education must have enough reviewers with K-12 computer science education experience. There is more information on the merit-review process and the Department’s mechanism for selecting reviewers in this blog.

Code.org has been asked to put interested folks in touch with leaders of the EIR grant program. If interested, please send your CV to EIRpeerreview@ed.gov.

Having CS knowledgeable reviewers participating in the federal grant review process is crucial to maximizing the opportunity these grants present the field and our collective goal of expanding access to K-12 computer science.

Monday, February 11, 2019

Programming Has Sure Changed

Last week, I was reading some old code. I wrote it in 1975. It was in FORTRAN IV and it was on punch cards. Really bad code. One character, meaningless variable names. Lots of goto statements. FORTRAN IV didn't have while loops but you could get the same thing with goto if done right.

Someone is probably going to argue that if there are goto statements its not right but it was the only way back in the day.  The famous “GOTO considered harmful” paper had  been written but not universally accepted yet. FORTRAN IV had not adopted language features to make it easy yet.

While I was in university the big new thing was called structured programming. It required some new ways of design and eventually some new programming language features. It took the tools in the languages changed before we could get by without that nasty goto statement.

FWIW I’ve written new version of this program in other languages since and it is much easier, cleaner, self-documenting, and just better across the board with new languages, libraries, and programming paradigms. The basic algorithm is the same though.

The big surprise in my old program was that is was extremely well commented.  The first time I tried to replicate that program in a new language revisiting those comments saved me a lot of time  In fact, one could easily rewrite it in a new language from the comments alone. I could at least feel good about that.

Latter in my career, object oriented programming was the thing. That also required new design considerations and programming language features. FORTRAN IV could not have supported OOP. Today there are versions of FORTRAN (and COBOL too) that have language support for object oriented programming. I’m not sure I want to see them though. Just saying.

I’ve been thinking about what this means for how I teach students today. The rate of change in computing and programming is growing not slowing down. As much as things have changed in the last 45 years they are likely to change even more in the next 45 years.

Some concepts are likely to be around forever. Decisions are likely to rely on Boolean expressions. Repetition is likely to stick around and require proper set up, values to change, and code to check for completion.  We’re going to be thinking about memory and data types even if we don’t think about them in exactly the same way.

John Ruskin said, "For all books are divisible into two classes, the books of the hour, and the books of all time." I first saw that on the library wall when I was in university. The same is likely true if we substitute some software design concepts. Just as monolithic programs gave way to structured programming and structured programming gave way to object oriented programming, programming paradigms change based on changes to language, hardware, and the needs of the day. I don’t really know what changes we will see with quantum programming for example.

What ever programming language we teach with though we need to think about the concepts, especially foundational concepts, that are likely to be around for the long term. I haven’t programmed in FORTRAN IV in decades but understanding how those horrible goto statements mixed with line numbers and if statements worked sure made understanding a modern while loop easy.

Thursday, February 07, 2019

Programming Projects and the Good Idea Fairy

I think Garth Flint (blog at Garth's CS Education Blog) first introduced me to the idea of the good idea fairy. The good idea fairy strikes you with a great idea that works out well (most of the time) but takes you more time to deal with than you first expect. That is probably why you take the idea in the first place.

Well, last semester the good idea fairy visited the idea of a Pez dispenser object  when I was teaching creating of classes and objects in my honors programming class. The implementation was horrible but it did seem to help as one more example. Follow up to a few days ago and the new call for proposals for the annual CSTA conference. What do I have that is a nifty project? I’m still trying to decide what might qualify but the good idea fairy smacked me with the Pez project.

Even before I looked at the old project and realized how bad it was the good idea fairy suggested that a Pez dispenser project really should use a stack object. Well, duh! I and others have been using a Pez dispenser as an example of a stack for years. So that is what I have been working on lately.

I need a Pez candy class first. I think that will be easy for students to design. The data is simple and the methods are few. Then we can design the dispenser class. I think it will be interesting to see how different students design these classes from how I have been thinking about them. I’ll be disappointed if I don’t learn something from them or at least get some ideas for other methods and properties.

I’m constantly trying to think of new projects and improve existing projects. Finding projects that students can relate to, that they can have fun with, and that can really teach to concepts is a never ending task. It’s a task I love though. Wouldn’t it be horrible to teach the same projects year after year? Thank goodness for visits from the good idea fairy.

Monday, February 04, 2019

Supply and Demand in Computer Science Education

We have a supply and demand problem in computer science education. Demand has never been higher and it is growing.  The need is real. Take a look at We need as many Computer Science minors as we need Computer Science majors. by Doug Bergman  (@dougbergmanUSA)

I remember having conversations about increasing CS in middle school and what it meant for high schools. What if high schools had a lot of students wanting to do more CS when they got to HS? We've started building up HS CS but we never really asked what was in university for our HS students who got very interested in CS. Now we have to wonder.

Mark Guzdial @Guzdial) in The growing tension between undergraduate and K-12: Is CS for All, or just those who get past the caps? explains the capacity problem at the undergraduate level. Now not all schools are overflowing and the problem is worse at the “big name” schools. Other schools are likely to stat feeling the pinch as HS CS output increases though.

My understanding is that recruiting more CS faculty in undergraduate schools is even harder than recruiting for HS CS teachers. Maybe because we don't require PhDs to teach in HS?

All levels are faced with the problem of industry "eating the seed corn" by hiring for good pay people who might also like to teach computer science. The TEALS program lets industry professionals teach in high schools and volunteers but I don't see that model fitting in universities.

Universities tend to undervalue industry professionals as instructors and evidence by the second (or third) rate status of adjunct professors and the corresponding low pay. Fixing the shortage of undergraduate faculty is going to cost money at a time when administrators seem all about cutting expenses. Some universities are getting some faculty from industry but since for many people coming from industry it is a life style decision not a monetary decision its unclear how often that will work. And while some industry people make great teachers it can be a hard move for some as well.

My biggest worry is that we’ll get students all excited in CS in high school and they will have no place as undergraduates. Not everyone will or should be a CS major, as Doug points out in his post linked above, but a lot of people will want to take CS as a minor or at least take a couple of courses. How will universities handle this?  It’s going to be interesting.

Friday, February 01, 2019

What is a variable and why is it so hard to understand?

Variables in computer science are complicated. No, really they are. I didn’t consciously  realize how complicated until I read “What is a variable?” on the blog at CACM. Reading that article, which was not an easy read for me, did give me some insight as to why philosophy majors so often make good software developers. I’m not sure I want to have my beginning students read it though. It may leave them with more questions than answers. Maybe in an advanced placement course?

When teaching beginners we need to keep things simple and we have to remember that they don’t have the same base set of knowledge that more experienced people have. So what then is a variable?

A variable name is first of all an identifier. We have lots of identifiers in computer programming. Method names, object names, class names, and variables which are identifiers for something. What is that something?

I like to talk about variables as locations in memory. I used to say boxes but I’m not sure that really works. Students know, or should, that everything is stored in memory as ones and zeros so suggesting a location in memory feels more logical to me. The obvious next question is how big is that location. The answer depends on what is stored in it.

I talk about parking spaces in a parking lot. There are different sizes of spaces: Motorcycles, compact cars, regular cars, and trucks and busses. Spaces are all different sizes and the most efficient use of them is to hold the vehicles they were designed to hold. A motorcycle in a spot for a semi-trailer truck is wasting space. A large truck will overflow as space for a compact car. Size of the memory location depends on what is stored in it. Space can be wasted if a larger space than is needed is allocated.

Size and type are then related attributes or properties of the memory location named by the variable name. So is the variable the location or the name? Does it really matter? Probably if you want to get into the philosophy behind it all but not something beginners are really ready to get into. Maybe it is enough that they know how to declare and use a variable in the first course.

In many ways the first programming course is the hardest to teach and perhaps the hardest for many students to take. Finding that line between deep understanding and too much information to handle at one time is not easy.

Thursday, January 24, 2019

Computer Science Standards and Frameworks

I’ve been thinking a lot about computer science standards and frameworks the last couple of days. It’s all Mark Guzdial’s fault because he posted Frameworks and Standards can be limiting and long-lasting: Alan Kay was right Following Mark’s post are (as I write this) 38 comments. Some of the longest and most thought provoking have been from Alan Kay. Yes, that Alan Kay

This was hard to read for me because I was involved in writing the Framework and invested a lot of time in it. I thought I was doing a good thing. But I can see some of the flaws with the benefit of time and an outside view from many smart people.

I was also on the CS 2013 task force so I have seen two different processes for two very different documents. I do, and always did, wish the Framework process could have been more like the CS 2013 process. I feel like the reviews between drafts of the CS 2013 were done better with solid input from many and varied outside reviewers. There were both too many and two few people involved in the  K12 CS Framework. Too many doing the actual writing and perhaps too few doing reviewing.

For an other thing, I felt like the Framework writing became a lot more about how things were said (worded) than what was said. Not that what was said wasn’t important but that politics drove the working. Perhaps that is because I joined the writing team late in the process but I still wonder if the emphasis was right.

I’m still thinking about some of the comments from Alan Kay on Mark’s post as well. Especially the section below from his comment on my comment.

I’ve always been a big enthusiast about Jerome Bruner’s idea that *for every learner you can (and need to) find an intellectually honest version of a subject they can learn if you heed their level of development”.

In order to do this, I think you really need to have a good picture and as good as possible a definition of the subject before trying to find “intellectually honest versions of it” for different kinds of learners.

This was not done for the CS Framework. If the subject were physical sciences, one would first start with top scientists to put together a workable picture of the sciences as the best people in the field see them at that time.

So how to I look at the existing framework and standards (either CSTA or as adopted by my state)? Should I write my own “standard” or more accurately named “Alfred’s list of what I think high school students should know about computer science at graduation?” It might be an interesting intellectual exercise but would it be valuable?

As a classroom teacher I don’t spend a lot of time looking at how my curriculum matches a standard or a framework. Maybe I should. My wife can tell you all the standards she is working to follow in her curriculum.

Teaching at a private high school I have more flexibility and self determination than I suspect teachers at public schools have. I have also spent a long time in the computing field as both an educator and an industry professional so I have a sort of confidence (ego perhaps) that I can decide what students need to know. Students seem to be well prepared for university, or so they tell me, so I can live with that for now.

The problem is what to specify for newer, less experienced (more modest?) teachers. The Framework was one attempt and it was well-meaning I am sure. What we need to do is not so much focus on its flaws but discuss where to go from here. And who should lead the way!

Thursday, January 10, 2019

Lecture As Performance Art

Mark Guzdial posted a link to an article about him (The social justice case for computing: transforming tools for some into a language for all  – you should read it) that had a picture of him teaching. His comment on Twitter was that “Pictures of me teaching look like I'm either a preacher or a Jazzercise instructor.” Shuchi Grover suggested “Bollywood’s greatest actor.” Now Mark is a great speaker, very dynamic. And really dynamism is a hallmark of good presenters.  A number of professors have large YouTube audiences because of the way they present material.entertained

Now I know there is often pushback from teachers saying that their job is to teach and not to entertain. Let’s face it though, all the “teaching” in the world is of little use if no one is paying attention.

Not everyone is a great entertainer. Lots of them are in the “lecture is dead” school of thought too!  There is a lot of pressure to be the “guide on the side and not the sage on the stage.” Personally I think most material needs a mix of the two though. Students need somewhere to start and often that means a lecture of some sort. BTW showing a video is a form of lecture not matter how cool the sound and graphics are.

If we’re going to stand in front of an audience we owe them our best efforts. I’m a firm believer that part of what makes a teacher, and a lecture, a good one is the presenter's enthusiasm for the topic. If you are really enthused it will show and it will be contagious.

I’m always amazed at how little formal training most educators get in presentation skills. One would think that would be a regular occurrence. When I worked in industry I was given a mandatory presentation skills training about every second or third year. Eventually I hope to get good at it. I’ve noticed at events with both educators and industry people presenting the industry people are often the most polished and, yes, entertaining, presenters.  Industry speakers often get salary reviews based on the reviews they get from giving presentations. Educators are evaluated differently of course. And that’s not bad.

With as many distractions as students have today we really have to up our presentation game though. No, we are probably not entertainers by a strict definition perhaps but at least we have to be interesting. And give students some reasons to stay awake.



Wednesday, January 09, 2019

Everything Old Is New Again

I try not to throw code away. I have punch cards in my attic that are over 40 years old. I also have a bunch of code from my university days on a magnetic tape (a DECtape) that I will probably never be able to recover. But a lot of code since the PC era I still have in accessible form. Today, Facebook memories reminded me of a blog post I wrote 10 years ago today. Next step was to look though my archives for the code it referenced.

I haven’t thought about the project, parsing a string to evaluate its strength as a safe password, in  some time and thought I might want to use it in one of my courses. Honestly, I didn’t remember my algorithms and while I could think of several ways to do it I thought a memory boost would be fun.

It turns out I have a second example that someone else, another teacher who shared his projects with me, had written. Comparing the two programs was interesting. There are, as usual, more than one way to solve a problem like this one.

With two very different solutions and some other options that have popped into my mind while thinking about the project I am rethinking how to use this project.

Typically I would just assign the project and see what solutions students come up with on their own.

On the other hand, I could provide a structured set of recommendations. Various ways of implementing scaffolding would leave more or less flexibility for the student. Still musing over that.

Another option is to provide students with several code examples and ask them to evaluate them. I see a couple of benefits to this plan. Students would get some valuable practice in reading other people’s code. We don’t do enough of that in my opinion. It would also show different techniques (tools if you will) that they may want to incorporate in their own future projects. And it would allow us to have some conversation about efficiency.

I’m still noodling on these ideas but I thought I would toss my thinking out for comment. What do you think of these various ideas? What would you do?

Tuesday, January 01, 2019

Happy New Year 2019

I’ve been thinking about this post for the last several days. My usual practice has been to start the year with a list of things I want to watch in CS education during the coming year. As I look at last year’s list (see Looking Back on CS Education in 2018) I don’t see a good list for this year. The things I’ve been watching have largely matured. The next big growth area is not clear to me.

Sure we’re making progress in getting computer science education for more and more people. Of course there is more to do and room for growth but it feels like momentum is going to carry us through.

So this year I am thinking about what I can do to give my students an edge. What can I shoehorn into my curriculum that will go beyond the average. There are people who way ahead of me of course. Doug Bergman and David Renton at Porter-Gaud School are doing amazing things. A number of the career/technical schools I know of have room in their curriculum for a lot of things I haven’t been able to fit into mine. Likewise, there are a number of magnet schools covering some really advanced topics. Most of these have more room in their curriculum for CS than my school. That means I need to do things differently.

I suspect that most teachers at comprehensive or college prep schools have some similar time limitations. We have room for only so many courses. In may case I have what seems like a lot of options. We teach some programming in our freshmen course (it’s only one semester long and we cram a lot in already). I have a one semester honors programming and a one semester mobile application programming course. In both of those we get students to the point that they can do interesting things and then the semester is over.

We offer both Advanced Placement Computer Science courses. They're both a full year long but it feels like they are pretty constrained. I only teach the Principles version so playing with APCS A is a moot point for me.

The AP courses are a problem of sorts. As they say, a blessing and a curse. Parents and administrators love them. They help make schools look good to parents. They make students look good to college admissions officers.  There is lots of well-developed curriculum and professional development for teachers. What’s not to like?

But you wind up teaching to the test. It’s almost unavoidable. Your curriculum plan has to be approved by the CollegeBoard for starters.  While you can get clever about things like projects, tools, and for APCSP even languages there is always that constraint about what is on the test that you have to focus on. If APCS is the only course one teaches you probably have the type and energy to get really creative. If you teach four different courses (as I do) it can be a bit overwhelming to make big changes to the AP CS course.

The path of least resistance (for me teaching APCSP) is to use the developed curriculum and teach using that. The code.org APCSP curriculum, which I am using,  is pretty amazing for teaching that course. Since I have two other courses I teach alone based on self-developed curriculum there is some strong motivation to spend time on those.

What I want to squeeze in somewhere are cloud computing, Artificial Intelligence, and Virtual Reality development. I don’t really know enough about any of these to know how hard it will be to fit any of them in or where they would fit logically. If I had a year long course after my honors programming class that wasn’t constrained by the AP curriculum I would recruit a group of smart curious students (plenty of them around) and we’d all learn together. Alas, that is not currently an option for me.

My current thinking is to try and learn more about one or two of these on my own and by the summer have an idea where I can fit some of it. Amazon Web Services has AWS Educate which I have signed up for. It has a bunch of free resources and training. Seems like a good place to start learning the cloud. It looks pretty well set up for teachers as well. SO that is the cloud piece.
Next is either VR or AI. VR requires some hardware to do right as far as I can tell so I have to factor that in. Both AWS and Microsoft have some AI that can be used. Since I already know about the AWS resources I may start there with AI.

VR is pretty exciting as well and there are some great resources for using Unity with C# for that. I already teach C# using Visual Studio so going the VR route may be a good option.

I hope to get my current semester long courses in good enough shape during the school year that I can really deep dive into the cloud, AI, and VR over the summer. Not that I will wait until then to start but that will be when I can get deepest. And of course the search for resources for my own learning, for teaching, and for making this stuff fit goes on all the time. Let me know if you have links to share.
So basically my message is, 2019 has some serious potential.