Tuesday, October 30, 2012

Random Thoughts

A friend of mine posted the picture below on Facebook recently. About as basic, and wrong, random number generator as one can get. But it brings home a point – computer generated random numbers are not really random. They are pseudo random. A close approximation of random but not totally random.

random

Like so many things though the random number generator algorithms are good enough for many things. They are not generally good enough for serious encryption but for a lot of simulations and games they work just fine.

Most of them also let you reproduce a set of pseudo random numbers. By that I mean one can run a program a number of times and get the same “random numbers” time and time again. This is very useful in debugging code. It’s hard to know what outputs are correct if you don’t know in advance what the inputs are. Once your program is fully tested, what ever t hat means to your project, you can start using different “seeds” to get difference results for each run of the program.

I’ve seen students get frustrated trying to debug a program when they don’t know what numbers are coming into their algorithms. More fun, for some definitions of fun, is when students forget to really randomize their program and other students figure out the list of numbers coming, the algorithm and start winning every turn of a game program. Great teaching opportunities either way.

Getting to a random number, pseudo random that is, can be a pretty complicated process. Paul Vick, who was on the the Visual Basic team at the time, posted a note about pseudo-random numbers and Visual Basic. Included in this post is a code example of one version of a random number algorithm written in Visual Basic.

It's not an algorithm for the timid and it involves some concepts that many students will not learn in a first course in programming. But I think it is useful even in those cases for students to get a feel for some of the complexities involved in the process.

Monday, October 29, 2012

Interesting Links 29 October 2012

First it was an earthquake and now they are talking about a hurricane hitting much of the east coast. Some places have been hit hard already. Computers are key to modern weather forecasting and it is a good thing we have them to warn us so we can prepare. Speaking of preparation, I wrote this Sunday afternoon to make sure it would be available Monday morning. Hope you find some good links here.

Have you heard about Coder Dojos? I first read about them on the Blogs@CACM site with an article titled Inside the Coder dojo. They are volunteer operations around the world to introduce young people to various types of coding.  Then I found out (from Kim Wilkens ‏@kimxtom) about the CoderDojo session at GlobalEd12. There are a lot of Coder Dojo links at Kim’s wikipage.

Does your school or district use SharePoint? A lot of schools do and they look pretty plain and uninspired. Some students in Florida build their new website http://www.cat.pcsb.org on SharePoint with a lot of customized work. The students decided on Windows 8 look and used HTML 5, jQuery, Java, CSS and C#. The site is 100% student produced!

Interested in robots? The iRobot company has iRobot SPARK - Starter Programs for the Advancement of Robotics Knowledge. They are on Twitter at  @iRobotSPARK and on Facebook at https://www.facebook.com/iRobotSPARK

Good news for people looking for careers in software engineering - Demand for software engineers keeps climbing -- and so do the salaries with a 2.5% increase in software engineering salaries in one year. What is the down side? Mark Guzdial writes that Seed corn looking more attractive. Why would people study to teach computer science when there is money to be made in software engineering? Mark also reports that in the UK Graduates to be offered £20,000 to train as computer science teachers Will it work? I wonder.

Similar to Coder Dojos are hackathons.  ‘Hackathon’ Events Proliferate for Student Programmers. I know that Microsoft has been running a lot of hackathons both on college campuses and for professionals in various metropolitan areas. Lots of cool things happening at them.

If you are teaching in high schools you probably know this but if you don’t know Why isn't there more Computer Science in US high schools? this post by Mark Guzdial is a must read.

 

Wednesday, October 24, 2012

Computing Projects for Girls

This is a big topic on my mind of late. There is some discussion of this in the comments on my Boring Projects post and well as some responses via Twitter. Joanne Cohoon left a comment on the post suggesting health related projects like Body Mass Indicator (BMI) might appeal to girls. She added “helping people” via Twitter with a recommendation for the DotDiva website for ideas. It’s at http://dotdiva.org/ not .com. I think that was a typo in the tweet.

image

Today I visited my wife’s 8th grade class to show them how to use Kodu to create/program their own games. One of the first questions from a girl was “can we use it to tell stories?” From a boy I got “can we make things fight?” Sigh Yes boys and girls do seem to be a bit different from each other. Middle school is when, in my experience, they are most different. Though of course there is a spectrum among both boys and girls so we do have to be very careful about pigeon holing anyone. It’s a fine line to walk at times.

I talked to a professor at Bryn Mawr where they use robots to introduce programming to college women and asked about that. He told me that his students do like robots. They like different kinds of robots than men do though. I saw younger girls making robots and a summer program at the University of Lowell some years ago. These robots were cute and cuddly and totally unlike the “fighting robots” a lot of boys seem to like to build.

The same is true of games. Girls like games. The largest demographic group playing online games is middle aged women. They just like different games than men/boys. This is something we have to take into account when designing game related projects to attract more girls (and some boys who are not “in to” the violent first person shooters we have come to associate with boys).

As someone who has never been a girl and who hasn’t raised a daughter I struggle with trying to design projects for girls. I think that more people in education (men and women) are working hard to make the environment more comfortable and even attractive to women. But I think many textbooks are still using the old projects.

That is something we (well I for sure) need to work on. I wish there were an organized effort to collect projects that work for girls/women. Not so much that they are designed for women to the extent of pushing males away but as an effort to find enough different projects that we can supply relevant, educational projects that are inclusive and provide a context that more people can feel comfortable with.

Tuesday, October 23, 2012

Boring Projects

Recently someone I really respect posted a recommendation against using Visual Basic saying “ I find most textbooks for Visual Basic to have boring assignments like temperature conversion.  I also find little open-ended problem solving.” Ouch! As someone who has written a couple of Visual Basic textbooks and who liked the temperature conversion assignment I was crushed. Ok maybe not crushed but pushed out of my comfort zone at least.

I was feeling pretty good about my latest project – an application to keep score at golf and running track of who owes what to who in the Skins Game.

