Books, Software Developement, coding »

[1 Feb 2014 | 198 Comments]

I am currently pulling together various materials I have found useful over the years to create some short reference materials for software developers I am managing. This is just a quick reference list of the books that I have found very useful in shaping my opinions on the practical implementation of software development.

Clean Code – A handbook of agile software craftsmanship

This book gives detailed guidance on how to write software that is easy to read and maintain in the future by following S.O.L.I.D coding principles. It challenges many long held beliefs about how software should be written with well-reasoned arguments.

Refactoring – Improving the design of existing code

This is ‘the’ book to refer to when you want to change the design of existing code whilst not changing its behaviour. By following these methods is it possible to keep the existing functionality whist reduce the size of the codebase making the code more maintainable and extensible in the future.

xUnit Test Patterns – Refactoring Test Code

This book provides tried and tested strategies and patterns for structuring automated unit tests. It explains in detail what has to be considered when writing tests to ensure that they do not become more of a burden for a software project than an asset.

Dependency Injection in .Net

This book provides in depth and very clear explanation of what Dependency Injection is and how it should be used to realise the benefits it provides. Whist the excellent examples are in .Net the content in this book applies equally to any object orientated programming language.

The Art of Unit Testing

This book provides practical examples of how to write Unit Tests in a maintainable way. This book combined with Dependency Injection in .Net provides excellent working examples of how to structure code in a testable way.

Working Effectively With Legacy Code – Michael Feathers

This book provides tried and tested strategies for maintaining legacy code that does not currently have automated test coverage. It describes the various problems that you will encounter when trying to maintain or change existing code and what has to be considered

programming, coding »

[5 Feb 2013 | 216 Comments]

One of the things that I have found when doing work at home recently is that I don’t get into a ‘flow’ which means I don’t seem to get as much work done as I think I should. I put the main reason for this down to my work area not being particularly conducive to coding and since I now have 3 kids there is a lot of their things around and they are always interrupting me. So with this in mind about 6 months ago I started to design how I would convert my shed (which is pretty big (4.5m x 6.8m) into a place where I could get into a good ‘flow’ for work.

I’ve put a little photo gallery of the work at the bottom of the blog post.

The Goal

To create an area where it is possible to create excellent software

Requirements

Temperature

When I ran my start-up a few years ago from home I did it out of a room in my house that had been converted from a garage by the previous owners. It converted badly with no central heating. I found it was hard to regulate the temperature, it got really hot in the summer and very cold in the winter. This was a real issue for productivity and was one of the issues identified as a bad experience when I recently caught up with some of the guys involved.

Lighting

As part of the overall environment for writing code I was very interested in finding if there was some kind of lighting configuration that good for coding.

Space versatility

I am not 100% sure what this space is going to be used for. Perhaps me just writing code, perhaps having a team of people in there designing and making software, perhaps hold some training courses, I just don’t know. With this in mind I want to keep all options open and make it easy to re-configure the space accordingly.

Others

  • Collaboration
  • Colouring
  • Connectivity

Limitations

The shed has no utilities attached to it - mains water, gas or electricity.

Design Decisions

Utilities

  • Connect electricity. This was the minimum number of utilities I needed to enable the implementation of the other requirements I had.

Temperature

  • Insulation – put 50mm Celotex insulation on all the walls and ceiling of the shed. Insulation is proven to be the most effective part of temperature control.
  • Under floor heating – this is planned to be the primary heating source. It is quiet and easy to control. It also works well even when it is very cold outside and most importantly it is discreet which is part of the space versatility requirement.
  • Air-conditioning unit with inverter – this can keep the room cool in the hot summer and with the inverter it can also produce hot air when it is cold, although when it get really cold it is not very effective.

Lighting

  • Indirect light for writing code. During my research on a good coding environment I found out it was to reduce eye strain you must not to have things that draw your eye away from the screen such as lights in the ceiling.
  • No windows – this eliminated a source of light that might cause eye strain, improves the insulation and security properties of the building as well as improves the Space Versatility of the room.
  • Day light bulbs – having lights that mimics daylight helps with concentration and energy levels. I will be using daylight bulbs for my indirect light.
  • Standard bulbs – while the indirect light is good for coding it might not be good for all possible uses. So I have also installed track lighting so I can clip in and out up to 16 GU10 bulbs anywhere in the room maximising the Space Versatility.

Space versatility

  • Items already covered is that there are not visible radiators on the walls or things in the floor, no windows so there are not limitations created by the walls or floor.
  • Power and network points are located on the cross beams of the ceiling. This makes it easy to plugin anywhere in the room

Collaboration

  • I love whiteboards and find it the best way to knock around ideas. With this in mind I have dedicated one long wall to be painted with dry wipe paint which will make it a 6.8m x 2m whiteboard!

Colouring

  • I’ve gone for a green colour on the walls as this is supposed to help relax and help concentration.
  • The floor is a white wood floor, as there is only artificial light I wanted to try and keep it as light as possible
  • Ceiling is white with special paint which is supposed to help reflect light.

Connectivity

  • There is CAT6 cable throughout the room for people to connect to.
  • To connect to the house broadband I will start with some Ethernet Powerline adapters but might have to get a proper external CAT6 cable installed if this is not fast or reliable enough. External direct burial CAT6 is quiet expensive so I’m just postponing that expense at the moment..

Does it work?

I’ve been in there a few times now and it is a very nice space to work. The whiteboard wall is awesome and is my favourite feature. I’ve ordered some desks that should arrive in a couple of weeks so i’m working off some pasting tables at the moment! Everything else seem to just work as I hoped, the temperature is nice, lighting is good and I always feel I can concentrate on work. So far so good :).

