Advice on learning computer programming

I dived in to learning programming in 2012. If you’re interested in doing the same I’d like to share some of my recommendations with you.

For the last year or two there’s been a lot of buzz around efforts to introduce more people to programming. We’ve seen the launch of online platforms like Coursera, Udacity and EdX, all leading their offerings with computer science courses. The Code Academy startup offers interactive coding lessons. We’ve seen changes to the UK’s secondary ICT / Computer Science curriculum to make things more about programming and less about subservient use of MS Office. Last year saw the launch of the $25 Raspberry Pi computer to encourage young people to tinker, play and experiment.

Of course, there are lots of great resources that pre-date the last couple of years. So if you want to learn to program in 2013, there are lots of places you can go. Everything I recommend below is free.

What do you want to learn?

If you’re interested in programming, you might have a specific end goal in mind. Or you might just want to get a feel for programming and computing as a whole. My desire, starting 2012, was “to be able to get computers to do useful stuff”. Over time, I’ve been able to develop a stronger understanding of what I’m interested in specifically.

My suggestion would be to learn some basic principles, gain an appreciation of the landscape and what you might want to do, and then move in that direction when you’re ready. To do that, I’d advise you to:

Start with Stanford’s cs101

This course gives a good overview of how computers work and gives a nice introduction to computer programs.

It has a great mix between listening to an expert (Stanford’s Nick Parlante) and diving in and doing interactive programming exercises yourself. The course is bite-size, and takes you on a really useful journey through the conceptual terrain. The difficulty curve is quite gentle.

The course is divided into ‘weeks’. Each of these takes about 3-5 hours in total. I found this quite easy to fit in with my schedule. The course is currently open for self-study, so you can take it at your own pace.

I had a little go at Code Academy, but it didn’t hold my interest as strongly as this course did. This course felt more holistic and profound, whilst retaining a good degree of hands-on work.

This course might sate your appetite in itself; but if you’re hungry for more afterwards, these more difficult courses will take your understanding to the next level. So your next step might be to:

Follow-up with EdX’s Cs50x

This is Harvard’s introductory computer science course.

The format is pretty much: “We videod all our lectures, and have made the specifications for problem sets available online. There’s an online discussion forum to discuss problem sets and other ideas about and beyond the course.” So the organisation of the course is a bit old-school: you’ll watch a couple of hours of video lectures each ‘week’, and then do a lengthy problem set for homework, which will take around 15-20 hours.

The difficulty curve is pretty tough, and if you went into this with no prior experience you’d have a hard time.

The course dives deeper into programming specifically, using the C language, and does a really good job of starting you off as a programmer. The course gets you thinking in algorithms and introduces the comcept of computational efficiency. “Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development.”

The course has you use the CS50 appliance – a virtual machine running on your computer, using the fedora linux distro. It’s also very good for simply increasing your confidence and literacy in using software and operating systems.

I’m over half way through this course and having a great time so far. I’ve got three problems sets, my final project, and final exam to do before April 15.

The current run-through of the course finishes on April 15. I imagine that course material will still be available after this data. If this isn’t the case, you could download all the materials in advance of this date.

Or follow-up with Udacity’s CS101

Udacity’s CS101 takes a more bite-size approach. This course is designed for online consumption. It’s all delivered in-browser, with short videos intersected with interactive questions or small programming assignments. Each topic is rounded off with a series of homework questions.

The course has no time limit, so can be taken entirely at your own pace.

This course is much more approachable than EdX’s CS50, and feels a little more abstracted, as it’s using the Python language rather than C, but you still very much get your hands dirty with coding. Over the 7 units, you create a working search engine, which is very cool. You might not feel much ownership over it, however, as you have to do as you’re told.

To make sure that you use your powers for good rather than evil, take a Human Computer Interaction Course

An HCI course will get you thinking about how to design products that are easy to use and make the world better. Coursera’s excellent HCI course is just the ticket. You can watch the videos and take the interactive quizzes, or do a version of the course that requires you to do a design project. This is a serious undertaking – I spent about 25 hours a week on this course – but is a great way to learn.