image

Now I am not so sure. What I liked about this project was that it was a step more beyond just adding a bunch of numbers. One has to keep track of ties and so the scoring is a little more complicated.  But perhaps it’s not open-ended problem solving enough. Sure there are any number of ways this could be solved and there is room for creativity. But is that enough? And is Golf too “old people” a game for high school students?

So I am reevaluating how I look at projects. I also ordered a textbook by someone I am reasonably sure has projects that fit the less boring and more open ended problem solving nature. No names or review until I’ve read it. Smile

Ultimately I am optimistic about the thinking I’m doing. I think we all tend to be challenged in our thinking from time to time. We need to stretch beyond the same sorts of projects we’ve been doing for years. Reading things from people who have different ideas, use different tools, and look at things from different directions is how we grow. It’s something I try hard to do. It’s why I read as many blogs as I can, I follow the discussions on the APCS forum and constantly look for new things on Twitter. Social media really helps me expand my horizons.

What do you or where do you go for new ideas?

Monday, October 22, 2012

Interesting Links 22 October 2012

Earthquake! Yes earthquakes are rare in New England where I live but we had one last week. Shook things up a bit. Not injuries or damage as it was a mild one as earthquakes go. Still it was the first one I have ever felt and it was an experience. In less earth shaking news I have a lot of links to share with you today. Lots of good stuff!

Do you know a high school girl who should get some recognition for her interests and achievement in computing?. The Aspirations in Computing Award wants you! Just under 10 days for applications.

Cool Schools: Students Building Apps For The Future A TV station highlights the smart phone and Windows 8 apps being created by Pat Yongpradit’s high school students. Great things happen when you point kids in a direction and let them at new technology.

Not sure if I am ready for Introducing Programming to Preschoolers A new Scratch Jr is being created to do just that. What do you think?

Vicki Davis (@coolcatteacher) is an outstanding teacher who readily adopts and uses technology in her teaching. But she had a great post last week reminding us that  You don't need another gadget to be a great teacher.

Free book! have I got your attention? A lot of students are learning C# these days but it seems like C++ is making a big comeback lately. How do you help with the transition from C# to C++? This book may help – learn with  C++ for C# Developers with 'C++ Succinctly". You have to register to get the free copy but I think that is a small price to pay.

New updated web site from the FBI - Cyber Safety Website for Teachers, Students

Tackling the tech gender gap by teaching girls to code reports on some good work being done in the Chicago area.

Review on Kinect Classroom trial -- Good stuff! “Kinect”ing with the students http://blog.timesunion.com/highschool/kinecting-with-the-students/34027/ …

Great article from USA Today about women encouraging other women to go tech! Nice quote from my friend Ruthe Farmer (@ruthef) who is the chair for CS Education week (@csedweek)!

One good online way to share teaching resources - join the online AP Teacher Community in your subject area. You’ll get a lot out of the APCS teacher community if you are teaching computer science even if you are not teaching to the AP exam.

Kinect Games v2.5 using Kinect SDK v1.6 including source code via @drenton72

Bertrand Meyer has a pretty serious and interesting article called A fundamental duality of software engineering on the blog of the Communications of the ACM.

A pair of great posts by Eugene Wallingford last week

Saturday, October 20, 2012

Stereotypes That Refuse To Die

One of the areas on Facebook is called Trust Me I’m an “Engineer.” where humorous (for sometimes interesting definitions of humorous) images are posted. I don’t follow it directly but from time to time images from it show up on my timeline from other people. Last week an image showed up that said “ENGINEERING FACT You know you’re in the wrong class when more than 3 students are female, and they’re all hot.” It annoyed me for several reasons.

ENGINEERING FACT You know you’re in the wrong class when more than 3 students are female, and they’re all hot

First off is the idea that there are very few women in engineering classes. Other than computer science we’re seeing a lot more women in engineering classes these days. Changing the dynamics and getting more women into computer science is an important goal. We need to get to the point were there is no truth in the first part of the “joke.”

Secondly I found the second part, the suggestion that women in engineering are somehow not attractive to be most offensive. Back when I was a student there were more women in CS classes and I’m here to tell you that they were far from unattractive. I also married a woman who took computer science classes and I still find her quite attractive 35 years later. You don’t have to spend much time on the campus of a large high tech company (like a Google or a Microsoft) to see a lot of “hot” women.

Though honestly we shouldn’t be judging people, men or women, on appearance in any group.  Categorizing people as hot or not is a good way to keep people out of a particular area or field of study. The idea that women in engineering are both few and ugly (or at least not hot) is the sort of image that might be discouraging to all sorts of people. Yet these sorts of stereotypes persist.

Signs like the above are more sad than funny to me. The sexism that it represents is a negative that we have to get rid of in order to make life more comfortable for women (and others) in engineering and science fields.

Thursday, October 18, 2012

I Can Figure It Out Myself

I set out for my daily walk today hoping for inner peace and calm. What I found was a bit of inspiration. About a half mile into my walk I saw a little girl, could not have been much more than two if that, approach some stairs. The stairs were high even for an adult but she walked up to them and without hesitation started climbing them using all four limbs. In no time at all she was at the top of the stairs waiting for the door to open.

I seriously doubt anyone taught her to climb stairs. This is something little ones learn on their own. They see adults walk up stairs long before they are ready to attack them themselves so they have to know that one way up is to walk. I have watched little ones try to step up but they quickly realize that is not going to work  for them. They never give up though. Going up stairs is something they want to do so they find a way. Just because big people use two limbs does not tell them that they can’t use four so they do.

We don’t build alternate paths for toddlers to get around stairs. We either block stairs off or let children work it out for themselves. We know they will because toddlers are curious about everything and they are creative. Any parent can tell you stories of little ones getting into things that they parents thought was child proof.

