Wednesday, November 13, 2019

Not Too Easy and Not Too Hard

We’re covering Classes and Objects in my Programming Honors course this week. Specifically we are learning how to program classes in C# and use them in programs.  The struggle for me is to come up with classes that are interesting to students, practical for them to use, and not overly complicated. This is not Advanced Placement computer science A and we don’t have a whole year for the course.

I start with a simple Dice class. Easy enough as an introduction . I also live coded a Coin class. The difference being that I added images to the coin class to show them that more interesting objects can be used in classes. So what next?

Things I have used in the past include a playing card class. Interestingly enough this has had cultural implications. I have international students who are not always as familiar with American playing cards. But it works. There are a lot of pieces to playing cards and you can do them simply (face value and suit) or complicated (Face value, suit, nominal value – face cards are 10, front and back images, suit color, text names, etc) Methods and constructors can get interesting to say the least. So can creating programs to use the “cards.”

I tried a Pez dispenser class once. I do have a 12 inch Pez dispenser on my desk after all. I’ve done it the simple way with just a capacity value and a current count value. What I would really like to do is use a stack in the Pez dispenser class and have candy objects to put in it. If I were teaching APCS A and had time to cover stacks I would do this for sure. But I don’t.

I’ve thought about revisiting some of the class projects from prior AP courses. Anyone remember BigInt? I kind of liked that one. I did more with the Marine Biology Case Student but my students never really liked it. They called it the DAF – Dumb Ass Fish case study. Both may be a bit much for the time I have though.

I had some fun with a quiz question class last year. Data included the question, an array of possible answers, and an index of the correct answer. I liked that for showing how flexible array parameters could be. A true/false question is just a question with two possible answers. The next design question is of course do you have a simple array of questions or do you design a quiz class? If a quiz class, what does that even look like? Might be fun the have students try that design.

I’m still playing with more ideas. I’ll have to use something tomorrow but maybe the good idea fairy will hit before Monday. Suggestions anyone?

Friday, November 08, 2019

Define Better

Someone posted an interesting question on Facebook.

Is using ++i(pre-increment) better than i++(post-increment) ?

My reply was to ask for a definition of “better.” The Facebook posts have a lot of answers from people who appear to not have written a compiler themselves and who making a lot of assumptions. But the point of this post is not to discuss which option is better for some nebulous definition of “better.” Rather is is to think about asking the question of what do we mean by “better?”

There are a lot of what I call religious arguments in computing. Tabs or spaces, curly braces in columns or have the open on the end of a line, what is the best programming language, and on and on. Most of them stem from differing definitions of “better.”

Sometimes things matter very much at one point in time but not at all later and yet the bias from early days remains. There was a time with memory was so tight that a single character variable name was much preferred to a longer more descriptive name because of the space used. Most of my readers probably don’t remember those days but I do. Fortunately I recognized when the change happened. Not everyone did so quickly.  This is possibly at the heart of some of the tabs vs spaces argument for at least some old timers.

Other issues have become moot or mostly moot because we have so much smarter compilers and interpreters these days. We have long been at the point where compilers write better low level code from high level code than even the best assembly language coders. I seriously doubt that there is a difference between the code generated for ++i or i++ as the incrementor in a for loop these days. Compilers are too smart for that. Compiler writers think long and hard about those sorts of things.

How doubly dimensioned arrays are declared used to make a bigger difference than it does today. I can remember thinking long and hard about how to declare and iterate through two dimensioned arrays. You pretty much had to know how the compiler would allocate memory and what cache would look like to get optimal performance. I don’t think many people think about that today except for the most performance critical applications. Applications we don’t give to beginners anyway. Compilers do a lot of optimization on this sort of process so we don’t have to think much about it. Artificial Intelligence and machine learning (see also AI-assisted Programming) are probably going to make compilers even better than they are today.

Today I think “better” in terms of programming should mean “easier for programmers.” Easier to write, easier to understand, easier to modify, and to allow programmers to think about the end result and not the assembly/machine language generated.  Let the software do what software is good at and people do what people are good at.

Thursday, November 07, 2019

AI-assisted Programming

As I said in yesterday’s blog post,Microsoft has been running their big MSIgnite event this week and making all sorts of announcements. One interesting announcement what improvements to what they call Visual Studio IntelliCode.  The idea is that they are using machine learning to help programmers with writing code. In the latest update are whole line completions and refactoring. Interesting.

I haven’t seen IntelliCode in use before and it is probably because it is not turned on by default. I did some searching and found that it can be turned on as an Extension (I had to search a bit under the Manage Extentions option) and then you can customize aspects of it from Tools –> Options –> IntelliCode. Oh, and you need Visual Studio or VS Code 2019 for this. I am using Visual Studio 2019 Community Edition which is free.

SO far I am not seeing obvious help from it but it may be that I have to do something more complicated in my code or write more code first. It does apparently take context into account for its suggestions and I may not have given it enough yet. But I’ll keep playing. And maybe I should look for some video demos online.

There are other things to think about though regardless of if it has been useful already. What is the training like? The write up I have seen says that it learns from examples on GitHub. Initially that scared me as literally anyone can upload to GitHub. One reference I found said  something about the 500 best repositories on GitHub. What ever that means. And what was the criteria for “500 best?”  What sort of standards will this learning suggest?

Some of the documentation talks about options for using other databases of code to train the system so that businesses can train the AI with their code and standards. As a teacher I wonder if there could be a training set for AP Computer Science A? I think Java is supported with IntelliCode in Visual Studio Code.

No doubt some will complain that it is “too much help” for beginners but I’m not sure about that. You still have to know enough to take or reject suggestions for one thing. And having the computer tell a beginner something like “you should make a method to reduce this redundant code” might be better received than the same comment from a human teacher.

Will this help students learn more or dumb down the process? I’m an optimist and think it will be a good thing. What are your thoughts and concerns?

Wednesday, November 06, 2019

Visual Studio Online–Possibilities for Education?

Microsoft has been running their big MSIgnite event this week and making all sorts of announcements.  One of them was a cloud-based development environment called Visual Studio Online.

OK, that looks interesting and I will probably try it out soon. It may be an answer for people pushed to Chromebooks,  others who are at one to one bring your own device schools, or just want students to wrote programs from home. I wonder how it works on otherwise underpowered older computers?  There is some concern about costs and that is something I need to understand.

Maybe I can find someone with an education focus at Microsoft to explain how it might work cost effectively for schools and students.  Or maybe I can figure it out through all the marketing hype. We’ll see but it sure does look worth looking into in more detail.

Question added later: I wonder if this will let me develop iPhone apps without buying a Mac? Anyone know?

Monday, November 04, 2019

CSTA at 15 #CSTAat15

The Computer Science Teachers Association is now 15 years old. I’ve been a member from the start and I have to say that in some ways it feels like it has always been there but in other ways it feels like it just started.  There was a K-12 computer science education community before CSTA. But it was small and one could easily feel alone. CSTA brought a new sense of community and togetherness. Most of all, perhaps, it brought us organization and a stronger sense of belonging.

There was the CS & IT Conference (now called the CSTA Annual Conference)  before CSTA as well but it didn’t have the same feeling of permanence and sustainability that CSTA brought to it. CSTA brought growth and strength to the conference. It’s been the annual highlight of my professional development for years now. Presenting at several of these conferences has been a huge privilege and honor. And added to my learning as well.

After I left industry some years ago I ran for and won a seat on the CSTA Board. What a wonderful experience those four years were. Hectic as we changed Executive Directors during that time. It was a real time of transition. That wasn’t as smooth as many of us would have liked and I think we experienced some growing pains during those years. We’re on our third ED now but things seem to be well on track. Kudos to the Board (after me) who lead the way through the last couple of years and another ED transition. We have an amazing board at CSTA who work very hard for the membership.

The growth of chapters has been a big part of the CSTA story.  Fairly early on, CSTA developed programs to train and prepare chapter leaders and that has paid off in spades. There are more and stronger chapters than ever before. CSTA is both national AND local and that is important.

CSTA has helped train advocates among teachers and support them locally. CSTA members have advocated, lobbied, pushed, and otherwise promoted CS in their states, counties, school districts, and yes even nationally. Some of the companies and other groups get a lot of credit for the growth in computer science education in the US but the real heroes are individual teachers who alone or with other CSTA members did the ground work to make things happen.

From conferences to board membership to involvement with committees and connections with life long friends CSTA has been an important part of my life. I can’t wait to see what the next fifteen years bring.

Friday, November 01, 2019

