Cambridge Software Craftsmanship Community blog

A blogging framework for hackers.

Summer Event: Open Cambridge

Today saw us run our 2014 summer event, entitled Open Cambridge, an Open Space on the subject of Software Craftsmanship. This format of event was familiar to me from the excellent SoCraTes UK conferences, and I wanted to bring a little of that goodness to our own Craftsmanship Community.

After an initial opening and welcome explaining the open space format, we started generating ideas for things to talk about, play with, etc., to form the agenda for the day. Each person who came up with an idea (or ideas) had to briefly introduce the session so that everyone knew the purpose of it and what they were likely to get from it, and then place it on the agenda wall in a given time/room combination. It ended up looking a bit like this:

The agenda for Open Cambridge

Swift – Let’s take a look

Before lunch I ran two sessions. The first was on Swift, the new language from Apple for iOS/Mac development. I gave a tour of the basic syntax and some of the nice features of the language, such as its multi-paradigm nature (both Functional and Object-Oriented), and the fact that, unlike C#, it has proper first-class functions. As it has first-class functions, Functional Programming concepts such as currying and monads are available, and one of my favourite features in Swift is its monadic nil checks.

We also had a bit of a discussion about frameworks for cross-platform development in the mobile arena, looking at Xamarin and Unity3D for mobile game development. Xamarin in particular looks like a very nice solution for writing your mobile apps only once and minimising the amount of platform-specific code you have to write.

nand2tetris

The second session I ran was an introduction to nand2tetris, a project I was introduced to by, and have been working through with, the Cambridge Programmer’s Study Group. It’s a really cool project that builds up a simulated computer from the logic gates upwards. Starting with a NAND gate, you first build NOT, AND, OR and XOR operations, and then progress to more complicated chips like a Multiplexer (Mux) and Demultiplexer (DMux), chips that take an input bus rather than pin such as an Or16, and multi-way chips like a four-way Mux. That’s just chapter 1! Later chapters introduce Boolean arithmetic, sequential logic (i.e. clocked gates), to build a simulated CPU, then a virtual machine to run on it, a basic operating system, and a high-level language with compiler. Ultimately, you have all the tools at your disposal to build Tetris on your simulated computer.

I ran this session to introduce more people to the project and encourage them to come along to the Programmer’s Study Group meetups.

Cross-database management tool

After lunch, I attended a session by an attendee who wanted some feedback on an application he was building to allow access to data stored in both a relational database (MySQL) and a NoSQL database (DynamoDB). The motivation for the application was to allow non-technical users to edit the frequently-changing data in the DynamoDB store, and technical users to edit the more static data in the MySQL store. We spent some time discussing this motivation and the problems associated with giving users direct access to a database, and convinced the person to build the functions into the application itself. We touched briefly on some Domain-Driven Design topics, particularly Bounded Contexts.

Extreme Startup Dry Run

The next session I attended was a more practical session, with the intention of getting people set up with the Extreme Startup. This was mostly a Ruby headache: the Extreme Startup code-base requires Ruby 1.9.3, but I had Ruby 2.0.0 installed by Xcode. Reverting to the older version or running the two side-by-side both appear to be quite difficult. Eventually I resolved my issues and managed to run the app successfully under Ruby 1.9.3.

How to improve the Extreme Startup Event

This session rolled on quite nicely from the previous one, and turned into a bit of a discussion about things that we could have done better with the Extreme Startup workshop run earlier in the week, such as providing a set of pre-requisites for the workshop and providing a bit more up-front information about what it would involve. We also discussed some ways of reducing the impact of the Wolfram Alpha “cheat” utilised by one team in that workshop.

After I while I exercised the Law of Two Feet, and moved on to another discussion.

Down Tools Week, Improvement Days, and other ways to put the fun into coding

This discussion was already half-way through when I arrived and I found the topic had strayed somewhat from the original topic of Down Tools Week/Improvement Days and into ways of promoting self development and learning within a software team. I contributed more to this topic based on my experiences in a previous job than I took away from it, and found it an enjoyable discussion with some thoughts on how I might do things better/differently next time.

Retrospective