While children will ask to be picked up when they are tired or bored or just want mommy or daddy they tend not to ask how to do things. They don’t ask how do I walk or crawl or get up the stairs. They figure it out. I think they may not even know that asking how to do something is an option for the first few years of their lives. Somewhere along the line that changes though.

As students get older we tell them in more and more detail how to do things. We don’t ask them to solve problems so much as we teach them how to do specific things. By the time they get to middle school they want every detail of a project spelled out for them in step by step instructions. Why do we do that to them?

This is sort of the killing creativity to go along with my killing curiosity post of the other day. What we should be doing more of it pointing students in a direction, hand them some tools, and saying figure it out yourself. The world needs more people looking at problems with creativity and fewer trying to fit old solutions to new problems.

Finish the Features or Hit the Date

In professional development there is always a trade off between what features to have in a product and when you want to ship the product. Dare Obasanjo@Carnage4Life is a Principal Program Manager Lead at Microsoft and a really smart guy. Last week he tweeted “You can be feature driven or you can be date driven. You can't be both unless you want to ship crap.”  which outlines the problem rather succinctly.

In schools we tend to ask students to hit both date and feature requirements. We want students to finish all the requirements of a project by a very specific date. While there are times when project deadlines are extended (which does happen in the professional development work – also rarely) usually the dates are quite firm. For a lot of students this means that the projects turned in are pretty poor. Some students get it all done and done well by the deadline. This is because projects are usually designed with time frames that are reasonable. Usually. For a good student. This doesn’t model well with professional development but then our goals are different. What about the students who don’t have enough time to do it all and do it well? Students generally have two options:

  1. Turn in buggy programs that attempt all the required features
  2. Leave out some of the required features.

Option one seems to be quite popular in my experience. I think that students feel that they should attempt it all. In general I think that is the worse of the two. It’s hard to give a fair grade to a program that doesn’t work. A program that works even though it doesn’t meet all the requirements is a lot easier to grade and gives a better indication of how much a student knows.

A big part of the reason for this is that students try to do it all at once. I’ve seen students try to write every bit of code before doing more testing than syntax checks. Of course we try to teach students to take things step by step. We ask them to do unit testing. We ask them to break things down into small manageable easily testable pieces. But somehow too many students try to do everything all at once. Why? I don’t really know.

I suspect that intermediate deadlines might help, especially for larger projects. This would give a chance both to reinforce the need for iterative development testing and check for early difficulties. or perhaps have students create larger projects with sub projects leading up to a conclusion. Some sort of case study type project. It’s something I would like to try.

What do you do to prevent the “all the features are there but none of them work” problem?

Wednesday, October 17, 2012

Killing Curiosity

I have real mixed feelings about the Advanced Placement exams in general and the AP Computer Science exam in particular. Very mixed. There are some criticisms in this opinion piece in the Atlantic (AP Classes Are a Scam) that I agree with and some I don’t and some where I think it really depends on the student, the teacher or in many cases both. The comments are interesting in that they either support or contradict many of the claims in the post based, for the most part, on anecdotal evidence. That’s not the same as real data. I can support both sides of this argument with stories of my own students. Some who saved a year and a half of courses and tuition because of AP courses and others who still struggled though entry level courses after passing the AP exam in that subject. But that is not data either. There was one criticism I hadn’t heard before though and it concerns me.
The AP classroom is where intellectual curiosity goes to die.
Is it really? I sure hope that wasn’t the case in the APCS courses I taught. In fact I think that in most APCS courses curiosity (and creativity for that matter) are encouraged. Sure there are things that have to be covered. In fact there are far more things that an APCS student has to learn than can possibly be taught in a one year course with high school students. Fortunately for me, and even more fortunately for my students, where I taught there was at least one and often two semesters of computer science before students took APCS. That gave me some extra time and flexibility to make sure that curiosity and creativity could be encouraged.
That is not a feature that is built-in to the APCS curriculum though. I’m not sure how it could be as it is not something that one can really test for. Curiosity is critically important for computer scientists. Actually I’m not sure what field it is not important for people to have a healthy curiosity. Do we risk killing it when a course is too structured with too many things to cover in too short a time? Perhaps.
One of the things I always liked about Visual Studio is the Intellisense which constantly shows potential options for command/methods/properties/etc. as students enter their code. My believe is that it encouraged curiosity by showing things that students would naturally wonder about. And hopefully that wonder would lead to trying things out to see what they do. I always encouraged students to explore. If they learned something new or even came up with new questions that was always a positive in my mind.
As I alluded to earlier I believe that curiosity and creativity go hand in hand. Schools are constantly criticized for teaching the creativity out of students. We see that too often when students want step by step instructions that result in everyone getting exactly the same result that looks exactly the same. Yuck!
Programming is inherently creative. There are many ways to solve just about any problem. One wants projects that look different and that get to the right answer in different ways. Curiosity and the learning that curiosity promotes helps provide new ways to express creativity.  We  not only want our students to be curious and creative we NEED them to be curious and creative.
Advanced Placement classes generally enroll the smarted and hardest working students in a school. We owe it to them and to society to make sure we don’t stifle their curiosity and creativity as they seek AP credit for other reasons.

Tuesday, October 16, 2012

Visual Basic Gangnam Style!

Last week I was browsing though my RSS feeds and came across a post called Python Gangnam Style! that was all about playing music with Python. Now Python is a fine language but at heart I am a Visual Basic person. Clearly converting the program to Visual basic was a must do. It turns out to be pretty easy as you might expect. My version is below (it plays in response to a button click)

I’m sure there are other ways to do this by the way. I took the path of least resistance. I think that making music is something that many students do enjoy. This sort of project involves music, and physics as well as computer science. So it gives you a lot of things to talk about and allows you to tie different disciplines together as tends to happen in the so-called real world.

Imports System.Runtime.InteropServices


 


