Thursday, October 29, 2015

Learning By Teaching

One of the best things about teaching is students asking questions that never occurred to you. I learned several new things today. Students always seem to have a new take on things. They look at things differently.

I try to encourage students to be innovative in their projects. Sometimes the questions they ask are easy and indeed obvious. One student asked me how to find the default color for a command button in a Windows Forms. I knew there had to be a way to find it and there is (SystemColors.ButtonFace for what it’s worth). It’s useful information to have though it is more a platform question than a computer science question. That’s ok though.

Then as a student left class he asked me about the name property of an object that is part of an array of objects. He wanted to know if the system automatically assigned a name to objects created in arrays at runtime. That’s one I hadn’t though about. After all one accesses these objects as part of the array and we tend not think of these objects as individuals with their own names.

If an object is created first and added to an array the name is still available and usable independently of the array. That is pretty much what I would expect. One wouldn’t expect a name created at compile time to “go away” at run time.

It turns out that if you are dynamically adding objects, like buttons, for a Windows Form there is no name assigned by default. You can assign a name property but using it to access the object seems to be problematic. I’m sure there is a way but I’ve not been sufficiently motivated to look for it.

Still it is a concept worthy of discussion. It may be as much philosophical and computer science.  We may talk about it in class tomorrow. In the mean time I learned something and have something to ponder. That makes for a good day.

Monday, October 26, 2015

Interesting Links 26 November 2015

I’m writing this post from a hotel in Chicago. I’m here for some meetings which I’ll be sure to blog about later. I left my power cord home so this may be a short post though. The trials of travel. I’ll start with a couple of Twitter chats.

How can we create PreK-16 learning continuum in #compsci & #csed? Join @CS10K & @codeorg for #cs10k Twitter chat on 10/26 (TONIGHT)  from 9-10pm ET. I’ll be on a plane. May have to buy wi-fi if available.

#CSK8 chat Wed Oct 28 8pm ET
Topic:Connecting coding in K-8  to the real world.
Engage students using a variety of projects – run with the CSTA K-8 Task Force helping.

The battle for computer science's future in the classroom via @dailydot

The Five Knows of Programming another great post about teaching and learning computer science   by Rob Miles  @RobMIles

Todd Lash@Todd_Lash Shared this helpful image on a tweet.

Great watching @MrsLienhardt generate strategies with her students for getting unstuck while coding. #csk8

Embedded image permalink


Wonder Workshop@WonderWorkshop THe makers of the Dot and Dash robots tell me that the wonder league Robotics Competition is the 1st competitive robotics event for kids as young as 6. It looks interesting if you are using robots with young students.

The real reason U.S. students lag behind in computer science via @FortuneMagazine Area with them or not?

Chalkbeat: Yes, any teacher can help the city spread computer science. No, not any training will do By Eric Allatta who is a math and science teacher at the Academy for Software Engineering, an unscreened public high school in Manhattan, where he is also an AP Computer Science Principles pilot instructor.

Curious? Take a peek at SIGCSE preliminary program. It's posted on the website: This is my favorite Computer Science Education conference after the CSTA conference. I haven’t made it for a while but I want to try this year.

Disrupting the Gender Gap in Computer Science on the CSTA  (@csteachersa) blog by @lblanken laura Blankenship

Assumptions and Best Intentions: Curriculum is not the biggest problem in computer science education Post by Leigh Ann DeLyser  @lsudol (Pictured below)

Embedded image permalink

Friday, October 23, 2015

Would You Like a Hint?

Students ask me why their program doesn’t work all the time. Sometimes they ask me as soon as a problem pops up. Usually they work on it themselves for a while. They also ask their peers for help. But sooner or later a lot of problems come to the teacher. This is where things get tricky.

Obviously just giving them the full answer is generally not the best idea. Students learn best when they figure things out for themselves. On the other hand the frustration level can rise high and fast at times. A teacher doesn’t want things to get to the point where a student gives up. So timing is the first complication. That can be very dependent on the student and the relationship they have with the subject.

Figuring out the problem yourself is a bit part of the problem. Often the student has not paid attention to the messages the system has given them. “What error message are you seeing?” tends to be my first question. Next it to ask the student what they think the message means. Sometimes that is enough to get them over the hump with the problem. It’s important to get students used to reading and understanding error messages. There is usually enough of a hint there for many problems. Sometimes the student doesn’t understand the message. This is often an opportunity to explain the words in the message and how they apply to the statement in question. Learning to read error message is a critical skill.

