Monday, March 31, 2014

Interesting Links 31 March 2014

I’ve been writing more code then usual lately. Mostly just for the fun of it. That means less time on the Internet collecting good links. But it’s been great getting back in touch with my coding side. I expect some (more) blogs posts to develop from the process. But I did find some good stuff to share. Even if one of the links is to a post I wrote for another blog.

Junior Computer Science A UK site with resources for teaching computer science to the younger grades.

10 ways to prepare for the new Computing curriculum is a lit of resources for teachers preparing to teach the new ICT curriculum in England. Perhaps something useful for you as well?

Programming languages are the most powerful, and least usable and learnable user interfaces on the blog@CACM  by Mark Guzdial @guzdial

250 * 4 = ? Doug Bergman @dougbergmanUSA on the Microsoft in Education Global Forum. A good read about an amazing professional development event.

Computer Science for Non-Majors by Ran Libeskind-Hadas,Professor and Department Chair of Computer Science at Harvey Mudd College, writes about issues around computer science courses to support non-majors. Some good stuff here.

More on Social Networking for CS Educators My regular guest post at CSTA blog. I really believe in the value of teachers sharing what they know via social media. Writing comments in blog posts is a great thing to do as well.

Friday, March 28, 2014

Why So Many Programming Languages

A post I wrote some time ago bemoaning the lack of new operating systems has been the most frequently viewed post of all time on this blog. Today I’m posting some thoughts about the opposite issue. We have an abundance, perhaps an over abundance, of programming languages. It seems like there is a new one coming out all the time.

Look at just block or drag and drop programming languages (Programming With Blocks is the second most frequently read of my blog posts) for a sample. Go Gopher designed by Renee FrenchAlso some big companies have been working on other programming languages.

Google has been working on the Go programming language. (The Go Gopher logo is a cute one)

Facebook just announced the Hack imageprogramming language which they have apparently been using to develop Facebook’s web platform.

Of course there are also many languages that have been around for a while that are constantly being improved (or at least having features added) such as Java and C#. So what is going on?

Part of what is going on is that we are discovering/creating new sorts of programming. Programming for a smart phone (App Inventor, TouchDevelop) is different from programming for the web which is very different for creating old-fashioned batch programming on mainframes (anyone else remember COBOL?).