Magic 8 Ball and Projects From Real Life

There has been a 12 inch tall Pez dispenser on my desk for a couple of years now. It’s a great visual aid for talking about stacks. Today I got a Magic 8 Ball as well. It turns out that a lot of my students were unfamiliar with this staple toy of my youth. Since I really like using the Magic 8 ball program as a demonstration I decided I really had to get a physical ball.

At this point in the semester we have covered loops and arrays and it is time to make programs more interesting by adding more data. I want to use something that makes sense and is not just a demo without meaning or purpose. Having code you can have some fun with is always a plus as well.

I went to Wikipedia and found the classic 8 ball answers and placed them in a text file. My demo reads the file into an array when the program loads. Once the array is built clicking a button displays a random answer. It’s pretty simple to code and we code it together as a class. Students love asking it questions when we’re done.

Usually I have students add their own answers to the text file and then modify the program to handle the new set of answers. We also talk about different ways this could be coded. What if we didn’t know how many answers/lines were in the file? Would be use a different loop and/or a different array type like an arrrylist? What options (methods or functions) should we use to provide the most flexibility?

This also provides students with some sample code to look at when I assign larger projects and expect them to do much more on their own. Is this a good project? Magic 8 ball says “Yes definitely.”

Friday, October 25, 2019

A Loop By Any Other Name

My first programming language was FORTRAN IV. As I recall we had Do loops. They worked pretty much the same as what we call For loops in most languages today. We didn’t have while loops but we did the same sorts of things with line numbers, if statements, and the powerful but “evil” Go To statement. As time went on I learned more ways of specifying looping constructs including recursion. Recursion took me some time to wrap my head around. Possibly because I used some languages that didn’t even support it back in the day.

These days there are all sorts of iteration loops of various complexity and power. For a software developer that is wonderful. For a teacher? Well, it means you have to make decisions about what to teach. For a one semester, first programming course I like to keep things simple. A C-family For loop has all sorts of possibilities from the simple to some pretty complex structures. Eventually students will learn many of them but I could probably spend half a quarter just on For loops if I tried to get everything possible in and understood. The cognitive load on some possibilities feels like it would be too much for many students.

Mostly I try to focus on the base concepts. A loop has a set up piece. Variables are set to a known starting state. A loop has some sort of comparison it see if it is finished. A counter it checked, a flag is checked, or maybe an interrupt happens. But something has to stop the loop sometime. usually but we can get into those times when an infinite look is useful later. And of course something has to happen that changes the values or states that the loop is checking.

Understanding these concepts will, I sure hope, prepare students for what ever syntax or iteration style they run into over time.

When we teach students for a career rather than just for a job the concepts are much more important than the programming language or the IDE. Concepts – what a concept!

Tuesday, October 22, 2019

How Many Words in That Text?

One of the projects I have used for years is a letter counter program. The idea is to count the occurrences of each individual letter. It’s a nice project that includes arrays, loops, and some string manipulation. This is the sort of thing that does have some real world utility. Cryptography uses word counts to try to crack substitution cyphers. Linguists use it to study languages. And that is just two of what comes to mind.

The next logical (to me anyway) step is to count words. I’ve been thinking about adding this in for a while. It is actually something I was assigned as a project many years ago when I was an undergraduate. It’s not as simple as counting letters. The most obvious method involved counting spaces. What happens if someone is old school and places two spaces after every period? Well, that is something to take into consideration. And what about other white space like tabs or line feeds? Or special characters?

Doug Peterson related in a recent post (About words) that two different programs gave him two different word counts for the same piece of text. The counts were off by 3 on a text of about 486 words. Not a huge percentage but on a book length text that could make a difference. Some articles in magazines are paid by the word. That means getting the count right means money.

Now people can count words with greater accuracy though I don’t want to do it myself. At some point someone is going to feed a lot of data into some artificial intelligence. Long sections of text that have accurate (human counted perhaps) word counts will be fed in and the AI will learn what words are and how to count them. It’s not going to happen until someone decides that developing this is worth the time and money. I wonder if it will be an academic or an industry researcher?

For the time being I think this will make an interesting conversation in class. Maybe we’ll have a contest to see  who can come up with the most accurate algorithm?

Friday, October 11, 2019

What Time Is 30 Minutes From Now?

Got the proctor guide for the PSAT that I have to proctor next week. There is a chart to help proctors determine stop times that are 25, 35, 50, and 60 minutes from a time after the start time hour.

Wait! What? Someone needs a chart to tell them that if the start time is 5 minutes after the hour that 60 minutes later will be 5 minutes after the hour? Apparently someone does. Or someone thinks some one does.

Some of my students, when being told to return to class in a half hour, ask me what time that will be. I blame the analog clock. That and laziness.

So obviously I am wondering, should there be an app for that? Yep, I found a new coding project. Now I just have to decide which class to use it in.

Thursday, October 10, 2019

Michael Backus Alaska Middle School Computer Science Teacher

Every so often I run into a computer science teacher’s work online and ask myself “how have I never heard of this person before?” This week I listened to a podcast by Vicki Davis with a middle school CS teacher from Alaska by the name of Michael Bachus. (How to Make Programming Easier) This guy is doing some cool stuff with middle school students. Robots, artificial intelligence, hardware  and software, and helping a lot of teachers do the same.

Michael Backus teaches computer literacy and computer science at Teeland Middle School in Wasilla, Alaska. As the creator of the http://www.akrobotnerd.com, he has shared many projects that he has developed over the years, the most famous being his Artificial Intelligence with Arduinos curriculum.

Vicki Davis has a lot of great interviews as part of her daily 10 Minute Teacher podcast. She’s had me on a couple of times as well.

In any case, listen to this podcase and check out Michael Backus’ resources. Curriculum, videos, projects, and it looks like a lot more.

Someone needs to get him to CSTA to present some time.

Wednesday, October 02, 2019

ACM/CSTA 2020 Cutler-Bell Prize in High School Computing

Applications for the ACM/CSTA 2020 Cutler-Bell Prize in High School Computing are now open. The deadline is 12 January 2020.


The Award

The ACM/CSTA Cutler-Bell Prize in High School Computing is a prize designed to recognize talented high school students intending to continue their higher education in the areas of computer science or technology. The program seeks to promote and encourage the field of computer science, as well as to empower young and aspiring learners to pursue computing challenges outside of the traditional classroom environment. The prize is a made available through a $1 million endowment established by David Cutler and Gordon Bell. Dr. Cutler is a software engineer, designer and developer of several operating systems including Windows NT at Microsoft and RSX-11M, VMS and VAXELN at Digital Equipment Corporation. He is Senior Technical Fellow at Microsoft. Dr. Bell is an electrical engineer and an early employee of Digital Equipment Corporation where he led the development of VAX. He is now a researcher emeritus at Microsoft Research. Up to four winners will be selected annually and each will be awarded a $10,000 prize which will be administered through the financial aid department at the university the student will attend.

Eligibility

To apply for the Cutler-Bell Prize, you must be a graduating high school senior residing and attending school in the U.S. Challenges for the award will focus on developing an artifact that engages modern computing technology and computer science. Judges will look for submissions that demonstrate ingenuity, complexity, relevancy, originality, and a desire to further computer science as a discipline.

Tuesday, October 01, 2019

2019 Champions of Computer Science Awards

Know a student or teacher or administrator who has achieved something this year to increase access and quality of CS education. I can think of a number of people who should be nominated. Maybe you can think of someone as well? Don’t assume they will nominate themselves! Deadline is midnight Pacific Time October 21, 2019.

2019 Champions of Computer Science Awards

The Award

Tell us about a student, educator, administrator, or organization that has achieved something in computer science this past year for the opportunity to be recognized as a 2019 Champion of Computer Science. These awards are a collaboration between CSTA and Code.org.

The Champions of Computer Science Awards identify and promote students, teachers, administrators, and organizations who have made a significant impact to improve access to and the quality of CS education.

Eligibility

Any K-12 student, teacher, or administrator may be nominated for the Champions of CS Awards. Organizations that work directly to improve access to and the quality of CS education may also be nominated (examples: afterschool coding clubs, local CSTA chapters, regional or national nonprofits, etc.).

Nominations

Award winners and a guest of choice will receive an all-expenses paid trip (travel and hotel) to attend the CSEdWeek event on December 9th (location to be confirmed). This opportunity is only available for US submissions.

This form closes Monday, October 21, 2019 at midnight PT. Email awards@csteachers.org if you have questions.






Monday, September 30, 2019

The Problem Of Cheating on Programming Projects