Student problems, like most programming problems , tend to fall into two categories – syntax errors and logic errors. This is where teacher experience really comes into play. An experienced teacher can usually figure things out quickly. Though occasionally a student manages to create a problem I have trouble with. This is actually a good thing because it gives me a chance to model debugging techniques. That is a sort of hint for students in and of itself.

The next complication is how much of a hint to give and how to word it. For example yesterday I had a student who was trying to compare a string variable to a constant. In C# string constants are enclosed in double quotes while char constants are enclosed in single quotes. The student was using single quotes. Several hint possibilities come to mind. One can simply say “Use double quotes in place of single quotes” that that will fix the problem. It doesn’t help the student to understand what they did wrong. Another option, which I took in this case, is to say “you can’t compare strings to chars in that way.”

With that hint the student still had to figure out what is a char in his statement and also how to fix things. This student was able to talk himself though the issue and look at the problem in several ways. A more experienced student would have seen the problem sooner. Of course this student is now more experienced than he was before and will probably spot this sort of problem quickly in the future.

Hints are not always easy though. There is a temptation to tell the student too much. At least for me there is. For others the temptation is to give too little a hint. It’s a balance. There are researchers working on developing automated hinting systems. It’s a wonderful idea but a difficult problem. One limitation I think they will have is customizing the hints to the student. I think most systems will start with tiny hints and more up to more complete hints as the student progresses (or not). That will probably work for most students. What do you think?

For the time being it is up to the teacher. Hinting is one reason I think we still need computer science teachers for most students.

Thursday, October 22, 2015

TechPrep -- a website to help people start programming careers

Facebook entered the efforts to help more people learn about programming yesterday with a new website. “TechPrep -- a website to help people start programming careers” It is a web site with links to all sorts of resources for learning. There are entry points for parents and for people who want to learn for themselves. As you might expect from a company like Facebook they have spent good money making the site inviting.

They have a nice section on why programming that includes stories from a very diverse set of people and jobs in the field. They really seem to want to highlight resources for under represented minorities.

I read some research recently (wish I could find the link) that says that many parents have trouble finding resources for helping their children learn about computer science and programming. The keywords they use are not always effective in search engines. Maybe the large reach of Facebook will help some with this problem.

Out of school programs have their place but I hope Facebook will be supportive of in school programs as well. Out of school learning often takes a certain level of resources that not every student has. Many students need school support and school resources. And personally I think that teachers add a lot of value that most learners really need.

Tuesday, October 20, 2015

Programmers vs. Idiots

I found this image recently and shared it on Facebook.


Reactions from my friends was interesting. Most agreed with my saying that I didn’t think programmers were doing enough to make software easy to use. One person pointed out that this image shows an arrogance that software developers too often believe that everyone else is an idiot.

Programmers often tend to write software that works for them. In other words they think that what is easy and logical to them is easy and logical for everyone. Well except for, you know, idiots.  That is very often not the case. In fact one of the reasons we have different people test software other than the authors is that if you know too much about how something works you can easily sidestep the limitations of it.

Making user friendly applications can be hard. I’ve got a couple of applications I wrote for my own use that I would never hand off to others.I know they are not user friendly. They are usable only by someone who knows a lot of details. I wrote them to be easy for me to develop. They are easy to use once set up with data entered in proper formats. Setting up that data is not trivial for a non-computer geek. That’s not because non-computer geeks are idiots but just that a certain amount of domain specific knowledge is required to jump though the setup hoops.

And that, the setup hoops, is where a lot of software gets hard to use. I’m a pretty savvy computer user but there is some software I don’t use just because I’d have to learn too much new stuff to set it up and run it. Oh it would be easy, I think, to use once set up but it’s not worth my while to go though the setup pain right now. 

A lot of complexity has to do with adding more features, more power, and more flexibility. Ease of use seems to be one piece that gets set aside from time to time. Tools become more powerful and perhaps even more useable by the high end user but lose the ease of use for the low end or casual user. It is a sort of sliding bar where the difference between the low end and high end stays the same but everything moves towards the high end.   

This can be a particular problem for those of us teaching computer science. Integrated Development Environments and programming languages that are designed for professionals are becoming too hard for beginners to use. Special environments for beginners are available but often the jump between them and professional tools is large and getting larger. There is no easy answer.

