Windwardopolis – I think we nailed it

Now that the code war is over, here’s my thoughts on how we did.

The Challenge

First off I think the problem was perfect. There were a number of facets to the problem so that teams had to weigh out what mattered the most and then implement those parts. And while the problem was simple enough to be understandable, there were enough variables that it made it a challenge to take them all appropriately into account.

My goal in this is two-fold. First to create a challenge that pushes the students to the limits of what they can do. Because there is tremendous joy in accomplishing an extremely challenging task. Second to create a challenge that is won not by raw programming skill, but by the mix of abilities that are required in jobs out in the real world – understanding trade-offs, determining what must be done vs. what can be ignored, working well in a team, etc. And boy did this problem test that.

What we got Right

I also think we did well on some of the feedback we got. The biggest complaint was that the problem wasn’t clearly defined. Yep. Part of the challenge was the teams had to figure out what they should do unlike pretty much every problem assigned in school where what is required is very specifically laid out. This was one of the key attributes that made this problem so good.

Another complaint was that the provided client code was a bit messy and poorly documented. Now this was not done on purpose, it was just that this is the situation of most code out in the commercial world (including ours). But again I think this made for a good problem because it mirrors what the students will face in the real world and so made for a good part of the problem they faced.

The third common complaint was not enough time. People wanted another 4 – 8 hours. And that is perfect. If there’s enough time then decisions aren’t required as to what is the most important. On the flip side, if the amount of time is way too little (not an issue here), then you can’t do anything. But with the level we had – I think it was perfect.

What we got Wrong

First off we had a bug where it did not update the Company.Passengers property. We fixed this in 5 minutes and got it out to everyone before most hit this but still, this should not have got through our testing. (We had the contest here as a final play test and it turned out everyone here walked the Passenger.Lobby properties instead of Company.Passengers.) This is 100% my fault as I wrote the initial client and it was a dumb bug.

Second we had a bug in the server but only for some versions of Windows due to the order of events firing. This we fixed in 2 minutes and only affected the few (2?) people with that Windows configuration.

The third thing we got wrong was running the finals. When we ran them Saturday night they hit connection issues and we were all so tired we weren’t watching the games. So we ran them and pushed them up. We got emails from some people when the quarter-finals went up and then pulled them down, dove into the problems, and fixed it. But it meant a delay in seeing the results and that sucked for everyone having to wait. I’m very sorry about this.

What students tripped over, but shouldn’t have

In the emails we sent out we said turn off your firewall. In the documentation we said turn off the firewall. In the FAQ the first item was turn off the firewall. So the main question we got? “Why can’t my client connect to the server?” I’m as guilty as anyone of not reading the instructions but this was an unnecessary delay.

I had our full support staff here to help and when people had problems getting the system running, we immediately did a screen share (the most common was configuring IntelliJ to see their JDK for the Java client). Happy to do it and we did it quickly. And again in the emails, web pages, documentation we told people to call or email us. Yet many spent an hour plus getting their systems configured instead of asking for help.

The server running under Windows for students who only use Linux. (And if the server was Linux, we’d have the opposite complaint from students who live in Windows.) Yes we’re all most comfortable with the O/S we mostly work on. But a computer science student needs to be competent on Windows for about 90% of the jobs out there (you may develop on Linux but you’ll probably use Word and Outlook regularly). And we made it trivial to run.

The Solutions

It was very interesting watching the clients. Most of the finalists did well on the small maps, but some did poorly on the complex maps. An A.I. that would win regularly on the small maps would then come in last on the large maps. Here’s what I saw watching it (and I could be off as this was just viewing, not looking at the code or messages):

  1. Teams that did not re-write the A* pathfinder pretty much bombed on the 2 maps where the provided A* gave really poor paths. This appeared to hit not just how long it took the cars to make the trips (because they took the long route) but probably also deciding which passengers to take.
  2. Almost every A.I. if they were trying to drop off a passenger and the passenger had an enemy at that company, would circle and keep trying, basically waiting for another car to come pick the enemy up. On the small maps this generally occurred quickly. But on the large maps, especially the spiral map, it could be a long time.
  3. Some A.I.s clearly focused on moving the high point passengers as they almost always carried all of them. That worked well most times, but sometimes they then went on very long trips. I saw times where Shirley was being transported on a very long trip and the game ended just before delivering her.
  4. A lot of the A.I.s appeared to use direct line calculations to determine who to carry. On the spiral map this was a very bad approach and you would see it in cars that were travelling well over half the road to deliver a passenger that was close as the crow flies, but not as the cars drove.
  5. A lot of the A.I.s did not appear to estimate if they would get to a pick-up first. Many times we would see 4 cars all headed to the same company. The first got Shirley and the remaining 3 got nothing. Yet none of them, even after Shirley was picked up, changed direction until after they got to the now empty bus stop.

