Sunday, 13 April 2014

Casually dismissing innumeracy? It's unacceptable

Zoe Williams' article in yesterday's Guardian has wound me up.
There are an estimated 800,000 unfillable [coding] jobs in the EU.  Ah, you don't like numbers? Then you are going to find this story really difficult. 
How about I start this post by apologizing for the fact it has words. Would you prefer me to make my case with a few pictures?

It's pretty much a given in our society that you'll be able to read. (That's clearly a challenge for dyslexics, but that's a whole other topic). So why is it OK to be so casually dismissive of anything that requires even the most basic levels of numeracy?  People often talk as if being "bad at maths" is some sort of badge of honour, or an indicator of greater levels of creativity, sensitivity or imagination.

When you read the article it's actually positive about tech, and I think the Guardian's decision to describe Tech camp for kids as "terrifying" was supposed to be light-hearted. But come on - it's no more terrifying than a camp for, say, football or drama.

Want more people to fill those 800,000 jobs? You'll have to get more kids engaged with and enjoying maths, science and computing classes. And we have to stop giving cultural clues every five minutes that it's just fine to give up on anything numerical if you don't find it easy.

Sunday, 15 December 2013

What I want for Christmas

gift box
Picture by SalFalko on Flickr
It used to be so much easier to buy people presents.  There was always a book, an album or a movie that would be a winner.  And I'd usually have a good long wishlist of what is now called 'content' that would serve as a decent response to the ever-difficult question 'what would you like for Christmas?'

But now I don't want the physical CD - it's just a pain to rip.  I read books and magazines on my iPad, or listen to audiobooks. It's so much easier to rent a film than it is to clean a DVD to the point where our hypersensitive player will actually make it the whole way through the movie.  As well as the convenience of the electronic version, I actually prefer not having the physical clutter.

Giving content electronically is possible. But it feels pretty heartless to go and buy an iTunes voucher - it has all the charm of sticking a banknote or two in an envelope. Receiving a gift feels better if you think the person put some thought into what you'd like, and personally I'd far rather not know how much it cost. So I'm not a big fan of receiving vouchers*.

But I would like to be able to buy content in gift form, and send it electronically.  I should be able to pick the album or the title, maybe even a subscription to a magazine.  I should be able to set the date (even the time) that the recipient will get a notification that they've got a gift.  It should come with a little note from me, and let's recreate the element of surprise by having a nice little animation for 'unwrapping' the present.

Amazon, Apple and Google: feel free to take idea that idea on board as a gift from me!

* Actually that's not true. Send vouchers, I won't turn them down! But I always prefer to receive a gift for which I don't know the price.

Update: guess what you can now do in the iBooks store!

Thursday, 31 October 2013

Setting up a MySQL database for Django

Phil just wrote some new code and I want to make a small change.  It's in Django and has its own database, so I need to set up an equivalent database on my local machine. This should be basic stuff, but if you don't do it very often it's easy to waste a bunch of time on it. I wasn't able to find much in the way of help online, so I figured I'd document what I did here.

I've got MySQL installed, and I've got a virtualenv for the new project set up.
mysql
starts the MySQL command prompt and I figured the first thing I'd do is look at  an existing database for an existing project that's really very similar to what I'm trying to set up.  But wait, where is it?

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)

I figured out that I needed to be using MySQL as the appropriate user. The username & password are the ones you have set up in your database config in the Django settings.py.
 mysql -u [username] -p 
Enter the password at the prompt. Now I'm using the appropriate user, I can see another database.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| [db_name]          |
| test               |
+--------------------+
3 rows in set (0.00 sec)
That looks good.  Sadly, it turned out that this user doesn't have permissions to create a database.  Try again as root. 
mysql -u root -p 
mysql> create database [dbname];
mysql> grant all privileges on [dbname].* to [username]@localhost; 
Now I can see the database when I'm using MySQL as the desired user.  I need to get the database set up in line with the Django project.
python manage.py syncdb
python manage.py migrate 
And we're there!

Wednesday, 23 October 2013

Why Agile uses points

I'm in an excellent Skype chat with a group of MindTheProduct Product Managers around the world. We were discussing the question of why Agile uses points rather than time estimates, and a few people seemed to like my answer so I figured I'd save it for posterity here.

The point of points is exactly to take 'time accountability' out of it. Estimating is something that a lot of devs find incredibly stressful, even more so if they feel they will be 'held accountable'.  All but the most straightforward of dev tasks have something of the unknown about them. With points it's more about relative difficulty and it's a way of helping a team figure out whether the total set of work they are committing to for a sprint is realistic without getting bogged down in the question of whether something's going to take 3 hours or 5, or whatever.

But the key here is that the team have to feel both responsible and empowered regarding delivering the sprint.  When Agile works well, the team commits to the sprint and does its damnedest to deliver it to the best of the team's ability.  It doesn't work if you have super-tight specs for every item in the backlog because you need some 'give' somewhere (you've got fixed time & fixed resources in a sprint, so there has to be flexibility on either quality or functionality).  I suspect that [as a PM] if you're worrying about time accountability in sprints then either you're not allowing the devs enough authority over what they do in the sprint, or they don't fully 'grok' Agile yet or their role in it.  When they do get it, it's all about making a commitment *as a team* rather than individually, and working together effectively to help each other out rather than getting too hung up on whether any particular individual spent too long on a task.

When it works, the magic is that it becomes kind of obvious to everyone in the stand-up when someone isn't pulling their weight, and peer pressure from other devs is a much more effective motivator than the meeting of (what feel like arbitrary) estimates.  And, it also becomes obvious when someone needs help; if the attitude is right other people in the team will pitch in to help to make sure the sprint deliverable is met.