There are teaching/educational environments that have stages with the early stages having fewer complications and less power than more advanced stages. The idea is to ease people into the complexity and power. It’s a great idea. I just wish we had more of them, especially in specific development domains. Of course getting the right features at each level can be tricky as well. One wants to walk the line between enough features to make for interesting projects and the too many features that might overwhelm beginners. We also have to keep the gap between levels manageable. It’s a hard balance.

We need to have the conversation about ease of use with students. One thing we have to remind them of is that the ability to write code comes with a responsibility to create easy to use code. We need to let them know that the users are not idiots and that they deserve the respect of the coders. After all those users likely have domain knowledge that the coders may need some day. We certainly don’t want those users to treat us like idiots when we need their expertise.

Monday, October 19, 2015

Interesting Links 19 October 2015

I played around with social media statistics this weekend. Apparently some 7% of both my Twitter followers and readers of this blog are from the UK. That more than justifies me posting BBC Micro:Bit news. That’s my story and I’m sticking with it. Only about half of the people who read this blog are in the US. That was a surprise. India is the country with the second most visitors to this blog. Happy to have everyone.

Hopefully people become because they find useful information. So here now this week’s links.

TeachCS is a new program to help raise money to help computer science teachers pay for professional development. Teachers may use these funds to attend professional development programs for one of three NSF backed high school computing courses: Exploring Computer Science (ECS), Bootstrap, and Advanced Placement (AP®) CS Principles. The more students your school has on free-and-reduced lunch the more money you can get. US only because of where the public money comes from.

What can you build with a Micro:Bit? – This article highlights some interesting projects by actual students. Lots of fun stuff. 

High school students: Submit an app to the Congressional App Challenge & represent your hometown on the national stage

Code.Org has been studying the results of their programs to expand computer science. Recently they filmed a video presentation  Increasing Access to CS Education: Results of 's 2014-15 Evaluation

Good/bad news: CS is the top major for women at Stanford--while nationally the percentage  of Female CS majors dropped.

One thing every programmer should do to succeed in the tech industry, according to an ex-Microsoft engineer – short answer learn to COMMUNICATE!

"I would advise folks in software to do one thing, and that's write," he told Business Insider. "Learn how to write ... It's actually useful. You need to know how to express yourself. And it's really tough for a lot of engineers to step up and do public speaking."

Daniel Moix@moixland posted a very good video presentation called CS Praxis Pass By Reference Video Tutorial It’s a great review.

Chicago mayor calls for national CS and coding requirement for High Schools. “Just make it a requirement,” says Chicago mayor of computer science in high school Ah, if only it were that easy.

KidsCodeCS is a bi-monthly magazine about kids, programming, CS & how we use technology in our daily lives. Looks interesting. 

New from Garth Flint So You Got That Computer Science Teaching Job. Now What?

@csnyc Hosted a computer science pedagogy meetup. Want to see the video? Several different presentations were recorded.

I think this graphic was aimed at professional developers but I have seen it in a number of areas. I’ve been the victim of this myself. Schedule some rest people. You need it!

Embedded image permalink

Friday, October 16, 2015

Autograders–for good or for evil?

Over 40 years ago I first graded programming projects. As an undergraduate lab assistant I reviewed student projects based on metrics from the professor. The professor assigned the grade in large part based on my review of how the project met the assignment goals. Grading coding projects was a pretty labor intensive process. For many of us it still is labor intensive today.

There are programs that evaluate programs that instructors can use. The CS 50 MOOC and in-person course out of Harvard uses one such autograder. Using it really got me thinking about autograders recently. After all automating labor intensive work is something computer science people think about all the time.

Recently I played around with using CodeHunt as a sort of autograder. I had my students copy code they had written previously into a CodeHunt puzzle. (The puzzle I used is embedded in an Office Mix at Palindrome Tester  if you want to try it.)

Having student using it emphasized a minor frustration I had with the CS 50 grader – it is very picky.  If the grader is looking for a return of “palindrome” and the student uses a capital “P” the grader judges it incorrect. A Binary right or wrong lacks any of the granularity that one would like to incorporate into grading. At least CodeHunt will give some weighting based on how a student solution compares to the canonical solution the puzzle writer used.

Recently CodeHS announced an autograder and made it available. (These Are The Autograders You’ve Been Looking For) They posted a link on a Facebook group for computer science educators. One of the replies there was from Mark Guzdial who really knows his stuff about what works in computer science education.

I'm deeply worried about use of autograders. Lecia Barker's research says that THE most critical factor in retaining students in CS (especially women and URM students) is using creative, relevant, meaningful assignments. Autograders steer assignments towards easily graded, cookie-cutter coding projects where creative solutions are a minus -- they're harder to autograde.