There were a lot of really good A.I.s written. In the quarter finals there were a few that didn’t do well. But aside from that it was a very close run brutal competition. Many times the cars from places 3 – 8 in a round were all within 2 – 3 points of each other. As the car that wins a round gets a final 3 – 5 points, we would see 2 or 3 cars fighting for first place and then the 6th place car wins the round because they delivered passenger #8 and it was Meg Whitman giving them an additional 4 points.

The luck of the draw had an impact. If the 10 maps had a significant number of the complex maps, then the A.I.s that did not handle those would lose. If the 10 maps were mostly the easy ones, then those same A.I.s would do well. The teams that handle all maps well did well regardless but this did impact if the teams that only did well on the simple maps advanced.

The other big luck of the draw was if an enemy sat a long time in a lobby where an A.I. wanted to drop off a passenger. We saw some very strong A.I.s do poorly in 1 or 2 games due to this. From what I saw (and again this is just watching the game), I think this may have been the biggest issue that the best A.I.s didn’t have time to address.

Conclusion

Really good game. Very very impressive teams. The students who did well in this, they’re going to do very well when they go out into the real world. Because they have what it takes to design & deliver a product.

Windwardopolis – What could we have done better?

For all of you that participated in this year’s code war, what could we do better next year? The two things I’ve come up with so far are:

  1. Have a very simple client (all 4 languages) and server that does one thing – connect and send a message back and forth. That will provide an easy way to check for firewall issues and for IntelliJ have people learn how to set the JDK.
  2. Have the server project in a zip file inside the server zip. So when you unzip the server you have the program right there to run and do not have the project files there also (just a zip) so there’s no confusion about what to run.

What else?

thanks – dave

ps – My take on how it went.

Posted in Uncategorized | Comments Off on Windwardopolis – What could we have done better?

Bringing More Women into Computer Science

It’s no secret women students are woefully underrepresented in computer science. There’s a fun event coming up doing its part to help change that – the Windward Code War.

“We really appreciated that the competition emphasized strategy and problem solving rather than simply coding” – Joline Morrison, C.S. professor, University of Wisconsin.

The emphasis on strategy and problem solving has brought a much higher percentage of female participants to the Windward Code War. I have three daughters who are all geeks. But I’ve found that unlike me, they also like human interaction in their day. The need for a team effort brings in more female students. And makes computer science a more compelling career choice for them.

The percentage of women majoring in Computer Science is at an anemic 12% and has been dropping over the last several decades. This is a gigantic problem, both for the women who choose alternatives but would be happier in computer science and for society at large. Computer Science is in worse shape than any other STEM major – and yet the future will see Computer Science jobs growing faster than most any other major. This is a giant problem.

A lot of hackathons tend to not be appealing to many women. They focus on the details instead of the big picture. The result is most female computer science students either avoid the hackathons or find them less than thrilling.

I’d like to say that our code war was purposely designed to appeal to female computer science students. It wasn’t. Pure luck that it does. But the important thing is we’ve created the kind of challenge that female students find fun & interesting. Not just a little bit of fun, but “one of the best days at school ever” fun. And making computer science fun for women students is a giant plus in encouraging more women to major in computer science.

When something works, go with it

Improving the type of challenges in programming competitions, especially those at the High School and Freshman level, is key to increasing the number of women going into computer science. Most of the competitions today are almost purposely designed to discourage many women. That needs to change. Here’s what I think are the keys to making the competitions welcoming to women:

  1. Present problems that require collaboration and discussion throughout the contest to win. Many contests are won by students who can take a problem and code up a solution in minutes. There is no significant social interaction in this kind of contest, and that’s a problem.
  2. Present problems where the solutions from each team directly interact with the solutions from the other teams. This adds a significant new dimension to the level of interaction in the contest as opposed to each solution being individually measured. When you have multiple A.I.s in a game, each written by a team, then those teams are interacting with each other.
  3. Make the result fun. Measuring the fastest code where the result is a number is not fun. Creating an iPad app, a game, a social media widget – those are fun.
  4. Level the playing field. If the contest winner is the one who can write the tightest code, that’s not only uninteresting to most people, it’s also a poor measure of how useful someone will be in the real world. If the contest winner is the team that collaborates best and comes up with the best strategy, that is a contest many women will embrace. Because the contest drives social interaction and teamwork.