Tips for making your learning effective

    • Make sure you plan enough time to fit in the learning
      Think about your learning will fit in your schedule, and make honest commitments. Let friends and family know what you’re up to.
      If you’re a commuter, I’ve found watching lectures on the train to and from work to be a great way to frame the working day.


    • Pace yourself
      There’s so much out there to learn and do, so many people to connect with, and so many experiences to have that it’s easy to overstretch and try and do too much and feel disheartened when you can’t do it all. Focus in on the things you enjoy best.


    • Follow what interests and excites you
      There are lots of ways to learn, and lots of different topics to learn. The internet is awash with free courses and resources. Your investment and risk in sampling each is minimal, so don’t be afraid to try and few and stick with the ones you like best.


    • Learning with others can help
      It can be quite lonely doing these courses, particularly if you get stuck. 
      Online forums can be very helpful for answering specific questions. There are some excellent people in there who will generously help you with your questions. But for all of these programming courses, I’ve found the forums too noisy to spend much time in. (Maybe I haven’t invested enough time in them?)I’ve found that forging closer connections with other learners is a powerful and motivating, way to learn. I’ve managed this in some of my online learning (eg MOOCMOOC), but not in any of these computer science courses. I’ve relied on personal friends to chat over the course in a more informal way, and to trade war stories about a challenging bit of code.


    • A mentor might be very helpful
      I’ve done all of these courses pretty much on my own. When things get tough, and when you’re not feeling confident, it can be hard to keep going. In the wilds of the internet, it’s very easy to be just an another anonymous consumer, and just as easy to drop off the radar. No one else is responsible for your learning, or for encouraging you along. The majority of people who sign up for a ‘massive open online courses’ drop out.It might help to find someone knowledgeable to support you in your learning. Just knowing that you can call on them to ask questions, or to help point you in the right direction might help.


    • Build something
      Your new skills will help you create things you wouldn’t have been able to before, and expand your mental and creative horizons. Don’t be scared to take your skills for a spin and to make something awesome!


Does anyone else have any advice to share about learning to programme? Are any of you planning to do so this year? If so, what are you going to start with, and what do you hope to learn?

Google announces 2 changes to Google Grants for 28 January 2013

I received an email from Google announcing a couple of changes to the Google Grants programme:

“We are writing to let you know about a few changes to the Google Grants programme.

As part of our ongoing efforts to grow our advertising programme for nonprofits, we are making two changes to the Grants programme.

First, as of January 28, 2013, Google Grantees may bid up to $2.00 USD on keywords. This is an increase from the previous CPC bid cap of $1.00 USD and may allow your ads to enter auctions previously unavailable at the $1.00 bid cap.

Second, to balance the interests of businesses who pay to advertise on Google search, your ads will now appear below the ads of traditional AdWords advertisers.”

The second point here is by far the more important. As I understand it, this means that Google Grant adverts will now appear below all paid adverts.

When operating a business, money talks. But when your business is running a search engine, quality results should talk louder. This quality is the ultimate source of advertising revenue.

I had thought that the way that Google’s AdWord bidding operates – boosting the power of high-quality adverts, so that placement isn’t just determined by the money bid – was a decent compromise. Under the $1 Google Grant cap, some areas were out of reach – particularly for fundraising – but with good quality adverts and content, your $1 could go a long way in some cases.

I’ll be interested to see what impact this change has on the effectiveness of the Google Grant for charities.

10 interview questions to ask a digital communications manager

Lots of organisations are recruiting digital communications managers right now. This role requires a wide range of skills: strategic thinking, creativity, flair and instinct for written and oral communications, combined with sharp technical skills, an enquiring mind and an enthusiasm to dive deep into intricate problems and emerge with practical results.

But if you’re not a digital specialist yourself, it can be hard to know what questions to ask your candidate. And if you’re not confident in technical matters the power balance can be the wrong way round.

The following list of questions is designed to help you probe someone’s digital communication competencies. You’re looking for confidence, specific examples of achievements and knowledge rather than floating buzz words.

1) Tell me about something in the world of digital communications that has impressed you recently.

Do they care about their field? Are they excited by it and its possibilities? Hopefully you’ll sense some in their eyes as they answer this question.

This question also probes whether they have their ear to the ground. As a follow-up question you could ask: What makes for good content or a good digital campaign?

2) What’s your diagnosis of this organisation’s digital presence, and what 2 key changes would be your initial priorities?