And there are new paradigms (or at least increased importance of those paradigms) such as parallel processing (which used to be almost exclusively FORTRAN with extensions and is now often functional programming languages like F#). Also computer scientists are coming up with new programming ideas such as anonymous classes. Often these things do not fit easily into existing languages. Other times they do but require big changes to the language. Some of us remember how much change came with Visual Basic .NET compared to the older Visual Basic 6.0.

With new power comes new complexity though. The languages that professional developers use become harder and harder to use for training beginner programmers. (I recommend Programming Languages Are the Most Powerful, and Least Usable and Learnable User Interfaces by Mark Guzdial on the Communications of the ACM blog on that issue.)

The languages built for beginners tend to be more usable and in fact that is a goal in creating them. What they gain in simplicity they give up in power and full modern functionality. The gap between beginner languages and professional languages is growing over time.

I was reminded recently that the BASIC programming language is fifty years old this year. A version of BASIC was the first language I taught myself. Knowing FORTRAN made it easy even though the two were very different. After graduation I used BASIC-PLUS to write professional software for business applications. I didn’t really have to pick up a lot more in the way of language features and functions because there were not many that I wasn’t able to easily learn as a beginner.

Today many people (teachers often more than students) find the professional development tools (IDEs like Visual Studio or Eclipse) so complex that even though they could probably learn small subsets of a language the IDE adds more to the learning curve. This in part drives the interest in easier to use tools (think BlueJ or Small Basic) or easier languages (block languages or increasingly Python) for teaching purposes. I return to the gap between those tools and languages and professional ones as a stumbling block that remains.

Companies have little incentive to create either beginner languages or a smooth path between beginner languages and professional ones. There are simple languages coming from companies (Small Basic and TouchDevelop are two that come to mind from Microsoft). Small Basic started as one developers side project and the company came to adopt it – mostly. TouchDevelop is a largely a research project. And research is why universities develop their beginner languages. Research is a good reason to develop a language or a tool. I worry what happens when/if the researchers move on to other projects, lose funding or retire.

Change is the big constant in computer science and computer science education though so I guess when things go away we’ll move on to new tools. But there are times I wish things would just stop changing for a while.

Tuesday, March 25, 2014

Assigning Projects That Create Programs Students Use

I spend a lot of time thinking about projects for my students. For programming, for applications (Office apps etc.) and just in general. I want to  find projects that students are interested in doing, that teach them things and that they want to do. Today I was reading a post by R. Michael Shanahan Professor and Department Chair of Computer Science at Harvey Mudd College at The Computing Community Consortium Blog  called Computer Science for Non-Majors  that had several interesting suggestions including this one below.

Giving students the tools to write programs that they actually want to use.  Here are two simple litmus tests:  Will students spend at least as much time using their programs to explore something new as they did writing them (e.g., using a program to align biological sequence and make inferences from those alignments, building their own music recommender system, etc.)?  And, does the assigned work offer creative avenues for students to invent and implement their own ideas (e.g., in the form of innovative features above-and-beyond the minimum requirements)?

Well there is really two suggestions in that paragraph. One, “does the assigned work offer creative avenues for students to invent and implement their own ideas”, I already try to do. I always try to leave room for students to exercise some creativity and to explore beyond the bounds of lectures and “must include” features.

The second one, “Will students spend at least as much time using their programs to explore something new as they did writing them”, got me thinking. On one hand I like to think that by the nature of programming courses we give students “the tools to write programs that they actually want to use.” But do we do this is a way that they can see the potential to solve their own problems?

What I wonder about is can we come up with assigned projects that students can use to solve problems that are interesting to them? We tend to use games a good deal because students are interested in them but do we have them create games they actually want to play? Maybe but I wonder if that is really the best thing. What I am spending some time now it thinking about programs I can assign that students can use to do non-trivial explorations on their own.

I’ve been borrowing some media ideas, image manipulations, that some students really enjoy doing, using and exploring the effects of. They like to change pictures. More of that might be a good thing. I’m on the look out for more ideas across more curriculum areas. Something to think about. Any suggestions?

Monday, March 24, 2014

Interesting Links 24 March 2014

Supposedly spring arrived in New England last week. The daffodils working their way up in my front yard suggest that may actually have happened. The piles of snow that still fill other parts of my yard suggests I not get too excited yet. I hope the weather where you are has been good. Rather than bore you with more small talk about the weather here now some links I think you may be more interested in reading.

First off some Computer Science Teachers Association news.

There was some discussion about how teaching computer science can be difficult this week. Check out:

Mark Guzdial shares A kind of worked examples for large classrooms. I wonder about sharing links to Mark’s blog only because if you are teaching computer science you should be a regular reader of his blog. And then I remember that some link love will help more people find his stuff so I link for that reason as well as to highlight stuff I think is particularly good.

Code.Org has started naming teachers of the month and students of the week.

Politicians seem to be noticing computer science as an issue lately.

Mike Zamansky (another blog you should be reading regularly) writes about Teaching Sorting - Subtle Errors

Sunday, March 23, 2014

Microsoft Global Forum 2014

Recently Microsoft ran their big annual Microsoft Global Forum which brings together top teachers with technology from all over the world. I really want to go some day. I have attended parts or all of a couple of the US Forums in the past when they ran a big event to choose who to send to the global event and they were amazing experiences. I met some outstanding teachers there and have kept have in touch with a continue to learn from a number of them.
I followed the event as well as I could from Twitter (there were a lot of tweets from the event) and Facebook (A number of my friends were there) and managed to learn a few things and enjoy the event vicariously. I still want to go in person one day.
I have collected a number of blog posts from teachers and others who were there that I’d like to share. You can probably find more information with a quick search engine look as well. But this will give you a flavor of what sort of an amazing professional development experience it was.

Saturday, March 22, 2014

Are You Coming to the 2014 CSTA Conference?

As you may have already heard (especially if you are a regular reader of this blog), the Computer Science Teachers Association is in full swing for our 2014 annual conference. We are very proud of our lineup this year as we have stellar presenters covering a wide-range of topics that will provide insight, discussion and resources amongst our attendees.

Some of our topics include:

  • Programming
  • APCS
  • Game Design, and more!

For a full lineup of our sessions and workshops, visit: www.cstaconference.org. We hope to see you in St. Charles, July 14-15.

I’ll be there. Hope to see you there are well!

Friday, March 21, 2014

Changing The View Of Code

The other day I was working on a code project and ran into a frustrating bug. I looked at it for at least an hour and got nowhere with it. I used breakpoints, debugging code, and scanned though the listing again and again. No joy. I had to leave for a meeting and so put it aside for several hours. When I got home that night I decided to take another look and within five minutes I found the problem. It was in a section of code that somehow I had neglected to look it. I was too close to the problem earlier. This happens a lot.

Somehow I think that after a break we return and our brain has done some viewprocessing we are not aware of. Or perhaps after a break we use a different part of our brain to get back into the problem and that results in a new view of the code. I’m not at all sure other than something changes when you put code aside and come back later.

I see a different sort of view change working with others. Very often a student will call me over to help them with a problem. As they are explaining the problem and what the code is doing they will often suddenly blurt out “never mind. I see it now.” Something about explaining the issue to someone else changes how we look at the problem. Sometimes that is enough to help us see a solution that was eluding us before. I should say that I saw this frequently working as and with professional developers over the years. It is not unique to beginners by any means. It’s probably common in all problem solving situations.

Clearly though sometimes we need to take a mental break from one problem so that we can find a different approach or a second set of eyes. Or a third set.

The question for me becomes how to teach students to find different views into their work. Pairs programming is one possibility especially as it forces communication. Requesting that students ask peers to review code maybe. Or even asking students to describe in regular works what is going on. Or maybe just showing it by example. Something to ponder this weekend I guess.

Wednesday, March 19, 2014

Programming for the fun of it

Several years ago I was visiting a college and the professor I was meeting with told me he assigned a slot machine project to his students. That struck me a a very fun thing to do. At the time I didn’t have the time or the motivation to write one myself but the idea really stuck with me. I haven’t written a lot of code just for the fun of it for years. And quite honestly I’ve missed it. Other things come up and while I have written a lot of code it has all had some serious goal. A demo, a sample for students, or a book. or a workshop or any of a dozen more or less work related goals.

Now that was not a bad thing and I can’t deny that I have enjoyed writing some of that code. At the same time though I wasn’t doing it all to satisfy a creative urge of my own. Last night I decided that I really had to do a project of my own for nothing more than the personal satisfaction of doing it. Since an accident of scheduling had left me time during the school day to catch up with grading and lesson planning I decided to take some time to start on my own slot machine program.

I’ve made some progress so far. Slots DraftNow clearly the graphics need some work. OK a lot of work. But I figure I can get good pictures or images later. What matters is that I get the code to work.

Once I get it all working, it is no where near feature complete after just a few hours of coding, I’ll look into making a Windows Phone version and perhaps a Windows 8 “Metro” version. But for right now I am happy just writing some code (C# and Windows Forms) and having fun working out all the algorithms.

Now I am getting some refresher on some language features that I do plan to introduce to me students so there is some practical value. But I could have done that with a boring project as well. The goal for me is just to get back to having fun though. That is what hooked me on programming and computer science in the first place. I feel like I am getting back to my roots.

What do you do to keep software development fresh and fun?

Tuesday, March 18, 2014

Does Teaching Programming Teach Grit?

gritGrit seems to be the latest educational buzz word these days. According to psychologist Angela Duckworth “grit is a better indicator of GPA and graduation rates. [then IQ]” What is grit? It seems loosely defined to me but perseverance is a big part of it. As is resilience. The big question for educators seems to be can we teach it? If it is so important than teaching it becomes a goal to think about. And the question of can we teach it and how to teach it seems to be about as open as defining what it is.

It seems though that students learning computer programming, at least those who are successful at it, are learning some grit in the process. After all if you are the type to gives up when faced with problems than you are not going to be successful at programming. Various barriers from syntax errors to logic errors to things just not being the same as one is used to thinking are going to stare one in the face. Overcoming them is a key part of learning to program. It doesn’t matter if programming is on a par with brain surgery or something anyone can learn it still takes a certain amount of grit to succeed.

I know we have to help students and keep them from getting too frustrated but to some degree we have to let them work though things on their own. They learn the most from solving their own problems. And if along the way they learn some perseverance and resilience or even grit that’s a good thing.

What do you think? Does learning to program teach grit? And if so does it do it better than some other subjects we already force kids to take?

A couple of posts on grit by Vicki Davis may be worth a read BTW.

Monday, March 17, 2014

Interesting Links 17 March 2014

Apparently the groundhog was right about a long winter. At least for us in New Hampshire. Still plenty of snow on the ground here. Extra incentive  to find things of interest on the Internet.
Nell Dale is one of the most popular computer science textbook authors of all time. The IEEE Computer Society named her their 2013 Taylor L. Booth Education Award Winner: You can see a nice interview with Nell Dale with additional commentary from Jane Prey of NSF. Worth a watch.
Why Would K-12 CS Teachers Want to Attend SIGCSE? A lot more there for us then you might think.
Read up on the Candidates for the upcoming election for the 2014 CSTA Board of Directors! CSTA members get ready to vote!
Sorting continues to be a big topic lately.
Five iPad Apps That Help Students Learn Programming Basics Not a bad list. Pretty sure they are all on my list of block programming tools already.
Recent Reading via @caitsydney CS education related reading. Take a look.
Saw this online from Microsoft’s Imagine Cup twitter feed. Something to think about for sure.

Embedded image permalink

Thursday, March 13, 2014

CSTA 2014 Board of Directors Candidates

The elections and nominations committee has announced the candidates for the Computer Science Teachers Association board of directors. You can read about the openings and the CSTA Board candidates on the CSTA web site. As usual there is a slate of very good candidates although a couple of people are running unopposed.

Members of the CSTA should be getting information abut voting soon but I encourage all members to visit the candidate site, read and evaluate the candidate descriptions and be prepared to vote knowledgably.

I’m starting my second year on the board (members are elected for two year terms) and have really enjoyed working with the other members. It’s a great board but members need to make sure they participate in elections to make sure members of the board represent their interests. So vote!

Wednesday, March 12, 2014

Resources for Learning Sorts

sortingSometimes one just doesn’t know what blog posts are going to take off. Last month I wrote a post called Sorting Isn’t Always Simple. It’s been by far the most read post of the last month or longer. Given that a lot of AP CS teachers are working on teaching sorting this month that probable shouldn’t be a surprise I guess. After posting that I started seeing a bunch of sort resources on my twitter feed and on other blogs. I thought maybe I should gather a bunch of them in one place for future reference. Some of these sites have other visualizations than just sorting BTW. So here we go.

 Algo-rythmics - Technologically and artistically enhanced multi-sensory computer science education (Inter-cultural method for teaching-learning sorting algorithms) Most famous for their visualizations of sort algorithms though dance they have a bunch of stuff on their site these days.

The Java Applets center by the University of Canterbury in New Zealand has a lot of visualization applets that include a number of sorting algorithms. But there is much more so check it out.

Sorting Algorithm Visualizations by David Martin. 8 different sorting algorithms on 4 different initial conditions. Really helpful for showing how algorithms work on different data.

Data Structure Visualizations by David Galles at the University of San Francisco. This is another site that has a lot more than just sorting by the way.

What different sorting algorithms sound like A YouTube video that combines visual representation of sort algorithms with sound.

Using a deck of cards to show merge sort Mike Zamansky talks about a hands on way he uses to demonstrate a merge sort.

Sorting Algorithms from CS Unplugged This page includes even more links to other sorting resources than I have here. It doesn’t seem right to copy and paste there work here and slide down to Other Resources.

Monday, March 10, 2014

Interesting Links 10 March 2014

I spent some time last week trying to keep up with what was happening in Austin Texas at SxSWedu and Atlanta Georgia with SIGCSE by watching Twitter. The good news is that I’m less upset about missing SxSWedu than I was before. On the other hand I regret missing SIGCSE even more. Oh well, win some lose some.

At least I have ISTE (also in Atlanta) and the CSTA conference to look forward to this summer. Maybe I’ll see some of the people who follow my blog at one of those conferences. I hope so. As usual I also managed to collect some interesting links to share.

In a post called How hard is programming? Garth Flint breaks down a simple programming assignment and explains just why it is hard for beginners. Great explanation!

HP CodeWars 2014 is one of the really big high school programming competitions. It’s now held in several venues. The team has made available the solutions, datasets, stats, and scores from all sites are posted.

Eugene Wallingford frequently posts some great advice on his blog. Take Small Steps has some really useful advice for programmers. I try to teach this to my students but sometimes it is a tough sell.

One of the most popular presentations at SIGCSE is called Nifty Assignments. You can read about all of the nifty project assignments that have been demo'd at SIGCSE here: http://nifty.stanford.edu/

Accessible yoga for the blind using Kinect Pretty cool!

Get Serious About Computer Science Education is a great editorial by Ken Royal (@KenRoyal)

Den Delimarsky@DennisCode graduates from college soon and will take a fulltime job at Microsoft. Recently he wrote a post looking back on his undergrad years: To the Incoming (and Maybe Current) Computer Science Majors that has a lot of good advice for future university students.

Experts share their views on the "Year of Code" campaign and the best ways to teach children to code.

danah boyd@zephoria is a research at Microsoft Research who has done a lot of work looking at young people on the Internet. She recently published a book called “It’s Complicated” about what she has learned. While you can buy hardcopies you can also get a free soft copy. You can read about the book and why she is giving it away at What’s Behind the Free PDF of “It’s Complicated” (no, no, not malware…)

CS Teaching Tips  and on Twitter @CSTeachingTips Looks interesting. It’s brand new  so I’m going to be keeping an eye on it.

You can find non paying internships or you can study some computer science and find a few good paying internships. Read about some of the top paying internships out there.

Sunday, March 09, 2014

Have We Reached a Consensus on a National CS Curriculum?

Oh boy are things up in the air in the HS CS curriculum these days. While we have some great advice from the CSTA (CSTA K-12 Computer Science Standards) the implementation of those standards are still left up to individual schools/districts/states. Still it is easy to come to the conclusion from watching social media and some conferences that there is a consensus on a high school Computer Science curriculum. Today I got the following from a friend.

Is it an incorrect read or has a national consensus for CS in HS's been achieved with a sequence of :
--ECS (Exploring Computer Science) Curriculum
--CS Principles/BJC Curriculum (Beauty and Joy of Computing)
--AP CS (JAVA [for now])


As usual I have an opinion. My opinion is all my own of course. I think that consensus may be a strong word. There are a lot of people pushing that sequence but it is not gaining traction everywhere. A lot of places are lucky to do just ECS or similar. My school some a shortened custom version of ECS for freshmen and has an honors programming course (using C#) as a second course. Then we have APCS (JAVA) mostly for seniors. So we have two one semester courses plus the AP which is a year.

There is just no room in student schedules for three year long CS courses. Of course four years of religion are required and a) that takes up a lot of room in the schedule and b) that is NEVER going to go away at this Catholic school. Nor would I argue that it should as it is an important part of the school’s mission.

Anyway, a lot of schools will likely go to having ECS first and then either (but not both) of AP CS Principles or APCS A (Java). Again room in the schedule and shortage faculty to teach more courses. From what I can see a lot of schools will have just AP CS in one flavor or another.

Career/Technical schools on the other hand are usually some thing completely different from “academic” high schools. Few of them use the APCS exam for one though. For another they often have two to three year programs that look nothing like ECS, CS Principles and APCS A. These schools seem to be left out of the conversation a lot of the time. This is unfortunate as these schools send some students to university who are seriously impressive. Their school background tends to be deep and wide.

Few career/technical school students finish their time knowing only one or two programming languages for example. Three to four is much more common. Career/Tech students are also more likely to have experience with hardware, networking and system management as well. I’ve interviewed many of them over the years and there are many of them I give preference to in university admissions.

So have we (for some definition of “we”) agreed on a standard CS curriculum for high schools? Maybe if you only include schools with AP courses but clearly not if you include career/technical schools. And more generally high schools whose CS program is more focused on project based learning and less on standardized tests.

A related question is *should* we have a consensus curriculum. Let’s take that on a different time.

Friday, March 07, 2014

Any Monkey Can Learn To Code

One never knows where something is going to go on Twitter. I recently tweeted a link to a post by Garth Flint titled Teaching programming is not getting easier and had an interesting response on Twitter. 

doctorMonkeyIs programming on a par with brain surgery? Or it is more like one boss I had said “programming is easy and I could teach any money to program.” Hal, who worked for the same boss at one time, pointed out that that company went out of business not long after that was said. So there is that. My old boss is not alone in thinking coding is easy though. A political appointee in the UK caused a stir when she claimed that teachers could learn how to educate students in computer programming “in a day.” Well that is crazy but is the other end, brain surgery, any less crazy? Quite a range there.  I think the truth is somewhere on the continuum between those extremes. A lot of people on the “we need more people learning computer science” movement like to say that everyone can learn to code. But is that true? And even if it is can we make everyone an expert? Probably not anymore than we can teach everyone to write well enough to create the next Great American Novel.

I think we can teach most people some coding. I don’t think we can bring everyone to the level of professional coding though. Not as software development is practiced today. Forty years ago a lot of programmers were basic coders who were taking highly detailed specifications that often came close to pseudo code and translating them to working programs. It was quite a bit different and easier than what we do today.

Some of that is because we have gotten away from that style of development and some of that is because we can create programs today that are much more complicated and involved then we could back then. The tools are better but more complicated. Today we demand a lot more creativity and imagination from software developers than we did from the rooms of low paid rote coders we used to have.

The hard part of coding (as I wrote recently) is not the syntax. The hard part is taking the commands available and figuring out how to build useful applications from them. That is a different way of thinking than many people can adapt to. How many can? I don’t think we know. Could more “get it” if we taught better? Perhaps but then again how many people can learn to do brain surgery? Where does programming fit in that line? And while we can’t teach brain surgery to the masses we do make a lot of kids at least study some biology in high school or college.

Creating useful software is the hard part. We do see young people create very interesting things using block languages like Alice, Scratch and Kodu. Mostly they are creating games and telling stories. While those activities have value I’m not sure they lead to “real” programming as often as we’d all like to believe they do. The block languages we have are domain specific to a large extent. How does one move from a Kodu game to an Accounts Receivable application for example? The path is neither clear nor smooth.

I see there being several levels of programming expertise. Sort of analogous to sports. Everyone can play pickup basketball, some will make the HS team, some HS players make a college team where there are also levels. And then there are those very few who make the NBA. Big jumps with large drop offs at each level.

I like to think I made it to Division 1 as a software developer. My friend Hal, quoted above, jumped from HS to NBA all-star. Most people will never get above pickup games (think playing around with block languages or maybe some Excel macros). Our goal cannot be, and should not be, to make everyone an all-star software developer. But if we have more at the pickup game level the whole pool gets bigger and we are more likely to get more stars as well.

Not everyone has the talent or perhaps the special way of thinking that makes an all-star level software developer. But that is ok. We can at least expose enough students to the field so that the people who have the talent discover that fact and figure out that they can make a difference in the world by using it. Most people need an experience to help them be aware of the possibilities and of the talent they may have.

Michael Jordan was famously cut from his HS basketball team. But he grew in size and ability and later became a star. I think that this would never have happened though if he hadn’t developed a love of the game and had some good coaching first. That is why I feel that if I get a student interested while I have them as a student and help them see the potential it may make a difference later when their talents grow and change.

So programming – easy enough for everyone or on a par with brain surgery?

Related Posts:

Thursday, March 06, 2014

When Knowing The Syntax Is Not Enough

This week has been hectic for a lot of reasons. Getting my grades and comments in for progress reports has just been part of it. I haven’t had the time or energy to write much at all other than comments for progress reports. But I have been doing a little reading and some thinking. Crystal Furman had a great post earlier this week that was really good. CODING COMPREHENSION is about how some students can understand the syntax and commands but new really comprehend what the code is doing.

What I see a lot of is students who can tell you how to set up a loop or a decision statement but can’t easily make the move to using them to solve problems. They understand the problem but they are not really sure how to apply code to solve it. It’s the age old problem that we are teaching a language and how to use it at the same time. But it is not a natural language so learning the words is not enough.

A lot of people point out block programming languages and how they remove syntax errors from the equation. And there is value to that. Students can create a loop and not get lost with semi colons or errors in case for keywords and that all makes some things easier. But if they don’t realize that a loop is what they need there is still a big problem. I’m starting to think that syntax is not as big a part of the problem of learning how to program as I used to think.

The biggest problem is helping students to think in programming. They need some help seeing how to apply the statements, keywords and other things that make up the mechanics of programing. There was some discussion about teaching coding comprehension on Facebook (and you thought it was just for cute cat pictures) in the AP Computer Science Teachers group.

The discussion there lead to people talking about giving students code snippets and asking them to explain, using only English words, what the code was doing. Some teachers reported students having real problems doing this. I imagine that is the case. One hopes that practice would help here though.

I think it is important not to get too tricky with the code samples we ask students to explain though. We don’t want to model poor coding practices. We don’t want students to think that writing tricky to understand and hard to read code is a good thing. It’s not! What we want them to learn is the right way to do things. Being able to understand tricky or poorly written code is something they will get plenty of practice with reading their own code.

How are others dealing with this issue? Do you have any lecture tricks? Any project suggestions? Are you asking students to explain code they didn’t write? Something else?

[Edit: Crystal Furman’s Teaching Computer Science blog is one of the great blogs on my Computer Science Education Blog Roll. Are you following them all? Know any I should add? Let me know.]

Monday, March 03, 2014

Interesting Links 3 March 2014

Last week was school vacation week and cat on bugsI spent a lot more time than usual off line. I even got in a day of snowboarding. I don’t have as many links as usual but I think the ones I do have are good ones.

You can find non paying internships or you can study some computer science and find a few good paying internships. Most of the companies on that list are in the software business. Names like Google, Microsoft and Twitter. Tough to get but so worth it on so many levels.

Mike Zamansky had a couple of very good posts last week.

  • I guess I'm a dumbass  On one lever this is about his relationship with his students but on an other there is a great way to teach students about merge sort.
  • Change the data is about how using different data can make solving some open ended problems easier.

Learning to Code  by Doug Peterson (@DougPete) is, as you might expect, about different ways to learn to code. Some good stuff in the comments as well. I love when a blog post becomes a conversation.

New from Code.org is a site that Lets You Program Your Own Game Of Flappy Bird