Public Class Form1


    <DllImport("Kernel32.dll")> _


    Public Shared Function Beep(dwFreq As Int32, _


                                dwDuration As Int32) As Boolean


    End Function


 


 


    Private Sub Button1_Click(sender As Object, e As EventArgs) _


                Handles Button1.Click


        Beep(293, 200)  ' D


        Beep(293, 200)  ' D


        Beep(293, 200)  ' D


        Beep(293, 600)  ' D


        Beep(246, 600)  ' B


 


        System.Threading.Thread.Sleep(0.1)


 


        Beep(369, 200) ' F#


        Beep(369, 200) ' F#


        Beep(369, 200) ' F#


        Beep(369, 600) ' F#


        Beep(329, 600) ' E


 


        System.Threading.Thread.Sleep(0.1)


 


        Beep(329, 200)  ' E


        Beep(329, 200)  ' E


        Beep(329, 200)  ' E


        Beep(369, 500)  ' F#


 


        System.Threading.Thread.Sleep(0.9)


 


        Beep(369, 200)  ' F#


        Beep(369, 200)  ' F#


        Beep(369, 200)  ' F#


        Beep(369, 600)  ' F#


 


        System.Threading.Thread.Sleep(0.9)


        Beep(369, 200)  ' F#


        Beep(369, 200)  ' F#


        Beep(369, 200)  ' F#


 


        For i = 1 To 4


            Beep(369, 200)  ' F#


            System.Threading.Thread.Sleep(0.1)


        Next


 


        For i = 1 To 4


            Beep(369, 100)  ' F#


            System.Threading.Thread.Sleep(0.1)


 


            Beep(369, 600)  ' F#


        Next


 


 


    End Sub


End Class




BTW if you are as musically challenged as I am, you can visit this full list of the hertz frequencies to get the other octaves for higher and lower notes. I confess that page doesn’t mean all that much to me but I’d imagine it does to the more musical among us.

Monday, October 15, 2012

Apps4VA Hackathons

My friend Ed Donahue asked me to pass along some information about Apps4VA and their upcoming hackathons this weekend. Apps4VA sounds pretty cool so I am happy to oblige. Note: Most of what follows is copied with permission from Ed’s blog at Apps4VA Hackathons

What is Apps4VA?

The Apps4VA program challenges the public to develop software applications (apps) that will use or analyze education information in unique ways – in other words, make a great app that helps us understand the nature or impact of educational reach. Apps4VA is sponsoring several unique programs and competitions and more than $25K in cash and prizes is up for grabs.

On October 19-20, Apps4VA will host a series of hackathons across Virginia that challenges participants to create apps that improve education using this data catalog. There will be 5 locations hosting the hackathons:

If you can’t attend in person,  consider entering the Open Competition or contributing to the Idea Bank!

Now, for the most important part: the prizes! The grand prize is $1500! At each location there will be a First Prize: $750 and there will be a Hacker’s Choice Prize: $250. In addition, the local hosts and sponsors will have other prizes including the chance to win some Windows Phones for people who develop a Windows 8 app! Yay!!

Here are some resources to help get you started with developing your submission:

Interesting Links 15 October 2012

WP_000552

Happy Monday. Hope you had a good weekend. One of the things I did was to attend the New Hampshire TechFest at a local high school. NH TechFest is an annual event that brings together a large number of companies and colleges/universities to show technology to students to try to encourage them to study STEM fields. iRobot was there with both some consumer robots and the military grade robot on the right of this post. Also the FBI Crime Lab which had a steady stream of visitors hearing how they use science the solve crimes. TechFest is a great event run by volunteers. I wish more places did things like this.

Things Great Engineers (almost) Never Say - The explanations are what makes this a good article. As I read this I thought that students tend to say a lot of these things and think they are ok. Make a good discussion point.

The game of life emulated in the game of life is a visual look at Conway’s Game of Life. Have you used  Life as a project? I have and really like it. 

I hope you saw my post about the proposed HS Computer Science Honor Society and associated Survey for teachers?

Good things come to those who wait - a tale of promoting CS education week in one school district on the CSTA blog.

There is a nice article about Maria Klawe titled How to get girls psyched about CS at Fortune Online.

Why Don’t We Make Learning A Computer Language A Requirement In High School? is an interesting post by Brad Feld. There are about 150 comments already.

Did you hear that Kinect for Windows has released an SDK update?

A computer teacher talks about how they explain to students that 32767 plus 1 equals minus 32768. How do you do it?

I’d never heard of the expression Snowflake Code before I came across the post Please Don't Write Snowflake Code. It’s an interesting plea to write code that isn’t too one of a kind and why.

Saturday, October 13, 2012

On the value of a CS education

Back at the beginning of my career a hiring manager told me that he almost recommended that I not be interviewed because I had been formally trained in college. He thought that was a disadvantage. I still got the job and did well there anyway. But that exposed me to a bias that I continue to see 30+ years later.

I have seen any number of very talented programmers with little to no formal training. But you seldom see anything less than the most amazing minds in that category. The average person just can't get to a professional level without some real training in my opinion. There are many people who are self taught and program for fun and hobby but will never get professional jobs because they just don't know enough. Often they don’t even know what things they still need to learn.

Even top self-taught developers have asked me for help with “you went to college for this stuff can you help me figure out …” because they were lacking important concepts. Formal training is a short cut like reading the documentation.

Community colleges often focus on the tools and techniques of the day. This is not unreasonable for them as helping people get better jobs NOW is a key goal for them. The university is about a career not just a job and so the concepts tend to be emphasized more than the tools or languages of the day. This may be a short term disadvantage but still a long term gain.

Yes there are great self-taught developers out there. There are not as many who are actually as good as they think they are though.

Friday, October 12, 2012

HS Computer Science Honor Society Survey

There has been talk about a high school computer science honor society among the high school CS education community for years. For the most part it hasn’t gotten past the talking stage. These days it looks like it might go farther. After seeing a post on the Advanced Placement Computer Science forums I asked Doug Bergman for more information that I could post. Doug sent me the following which includes a link to a survey that will be used to help direct the creation and constitution of this new national computer honor society.