That comment really resonated with me. As I have been thinking about autograders one of the issues for me has been how to write an assignment that works with an autograder. I’d already thought about how picky they are and had been thinking about other limitations. The limitations I had been thinking about had been mostly technical and I hadn’t really thought about the creativity aspect. I hope I would have gotten there eventually but Mark’s comment brought it home immediately.

I like creativity in projects and I don’t mean just creative ways to get a narrowly defined answer. I alluded to this in a recent post (Just Don’t Turn Them Off  - more so in the comments) but it is a common thread in my ideas about teaching. An autograder that is hyper picky about spelling and punctuation is a little frustrating but an autograder that leaves no room for “creative, relevant, meaningful assignments” is likely to be deadly boring.

That doesn’t mean there is no role for autograders. I do like using CodeHunt for small exercises. And my students like it for the game aspects of it as well. But for major projects I think I really want interesting projects of the sort that do not lend themselves to auto grading. I also want to offer a lot of options for individual projects and that is likely to be more work to set up in an autograder than to grade manually.

So do autograders have a place? I think so. You can’t do a MOOC without them for example – though I am not so sure a MOOC is the way I want to learn or teach. They can be useful for the simple exercises that one wants students to do before incorporating a concept into a larger project. But they are not the end all answer to grading really interesting and motivating projects.

Thursday, October 15, 2015

Project Ideas Are Everywhere

Yesterday, like thousands of other teachers, I was proctoring the PSAT exam. Few things are less exciting that watching a room full of students fill in little circles with number 2 pencils. 

One does need to pay attention to the instructions though. They are a mix of clear and not so clear. Helpful and not as helpful. The different parts of the test are  25, 35, 45 and 60.minutes long and you have to get the start and end times right. The proctor’s booklet has a chart in the back to help you determine end time based on start time. No, really, they want to make sure you know that 35 minutes after 9:48 is 10:23 without you having to do all that heavy math. And yes, there was a column for 60 minutes later. Boggles the mind.

Naturally my second thought was “that makes for a good programming project.” You can probably guess what my first thought was but let’s not get into that. My friend Tom suggested the output should be a CSV file. That would make it easy to check and use.

There are all sorts of ways a table like this can be created of course but they all require loops. And they require that students take wrap around into account. I’m actually more curious to see what sort of solutions students come up with than anything else.

Of course we could also make a simple time differential calculator that takes a start time, a length and provides the end time.That might be fun as well. No loops in that one but some interesting math. It really gets into wrap around discussions are well. Computer science beyond programming for the win.

Wednesday, October 14, 2015

Just Don’t Turn Them Off

A couple of years ago two of my students were discussing my influence on motivating students into computer science. One was giving me much too much credit. The other was being more realistic but did say that I encouraged him and that I could have turned him off from computer science. Given this students great success, which I credit to his own intelligence and hard work – it’s all him, I am sure glad that I didn’t mess things up. Bad teachers turning students away from a topic is not an issue limited to computer science of course. But given the shortage of CS people this is a real concern.

As we expand computer science into more and more schools and more and more grades in schools the potential to excite more students about the field runs hand in hand with the risk of losing potentially great students. Are we careful about not losing the students who are not already interested? Or worse, driving away the students who are interested?

I’m a big proponent of teaching with enthusiasm and passion for the subject. I really want my students to see the fun, excitement, potential, and even wonder of computing. The goal it to “turn them on” to computing. Thinking “just don’t turn them off” seems like a defeatist attitude. They are two sides to the same coin though. Often what excites some students will be a turn off for others. Not everyone gets all geeky for esoteric operators and abstract concepts. Some people want to do interesting and artistic things with images. Some students like pretty graphical user interfaces what others like the clean simplicity of a command line interface. Do we try to use a range of different projects and exercises to appeal to the widest range of student?

All of this leads me to believe we need a wide range of computing experiences. We need to mix it up a bit if we only have one course, one chance to win students over. That is often the case in high schools for example. In lower grades we can’t always expect one teacher who teaches every subject to know 10 different ways to teach the same CS concept so the challenge is  extra real there. What was want, I think, is to see different ways of doing things at different ages and grades. The more side of the elephant that is computing that students are exposed to the more likely that they’ll find an aspect they like.