This seems to be the year a lot of people are really getting concerned about cheating on computer science programming projects. There has been some discussion of the issue on one of the mailing lists I am on. Garth Flint blogged about it at Finding cool projects for programming classes. And I caught a student searching for exercise solutions for Code.Org’s AP CS Principles course work.

Of course cheating on programming projects is nothing new. I know that people shared punch cards back in the early days. Yeah, I’ve been around a while. I have also caught students sharing code via Google Docs. With the tools we have today, cheating has never been easier. Solutions to popular coding projects are easily available on the Internet and found using search engines.

It’s amazing that students don’t think teachers can recognize and then find solutions that a student copied from the network. We can and we do.

One common refrain I hear is that professionals get code off the Internet. And they do. GitHub is all about sharing and reusing code. StackOverflow and sites like it are were professional and amateurs find solutions to their problems and use them. It is considered good practice to use these tools. But school is different.

School is about learning and projects are assigned both to provide practice and to evaluate what students have learned. Students have a tendency to grab code they don’t understand and try to shoehorn it into a project. Or to copy a while project and turn it in as their own. Interviews can usually determine is a student understands what they used or not.

Ideally though, students would only hand in their own individual work. That is better than catching them and docking them points. Today’s students have more pressure to get good grades and (apparently) less understanding of the correlation between knowledge of the material and those good grades.

Garth wrote in his blog about trying to come up with unique projects that don’t have solutions on the Internet already. That’s hard. It seems like a lot of us teachers think of the same projects. Or we get them from third party curriculum and textbooks. Once a project is in wide use solutions will appear on the Internet pretty quickly.  Even if a teacher does come up with a project that can’t be found on the Internet, if you have one really bright student who is willing to share their solution you can have cheating.

The only thing I can think of is making the issue part of a discussion of ethics and the meaning of school. Using code from the Internet correctly requires that students actually understand what they are using.  Students who cheat their way through are going to find themselves in a bind eventually. If not in post secondary school than in their careers.  Somehow we need to make them understand that.

Wednesday, September 25, 2019

If Statement Programming Projects

Over the years I have used a number of projects to give students practice using if statements – especially those that involved nesting or checking lots of values. Currently I am using:

  • Hurricanes – user enters a wind speed and the program reports the storm category
  • Voting – User enters an age, and checks boxes to indicate citizenship and registration
  • Pizza pricing – Base pizza prices plus add-ons for veggies, meats, or different cheeses.
  • Movie theatre pricing – a bit easy as there is only ages to check but ranges require some thought.
  • Ski tickets – prizes based on age and whether or not they are staying at the resort. I could add holiday/weekend of midweek as well.
  • Jumanji – If the random number generator “rolls” two dice whose totals are a 5 or and 8 let the player out of the jungle.

These all work fairly well. Students relate to most of those. Voting gets kids thinking about their future so that is a plus. Obviously decision structures show up in other projects all semester long but these have that as a special focus.

I’m trying to think of some new ones. Projects that are relatable and that are complicated enough to make students think but not so hard that they get frustrated easily. What are you using? What works well with your students?

Tuesday, September 17, 2019

Book Review: "Tools and Weapons"

"Tools and Weapons" by Brad Smith and Carol Ann Browne is a look at some important computing issues through a Microsoft lens. It is a pretty revealing look as the authors write seriously about the thinking behind Microsoft’s dealing with issues like the Snowden leaks, suits against the government about over reaching subpoenas, protection of users data, transparency, cyber security, and more.

I really like this line from the introduction "When your technology changes the world, you have a responsibility to help address the world you helped create."

There were several threads moving through the book. One was the need for building guiding principles for looking at technology and its uses. An other was the need for diversity among people developing technology and the guiding principles. There is frank talk about embedded bias in algorithms and how diversity is essential to fixing that problem. Responsibility for what technology does is another key thread. Without using these words, the book suggests that “should we” is as important if not more so than “can we.”

The chapters on Artificial Intelligence and facial recognition are the best look at the pros and cons I have read so far. Many people seem to have a doomsday view of AI but Smith and Browne have a more nuanced look; one that is not apocalyptic but more practical and near term. There is a lot to think about in these chapters but the picture painted is more about how we need to think about issues going forward than that we should either panic or be unconcerned.

I found the chapter on China very interesting. It was clearly written carefully to outline cultural and political differences without appearing to attack anyone. I might have preferred a stronger stance but I’m not the president of a global company.

One clear takeaway for me is that today’s Microsoft is not the same Microsoft as it was under Ballmer or Gates. Satya Nadella is a different sort of leader altogether and ethics and principles of a company are set at the top. Where Gates was naïve in some ways and Ballmer was focused on the bottom line Nadella, while not losing sight of the bottom line and still naïve in some ways (remember his gaffs about women getting ahead) looks at things differently, listens better, and is interested in the better good.

His decision to release Windows XP patches for the WannaCry virus for free is one I have to wonder if Ballmer would have made the same way. Maybe he would have but that I have to wonder is telling.

The book is not a difficult read. The language is non technical and technology is explained in layman’s terms. That is not to say that the book is only for non-technical people. I think technical people should read it. So should policy makers in both government and the private sector. It would make a great supplemental reading for an ethics course, especially for an ethics course for technical people.

One last interesting thought from the book. No one graduates from a US military academy without taking an ethics course but many people graduate with technical degrees without taking an ethics course. Maybe that should change.

Friday, September 06, 2019

Password Checking Tools

Neil Plotnick shared some Password Checking Tools on Facebook recently. I’ve used some of these in the past and find them useful and instructive.

The more security aware of my students always ask me how safe it is to use these websites. I tell them to use things they think are good passwords but not ones they actually use. Some of the sites make the same recommendation.

The first two sites above give an estimate for how long it would take a computer to brute force crack the password. The estimates don’t always agree. This is not surprising as they are probably based on some slightly different assumptions. The time scale is more important than the actual number though.

The third site explains why a password it strong or weak which is very useful. One thing that is interesting is the impact of special characters. I have run into a number of sites that don’t allow special characters in passwords. I find that surprising and wonder why that is. I’d rather require their inclusion.

Having students in a programming class write their own password checker is a great exercise by the way. It helps reinforce string manipulation, general parsing concepts, and password safety all at the same time.

Thursday, September 05, 2019

NCWIT Award for Aspirations in Computing

This is a great program for high school girls interested in technology. I have had several students get awards at the state level and they all say it has been a good thing for them.


Hello Educators! Applications for the NCWIT Award for Aspirations in Computing are now open! The deadline is November 5th, 2019. As an educator, you play a pivotal role in supporting the next generation of technologists. When 2018 AiC Award recipients were surveyed about their motivation to apply for the award, 65% of respondents named outside encouragement to apply. When asked about who most influenced the award recipient to apply, 62% of respondents named Teachers/Educators. Encourage your students to apply and spread the word!

When you endorse a student’s application, you are eligible and encouraged to apply for the NCWIT Educator Award. Applications are due December 2nd, 2019!

https://www.aspirations.org/participate/high-school

Wednesday, September 04, 2019

The Scratch Course For Teachers

This looks like a valuable free professional development course for teachers interested in incorporating Scratch into their curriculum.


"The Scratch Course" is a free, six week, online workshop style course for teachers interested in learning more about programming with Scratch. Originally created through funds from Google's CS4HS program, this course has served over 1000 teachers from around the world in the last five years. We are preparing to offer our fall 2019 section of the course starting on Monday, September 16. For more information about the course and to pre-register, visit: https://csed.uni.edu/scratch-intro/

Monday, August 26, 2019

Updating and Expanding Programming Projects

I’m always looking for new projects. I found an interesting example in the book “The Creativity Code” (Creativity Code review here). It was a poem generator that took random adjectives, adverbs, verbs, and nouns and fit them in “missing” spots in a template. It looked like fun but as I thought about it, it was really just a different version of a MadLibs type of game. It’s also similar in some ways to the Shakespearian insult project (have you seen the Shakespeare Insult Kit at MIT?)

What I would like to do is expand a project. That is to say I would like to take an existing project, like the Shakespeare Insult project and add something to it. Projects that grow and build as new knowledge is learned can be highly motivating.They mean students don’t have to start a project from scratch. This also reinforces the idea that programs can, and often are, modified and enhanced.

Currently my Shakespeare project teaches about parallel arrays. What I have been playing with is adding a class to this project later. An object of this class would store  array lists of strings and have a method to return a random string when asked. Retro fitting the new class should be fairly easy for most students. They will see how this simplifies code