Hopefully you’ll have some idea about what could be improved with your digital presence before the interview. If you don’t have any expertise in house, I’d recommend jumping on to a platform like Sparked and asking the volunteers there for their opinion before the interview. The community there is very helpful with challenges like this, and will give you some good ammunition.

There are lots of things that could be wrong with your digital presence. Perhaps the website displays horribly on tablets, maybe the twitter presence is more marketing spam than useful, engaging material. Perhaps the branding is sloppy, the accessibility is imperfect, or the tone is all wrong. Maybe the digital communications are focusing on the wrong things.

Whilst the substance of the answer to this question is important, also evaluate how it is articulated. Is this someone who will be able to diplomatically deal with stakeholders across the organisation?
Does it feel like they’d focus on the core issues, or get lost in vanity projects or sideshows?

3) Are you afraid of penguins or pandas?

This is a slightly mean but actually very manageable question about search engine optimisation (SEO), designed to trip up charlatans. If knowledge of SEO is on the job description, don’t be satisfied with waffle about keywords and page rank.

This question refers to two big changes to the workings of the Google search algorithm in the last year or so. These are the ‘Panda’ and ‘Penguin’ updates. So this question will tease out whether they keep up-to-date with search engine optimisation (SEO).

In short, Panda aimed to reward sites with quality content, and to punish sites with low quality and duplicate content. The Penguin update aimed to tackle sites that manipulate search engines to rank more highly than they deserve to be ranked. This includes tactics like stuffing pages with keywords, or obtaining links from disreputable websites in an attempt to pretend that a website is seen as useful.

4) What’s your favourite CMS and why?

If you’re doing digital communications, you’ll probably be involved with content and content management systems. Hopefully your candidate will have used a few and have been paying sufficient attention to prefer some over others, and have intelligent reasons for doing so.

Do their points suggest an awareness of the strategic issues at play in choosing a CMS? Issues like security, updating, the availability of developers to work on a particular platform, data liberation, and open source will hopefully be raised.

5) In what specific ways are you more skilled and better able to do your job than this time last year?

Things are changing fast, so if you can’t say how you’ve bettered yourself in the last year you’re pretty much moving backwards. Hopefully you’ve learned from your own experience, and from changes in the wider world of digital communications.

Follow up: How do you keep up-to-date with changing practice?

They may well use a mixture of twitter, in person meetups and RSS feeds. Ask them to name a couple of favourite sources of information – they can be people or organisations or websites.

6) What’s the scariest technical error you’ve ever encountered and how did you fix it?

We’re looking for technical skills, strategic direction, problem solving, stakeholder management, expectation management, and a drive to learn from problems and improve processes. Don’t hesitate to ask them to frame their answer differently if it’s not making sense.

7) What do you think about the ICO’s interpretation of the EU cookie directive?

Earlier this year the ICO formally began enforcing an EU privacy directive from 2009 that covers cookies. This is why you now see so many popups on websites asking you to consent for cookies.

The ICO’s guidance on consent, in the run up to the enforcement deadline, was a source of heated discussion. Shortly before enforcement began, the concept of ‘implied consent’ was introduced. Whether your candidate thinks this was sensible pragmatism from an organisation tasked with enforcing an impossible EU directive, or a frustrating last-minute change of tack that has abandoned consumers to continued electronic surveillance and marketing, the main thing is that they can give you an answer. You certainly don’t want to see a glazed expression .

8) What are the most important performance indicators for digital communications?

Hopefully their response will go beyond measuring statistics like ‘time on site’ and ‘number of pages per visit’ and talk about measuring the achievement of the organisation’s aims using digital.

Ask them how they’d measure the achievement of the organisation’s aims online, and what experience they have in doing this. Of course, once you’re able to measure how well an organisation’s digital presence is helping it achieve its objectives, you can try to improve thi, in an evidence-led way.

They might also hit on the thornier question of social media measurement. They’ll hopefully talk about engagement. Perhaps they’re even reading Beth Kanter’s new book ‘Measuring the Networked Nonprofit’. Ask them how they’ve increased this, how they’ve measured their successes, and what returned has come from this.

9) Talk me through the main user group on your website and their user journey and what you’ve done to make it more effective.

Do they know who the main user group is? How do they know this? What sort of testing have they done to find out? What sort of data have they used? Have they made assumptions?