Dear CS Teacher, We are excited to be in the early stages of getting off the ground a National Honor Society for Computer Science! And we need your help! The answers you provide on this survey will be used to create a constitution for a new national computer honor society.

We plan on modeling our constitution upon Upsilon Pi Epsilon’s constitution, which is the college and university’s national computer science honor society. The provisional name for our society is Zeta Omicron. The answers you provided here will be reviewed by the provisional board and used to write our constitution. The provisional board consists of Doug Bergman, Thomas Cooper, Bill Danklau and Rebecca Dovi.

Once we have a rough draft for the constitution, we will share the document with those interested in being initial members of our national honor society. The survey will be open through October 20th. We will then review submissions and write a rough draft for our constitution.

If you are interested in helping with the development of our constitution or participating in this initial year trial, please email us. Thomas will be our initial point of contact: thomas.cooper@thewalkerschool.org

Survey link: https://docs.google.com/spreadsheet/viewform?formkey=dEU3SVZHSjRWYWttNWw2ZU5TaTFtUmc6MQ#gid=0

Thursday, October 11, 2012

Top Computer Science Educators on Twitter

I’ve been maintaining a very loosely curated list of computer science educators and resources on Twitter for a while now. I make no claim that it includes everyone and I am sure I am missing some great people. I’ve really had a focus on people who create content for the K12 CS audience and a few others so there are no doubt some university faculty who should be on this list. I’m open to adding more names to the list if people let me know who should be on it.

But in the spirit of everyone else is making lists I decided to spend some time today going through that list and checking everyone’s Klout rating. Now Klout is far from perfect. If it was I’d have a higher score. Smile But it is one measure. After collecting close to 80 scores (some people for various reasons do not show up on Klout) I sorted by score. Here are the top 11 accounts (there was a tie at 10th) for your amusement.If anyone wants to see the whole spreadsheet send me an email at ACT2 @ ACThompson.net

Name

Twitter

Klout Score

Sue Black @Dr_Black

64

Peter Vogel @PeterVogel

63

Gail Carmichael @gailcarmichael

61

Doug Peterson @dougpete

60

Mark Guzdial @guzdial

59

Leigh Sudol-DeLyser @lsudol

59

Alfred Thompson @alfredtwo

58

Geoff Knauth @gknauth

54

Ben Chun @benchun

53

Eugene Wallingford @wallingf

53

Rob Miles @robmiles

53

NCWIT Award for Aspiration in Computing 2012 Reminder

Time for a reminder. Now that school has been underweight for a while you may have identified some young women who would be good candidates for the NCWIT Award for Aspiration in Computing.

What is the award?

The Aspirations Award honors young women at the high-school level for their computing related achievements and interests. Winners are recognized at an award event here in the community. All applicants will also be considered for the National award. National winners receive $500, a laptop and a trip to the March 9, 2013 awards gala.

Since 2007, NCWIT has recognized more than 1300 young women and honored more than 50 teachers with the NCWIT Educator Award. Learn more at www.aspirationsaward.org. Our Award recipients have been invited to the White House, received scholarships to top universities, and accepted internships at top tech companies such as Microsoft and Google.

Why is the award important?

By generating visibility for technical young women, the NCWIT Award for Aspirations in Computing encourages continued interest in computing, increases awareness of the gender gap in computing and IT, and emphasizes at a personal level the importance of women's participation in computing.

What is the application process?

Please direct girls to http://www.aspirationsaward.org. Detailed instructions and eligibility information are found online. APPLICATIONS ARE OPEN NOW THROUGH OCTOBER 31!

What is the deadline?

Please notify girls of this opportunity right away. Online applications are open now and must be submitted by 11:59 PM Eastern on October 31, 2012.

Wednesday, October 10, 2012

Are Your Students Whiteboard Ready?

One of my former students is the CTO of a startup these days. He posted today about the need for all of the employees of his company to be “whiteboard ready.” His theory is that "He who controls the whiteboard controls the conversation." The idea is a lot more than just presentation skills though. In many meetings the closest thing to official notes is what shows up on the whiteboard in the course of the meeting. The person at the whiteboard has a lot of control over that and by extension both the course of the meeting and the action items that result from it. It takes some confidence to stand up at that whiteboard though. Not everyone is ready for that.
I like the idea of finding ways to put students in the front of the classroom. There are several ways to do that. One that is traditional is to have students prepare and present lessons. I had a professor in graduate school who used this to good effect. One of my classmates complained that he was paying money to be taught not to teach himself but I think he looked at the experience all wrong. One really has to understand something to teach it so we all get a real deep learning on that topic. Since everyone worked hard (the presentation was graded) we all got a lot from each lesson as well. Plus it was a confidence building experience. Once you present a topic in front of a professor  whose PhD research was on that topic and get a good grade it makes you feel like you know something. Having students teach is valuable on many levels.
I think there are even more opportunities in a computer science class though. I would like to see students take turns leading discussions on designing solutions to programming projects. This simulates the sort of discussion that goes on in professional meetings. It also asks students to talk their ideas out and do some planning before starting code.
There is also the option of code reviews. These don’t have to be on student code though that is possible. Ideally the person at the whiteboard leading the discussion would not be the person who wrote the code though. You want someone who could be impartial and not emotional about the discussion. Code reviews are a great skill to have and a great learning experience as well. Rotating students though leading code reviews gives them experience running meetings as well.
In conversations with industry professionals the topic of soft skills comes up regularly when discussion of outcomes that are desirable in students. Being able to lead a meeting, make a presentation, manage a code review, and generally show leadership ability are the sorts of things employers want to see in students. Developing those soft skills in way that support the overall learning process is a win win for everyone.

Tuesday, October 09, 2012

Layers and Layers

