December 29, 2011

...Learn TDD with Codemanship

SC2012 - Computer Science For Software Craftsmen

I promised myself I wouldn't work until the New Year, but just wanted to put this idea out there.

June 14th is a date to put in the diary for software craftsmen. The fourth Software Craftsmanship conference (SC2012) will be at it's spiritual home, Bletchley Park, just a week or so before the 100th anniversary of Alan Turing's birth.

As well as Turing, education's very much on my mind. So I've been kicking around an idea that could address an important educational gap in UK software development - the yawning divide between theory and practice.

I work closely with many employers, large and small, who are looking for great software developers. Many - probably most - UK developers are self-taught, including me. What employers tell me is that the self-taught programmers tend to hit the ground running, compared to programmers with computer science degrees (a surprising number of whom struggle to program at all, having had so little hands-on practice during their studies.)

But I also note from my own experience that many self-taught programmers have big gaps in their understanding of things like logic, discrete maths, data structures and algorithms, languages and compilers and so on. I include myself in that. I've cherry-picked elements of computer science as and when I needed them, so while I know a fair amount of theory, it's by no means comprehensive.

We end up with CS graduates who've covered the theory, but often don't have a practical grasp of the applications of the theory (and, therefore, don't really understand it). And we have a majority of self-taught programmers who, when asked to sort a list of strings into alphabetical order, might by default stick them in a database table and use SQL to do something that I believe any programmer should know how to do. (I've seen that several times, believe it or not.)

I've watched teams run scared of anything remotely theoretical that comes up on their projects, and I've watched teams of CS graduates hack out some pretty shitty code because nobody taught them how to, say, write good unit tests.

Looking to the future, our software army needs to be better equipped. Of that I have no doubt. There's little competitive edge in spewing out apps that any programmer could build, nor in spewing out clever, but unreliable and unmaintainable, apps. These two worlds need to be brought closer together to produce more well-rounded software developers.

With this in mind, I want to make a proposal. With a Turing theme in mind, I'd like to focus the software craftsmanship conference - and the community that supports it - on marrying computer science and craftsmanship. I've been noodling with code katas based on simple CS ideas - e.g., test-drive an implementation of binary search - and I think this could be a way to go in bridging the gap.

For the practicing craftsman, we could leverage their practical skills to introduce some computer science in the very practical, concrete way that self-taught programmers tend to respond to.

For computer scientists, we could leverage their theoretical understanding to introduce elements of craftsmanship, and give them a practical, hands-on way to learn the theory by applying it, and get the necessary practice at programming many CS graduates seem to miss out on.

I'm proposing that the SC conference community put our heads together and write a book - or a series of books - under the banner of "Computer Science For The Software Craftsman". It would cover the basics that most CS graduates would learn, but every concept would be presented in the form of a code kata or other practical exercise that allows programmers to learn the theory by tackling applications in code, whilst ensuring a high-quality implementation using the techniques we know and love.

It could be a valuable learning resource for self-taught programmers like me, and a valuable practice resource for computer science students (and teachers).

We could complement it with online resources like screencasts and wotnot, so people can watch and learn and share - perhaps forming themselves into peer groups and working through the material learning from each other.

I believe this would be a non-profit resource owned and published by the community, and in the spirit of the conference, any money raised after costs would go directly to Bletchley Park.

I think a good place to start might be data structures and algorithms. We could organise into groups, each taking a specific topic (e.g., search algorithms) and work in pairs to design and test katas and write explanatory notes. As a community, we'd vote to select the katas we'd like to see demonstrated at the conference, based on screencasts done by each pair, and ensuring coverage of a sufficient selection for a book on the subject. (Yes, we'd use a divide-and-conquer algorithm to write our book on data structures and algorithms!)

I'm actively exploring ways to increase space at SC2012, so hopefully there could be 250+ attending - making 125+ pairs. If more than half of us comes up with something, we'll easily have enough useful material to make a rather grand book and a dandy accompanying web site.

Of course, if you think it's a crazy idea, you can voice your concerns to me on That Twitter - @jasongorman

But if folk are generally in support, we'll make a start on this in January, when tickets will also go on sale for the biggest, baddest SC conference yet.

And with that said, it's back to Xmas telly and mince pies for me. See you in 2012.

Posted 9 years, 2 months ago on December 29, 2011