insults.Next()

being easier than

insults[r.Next(0, 50), 0]

While simple at first I have realized that there are multiple constructors that should be created for this new class. An empty list and an object initialized with an array (or other list) at a minimum. Similarly there should be an Add method which would have several overlays – individual strings and an array of strings are two obvious examples. I am sure that student will think of others as we go along.

I’m optimistic that this idea will lead to some useful discussions about thinking ahead about how a class might be used and how it could be written to be useful in a number of different design cases. At the very least I had fun reviewing ArrayList as I wrote some code as a thought exercise.

Thursday, August 22, 2019

What I Want from Computer Science Education Professional Development

The CSTA 2020 Call for Proposals is out and as usual it has me thinking.   Two questions come to mind. One is, what can/should I propose to present? The other question is what do I want to learn? I think I have been to every CSTA conference (since it was the CS & IT conference) so I have attended a lot of sessions. I’ve presented quite a few times as well. So I have a lot of history to think about.

I don’t currently have any sessions or workshops I want to present. I keep asking myself is that is because I am not working hard enough to innovate or create new ideas. I suspect that a lot of people doubt if they are doing anything special enough to present. Some of those people are right but a lot of them are wrong. So I need to think about that.

I’m thinking more about birds of a feather sessions to propose and looking at my projects to see if I have something really nifty for the nifty project session. Birds of a Feather (BoF) sessions are very interactive and are great for refining ideas. And nifty projects are, well, they’re nifty.

What do I want to see presented? That’s actually hard these days. Why? Because my brain is already full of more ideas than I could learn or teach in a lifetime. Artificial Intelligence, cloud computing, Internet of Things, game development, virtual reality and on and on. Content! There is a lot of possible content out there.

What I really want to learn is how to teach better. I’m doing some reading (Computer Science Education is my current read) and I’ve been learning a lot from Mark Guzdial’s blog for a while. If you ever get a chance to hear Mark talk about how to teach computer science GO HEAR HIM! There are a number of his talks on YouTube BTW.

Lots of people want to promote a new tool (software or hardware) as a silver bullet for teaching. I’ve heard enough of them. Given a few myself. The more I teach though the more I think there is more to becoming a better teacher than a cool new robot, a fancy new IDE, a great new “educational toy.” or what ever.

Teaching is ultimately about establishing a relationship between teacher and student. It is about communicating well and sharing passion. That’s what I want to learn how to do better. And if you have research to back up what you are teaching about how to teach I really want to hear from you.

Wednesday, August 21, 2019

Vicki Davis Interviews Alfred Thompson

Over the summer Vicki Davis interviewed me for her Ten Minute Podcast. Vicki and I have been friends for a number of years and it is always a pleasure to talk with her. We talked about a number of things including Project-based learning. Passion-based learning. Problem-based learning.


Sunday, August 18, 2019

And So It Begins–School year 2019 2020

Tomorrow (Monday) I will meet the new freshmen in my study hall. And I’ll finish getting my room ready for the new school year. First day of real classes is Tuesday. And I am not as ready as I would like.

I have a day by day plan for every day of the semester (even the year for my AP CS Principles class). Lesson plans last until they run into actual students so there will be adjustments. There always are. It’s my 5th or is it 6th year teaching honors programming so that is more settled than anything else. I still make changes as I go along because not every class in the same as any other. And who wants to do the same thing year after year anyway.

It’s my third year teaching AP CS Principles and I am making big adjustments in the schedule over last year. I am hopeful that I’m going to get it better this year but who really knows.

My third year for teaching Mobile Application Programming and I am switching from AppInventor to Thunkable. AppInventor has given me a lot of issues with the emulator and most of my students have iPhones and Apple is dragging their feet on allowing AppInventors iPhone software. Thunkable already works with iPhones, though without support for some features I would really like. Plus it seems to connect to phones more reliably. We’ll see how it goes. I’m adapting project ideas as I go along. That’s not completely new but it is not without risk.

At least I only have three preps. Last fall I had four. I also have more free periods as I am teaching a reduced load (at my request) and that should help a lot.

Are you ready? Have you begun already? Let’s do this thing!

Wednesday, August 07, 2019

Book Review: The Creativity Code

I’ve been reading a lot about Artificial Intelligence (AI) this year. Several of them have been pretty scary. It was recommended that I take a look at “The Creativity Code: Art and Innovation in the Age of AI” by Marcus DuSautoy. It was a good recommendation. This book is different from the others I have read. Or tried to read. It’s focus is not on business or about intelligent weapons. The focused as the title suggests is on creativity.

The book discusses how computers, or rather AI software, is creating art, music, and new ideas in mathematics. The author is a renowned  mathematician so the sections on using AI in math, developing proofs for example are especially well done. One unexpected benefit of the book for me was a new appreciation for what mathematicians actually do and why they find some year joy in the field.

The author shares some concerns about how AI might make mathematicians like himself obsolete. In the long run though he sees a place for human creativity in the world. AI routines are still being trained by people. They do go beyond what they are specifically trained but have to start with that training. Well, usually anyway. Will that change? Let’s just say that there are still a lot of unknowns. AI has moved in ways we haven’t expected already so there is that.