Several years ago a teacher asked me to help with a problem one of her students was having. The student had decided to combine all of the semester’s projects into one big program. It was getting a stack overflow and no one had been able to figure out why. By using the debugging capability in Visual Studio (which is amazing) I was able to follow the flow of the program from method to method to method and figure out what was happening. Experienced programmers will tell you that recursion was involved and be right. This one was a little more complicated than that. A method called a method which called a method which called the first method. Looking at any method or two in isolation would not turn up the problem.

This is not a type of problem that one runs into in an early computer science course. The tasks we assign are more simple than that. They are targeted to narrow goals. In industry though large complex projects are the norm.

Years ago, when I was doing operating system development, memory management was less sophisticated than where it has come to today. One of the things we had to do was to manually specify overlays. What than meant was that a programmer had to tell the operating system what parts of code had to be in memory at the same time. Not everything would fit you see and the operating system was not “smart” enough to work things out by itself. So a programmer would diagram all of their subroutines and functions and group them together by which ones needed which other ones at the same time.

For example the open file and close file routines might not have been needed at the same time as the file read and write routines. So the programmer would specify that when the open or close was needed the OS could swap out the read and write routines and bring the others in. In a complex system this sort of diagram and overlay instructions could get several layers deep and look more complicated than a large company organization chart. It was not fun to set up.

This did have a good side to it though. It really forced a developer to understand the organization of their program. Which methods were dependent on which other methods and so on. It actually let one do some performance tuning as well by specifying that some methods shouldn’t be swapped out except rarely. Doing a chart like this would probably have helped spot the stack overflow problem I started this post with. Without the debugging that let me step through from routine to routine I would probably have had to resort to this sort of thing. I’m not sure that would have been a bad thing though.

The truth is that as software development gets easier – for example not having to think about memory management and how program methods are overlaid in memory – we give up something in understanding the complexity of what we are doing. It’s a mixed blessing for sure. I don’t really want to go back to overlay charts and manual specifications. At the same time I worry that we don’t understand complex programs as well as we might.

It is always tempting to assume that if all the pieces work well in isolation that the complex structure they are a part of will work just fine. That is not a safe way to bet though. We need to think of the system as a whole and how each piece interacts with each other piece. Perhaps I am biased as I have a degree in Systems but I don’t think we teach enough of that sort of thinking these days. Not just in computer science ether but that is one place it shows up to bite people when they start developing code in large projects.

Computational thinking is a part of this but I think systems thinking is larger than that. We need to start thinking about systems thinking at younger ages.

Monday, October 08, 2012

Interesting Links 8 October 2012

It’s the Columbus Day holiday in the US. Or as we call it in my family Leif Landed First day.  Either way a lot of schools have a holiday today. I’m traveling today so I prepared this post yesterday. Some of you will read it tomorrow so it all works out fine. Smile I just have a few links to share this week. It was slow for me last week

A lot of decisions that companies make not as near an simple as they look. There is a lot of discussion about Microsoft;s decision to turn off tracing of were you go on the Internet. This article The Hidden Feature That Means Microsoft Has Already Won The 'Do Not Track' War covers the discussion pretty well. May make for an interesting discussion in class!

You can read about some other Microsoft backlash on the Geeky Mom blog.

Ken Royal‏ had an interesting interview with Iowa Supt. John Carver Changing Education's DNA  Listen to how his district is using Twitter and other social media and hear why he’s like to make school busses mobile Internet access points.

Did you know that Advanced Placement has the lowest number of female test takers of any AP subject - stuck at 19% from Jane Margolis. Worry anyone else?

Mark Guzdial @guzdial is  Seeking K-12 teachers for study on learning App Inventor The are looking for teachers who are interested in learning and using App Inventor for Android but haven’t started with it yet.

I have been updating my Computer Science educators on Twitter list. Who am I missing? Are you on Twitter? You may want to follow this list. Or at least let me know if you should be on it. Follow me on Twitter @AlfredTwo.

 

Saturday, October 06, 2012

The Problem With Courses

Lots of interesting side comments come up during some curriculum discussions. At a recent meeting of the CS 2013 task force one of the committee members made a statement to the effect that maybe part of the problem was having to have courses. The comment was made (mostly I think) in jest but it really started me to thinking.

In general I think we have too many artificial distinctions in bits or knowledge. Or as we like to call them in school “subjects.” I first started to think of this in the context of math. After all algebra, geometry and trigonometry are all “just” math. But we have people saying that one is easy and one is hard but they’re all math. Where does the line between geometry and trigonometry fit? When does algebra end and linear algebra begin?

We face the same sorts of thing in computer science. Database and data structures? Can you have one without the other and if not where do you draw the line between them if at all? I could go on of course. But we do have courses. Why? Because it makes record keeping easy. Well its more complex than that but basically we have courses as much to make education fit into nice ordered compartments as anything else. In many ways I wonder if it would make for a better learning experience not to have courses at all.

This would require education to be more like an apprenticeship where people move at their own pace and pick up new skills and knowledge when they are ready for them. Or when they need them. It would be a holistic approach with fewer artificial separation between topics. Is it practical? Probably not. At least not the way we do education today. I think it would be better though. Of course I have no data and maybe it is all wishful thinking but it’s something to think about. What do you think? Do courses help learning or get in the way?

Friday, October 05, 2012

The Real Disruption of 3D Printing

The latest “disruption” people seem to be talking a lot about is 3D printing. A lot of the attention has been caused by a group of people calling themselves Defense Distributed trying to use 3D printing to build a firearm. The attention is somewhat caused by fearful concern about easy access to firearms (Plans to print a gun halted as 3D printer is seized) and then a fear for destroying the manufacturing industry (Home 3D Printing Is Killing The Manufacturing Industry). Both fears are, I think, overblown though they do “sell papers” as the saying goes. More than that though I think they miss the real potential for disruption which is the creation of new things.