We can have contests that encourage girls in High School to program. Ones where they have a lot of fun, walk out with a feeling of success, and see programming for what it truly is – a social endeavor that is part programming, but in large part a group collaborative effort to design something amazing.

And that will lead to more women majoring in computer science.

Posted in Uncategorized | Comments Off on Bringing More Women into Computer Science

How to Find the Best C.S. Students – Programming Competitions

It’s a battle out there to find the top computer science students. How to find them and then get them interested in your company is a gigantic challenge. One very effective way to both find and entice top students is creating or sponsoring a programming competition.

When I asked for sponsors to provide prizes for the Windward Code War, Hewlett-Packard, Microsoft, & Morgan Stanley jumped at the chance. For one very simple reason – this contest attracts the best of the best. It’s the best students at the top C.S. schools. And most of the participants will take a look at the companies responsible for one of their most enjoyable days at school.

Finding the Best of the Best

The students who participate in these competitions tend to be the best of the best. Our code war is among the top C.S. schools in the world. And from those students, we get the students who find programming so much fun, that they choose to spend a Saturday writing code for the pure joy of it. These are students who, when given a difficult challenge, will thank you for the interesting work. And will then solve the problem.

These students are the ones with the curiosity and initiative required to create the brilliant new products no one has thought of yet. These students are the ones that can produce a solution quickly. It may not be elegant. It may not be pretty. It may violate every rule they’ve been taught about proper programming. But it gets the job done and it is created quickly. That’s gigantic in the real world.

These students are the ones that see a challenge as chance to succeed. Most people shy away from challenges because of the possibility of failure. These students are the ones focused on winning and understand that in striving to win, they can well lose.

Hiring the Best of the Best

How bad do companies want these students? Hewlett-Packard is providing 18 insanely awesome laptops just to put their name in front of these students. Microsoft is providing 5 Surface tablets, 10 Kinects & more to put their name in too. And Morgan Stanley is feeding all of them. And all three companies jumped at the chance to do this.

Why?

They are sponsoring one of “the best days ever” at school for these students. These students can go get internships at pretty much any company. Through the code war, these companies get added to the short list of companies these students are considering for internships. A student will figure that a company that sponsors this has got to be an interesting place to work (they are).

What Students Get

One of the most exhilarating days ever at school. And an introduction to three companies that highly value who you are (for those interested, you can email them at Hewlett-Packard, Microsoft, & Morgan Stanley).

Students – The Windward Code War is great. But there are many other hackathons (the Imagine Cup is a great one) out there. As a computer science student you should participate in several each year. You’ll improve your programming and learn a lot of new skills. More importantly, you’ll learn a lot about striving for success and overcoming obstacles. And when you apply for jobs, listing the hackathons you’ve participated in is a giant plus. Giant.

 

Posted in Uncategorized | Comments Off on How to Find the Best C.S. Students – Programming Competitions

Want a job at a startup? Then enter the fucking Arena!

Here’s a little secret that few students know. Success is built on a boatload of failures. The road to success is trying a million things, discarding the many that fail, and continuing on the few that succeed. To win the contest you have to enter the arena. And when you enter the arena, most times you will be defeated.

When we sponsored our first collegiate code war at C.U., one team spent ½ hour trying to run the server component on Linux (it was a C# app). And when they couldn’t do that, they gave up and left. A week later one of them applied for an internship here at Windward. I immediately told them no thank you. I don’t care if they were considered the most brilliant programmer at C.U. – if they are not willing to step outside their comfort zone they’ll be useless at a start-up.

On the flip side I received a resume from a student who had written several iPhone apps. He was very embarrassed about them because they had all been total flops. I viewed those as a giant vote in his favor because he had created something and put it out there. And when it failed he tried with another and then a third. This is someone understands that the road to success is strewn with failures. We offered him a position.

Which brings me to the impetus for this post. One of our interns was talking to two students, telling them they should participate in our code war. Their reply was that they didn’t do well in competitions and so they weren’t going to enter. This is sad as both will always take the safe road and then wonder why they don’t achieve the great success they see others achieve.

Without a willingness to put yourself on the line, with the possibility of failure, you will never be successful.

Posted in Uncategorized | Comments Off on Want a job at a startup? Then enter the fucking Arena!