10) Have analytics ever shown you something difficult or strange or surprising? What did you do next?

This question isn’t coming from a particular angle, but should hopefully see how they combine problem solving, instincts, data, initiative and creativity, as well as their ability to deal with uncertainty.


Hopefully by using some of these questions you’ll be in a better position to pick a great digital communications manager. I’d say that the main attributes are enthusiasm and ravenous desire to learn, understand and improve. If they’ve been doing this long enough to be a manager, they should have good evidence of these things.

If you can think of any other questions to add, please leave a comment!

Why it’s important to backup your content database(s)

I went to share an exciting hearing research story on twitter this evening and found that the link wasn’t working properly. Rather than a short blog post on an impressive piece of research, however, I arrived at the following screen:

could not complete the search - error message

This isn’t the type of message any digital communications manager wants to see on their website shortly before 11pm, and certainly not the state I’d left the site in at 5:45pm. Thankfully I’d planned for problems like this.

I remembered seeing this error message near the top of a php template (line 16):

could not complete the search - the php code that led to this error message

So I suspected that our main content database had become corrupted somehow. I started by attempting to view the control panel login page. That was working fine, which confirmed that the server itself was up and running happily. (Indeed, if it wasn’t, you wouldn’t have been able to see the error message in the first place).

My next step was to try the content management system login page. This page loaded, which was a good start. There could potentially be a useful diagnostic message inside. Unfortunately the login functionality had stopped working. All this suggested that there was something wrong with the database.

Thankfully we keep daily backups of our content databases, (I’ll write a future blog about our backup strategy at Deafness Research UK) so I just jumped on to Dropbox and downloaded the latest backup of the main content database, from 6 hours ago. Just to be safe, I backed up a copy of the databases currently on the server – even though one of them seemed to be broken.

My next step was to put on some chilled prog rock (Camel’s Mystic Queen). So far the diagnostic process had taken a couple of minutes. I was pretty confident that I was on the right track and wanted a relaxed mood for the rest of the operation.

I jumped in to cPanel, Backup Wizard > Restore > MySQL Databases, and then uploaded the main content database:

restoring database

I had the problem sorted before the song had finished.

How can I improve my response to this problem in future?

My response was speedy and effective, but the I was fortunate to have noticed that there was a problem. Had I not been checking that link, this problem could have just as easily been waiting for me  tomorrow morning.

What’s the best way to know if something’s wrong with your website?

I have automated systems to check server uptime, and to contact me in the case of hosting downtime and log any gap in service, but not to check if the website is actually operating properly. As we saw above, the server itself was responding happily to requests, but the database on the server had broken a bit.

I’ll have a look tomorrow to see if there are any good tools to use here. If there aren’t any, I might have a final project idea for my CS50x course… You’d need to know the different potential error messages, and periodically iterate through the front page searching for these. A ‘successful’ search would then need to trigger an action of some kind, such as an email being sent to my personal address.

Towards digital service provision by charities

Charities are still working out how best to harness digital communications for fundraising. (See Public Zone’s Digital Handbook, for example).

But digital’s untapped potential extends far beyond fundraising. I’m most interested in seeing how we can use digital technology to improve service provision and to directly change the world for the better. In this post I outline two ways of achieving this.

1) Providing static information online

Providing information is a common charitable objective, and can be carried out very effectively online.

Creating useful web pages, visible to search engines and for the queries users are likely to enter in to them, is a good start. The SEOmoz guide to SEO is helpful here.

At Deafness Research UK we’ve been working to improve our provision of static information. Most visitors to our website are looking for information. Most of our visitors arrive through organic search, and the search terms they use show that they are looking for a solution to a specific problem, rather than being interested in our charity, or knowing in advance that we can help them. Many more people come into contact with us through this route than come to our dedicated Advisory Service.

Providing information and support is one of our charitable objectives, so we’ve worked to improve how well we use digital channels to achieve this. We use data on what people arriving at our site are searching for and produce content accordingly. So we extended our tinnitus and glue ear information, for example. We also look at what people are searching for on the internet as a whole, so that we can pick up gaps in our provision.

We’ve started taking this objective seriously by building it more strongly in to our reporting. Rather than focusing our website reporting on slightly arbitrary statistics – bounce rates, dwell time, overall pageviews – we’ve set up a series of goals in Google Analytics to track downloads of our resources, as well as tracking pageviews of our information content.