Firearms have been around for hundreds of years and the means to make them have been around even longer. Anyone with proper machine tools and a little skill can make a firearm. People in the third world do it all the time as it is not a skill limited to first world manufacturing centers.

When 3D printers get good enough to build “anything” then manufacturers will still be able to buy the best machines and the best materials and under cut the price of homemade items for all but very small numbers of items. For a lot of items the assembly is as expensive, if not more so, than the actual creation of parts. So I doubt the manufacturing industry is quaking in their boots.

Right now 3D printing is limited in materials used, limited in precision, and time limited. One can wait hours for even a fairly small part. Over time this will change and we will see faster, more precise machines that use a wider variety of materials. I’m not an expert but I did have classes in patternmaking, foundry, machine shop, sheet metal shop and materials science so I have some idea about what goes into making things. Not everyone thing can be created by layering bits of material on top of other bits of material. So get over the idea that people will be making Rolex watches in their basement anytime soon.

The possibility does exist for real innovation and real disruption in the creation of new things. By new I mean things that haven’t been done before. Things that people were able to visualize but not able to construct. What sort of things? If I knew  that I would invest in a 3D printer today and start creating them.

But art work is one thing that springs to mind. 3 dimensional art that goes beyond traditional sculpture. With a 3D printer you don’t have to have years of practice working with wood or stone or metal to make things come out the way you visualize them in your head. Rather you can use computer graphics tools to do the work. Actually this might lead to a new class of computer graphics design tools which would be a plus by itself.

On a more practical basis being able to make gears and shapes and other parts that are not available off the shelf or that are too expensive in small quantities will make the creation, at least in prototype form, practical for many more people than can do so today. Need to scale up or down? Ask the machine to do it for you. Creating models in less time and to better specifications than you could easily do by hand or afford to have model makers create for you would open all sorts of doors for affordable experimentation.

The future of disruption via 3D printers is not by copying things that already exist but by creating things that were never created before.

Thursday, October 04, 2012

Omnibus Software (and hardware)

I have several “Swiss Army” type tools. You know the ones with all the different blades, screw drivers and pliers in one tool. They are ok for simple tasks but for serious jobs I prefer a real screw driver, a real knife or a real pliers. I think most of us recognize the difference between multi-purpose tools and tools specially created to do one thing and do it well. Somehow for computers we ignore that though.

As I sit here I have four devices plugged in.

  1. A laptop
  2. A tablet
  3. A phone
  4. A Kindle

I can get to the Internet on all of them. I can read books on all of them. I can create email easily on three of them. I can write documents on three of them. Honestly I might be able to do some of those things on a different Kindle too. So why do I need four devices when all of them do everything? Because they don’t all do everything well. So I use them for what they are best at. There is a nice Kindle app from my Windows Phone but the reading experience on the Kindle device is a whole lot better to name one thing.  Generally I like special purpose tools for computing tasks just like I do in my shop.

That is what I like in my software as well. I think that one of the reasons I struggle with doing everything in the web browser is that it makes the browser a “Swiss army knife” when what I really want is a bunch of special purpose tools.

I like stand alone email tools. Well ok Outlook is a calendar and a task scheduler as well as an email tool but it’s still close. I like Twitter clients more than reading/writing to Twitter in the web browser. Web based editing is getting better but it still doesn’t compare to tools like Word or Windows Live Writer. I’m writing this without web access BTW. That would be had to do using my web browser.

I carry my all in one tool when I need to travel light and an not sure what tools I will need. That doesn’t make it my tool set of choice. The same is true with a web browser. It’s ok and gets me by for many things but it still feels slow, clunky, and a lot less powerful than a stand alone app. Moving away from the web browser doesn’t mean giving up “the cloud” either. In fact one could argue that it makes the cloud more powerful by making it more usable.

We tend to think of the Internet and the web as synonymous. They are not. And they never have been. The web is just one of many protocols that travel across the Internet. By thinking of the two as being the same we run into the old problem best expressed by “when all you have is a hammer all of your problems look like nails.” I know some will call ne a reactionary or a Luddite but there are days when I believe that moving everything to the web browser is a step backwards not forwards. What do you think?

Wednesday, October 03, 2012

Certified or Qualified

Certification is a hot topic for K-12 computer science educators. It’s a big issue in public schools but not so much in private schools. The concern in private schools, who often see certification as a “nice to have” rather than a requirement for hiring, is more about qualified. It’s tempting to assume that certified equates to qualified but given the state of certifications for CS teachers that is not always a safe assumption. One can’t assume that not certified equates to not qualified either. So what is a school do to?

Laura Blankenship asks some good questions in a post titles Am I Qualified? on her blog. I am a person with nine years of classroom teaching experience but no certification so a lot of her questions felt familiar.

The people who hired me to teach high school computer science (something like 17 years ago now – wow!) told me that they were interested in qualified far more than certified. This was a private Catholic school so they had that flexibility. BTW many of their teachers were and are certified. They send something like 98% of their graduates to four year universities so they do seem to have some good results.

Still while I had lots of technical experience I didn’t have much teaching experience at that time so they were taking something of a chance. Not everyone with a solid technical background makes a good teacher. It takes more than technical knowledge. Some of that is taught in education schools but from what I have seen of certified teachers not everything you need to know is taught there either. There is a lot of on the job learning no matter what your education background. Half of certified teachers don’t last more than 5 years in the classroom so even that is no certainty of success.

An other question that comes up when discussing certification is what person with a degree in computer science is going to want to take less money as a teacher when they can work in industry? That’s a fair question. But take a look at this story of a Harvard grad who left Microsoft to teach at Issaquah High School. Some people are happier as teachers. Contrary to popular opinion money is not everything.

There is also the possibility of having it both ways. Working in industry full-time and teaching part-time. See this New York Times article about putting engineers in the classroom via the TEALS program that Microsoft is sponsoring. Of course it helps if these engineers in the classroom have some training which they do get through the TEALS program. They also get paired with certified teachers who no doubt help them a lot with the “how to teach” part of their roles.