What we have to worry about is deadly boring “you have to learn this for the test” classes. We don’t need “filter” or “gatekeeper” courses that weed students out at young ages. We need courses that expand the possibilities and open doors for more students. It’s not always going to be easy but it is important that we try.

Tuesday, October 13, 2015

Live Coding and the Teachable Moment

The smart thing is to practice any code writing one is going to demonstrate in front of an audience. When I was was working in industry and preparing demos for presentations I would typically work though the program code several times before a demo. Over and over until I could get it right in my sleep. As a classroom teacher I sometimes get a bright idea 5 minutes before class starts. And that is where it gets interesting.

The other day I decided that as a class we would work out how to create a program to determine if a string is a Palindrome or not. I’ve done this several times over the years. It’s a great little exercise to practice string handling and loops. Later in the semester we will revisit it as we refactor it into methods. But I was doing it on the fly that day. It went very well. For a while. I kept things very simple.

Then I decided to get fancy which is seldom a good idea. I created an if statement that looked like this:

if (working.Substring(i, 1).CompareTo(working.Substring(working.Length - (i + 1))) != 0)
    isPalindrome = false;

It didn’t work. Can you see the problem? I didn’t. My students didn’t. It’s a horrible statement for understanding and debugging. There are just too many pieces all crammed together in one place. Just getting the parentheses balanced took a while. I know better than to write code like this but I was winging it. It wasn’t in my plan at all. So what do you do when demo code doesn’t work? Obviously you pretend it was done on purpose and model debugging methods.

The first step was to make things easier to see via the debugger so I broke the code down a little:

temp = working.Substring(working.Length - (i + 1));
if (working.Substring(i, 1).CompareTo(temp) != 0)
    isPalindrome = false;

It’s a lot easier to read and understand already though of course it could be simplified more – and probably should be. If you understand that I want to be comparing single letters you can probably see the error now. The Substring command on the first line is missing the second parameter which specifies how many characters to use. This became immediately obvious when I put the program into the debugger and looked at the values of temp. It wasn’t so obvious in a mash of lots of nested parentheses, parameters inside of parameters and generally to much “stuff” in one statement.

This led to a discussion of simplifying code to make it more readable, more debuggable and more maintainable. We’ll continue the discussion next class.  Just don’t tell my students I didn’t do this it on purpose ok?

Monday, October 12, 2015

Interesting Links 12 October 2015

I’m not in school today. Columbus Day holiday here in the US. A bigger deal is that my grandson stayed over last night. I love being a grandfather. He’s only a year old. Not quite ready to learn to code but when he is I’ll be ready. Now for some links. Some funny, some about jobs, some about news and programs and some about resources. Take a look and I hope you find something useful.

US law declares STEM includes Computer Science. Many, perhaps most,  STEM programs don't reflect this.  This is big news.

Can I start a coding club?  Katie O'Shaughnessey @KTOCompSci starts up an aftert school coding club for middle school students. A gre3at age to g et them started because they don’t “know” coding is supposed to be hard.

6 Youtube Channels For Beginner Raspberry Pi Users  - yet another thing I would like to try to find room for in my curriculum.

The TEALS team is looking for people who Want a Job Expanding Computer Science Education.

 Dawn DuPriest@DuPriestMath has a great post titled “My girl programming students have been great. Better than the boys!” Why you should never say this. A bunch to think about here. I struggle with trying to make my class comfortable for both boys and girls but I’ve never been a girl myself so I know I miss a lot. The picture below is Dawn’s/ Looks like they are having fun.

Embedded image permalink

NSF is hiring a permanent program director in Computer Science Education. This is big: more funding -> more research -> better teaching.

I had not heard of the Allen Distinguished Educators program Allen Educators ‏@AllenEducators Until they tweeted - Teachers: We need you to Inspire, Enable & Empower. Apply to be one of the next Allen Distinguished Educators Check it out. There is money involved.

The Allen Distinguished Educators (ADE) Award honors K-12 teachers who create innovative, student-directed programs focused on computer science, engineering and/or entrepreneurship skills.

What we can do to unblock the bottleneck [shortage of CS teachers]: Incentivize CS teachers, grow more pre-service CS teacher ed by Mark Guzdial at @blogCACM

The Try Guys Try Coding With Girls Who Code – this is kind of funny. Though I am still not 100% sure what to make of it. 

Speaking of funny. I’ve seen this before but I’m not sure I have shared it here. Recognize you or any of your students here?

Embedded image permalink

Saturday, October 10, 2015

What Traits Indicate Potential in Computer Science?