We’ve made our factsheets more visible and easy to download. From September to November 2012, these changes, along with the implementation of a Google Grant, led to a 103% increase in website goal completions. And because these goals are driven by our corporate objectives, they actually mean something.

Providing static content more effectively is great. For a lot of people this will be all the help they need. But we can take things at least one step further than this.

2) Using social media to provide interactive services online

  • We can proactively address people’s problems and concerns in a range of online spaces.

    At Deafness Research UK we’ve made some forays into proactively answering people’s questions on Yahoo Answers, and through twitter. By setting up twitter searches (see point 2 here) and Google Alerts, with a little bit of filtering you can keep an eye out for anyone talking about terms you might be able to help with.This is useful because lots of people who might want help don’t know about the support we can provide. And people experiencing sudden sensorineural hearing loss often don’t know that they need to seek urgent medical attention if there’s to be any chance of regaining their hearing.Ideally I’d like for us to commit to get in touch with anyone talking online who sounds like they might be affected by this type of sudden hearing loss. This would allow us to make more of a difference than simply providing a reactive service.By going beyond the online spaces we know, own and control – our facebook pages, websites and email inboxes –  into streams of activity on social media and online forums, we can help a lot more people.There are a few issues to consider when thinking about providing interactive advice and support online:- Can we ensure the provision of quality interactions and information through interactive channels? I think we can. If we’re relying on trained officers to deliver support on our helplines, I suspect that similar safeguards will help us provide quality information online.- Where do our beneficiaries stop? Should a UK organisation only provide support to people in the UK – and potential UK donors?

    – Private, longer-form, potentially more personal channels – such as email and telephone – are essential for any service providing advice and support. The ability to directly speak to an immediately responsive, warm, human with a voice is important, and for the next few years at least that will mean telephone helplines are essential.

  • Making connections online can directly help us achieve other charitable objectives.

    The Dogs’ Trust uses twitter to rehouse dogs, for example. I learnt at the November 2012 NFP Tweetup that it took them seven months of work to house the first dog, with another ten being housed in the next six months, with numbers growing from there. Switching to digital service provision can take time, but if your objectives align, there may be significant gains to be realised.

Providing interactive services online is a great way to publicly achieve your charitable objectives. But this is only part of the story. In my next post I want to go further, and propose how charities can use digital to encourage profound social change.

My favourite New Year email campaign

This evening a sharp email campaign arrived in my inbox. It’s from Meetup, a platform for people to arrange in-person meetups around shared interests.

With talk of New Year’s Resolutions becoming a little tiresome, the one-word subject line “Unresolutions” feels liberating and iconoclastic.

meetup unresolutions subject line in Gmail
The content of the email is clear and focused:
meetup unresolutions email content
The body of the email has an intriguing statement and an invitation to positive action, with a deliciously chunky button, leading with the imperative “try”. So of course I clicked on it.

Great landing page:

meetup unresolutions landing page

Strong visuals, focus on the central image and call to action, with other options invitingly waiting at both sides of the screen. The page covers a good range of options.

I like this campaign – it’s positive, empowering, expansive, exploratory and hopeful. Have you seen a good email campaign recently?


Setting up your twitter command centre

If you’re following more than fifty people on twitter, watching everything in a single stream of activity on is probably tiring and frustrating.

The constant rush of messages can feel overwhelming, and it’s hard to make sense of what’s most important. If you follow accounts covering different topics, the diverse tweets can blend together into a confusing and unhelpful sludge.

Fortunately this situation can be improved. I’d like to share three tips that have helped me:

1) Lists help organise different voices and interests

The accounts you’re following probably fall into different categories, congregating around your different areas of interest. Organise them into lists for each of your interests.

So for my personal account I have online learning, charity digital, tech and gaming. When I check twitter, I can look at each of these lists, rather than having to navigate a torrent of disordered voices in my home feed.

It’s also much easier to see how active certain communities are, and who the prominent voices are, than just looking at your home feed.

2) Searches can be very useful, and you can do a lot more than just hashtags.