What it boils down to are several basic issues:

  1. The politics of public schools that require certification
  2. The question of what makes someone qualified to teach computer science
  3. How do we train people who want to teach computer science to make sure they are qualified?

If we can solve question three question one largely goes away as an issue except as long as we have realistic alternative certification plans for people who are qualified. That makes question two the key one we need to worry about. How do we define qualified in a way that balances the needs of everyone = prospective teachers, hiring schools, and of course the students we want taught.

But these are not easy questions. Worse still we have lots of people coming up with different and sometimes contradictory answers.

BTW the Computer Science Teachers Association has some research on the subject of certification on their web site. Check them out for more information:

  1. Computer Science Teacher Certification Requirements
  2. Certification Requirements by State

Tuesday, October 02, 2012

Debugging is Good For Learning

I was going to title this post “I love debugging” because, well, I do love debugging code. For me that is one of the most fun puzzle solving mind challenging things someone in computing can do. This is contrary to most people I think. Beginners in their first job often feel that they are “stuck” debugging and cleaning up other people’s code when what they really want to do is write brand new code from scratch. There is where the glory is! Bah!

One of the interesting quotes in computer science is Brian Kernighan saying:

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it

The glory may be in writing original code but the difficult part is debugging. Anyone can write crappy code from scratch but it takes someone with a good brain to clean up other people’s messes. In his essay "Learnable Programming" Bret Victor early on states a truism that I think we tend to forget while teaching students.

Programming is a way of thinking, not a rote skill. Learning about "for" loops is not learning to program, any more than learning about pencils is learning to draw.

Real debugging is more than just looking for the typos and getting the syntax right. Sure that is part of it. Did someone use a “*” where they were supposed to use a “+”? Or is there a semi colon in the wrong place? These are all part of it but only a small part. Debugging requires understanding of what happened, what was supposed to happen, and what sort of things could cause the disparity. It requires understanding of a way of thinking.

We struggle teaching complete beginners because we do have to teach them a big rote skill about what a loop is and the like at the same time we are trying to teach a whole new way of thinking. This is why tools such as Alice and Scratch which avoid a lot of syntax are so popular. They let us focus more attention on the hard part – learning a way of thinking.

Getting back to debugging for a minute. I would argue that the real reason beginners should be fixing other people’s code is that doing so will help them learn more and faster how to think like a programmer. While debugging code one can look at intentions and understand what someone was thinking (or not) when the code was written. Did they take a shortcut they should not have? Did they make some incorrect assumptions? Did they just get careless? Did they forget test cases? What went wrong and how can it be fixed without creating new problems.

That fixing things without creating new problems is harder than most beginners think it is. If you are an experienced programmer you know that already but beginners need to learn that.

I wonder if what students need is to be assigned more “broken code” and be asked to fix it. It may help with the whole learning to think differently that so many struggle with. Thoughts?

Monday, October 01, 2012

Interesting Links 1 October 2012

Well it’s a new month. It’s been about three weeks in this location (for the blog) and I sure do appreciate how many people stuck with me over the move. Seems like more people are commenting as well which I really appreciate. Comments always add value and not just that they help me not to feel like I am writing for the null set of readers. BTW if you get a chance please remind others that Alfred Thompson’s computer science education blog has moved to http://alfredtwo.BlogSpot.com

Anyone interested in teaching computer science will want to read Bret Victor responding to Khan Academy's new CS curriculum with "Learnable Programming" I found pointers and references to it seemingly everywhere I went last week. I am thinking about a blog post but already several people smarter than I am have done so.  Mark Guzdial wrote Learnable Programming: Thinking about Programming Languages and Systems in a New Way  which is really good. Eugene Wallingford wrote REACTIONS TO BRETT VICTOR'S VISIBLE PROGRAMMING which takes advantage of the fact that he had heard Bret Victor speak on this topic  quite recently. All of these are well worth your time.

Looks like Rob Miles @robmiles and I both posted about finding programming bugs last week. His is at Sneaky First Year Programming Lab Fun while mine was at Find The Bug. Rob’s is probably better but read them both and decide for yourself.
Garth Flint has some interesting thoughts on the old “Draw A House” programming task that a lot of people use. If you’ve dismissed this project in the past Garth’s post may change your mind.

Interesting article in the Washington Post  In cyberattacks, hacking humans is highly effective way to access systems,  A lot of computer break-ins and related security problems are people issues not technical issues. We sometimes forget this.

Ray Chambers, has released the source to his Kinect Quiz project Also from Ray is his Kinect Maths Game with source code. It’s in the early stages but looks interesting.


You will remember a month or two back, that I started working on a Kinect Game. The idea of the game was to use more active gestures to answer questions in Mathematics lessons. To use the game, students will calibrate their custom movements for addition, subtractions, multiplication and division. Once they have answer the questions, It will give them a sound if correct. If they have got it incorrect then it will give the students an error noise.

Speaking of sample code - Hello Blog Reader Sample for the Windows Store in C#, Visual Basic.Net, JavaScript and even C++!

Via Hydrogene,  Minimal Posters of 6 Women who Changed Science & the World. Grace Hopper is one of them!!

Hal Berenson is a really smart guy and has written a couple of posts I feel like I should pass along. The first is called Developers ignore creating “Windows Store” Apps at great peril which I think students should read when they think about outside projects. Teachers should read it as well as they think about what sorts of technology to be teaching students. While you may not be thinking you need to prepare students for the work force this post does give some idea where things are going for them. Much better than my To App or Not To App post.

The second is called Windows 8 and Arrogance (or not) and discusses some design decisions that were involved in Windows 8. It gets a bit personal about Microsoft President in charge of Windows Steve Sinofsky who replies in the comments. Agree or disagree with the various conclusions the discussion is facilitating and educational. Don’t avoid the comments. There is great stuff there.