We closed the day with a retrospective of what had happened in each session and the key outcomes from each, and what each person felt had been most surprising, and their key take-away from the day. We then retired to the Haymakers in Chesterton for a beer or two. :)

All in all, it was a good day and I was pleased to see the Open Space format working well outside of the SoCraTes UK context and with much smaller numbers too. I will definitely keep the format in mind for future events!

July 2014 Workshop: Extreme Startup With Carlos Fernandez Garcia and Emanuele Blanco

Our workshop this month was Rob Chatley’s “Extreme Startup”, run by Carlos Fernandez Garcia and Emanuele Blanco of the London Software Craftsmanship Community. Extreme Startup is based on a question-and-answer format: you register an HTTP server with the Extreme Startup game, and it sends you questions as HTTP requests.

After a few technology hiccoughs with the internet connection (note to future self: check this beforehand!), we were underway with the warmup round, and had seven teams registered with the server.

The first round focussed on keeping the application running: we learned that the customer is more upset to get no response at all than to get an incorrect response. The questions in this round were fairly simple maths-based questions: “what is 1 + 10”, “what is the largest of these numbers: 99, 3, 67”, etc.

The next round introduced a change in requirements; there’s no room to get complacent in this exercise! Suddenly we were hit with harder maths questions like “which of these numbers are a cube and a square”? One team, taking the innovative approach of handing off to Wolfram Alpha to answer the questions, quickly took the lead; another team, opting for an interactive approach to answering the questions, were in second place. Luckily there’s no bonus for a quick answer!

The third round upped the stakes further: now we had to handle non-maths questions, like “Who played James Bond in Dr. No?”. This stretched even the hardiest of solutions.

Overall it was a great workshop, which everyone attending enjoyed very much. Unsurprisingly the Wolfram Alpha team scored the most points, and with a large lead. There was strong competition between one implementation that always returned something, whether or not it was correct, and the team calculating the answers by hand. If you get a chance to participate in an Extreme Startup workshop, I highly recommend you take it!

Retrospective

Interestingly, only two teams wrote tests for their solution, and no teams used any kind of source control. Of the pairs, most were using driver-navigator pairing, but one used ping-pong pairing.

Starting again, people would choose the technologies they are familiar with to ensure a solid start.

Want to share your experience? Fork this blog on GitHub.

Thanks

Thanks to Carlos and Emanuele for running the workshop so well and remaining cool under pressure, and to Granta Design for hosting us!

Hello World!

Welcome to the new Cambridge Software Craftsmanship Community blog. The purpose of this blog is to document the meetings of the Community, including useful outcomes and tidbits from our round-tables, notes and documentation from the workshops.

Who are we?

We are a regular Meetup group for software developers who care about and take pride in what they do and how they do it. Modelled on the London Software Craftsmanship Community, I hope to bring some of their success to the Cambridge software community.

Software Craftsmanship has grown out of Agile, with many of the leading lights in the Craftsmanship movement being the founders of the Agile movement as well.

The Software Craftsmanship Manifesto describes the movement as follows:

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

  • Not only working software, but also well-crafted software
  • Not only responding to change, but also steadily adding value
  • Not only individuals and interactions, but also a community of professionals
  • Not only customer collaboration, but also productive partnerships That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

© 2009, the undersigned. This statement may be freely copied in any form, but only in its entirety through this notice.

Through this group, I hope to tackle the third point from the manifesto and create and encourage a community of professionals in the Cambridge area.

What meetings do you run?

Round-Table Discussions

We meet regularly on the first Tuesday of each month at Red Gate Software for a Round-Table Discussion. The format of these meetings is open and welcoming to all. Topics are decided by the group from a selection proposed by attendees on the night, potentially following on from preceding lightning talks. We normally cover a couple of topics, and occasionally split into smaller groups to discuss separate subjects.

Lightning talks are short-format presentations, optionally including slides, lasting no more than 5 minutes. You do not need to have anything prepared in advance, just turn up and talk!

Workshops

Often, we meet on the third Tuesday of the month at Granta Design for an interactive workshop. These cover varying aspects of programming, including test-driven development, refactoring, object-oriented design, or functional programming. We have also delved into new languages such as Clojure and Haskell, and learned about hard computing problems like machine learning.