I follow a few hashtags using twitter searches (#mooc, #moocmooc, #cs50x, #cslondon12, #NFPtweetup and #oxengage are the main ones.) Here’s an example search for #mooc.

Searching for keywords rather than just hashtags can be a great way to come across relevant messages you otherwise wouldn’t see.

At Deafness Research UK I have a list of the most important accounts in hearing research, but there are always new voices to discover. So I have a search set up for: deafness OR hearing OR tinnitus OR ear AND research OR science OR breakthrough. a hootsuite twitter stream searching for deafness OR hearing OR tinnitus OR ear AND research OR science OR breakthrough The OR and AND are logical operators. In this case they mean that the content of the message needs to include at least one of: deafness, hearing, tinnitus or ear, and to also include at least one of research, science or breakthrough.

Of course, you can’t be perfect with these more prospective searches, and you’ll see a lot of irrelevant posts, but it’s a useful exercise nonetheless. In the above example, the tweets from aromatixteam, Science_Alerts and EquiisSavant seem to be worth a closer look.

3) A dedicated tool is more useful than

Hootsuite and Tweetdeck are your main choices. I’ve used both, and settled on Hootsuite. They have very similar features, so mine was probably an aesthetic decision as much as anything else. (That and the fact that you used to have to install Tweetdeck, I think) I find Hootsuite’s light blue more appealing than Tweetdeck’s darker palette.

Being able to see multiple lists and streams (for example a search) at once is massively helpful. Here’s my home hootsuite dashboard (in 2 parts): the main section of my hootsuite dashboard

the second part of my home hootsuite dashboard
– I track mentions to make sure that I can respond to people and keep up conversations. Standard practice I’m sure.
– If I spot something that looks fun but don’t have time to read it now, I’ll often favourite it for later. Or if I’m at an event and planning to storify it, I’ll favourite tweets as I go.

The ability to schedule up messages in advance can be helpful too, although you probably don’t want to overdo this:

  • What if someone likes what you have to say and wants to chat about it right there and then?
  • What would the fallout be if something unforeseen happens? A catastrophic accident, or a change to a planned event that makes your preparations incorrect or inappropriate?

4) Find out what works for you on twitter and what doesn’t.

Twitter isn’t the right medium for everything. Don’t be afraid to focus in on the best stuff and ditch the rest.

I don’t like sifting through noisy news sources on twitter. It takes much longer to filter through Mashable on twitter than it does to skim through all their posts and find the 5% or so I’m interested in if I’m using an RSS feed.

Similarly, there’s loads of news that I’m not interested in. And I don’t have time to watch breaking news on twitter, or to read in-depth analysis while at work.

So I follow these areas through RSS feeds, which get attention over breakfast, at lunch, and in the evening.

How do you organise your twitter command centre?

Digital communicators need to keep learning

To be a good digital communicator is to be a lifelong learner.

The digital landscape keeps changing. Google alters its search algorithm; new services and platforms are released; user devices and expectations evolve; web standards develop; a new version of HTML or CSS is released; the legislative context shifts as the EU’s cookie laws are implemented. This means that our practices – and our instincts – need to be forever questioned and improved.

The toolkit of digital competencies isn’t a static box of best practice to absorb once and for all. Certainly there are some good foundations to acquire – an inquisitive, analytical mind; instincts for storytelling and visual design; a conceptual understanding of how the internet and websites work; an enjoyment of play, discovery and exploration; a logical approach; knowledge of HTML, CSS and any of the other web languages.

But the core digital competencies are inquisitiveness and an enthusiasm to engage in discourse with other people trying to understand and shape the digital landscape. A restlessness and a desire to figure out how things can be done – or could be done – better. A desire to understand what works and what doesn’t – particularly when evidence is hard to come by, and an open evangelism to share the results.

I find that making sense of the world around me by producing openly shared media is the best way for me to learn. Publicly sharing my thoughts as I try to work through them helps me formulate them more clearly. Working like this is a vulnerable position to be in; and sharing living work-in-progress rather than thoughts that are ‘finished’ means that I won’t always be ‘right’. Rather, I hope to be stimulating and encouraging.

In my posts here, I hope, by learning aloud, and in conversation with others, to help develop our knowledge of digital communications.

NFP tweetup’s 4th birthday in 10 tweets – Opening up (organisations with) social media

Lasa’s Charity Digital Summit 2012 in 20 tweets