If you are interested in learning about AI in art (computers creating works in the style of famous artists for example, music (using existing styles or creating new ones), writing (fiction or non-fiction), mathematics, and several other fields we don’t usually associate with AI this is a good book for you.

It’s an interesting and usually easy read (I confess some of the math was a little deep for me). It an in interesting look at AI. Recommended.

Thursday, August 01, 2019

What Programming Concept Do I Use?

I’ve been programming a long time. I wrote my first computer program in 1972. I think the parents of some of my students were not even born yet. So it’s hard to remember what it is like to be a beginner. Late last school year it finally occurred to me that a lot of my students understood concepts in theory but were having trouble knowing which concept to use to solve problems. Honestly this was having trouble sinking it with me because this stuff is so obvious to me.

Lauren Margulieux helped me out here with her recent blog post I’ve been a Computing Education Researcher for 8 Years and just took my First Programming Course: Here are 5 Things I Learned. This is a must read post for anyone who teaches beginners. One of her five things was “Deciding which programming concept to use was harder” Just what I had been thinking about lately. I think her experience, background, and ability to self-analyze her own learning helped her to see  what I think are common beginner issues that I have had trouble seeing myself. Maybe other teachers have trouble seeing these things as well. Or maybe just me.

Suffice it to say, I have to really think about how to help students over these hurtles.  Helping students to see when to use various concepts is my first priority. Stories maybe the answer. Can I tell stories about the sorts of things various concepts are good for. I do some of that already but maybe more examples will help. It’s worth a try.

Tuesday, July 30, 2019

Too Little Time and Too Many People

Four years ago I was at a two day informal gathering of teachers. As much as I really enjoy conferences like CSTA, SIGCSE, ISTE and others there was some real magic about an informal gathering of about 12-14 teachers who cross age groups (individually and who they teach) and curriculum subjects. It was awesome. I really want to do it again.

Teachers don’t get enough time to share ideas informally. We have conferences and there are opportunities there but they are often one way conversations. We have sit and get sessions. We have panels where a chosen few share ideas in answer to pre-planned questions. None of this is bad but sometimes it doesn’t feel like enough. Unconferences are different and usually a lot more interactive than traditional conferences and I like them as well.

Perhaps the problem for me is a bit of FOMO – fear of missing out. There are too many interesting things going on. Too many side conversations No one can take it all in.

A lot of people like to talk about the hallway track at conferences. These are the conversations that talk place in hallways, spaces outside of conference rooms, at bars or restaurants, or just about any place not in a formal session. They take place because attendees often have little real life contact outside of conferences and yet share similar issue, problems, or other interests. The gathering I attended four years ago was basically a two day hallway track.

The problem with hallway tracks are conferences is size. By that I mean that some conversations would be better if there were more people involved and some would be better if fewer people were involved. Take conversations at dinner for example. You can get a dozen people or twenty people all at one table. Realistically you can talk to the people on either side of you and two or three across the table from you. So there are multiple conversations that start, run their course, and then reform. Now these conversations can be great and I love them. But FOMO rears its ugly head – what is that conversation going on at the other end of the table and should I be in that one? Silly perhaps. But I suspect I am not the only one who feels this way.

There is probably an optimum size that lets everyone talk, everyone listen, and makes everyone feel involved. The setting and seating arrangement probably has an impact. Chairs or tables around a circle allows to a lot more people involved than a long single table or small groups standing around. Someone has probably done some research on this.

Perhaps book clubs can be a model? In any case, I think teachers could really benefit from small in number but longer in time chances to share ideas. We can learn a lot from each other.

Links to the blog posts I wrote about that gathering a few years ago:







Friday, July 26, 2019

Big Complicated Programming Projects

Ria Galanos has a wonderful blog about her experiences moving from the classroom to a life as a professional software developer. It’s been a long time since I developed software for a living and her posts are bringing a lot of memories back. A recent post (Putting It All Together) talks about understanding a large code base. This is something professionals have to do often. They very seldom write code from scratch. usually they work enhancing, correcting, modifying, or otherwise working with large existing code bases. Understanding these complex  Ria talks about the Advanced Placement Computer Science A course which used to have a case study, a larger piece of code that students had to learn, understand, and modify. She wonders if bring that back might be a good idea to better prepare students for industry.

There are some interesting comments from experienced educators on that post. Mike Zamansky posted a follow up post (Big Code And Case Studies) where he talks in favor of large projects at the right time and that AP CS A might not be the right place for the type of case study required.  or at least not a specific and mandated case study that everyone uses.

We’re not trying to turn out professional software developers in high school. That is important to remember. There is a lot of value in learning how to understand large code bases though. I think there is value in it even for someone not planning on becoming a professional software developer.

So much of how we teach beginners lacks context. We focus on little bits is a sort of isolation. The projects we assign are simple and small. In some regards they have to be. The problem is that without real context understanding how things fit together is limited.

I’ve tried a number of things to give students involved in larger projects. I have given students larger, more complicated projects written by others. There are any number of professionally developed “samples” that are more complicated than the average beginner will write alone. I’ve also tried having students work in teams with different modules assigned to different students in the team. I’ve seen mixed results with both.

The trouble with large samples is that there is limited time to understand the code by the time students have enough base knowledge in a single semester course. Similarly in a one semester course there are limits to how complex a project student or group of students can build before time runs out.  APCSA is usually taught as a year long course and would seem to lend itself to either of these ideas, and the case study was a larger code base, there are still a lot of concepts required by the curriculum that can place time limits with some student bodies. This is especially the case when APCS A is a first course.

I’m starting to think that high schools need a sort of CS capstone course to follow up after AP CS or other foundational courses. Not ever student will have schedule room but I think that a lot of students who really fall in love with CS will find a way. Some schools will (or at least could) build at sequence that would include such a course. This course would allow students either individually or in a small group spend a whole semester (a year maybe) developing one large project. I think this could be a chance for students to work on learning a new (to them especially) technology.

Monday, July 15, 2019

Question Technology

One of the interesting t-shirts I saw at CSTA 2019 last week said “Question Technology.” That might seem to be a strange slogan at a computer science education conference but it really shouldn’t be.

Security of information, privacy, and the ethical use of technology was a constant topic as CSTA. From the Tuesday keynote by Natasha Singer from the New York Times to multiple sessions on cyber security to hallway conversations these were regular issues to discuss and to talk about how to teach. I don’t think there is any disagreement that we need to talk about these issues with our students.

We need a generation that asks “should me as often as can we” do things with technology.

Friday, July 12, 2019

It’s Really About the Teacher

CSTA 2019 gave me a lot to think about. Today I was thinking about what was impressive and I thought about the Tuesday lunch panel. Microsoft brought a panel of high school students to talk about how computer science education was changing their lives.

None of these students talked much about the programming languages they learned or really any of the technology. No talk of robots, or other gimmicks. What they talked most about was their teachers.

They talked about teachers who got to know them as people. Teachers who encouraged them to try new things. Teachers who supported them when they ran into obstacles. Teachers who valued them as people.

New programming languages are cool. Gadgets can help us make things more interesting. When you get right down to it though the key factor is student success is largely dependent in the teacher. I don’t know who said it but it is true – they may not remember what you said but they will remember how you made them feel.

Thursday, July 11, 2019

What do Companies Get Out of Supporting CS Education

After the announcement of a millions dollar grant by Google to CSTA and the new “Code with Google” program I was asked “what does a company get out of this sort of thing?” The answer can be complex.

In many cases, including this one from Google, there is no obvious monetary benefit to the company. In fact the closest thing to a balance sheet benefit is probably goodwill. Now goodwill can be very important to a company. Given the current political scrutiny on companies like Google (and Facebook, Twitter, and Amazon) one would be excused if they saw that as a motivation.
I’m not so naïve as to thing that goodwill doesn’t play into decisions like this one but I doubt it is the whole story.

Companies like Google. Amazon, Microsoft, and others live in an environment that includes many other companies. These huge companies will always attract top technical people but for many companies there is a real shortage of technology people for them to hire. These foundational companies need the companies who build on top of their foundations to also be able to hire technical people. Supporting CS education helps support that environment.

And it is not just tech companies who need these people. All companies need people who at least understand technology. So in many real ways one could call support for CS education enlightened self-interest.

Do companies want students to use their products? Of course and so you will see things like Swift Playgrounds which runs on Apple products and develops apps for Apple products. Or AWS Educate which uses AWS and will probably result in future paying customers for AWS. Again, there is some relationship building that companies hope will lead to future business but the concepts are far from limited to those specific products. There are no guaranties here but they are clearly more about building the company's environment than the specific companies.

Other products though don’t have as clear an path to profit though. Take MakeCode and Makecode arcade developed by Microsoft. These products don’t lead directly into revenue generating hardware or software sales. What they do is develop more people with a knowledge of programming and computer science. That helps the environment.

As I see it, companies are interested in building the CS environment, building goodwill, and possibly getting some business in the future. The degree and priority of those motivations vary by company and even time.

For me as an educator, my concern is about the concepts tools teach, how they motivate or not my students, and generally how they prepare my students for the future. Concerns about privacy and security are of course also concerns. If a company helps me do my job and prepare my students better I see that as a win. If companies get a benefit as well I hope that will encourage them to help more.

Wednesday, July 10, 2019

Random Thoughts on #CSTA2019

I’m pretty sure I have been to every CSTA conference going back to when it was the CS & IT conference and there was no CSTA organization. This year’s was by far the biggest and maybe even the best. But it does feel big. Not ISTE big or even SIGCSE big but big for a conference of CS teachers.

That’s great is many ways. I think there were up to 9 concurrent sessions in each time slot on Tuesday and Wednesday. I remember when there were two. On the plus side you are pretty certain to find a session you are interested in. On the down side you are also likely to find two or three you are interested in at the same time. It’s a fact of life.

It’s not so big that I can’t find most of my friends there but it is something I have to be more deliberate about. And of course on the plus there are many new friends to make. ISTE is too large and there are many people who I know were there but we just didn’t connect. How big does a conference have to be before it loses the closeness that I value so much about CSTA? I don’t know. I do hope the conference committee thinks about that though.

Volunteering was a good thing. I worked the registration desk. It was nice to see and meet people I know and didn’t know. The registration system seemed to work very well. The CSTA staff handled glitches and issues quickly and professionally. That seems to be developing fast enough to handle the size of the conference.

Sessions were all very good. Not everyone was everything I was hoping for but that is to be expected. The quality of the presenters was really high though. I think that the speaker quality is higher at CSTA than ISTE on average.

Comparing ISTE and CSTA is interesting if not exactly fair. CSTA has a specific focus – CS education and CS is one of many topics for ISTE. A number of companies were exhibiting at both and I would love to know how the two conferences compare for them. A couple of companies that were at ISTE were not at CSTA. I was surprised that Unity was at ISTE. I really was. A big booth as well. I suspect they could have reached more CS educators at CSTA for a lot less money. But maybe I don’t understand their goals.

Speaking of the exhibit hall, there was close to 60 exhibits this year. I think we had 6 the first year we had exhibits which wasn’t that long ago. I do feel they add to the value of the conference. Much of the materials being offered were free as well. Obviously not hardware but much of the curriculum and other teaching resources. Lots of it looks like it has been used successfully in a lot of classrooms. By contrast, much of what I saw at ISTE was both more expensive and with less of a track record.

Microsoft and Google both had significant presences at CSTA. They’ve both, though their charitable arms, donated a lot of money to CSTA in the last year plus as well.  Money indicates support but I feel like a physical presence speaks a lot of commitment and seriousness of interest as well. Amazon was there showing a couple of programs including there AWS Educate program and some of their other STEM efforts. Facebook had a small presence as well. It was low key and not at all about selling Facebook to people. The heavy hitters in technology seem to realize the importance of CS education and CS educators. No sign of Apple though. Sigh.

Next year is a day longer than this year. CSTA and CS & IT used to be one day. Then two. Five next year? I have no doubt at all that they can fill it with enough quality content. I do wonder about the expense of attending though. Airfare and conference fees don’t jump that fast for an extra day but hotel rooms can be a big expense.  I’ll wait to see what the schedule looks like and what the hotel costs are before I make my plans for next year. I do plan to go. The question is for how long. I suspect a lot of people will be doing those calculations.

Google and other companies have been helping with scholarships and I hope that continues. It’s especially important for first time attendees. I hope school districts see the value and step up for teachers as well. Arkansas had over 30 people at CSTA and I believe the state kicked in a lot of the money for that. With more and more states mandating more CS education will they also step up with professional development money? I hope so.

My big take away though is that CSTA is the conference K-12 CS teachers should attend if they can only attend one conference. Hope to see many of my readers at CSTA 2020 next July.

CSTA 2019 Day 3

So I missed the opening keynote which I am sure was amazing but I spent the time catching up with a good friend who I see too rarely. Time well spend. Leigh Ann Delyser from CS for All sometimes talks about the CS community as her grown up summer camp friends. I have to agree. The face to face time with friends at a conference makes the communication between in real life meetings much better.

My first session of the day was a panel about advancing equity and diversity. It really focused a lot on curriculum and how to teach to ALL students. Not a limited focus on girls or under represented minorities but a realization that diversity requires welcoming environments for ALL students. There was also some good discussion about creating projects that are open and inclusive for students of different abilities and backgrounds. This is just one time when curriculum in general and finding the right projects for the classroom. I need to think about writing up more on that topic.

My last session before lunch was a series of three mini sessions. The first was on Engage CS Edu. This is a curated site with projects of various types and concepts for CS educators. It is “Foster diversity in your introductory computer science courses with quality content and engaging pedagogy” This looks very helpful as I am always looking for engaging projects that work with diverse students.
The second mini-session was on How to effectively Manage a CS class and was mostly about how CodeHS helps this teacher manage his courses. If I were looking for a new curriculum I would take a serious look at CodeHS. CodeHS has both free and paid levels.

The third mini-session was Building a Cyber Center for Excellence. They seem to have a very impressive cyber security center at Grand Canyon University. I don’t think a lot of it is reproducible in a high school but some of it it. The speaker has a free guide containing High School Cybersecurity Education Websites and Resources which  I did download and a not free ($3.99) ebook called “Beginner’s Guide to Developing a High School Cybersecurity Program” so I can learn more.

Overall, a very good conference for me. I learned a lot and I have ideas for the new school year.

Oh and next year’s CSTA Conference will be July 11-15 in Arlington Virginia.

Tuesday, July 09, 2019

CSTA 2019 Day 2

I’m always skeptical about celebrity keynotes at education conferences so my expectations for Natasha Singer from the New York Times.were not high. I was pleasantly surprised though. She gave me a lot to think about when teaching things like ethics, accountability, and privacy. Things like what the saved wi-fi networks our computers save and share to how companies track individuals and more. A good keynote should give attendees things to think about and things to act on and this one did that for me. So great start to the day.

There were any number of sessions I would have liked to have attended and I think information about them (videos maybe and hopefully others blogging) will show up. For now I am writing something about the sessions I am attending.

My first session of the day was “Soaring through the Cloud” by AWS Educate. If nothing else people are getting a good look at the vocabulary of the cloud. Vocabulary is something I see as key. I was impressed that AWS wants schools they partner with share their curriculum and programs with other schools. Diversity is important to them. The AWS Educate program includes free cloud accounts, online training, and badging for successes. There is a ton of content there. I could see a special course around this.

Also AWS has been very responsive to teacher and school worries about student privacy and security.  Very important!

I didn’t have to move for my second session of the day – Using GitHub as a Content Management System. Another packed house. This was a good walk through of GitHub for me. As a total beginner it was pretty helpful..I still have a lot of playing around to do but it does seem really usable.
Lunch had a set of trivial games that we surprisingly fun followed by a panel run by Microsoft. The panel was of high school students who were talking about the influence of taking computer science courses on their lives. The students were from schools supported by volunteer TEALS instructors.  These students were from schools in low economic areas that would probably not have CS without the work of TEALS volunteers – industry professionals giving their time to teach students. It was an inspiring session. Oh and the food was pretty good too.

Afternoon took me to a session on Machine Learning. Teachers talked about teaching machine learning both as a concept and at a technical level. There are a couple of neural network “playgrounds” including the tensor flow website from Google that I want to use to introduce the ideas to students. There is a link to resources (http://bit.ly/ML-HS-Resources ) that I plan to explore.

Last session of the day for me was Nifty Assignments. We could have used a bigger room. This session was worth getting there early for.The new CSTA Nifty Assignments page has all of the references to the sessions. Five interesting projects with something for everyone. from K-5, to 6 – 8 to 9-12. I’m inspired to have my students do more graphics by the digital coloring book projects and have some great ideas about using letter frequency counts. Oh and last year’s nifty assignments (which I missed) are also linked there. This is only going to be a better and better resource as time goes on.

For me the day finished with dinner with David Renton who taught college is Scotland for years and who now teaches high school in the US. Great conversation about teaching and differences and similarities in education in two different countries. You really can meet the best people at CSTA.

Monday, July 08, 2019

CSTA 2019–Day 1

As planned I spent most of the morning helping at registration. And talking to a lot of people as they came in. After lunch the exhibit hall opened and I was in there early. A few highlights:

A virtual reality version of Alice is coming in the fall. I had a demo wearing an Oculus headset riding through an Alice world. Very awesome. Virtual Reality and Alice – Wow!

I signed up for GitHub for educators. GitHub classroom looks like a good way to send starter projects to students. I have a lot of exploring to do but there is online training for teachers so I’ll start there.

I had a demo of CodeSpace from FiriaLabs for teaching Python. They have a robot that looks pretty cool as well. Still not sure robots are my think but their connection to Micro:bit looks pretty nice as well.

Code Jumper is a program developed by Microsoft for blind and visually impaired students. It involves physical devices that are a coding language. Think block languages where the blocks are actual physical blocks The teacher who showed it to me tells me that she has used these devices (not available yet but she is in a pilot) with ADHD students  They get very engaged.  I can really see this useful in a lot of situations. Availability is some time in the fall. I have no idea of pricing.

The welcome reception was top notch.  I ate my fill and have no need to a later dinner. Better still was the opportunity to talk to even more people.

BTW, in my last post I mentioned Google’s new Code With Google program. It’s a good collection of resources for teaching computer science. Check it out at https://edu.google.com/code-with-google/

CSTA 2019 Day 0

Sunday was the start of CSTA 2019 with workshops and the Chapter Leadership Summit. I wasn’t part of the summit and I didn’t get to any workshops but I still had a good day. I did crash the reception Google hosted for the chapter leadership summit though. Jake Baskin announced a million dollar grant to CSTA from Google and Google’s new “Code with Google” program. I expect to learn more about both as the conference goes on.

The highlight of the day was spending time with friends. I’ve been to every previous conference (going back before there was a CSTA) and in the early days it was much smaller so I made a lot of friends back then. I’ve made still more friends by being involved – volunteering in different ways. I had dinner with 10-11 friends almost all of whom had been on the conference committee with me, the CSTA board with me, or both. Besides helping the CS community, volunteering with CSTA is a great way to make friends.

I wonder how it is for people new to CSTA. It’s so much bigger today and while that is wonderful in many ways I can see it being overwhelming for some as well. My hope is that people expand their connections beyond people they may have come with or know from elsewhere.  Diversity is really important. Part of what made last night’s dinner so interesting for me was people from a number of different states and two countries other than the US.

Diversity came up in a number of contexts yesterday both in conversation and in he Google announcements of yesterday.  Companies in the industry are starting to really appreciate the importance of it but I really believe that as educators we have an important role in fostering diversity from the start.

Today, Monday, I will be working the registration desk for a while this morning, visiting the exhibit hall in the afternoon, and trying to connect with as many people as I can. Learn from the best I often say. If you’re around come find me. I am wearing my hat and I have “I Follow @AlfredTwo” ribbons if you’re interested.

Sunday, July 07, 2019

Pre-conference Thoughts–CSTA 2019

I’m on my way to Phoenix AZ for the CSTA conference.  For years I would get there early and leave late. This was especially true when I was on the CSTA Board and there were Board meetings to attend. Traveling on my own dime and my own schedule this trip. This afternoon I will be helping at the registration desk. I’ll also be helping there tomorrow. Volunteering at CSTA is a small thing in some ways but I think it is really important to make some contributions. Plus it means I get a jumpstart on the “Hallway Track” that is part of what makes CSTA so wonderful.

Sunday and Monday are workshops and I didn’t sign up for any. That’s new for me but Monday afternoon the exhibit hall will be open and I really want to get to that. Almost 60 exhibitors this year. I think we had 6 the first year we had exhibitors. This shows how important CSTA is to so many companies, universities, and other groups supporting CS educators. Plus it is a great opportunity for educators to learn and have one on one personal conversations with exhibitors.  I’m a big fan of exhibit halls at conferences though I know not everyone is.

Unlike ISTE, where I was recently, the focus on CSTA is all computer science and the exhibit hall reflects that. One doesn’t have to search for relevant booths and it is still small enough that you are unlikely to miss something.

Tuesday and Wednesday I have lots of sessions in my app. I’m looking forward t o Mike Zamansky’s session on using GitHub as a CMS. There is also a session from Amazon Web Services on introducing the Cloud to students. Another key technology there! And a Nifty Assignments session to cap of  the day.

I’m still deciding on Tuesday. There are several sessions I’m interested in that are at the same time. A common problem, but a good one to have at a conference.

I have no idea what the “hallway track” will bring. I have so many friends at CSTA and they are doing so many interesting things. Learning from other teachers is really awesome. CSTA almost feels like a family reunion sometimes.

Sunday, June 30, 2019

ISTE 2019 Trip Report

There was a time when I would have written a blog post every night of ISTE. Apparently I’m getting older or something and that is not a priority for me any more. Be that as it may I got some good stuff at ISTE this year. ISTE is not all about computer science the way CSTA (next week) or SIGCSE are but there is more CS than their used to be. You have to hunt for it a bit though.

Robots were big again this year. It seems like everyone is pushing robots as the silver bullet for teaching CS. I’m not so convinced and most of the robot stuff was aimed at younger students. K-6 or K-8 were big. Lots of people promoting their drag and drop Blockly-like programming tools. If you push you hear about Python and other text based languages.  I didn’t spend much time with robots. I don’t want to build my course around them. If others do that is fine. It’s just not me.

On the other hand I am interested in internet of things and integrating that into some of my courses. Plezmo has some interesting products in that space. I missed them in my walk through the exhibit hall but Alark Joshi, Associate Professor of Computer Science at the University of San Francisco, sent me an email suggesting I check them out.  I’ve got a core kit ordered. I plan to use it for some experimentation on my own but also as a way to introduce IoT to my students in several courses. Should make for some good demos. Later I may add it to my curriculum. A lot depends on my experimentation.

Doug Bergman gave a presentation on using Artificial Intelligence in projects using some tools from Amazon Web Services (AWS). Doug demonstrated using these services from Thunkable  This may be the piece that really makes my mobile application development course take off. You can learn more about AWS Educate at this link.

Unity also had a surprisingly big booth at ISTE. They have some free online courses which would be usable in the classroom. If I were to have a game development course I would go there first. As it is I plan to take some coursework myself and see how it might fit in to an existing course or perhaps into a new project course I want to propose at my school.

This relates to something else I found interesting at ISTE. Steve Demo presented on Virtual Reality in education. The Oculus Quest (which I got to try out) is pretty awesome and it is programable using Unity and C#. This combination might be awesome in a course after my Programming Honors or our AP CS A course. First I’ll learn some Unity and then I will look at AR/VR/MR devices to see what is practical in the classroom.

I did talk to someone from the Azure (Microsoft’s cloud offering) at the Microsoft booth. I will follow up to learn more about their options as well.  GitHub is something I really want to bring into my Programming Honors course next year and Microsoft owns GitHub now. GitHub for education will be at CSTA and Mike Zamansky is presenting a session on using GitHub so I’ll be in better shape there after CSTA.

So I enjoyed ISTE and I got some good value out of it. But because ISTE is so large a lot of the CS stuff (and people) get lost. CSTA will be a whole other story. Can’t wait to get there.

Sunday, June 16, 2019

In Honor of BASIC

I found an interesting article today New Hampshire installs first historical marker to honor computer programming The BASIC programming language was invented at Dartmouth College in New Hampshire. Today it gets a bad rap and perhaps the original version deserve it compared to modern programming languages. For its time though it was pretty important.

The early personal computers all came with some version of BASIC.There were books one could buy that has listings of BASIC programs that we used to enter and play with. A lot of people got their start in computer science by teaching themselves BASIC.

The first language  I learned was FORTRAN but the next year my university got a Digital Equipment PDP-11 running the RSTS/E operating system. It cam with a great version of BASIC called Basic-Plus. I taught myself that on my spare time. As an interpreted language on a time sharing system, unlike the compiled FORTRAN on a batch system, this allowed a lot more and more frequent experimentation.  That really opened things up for me.

After university, knowing Basic-Plus got me my first professional software development job.

Later I learned Visual Basic and then Visual Basic .Net. Today’s Visual Basic is a far cry from the original BASIC of course but a lot of the basics are the same. There isn’t much you can do in C-family languages that you can’t also do with Visual Basic. And it is still more friendly for beginners than Java or C++ or C#.

It is still looked down upon by many and yet as the same time it still shows up on lists of most used languages (https://fossbytes.com/most-popular-programming-languages/)

These days I use C# for a lot of my personal programming but I still like to use Visual Basic (as I did for a quick hack today) Over my career versions of BASIC have been very important to me.

Thursday, June 13, 2019

Teaching Students to Yearn to Learn

Summer time is time for me to do a lot of thinking about my teaching practice. I've been doing a lot of reading and a couple of quotes have helped me in my thinking. Two of them are about leadership and I see them as having applicability in education. A good teacher is a leader - trying to lead students to learn. The first quote is about using coercion.

“You do not lead by hitting people over the head — that’s assault, not leadership.” – Dwight D. Eisenhower

Grades are, or can be, a bludgeon. Sometimes teachers use grades as a way to force students to do work. I hate doing that. It feels like a metaphoric "hitting over the head." It may get students to do some work or at least to hand in something but it seldom really leads to real learning. That leads to the second quote I have been pondering.

“If you want to build a ship, don’t drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea.”
― Antoine de Saint-Exupéry

Leadership is largely about teaching students to yearn to learn. A good teacher leader develops internal motivation in their students so that they want to develop the knowledge and tools one is trying to teach.

One of the things I have observed is that students who have a say in the projects they take on are much more motivated to learn the things they need to know to complete them. Getting students to want to learn is much more effective than trying to force them to learn so that they can get good grades.

Wednesday, June 12, 2019

Different Kinds of Professional Development for Computer Science Teachers

What to teach and how t teach are different questions. The first is all about content knowledge and the second is about pedagogy. For the most part it feels like professional development for CS educators is focused almost completely on content knowledge. A great many teachers are coming to computer science from teaching other subjects. There is this idea that a good teacher can teach any subject once they have the content knowledge. I’m skeptical. Computer science is not quite like other subjects. It’s more like teaching vocabulary and novel writing at the same time. We’re teaching how to write a novel to people who not only have never read a novel they don’t even know what the words mean.

Do I exaggerate? perhaps a little but the point is that we probably shouldn’t assume that teaching CS is the same as teaching other subjects. There is not a lot of professional development on how to teach CS.  We sure could use more of that.

Although if I am honest, we could use some deeper content knowledge training as well. It seems like most of what we see is pretty basic and designed for beginning teachers. But we all need more research based knowledge about how to teach what we do know.

BTW, Garth Flint had a nicely related post on his blog https://gflint.wordpress.com/2019/06/10/cs-professional-development-in-montana-where-should-it-go/

Tuesday, June 11, 2019

Join the Online #CSed Conversations

At it’s best, social computing is a conversation that moves in a positive direction. The more people who participate the better the conversation and the more benefit for everyone involved. For computer science teachers, who are often alone in their school. opening and participating in online conversation can be a real benefit. These conversations can cross boundaries of time, space, and even online environments.

A recent example. Garth Flint wrote an end of year post (Last Day of School And Done with Java) that I lead to a post of my own. (How Well Can You Code the Projects You Assign Students?) Mike Zamansky wrote a follow up post of his own. (Do It First ) All of these posts were also discussed in Facebook and Twitter. And of course there are comments left on the various posts. So there are multiple ways to participate in the conversation.

No one has to participate in all the conversations or all online tools/communities to benefit though. Things, especially good ideas, tend to propagate across paths. That’s how networks work after all. There are enough people who act as transmission nodes that the best knowledge and the best ideas tend to move around pretty widely. Everyone benefits from this. People who lurk (read and don’t respond) learn a lot which is an almost invisible benefit. At least it is usually invisible to the people who are writing but it is probably pretty visible to the students whose teachers take what they learn and use it to better their own practice.

Still I wish more people took an active part in the conversation. Be it a comment on a blog or Facebooks post. A tweet with a link and a comments.Tweets in a Twitter chat.  Or an original blog post of their own. (I REALLY wish more CS teachers blogged about what they are doing.) How ever people participate we all benefit.

Computer science educators tend to be a very supportive community. Jump in with both feet.

Sunday, June 09, 2019

Change the Programming Language, Change the Course

A recent Facebook post suggested changing the language for Advanced Placement Computer Science A (what some of us annoy others by calling AP Java). This comes up regularly with lots of people suggesting their favorite language. Changing the programming languages means changing a lot more than the language though.

Different programming languages have their own idioms. Their own way of doing things. Programming languages and the concepts one can teach with them are closely related.The change to Java (and to some extent C++ before it) was based on a desire to teach more object oriented programming and design. The language was picked after the concepts to teach were chosen.

I wonder how often we (CS teachers) pick a language first though. DO we pick the concepts to teach based on the languages and the programming idiom we are familiar with or do we  think wider?

My honors programming course is largely a warm up for AP CS A and preparing students with the concepts they’ll need is a goal. I use C# rather than Java though because it seems to me (without the sort of research based evidence I should probably look for) that it has a lower cognitive load than Java. It seems to work for us.

My APCS Principles class is using the curriculum and tools developed by code.org. It uses their block based App Lab with the option to use/view JavaScript. This language and tool does appear to be based on the concepts rather than fitting the concepts in after the fact. So I’m happy with that.

One thing I will be pondering over the summer is what concepts should I teach. Am I teaching the right concepts or should I change them? What about cognitive load? I was re-reading How to choose programming languages for learners: Reviewing JavaScript and Ready by Mark Guzdial and his points about cognitive load really resonate with me.

Block languages do seem, based on evidence, to have lower cognitive load for beginners. I’m less comfortable with them; probably because I’m so old school. Student attitudes towards them are mixed with some really loving the low cognitive load and some having trouble taking them seriously. I have to keep in mind the concepts I want to teach as well.

No matter how I look at it though it is never as easy as “just teach the same things the same way but with a different programming language.”

Friday, June 07, 2019

How Well Can You Code the Projects You Assign Students?

Garth Flint had another good post today (Last Day of School And Done with Java) He lists some interesting projects he assigned and writes about some lessons learned. Any time a teacher learns from student projects I count that as a double win. But one of his comments really resonated with me. Garth writes “I did only two of the six assignments myself.  With the others I saw the solution so did not code them up.  I should have coded them up just so I could answer questions better for the students. “ Highlight mine.

Some years ago I wrote a couple of editions of project books for both C# and Visual Basic. (I may update them this summer if I have time.) People seemed to like them and I received numerous requests for coded solutions. I had them and usually provided them. I really think that teachers should always write their own solutions though. In fact, the less you know about programming the more you should code up your own solutions. As Garth pointed out in his post, when you code your own solutions you can better help students.

And if a project is a good learning experience for students it will also be a good learning experience for a teacher who is working on their own skill and knowledge base.

I’ve got a ton of programming experience and know a lot of tricks techniques that I would never expect beginners to know. So I try to write solutions using the tools and language constructs my students will have at their disposal. This helps me understand what issues students are likely to come across. It saves me time later.

Of course students are clever and think of ways to do things that an experienced coder would never come up with so I learn some new things from them. And the smart kids look up features we don’t cover in class and build “interesting” solutions. That’s all good. Better than good really. I’ve actually come up with several new to me ideas from students.

To be clear, I don’t want every student to write their solution the same way I write mine. I want to see some creativity and imagination. But I also don’t want to have to admit I have no idea how to implement a solution of my own. Well, not often anyway.

Since I teach several level of CS from our freshmen course which only has a few weeks of programming to our APCP P course with Programming Honors in the middle I sometimes code up several solutions. Some things that are possible with limited tools are much easier with more advanced tools. Arrays for example can be a powerful tool. I wrote about this a couple of years ago at Taking Things To Another Level  where I talked about revisiting a popular freshmen project later in Programming Honors.

It’s summer break and I’ll be doing some coding. Trying new projects to see what students will need to know to code them themselves. I’ve been looking forward to having the time to do this for moneys.

Friday, May 31, 2019

Helping Doesn’t Always Help

My programming students are working on their final/semester projects. As is typical some of them are doing extra work on their projects at home. Normally that is pretty great. They get better projects and they learn that they can continue learning and coding on their own. Some students get help from parents. We’re in a pretty high tech area and lots of parents are software professionals.

I don’t blame parents for helping. Parents are a students first and best teachers. Most times parents work within the scope of what their students are learning in school and do a good job of explaining what they are showing. But occasionally we see some code that really begs for a discussion with the student to see if they actually understand the code they are using.

Usually the clue is that the code includes features that are not covered in class. The Ternary operator ( ?: ) in C-family languages for example. This is not something we really have time for in a single semester first programming course. It’s pretty cool and really useful in the right circumstances but it can be an extra cognitive load for beginners.

Again, teaching this operator is a great thing. Having a student include it in their code without understanding it is another thing completely.

It’s not just parents that do this. Students do it even more often. One student discovers something cool or useful and shares it with others. The first student usually has a pretty good handle on it but don’t always do a good job of helping the other student understand it. Students, like the parents I see helping, mean well.

It drives teachers crazy though because it makes it hard to tell what a student understand and what they included just because someone told them it would solve their problem. This is one reason I still do quizzes and plan to do more next year.

Society tells students that the result – a good grade – is the important thing. For many students, and a few too many parents, grades and learning are independent. Teachers mostly see their job as teaching and not grading. It would be easy to just give everyone an A and make them happy. In the long run though we wouldn’t be doing anyone any favors.

Wednesday, May 29, 2019

Learning From Today and Planning For Tomorrow

It’s the end of the school year for me. Next week is our final exam week and my students are working on their semester projects. I use projects rather than an exam because I think students learn more from projects. Writing an exam would be easier in some ways but I am more about learning than grading. It seems like my students are learning a lot. Many of them are really grokking how to put all the concepts we have been learning together for the first time. Others are stretching themselves to learn new concepts beyond what I taught in class. And I’m seeing some new (to me) ways of addressing old (to me) problems. It’s win win.

Semester projects reminds me in a serious way that diversity of thought, of looking at a problem, and at putting tools together is really important. I’ve gotten a couple of new design patterns to add to my toolbox that were driven by students seeing different ways to do things. This is not unusual. It seems like every semester I learn something new from my students. Sometimes it is errors I have never seen before and sometimes it is new ways of solving problems but it is all good. It’s never the same course twice.

And that brings me to planning for next year. I created a number of new demonstrations this year. Some worked great. Some not as well. I’ll spend time evaluating them this summer. I’ll also spend some time thinking about new projects for next year. It is difficult to find the time to come up with new things during the school year. There is too much grading, adjusting the schedule to match what is going on in school, and just plain teaching. And maybe I’ll record some short talks or demos to make available to my students for review.

While I am mainly a project oriented person I have seen some value in quizzes for formative evaluations. They are faster for one thing. And they help determine who really gets the concept and who is getting a bit more peer assistance on projects than they really should. So I plan to write a bunch of them over the summer. Not full period exams but 15 minute quizzes. Automated grading speeds things up and I am finding that the tools for seeing what questions are gotten wrong and correct is helpful to me.

I’ve got a good bit of work planned for the summer. I’m also attending ISTE and the annual CSTA conference. I expect both of them to provide me with some new ideas to incorporating into my teaching next year. If you’re at either of these conferences I hope you’ll look me up. I love connecting in real life with other teachers.

I also hope to learn some new things this summer. I’ve ordered a copy of GitHub For Dummies. I figure it is about time I learned GitHub. Maybe I will use it with students. I think that would be very valuable for them but it depends on me learning enough to get them started. I plan to continue trying to figure out how to format apps for my Android phone using Xamarin and Visual Studio. Code is easy (C# for the win) but the UI APIs are a bit more of a learning curve. I’m not planning on using it with students right now but I want to write my own apps for me.

SO what are your summer professional development plans?

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!