Credits

I must credit Rich Bartlett for the high quality work he has put into making this happen. His attention to detail and building skills has made my vision come true. If you need a good all round tradesman you can contact him via twitter: @richiethebass (https://twitter.com/richiethebass)

Photos

There are various photos from what the shed looked like before work started, the work Rich Bartlett (the guy in the nice woolly hat as it was about –5 outside!) did to renovate it showing the various things that we did along the way.

 

charity, dev4good, coding »

[2 Jan 2012 | 0 Comments]

I have been to a number of charity coding events over the last few years. Craig Hogan has just asked people for their ideas on how he might run the second Dev4Good event this year, so here my top 6 things I like to get out of these events with my idea on how to implement them.

Why I enjoy these events

  1. Using my imagination on how to solve a problem. I truly love doing this, being given a problem and trying to solve it in a way that using various tools and services that are out there and I know how to use. Sometimes what I think is easy and straight forward is complete magic for non technical people.
  2. Creating a working solution. Actually creating something that adds value to a charities efforts and is actually used. As these events are short the scope of the solution has to be small for it to be successful.
  3. Meet interesting people – The type of person that goes to these events and donate their time are good people. The fact they are there and you are there makes it a pretty high chance you will be ‘liked minded’ with similar interests and a lot to talk about.
  4. Winning a competition – I’m quiet a competitive person and have always enjoyed working towards winning. This is something that PayPal’s charity hack event is very good at, they have different categories and a judging panel which makes it a real competition. They do have great first prizes in the categories which is a bonus BUT I would be very happy just having my name up in lights on the event’s website for bragging rights!
  5. Learning something new – it is not often that you get to mingle with a wide variety of other coders who are willing to share and show you how they work, equally I get a lot of satisfaction showing others new techniques and tools as well.. Getting a good opportunity to cross pollinate this knowledge is fantastic.
  6. Getting the T-Shirt – Getting swag is always a bonus at these events, but usually I have already got all the tools in my tool bag to do my job, I can go out and buy it. However there is one thing that you cannot buy – the Event’s T-Shirt. Long after the event has finished and possibly forgotten about, I often pull on an event T-Shirt and it brings back all the memories in an instant. I love it.

What I would do for my event

Have a large collection of problems or goals from charities (Points 1,2 & 4)

To achieve items 1, 2 and 4 I would try and collect the problems that charities have. Not just a few problems, lots and lots of them no matter how big or how small.

One of the recurring issues I have hear from event organisers is trying to get charities to engage with the event. To solve this I would partner up with organisation that deal with lots of charities, like JustGiving.com, and ask them to question the charities about ‘what is your pain’. It might be they need to be able to bulk e-mail, better analytics on their website, needing to raise more awareness of their brand, who knows. I believe by making the only effort by the charities to describe ‘their pain’ means it will only take then a few minutes of their time and a few sentences to submit an idea. There is no expectation on their half they will get anything and if they do they will be really happy.

Now we have a large pot of problems we can put them up on a “Problem Board” at the event and just let people pick the ones they would like to do. No direction about technology or implementation will be given (other than competition categories if they want to win a prize), leaving the developer to use their imagination (Point 1 solved). They might even create some working solutions (Point 2 solved) and then you can judge who created solutions that fit the different categories to have some winners (Point 3 solved).

Learn something new and getting the T-Shirt (Points 3, 5 & 6)

If possible have a social event the night before coding starts, hand out the T-Shirts, put up the “Problem Board” and let people meet and discuss how they might do things over a few beers and food in the evening. This should really help people meet each other in a relaxed environment which is the best thinking happen. It would be nice to have a way to identify what skills other people have. Name badges with skillset and twitter / linkedin details would be useful to solve this.

I would also had a period of de-brief and reflection after the event. It can be a full on experience with little sleep and lots of effort and emotion going in. People love to talk about how it went for them afterwards. I know my wife will never properly appreciate what I’ve been doing so having an opportunity to talk to people that went through it with me afterwards is really great. GiveCamp had a hog roast and a couple of hours of down time before the presentations which was perfect and really enjoyable.

In Summary

Every event I’ve been to has it’s own character and charm. Letting me use my imagination to add value and meet new people makes it very enjoyable for me. I have really enjoyed every event I’ve been to and you never know, perhaps some of these ideas might be adopted by Craig for this years Dev4Good!