Last week I was a bit critical of a study about traits that make for good computer science students or programmers (How NOT To Tell If Someone Is Cut Out For Computer Science ) In reply to a tweeted link to that post I had a question from a friend of mine.

It’s a good question. Not an easy one to answer though. Back in the 1970s when I was looking for my first programming job a lot of companies gave applicants “aptitude tests.” None of the companies who gave me tests hired me. The company that did hire me gave me three raises in the first year I worked there. Apparently I had some aptitude after all.
When I think about my students and the professionals I have worked with over the years seem to have some traits I notice.
Curiosity – The students who ask me “how do I ..” or “what happens if …” are the ones who do the best in my classes.
Makers – the people I know who make good programmers want to make things. It might be music, it might be electronics, it might be woodworking (I know a surprising number of software people who like to work with wood), it might be art (photography is very common) but what ever it is people who like to make things seem to do well in computing.
An ability to look at things differently – Science fiction and fantasy seems to be a common interest among many software people. I like to think that is because they like to look at things as they might be compared to how they are. Not is not the only way to look at things differently and I see other indicators of that in software people. Politics, history, art, what ever there are CS people looking at things differently.
None of this is really scientific on my part of course. It is just how things look to me through my own life’s filters. What do other people see as indicators?

Friday, October 09, 2015

An Inside Look at Being A Computer Science Teacher

Garth Flint is one of my favorite bloggers. Garth teaches computer science in a smallish private Catholic school in Montana. This week he wrote a pair of articles that I REALLY like. In fact I think they are a must read for a lot of people.
If you are the only teacher in a school these articles will help you realize that you are not alone. If you are teacher in a larger school with other CS teachers and a good tech support team you will realize how lucky you are.
Lastly if you don’t know what it is like to be a computer science teacher, don’t understand why and how being a computer science teacher is different from any other teaching job or if you want to understand more about how complicated it is to “create” more computer science teachers you really need to read these articles.
By the way, make sure you read to the last paragraph in the second article. That’s the best part.

Thursday, October 08, 2015

How NOT To Tell If Someone Is Cut Out For Computer Science

Recently “Code School, a Pluralsight company and online learn-to-code destination” released the results of a study of sorts they did to try and determine who were good candidates for a career in computing. The results are, in my opinion, about as useless as is possible. What they did was to survey people currently in the field to see what traits they have. This sounds somewhat useful except that we know that many people who can be good at computing are kept out of the field by the stereotypes this study concludes are indicators.

The problem as I see it is that if we limit ourselves to these so-called indicators we miss out on a lot of potential. We’re already getting the boys who jump into computing young. Just because someone doesn’t start early doesn’t mean they are not cut out for computer science. Many successful people get involved later. Often these later entries, in my opinion, arrive with a level of maturity that helps them be more effective.

This study also suggests to me that missing out on people is hurting us greatly. For example the study reports that “Women were less likely to procrastinate and more likely to turn in work on time with the best quality, while 41 percent of men admitted to waiting until the last minute to do school assignments.”

Speaking as a classroom teacher I’d rather see my students turn in their work with the best quality. I’m pretty sure most managers of development groups also prefer that to people waiting until the last minute to complete work. I’d rather encourage people who plan, who refrain from procrastination and who care about doing their best work than someone who always waits until the last minute to do things.

The results of this study are interesting to a degree but as a source for who to encourage into computing it’s not at all helpful.

Wednesday, October 07, 2015

Want a Job Expanding Computer Science Education?

The TEALS program ( is looking for regional managers to help them expand their program of placing industry professionals in schools to work with teachers developing and growing CS programs and teachers in schools. They are looking for people in San Francisco/Bay Area, LA, New York City, Boston, Virginia/DC, Phoenix, and Seattle. Full job description at

In brief:

TEALS is seeking a candidate with an entrepreneurial spirit who is passionate about computer science education in high schools. Candidates should be interested in helping to grow and scale the program in their region.

The regional manager is responsible for the region specific management and implementation of TEALS including, but not limited to:

  1. Technical recruiting and relationship management
    1. Recruit TEALS volunteer teachers. Speak at companies, conferences.
    2. Build and maintain relationship with tech companies, and grassroots recruitment of engineering volunteers.
    3. Conduct interviews and placement of volunteers within the region as well as management of volunteers.
    4. Understands the technology industry and work environment.
  2. School relationship management
    1. Recruit, vet, and onboard schools.
    2. Maintain relationship with school district administrators, school building principals, counselors, schools, foundation, and in‐service teachers.
    3. Foster the importance of CS education within the region’s school community.
  3. Teacher training and mentoring
    1. Train and mentor volunteers, and work with education partners.
    2. Visit school sites and providing feedback to volunteers.
    3. Conduct local teacher meetups and team check-ins.
    4. Support volunteers during the school year.
  4. Program management and operations
    1. Manage day to day running of region including budgeting and execution of program against regional plan.
    2. Drive excitement for CS education for students, schools, and volunteers with events and incentives.
    3. Build and maintain regional nonprofit relationships.

The ideal candidate will have a background in computer science with either a major or minor. Additionally, the candidate should have some classroom teaching experience and understanding of the school system and ability to navigate it.

Tuesday, October 06, 2015

I get letters

Doug Peterson occasionally writes “replies” to spam comments that are left on his blog. He does it so well that although I love the idea I don’t want to duplicate it. On the other hand I thought I might write about some of the email I get.

One of the types of email I get are requests to write guest posts for me. I them down. I want my blog to be my voice and about issues an products and what not that I care about. One person I turned down replied with an email that started with:

But I'm a professional writer and published number of articles in education related blogs.

Good for you. And good luck with your own blog. Of course they never seem to have a blog. They are looking to promote the web site they work for. It turns out that all of the blogs the most recent person listed as references appear to be commercial sites designed to attract readers for their advertising. In short the sort of site that makes internet searches for real content difficult. I have no desire to contribute to that morass.

Explicit requests to advertise on my blog is another  sort of email I get. Now there is nothing wrong with advertising and I am fine if other people accept advertising. Most teachers (including me) could use a little extra money. It’s just not something I want to deal with right now.

When I worked for Microsoft and blogged on a Microsoft owned blog site I used to get requests to advertise products that competed with Microsoft products. That always surprised me because if showed that people had really not done their homework. Amazingly even when I explained that promoting products against the best interests of my employer (pretty much the definition of biting the hand that feeds you) was not a good idea for me some people persisted in pushing their requests. Amazing really.

The next big email request is to use someone’s infographic. I used to accept some of these when I thought they were appropriate to my audience. I don’t do so as often as I used to. Most of them are basically advertising. The ones I do accept are more likely ones I find on my own and/or from a non profit whose goals I agree with. You are much more likely to see infographics from NCWIT or Code.Org on my blog than from a commercial entity.

Of course I get product and program announcements all the time as well. Those are case by case. If it seems appropriate (a new drag and drop language, a cool teaching robot, or a curriculum resource that has value) it may show up in an interesting links post. If I try it and really like it there may be a full blog post but if there is it is one I write myself (perhaps with some quoted text with a link).

Lastly I get a lot of public relations announcements that have nothing at all to do with what I blog about. I pretty much ignore these unless it is from a company or organization that I know might have things related to what I am interested in and think my readers might be interested to learn about. So not many of them get more than a scan followed by a delete. The cost of sending this sort of thing is so low that many agencies send them very widely hoping one or two will “stick” somewhere. I suppose they report back to the hiring company that they sent the announcement to x number of bloggers.

I never know what is going to show up in my email. Some of it is useful. Much of it is not. It is still interesting to see how things work or at least how people think they should work.

Monday, October 05, 2015

Interesting Links 5 October 2015

School is really rolling along for me. Last week we had our first progress reports due. This was followed up by a number of kids looking to make up missing work. Imagine that! On the outside of school there was a lot of news flowing around the Internet. More than the usual amount of links to share. Something for just about everyone. I’m pleased about the Small Basic with Kinect announcement. I’m going to try that this week. But far to much about me. Here are the links.
The Bottleneck in Increasing Accessibility to CS Education is Producing Enough CS Teachers from the blog@CACM Mark Guzdial writes about the elephant in the middle of the room when it comes to increasing accessibility of computer science education – lack of teachers!
What can I do today to create a more inclusive community in CS? Guest Post on Mark Guzdial’ s blog from Cynthia Lee. Lots of great suggestions!
Now open - THECNOLOchicas @technolochicas - web site for Latinas in technology
Garth Flint talks about what school is like for him this year as he upgrades some school software on a weekend. - I was bored watching an update so I figure I would babel. This is what it is like for a lot of high school computer science teachers who are also the IT support for their school.
Small Basic 1.2 Released with Kinect Support and Bug Fixes Microsoft Small Basic 1.2 includes Kinect for Small Basic, which introduces three new Kinect objects! It also expands the Dictionary object to translate in 7 languages, fixes the Dictionary object bug, and fixes another 7 crash and error bugs. It also features updated UI text for 15 languages! If you're using Windows XP or earlier operating systems, please download Small Basic 1.0 instead. Hey high school students, want to meet the folks who work on @Xbox One, @Windows & @Bing? Apply for Microsoft’s  high school internship: Local to Microsoft Redmond WA only unfortunately. How to tell if your child has a future in computer science Not sure I agree with this. Looks more like a list of what has traditionally been the the path into CS and not a real indication. I think we want to build more paths. What does a company like Microsoft need with the quietest room in the world? Interesting site about how Microsoft has the Guinness World Record for the quietest room in the world. Volkswagen and Cheating Software One of the world’s top security experts weighs in on the recent software to cheat in the news.

Friday, October 02, 2015

BBC Micro:Bit News–Lots Happening

News about the BBC Micro:Bit is probably more microbit3-300x225useful to my United Kingdom readers than those of us in the rest of the world but I think it is interesting to many more. There has been a lot of stuff flying through my feed the last week or so about it. I’m fascinated with some of it.

Edit: Lee Stott has a bunch of new and additional information (as of 12 Nov 2015) at BBC MicroBit news.

For example I learned about a tie in between Kodu and the BBC Micro:Bit. Check out this Kodu/Micro:bit feature demo What it is about is that a BBC Micro:Bit connected to a computer can be used as a game controller in some interesting ways. The obvious first way is using the BBC Micro:Bit to control robots in the game. You can also create displays on the BBC Micro:Bit LED set as well. But where I got really interested was when they attached sensors and other devices to transmit information to the game AND have the game control devices outside the computer. Watch the video to the end.

I tend to think that the big win for most students is going to come from attaching external “things” to these devices. I’ve played around with the simulator and doing stuff with the LEDs is fun but could get old quickly even for wearable devices. But maybe that is just me. We’ll see. I personally want to learn more about using sensors and controlling external devices though.
They are running a big roadshow around the UK teaching teachers about the Micro:Bit. Some teachers from these events are posting things they are learning:
You can see some of the resources available and try out the online simulator (programming in TouchDevelop, Microsoft Block Editor (built on Blockly) and now Code Kingdom’s JavaScript) at the MicroBit home page.

On the down side the BBC says Micro:Bit rollout will be delayed. Teachers should see theirs around Christmas but students get theirs later than that. Probably after the first of the year.

Thursday, October 01, 2015

Software Performance–It’s Complicated

One of the things I don’t have near enough time to talk about in a one semester first programming course is performance. Arguably that is much more real computer science than just programming is but one has to prioritize. It doesn’t help that understanding the performance of code is a pretty complicated thing.

My recent post about finding different ways to solve a problem showed this in the comments where several of us went on a bit about performance. Even simple problems can have solutions with very different performances. There was a time when things seemed a lot less complicated.

In the early days some compilers produced assembly language code which was then often hand tuned by experts. One would be able to find some performance bottlenecks more easily that way. Compilers were relatively simple and “stupid” back then. Then we moved on to optimizing compilers. This changed things quite a bit. It really messed up some of the benchmark software that a lot of people used to understand how fast computer hardware was.

For example some test programs had null  loops – loops that iterated many times but did no real work. Before optimizing compilers the loop would run some number of times doing adds and compares and a time would result. An optimizing compiler would examine the code, realize it do no useful work, and just not include it in the running program. Huge performance improvement apparently.

Writing programs that tested the performance of the hardware became much harder. Of course that was a good thing for software development because these compilers allowed average programmers to write very high performing code. Programmers did not have to know as much about how the hardware worked.

That doesn’t mean that people can’t write slow code that the compiler can’t fix. Trust me it can be done. I’ve done it myself and my students are often amazingly good at writing bad code. So it is something we have to think about and teach to some degree. My students who advance to Advanced Placement Computer Science will get a lot more discussion on performance which will be good for them.

I believe one of the benefits of formal computer science education can be a deeper understanding of performance issues. Someone who understands how multi-dimension arrays are stored and processed (yes it can make a big difference) has an advantage over someone who doesn’t. And there are many more possible examples.

There is a lot going on behind the scenes in software. There is often a difference between writing software quickly and writing software that runs quickly. Understanding compilers, hardware, assembly and machine language, and other details about how things work can be very useful.