Wednesday, 31 August 2011

C# In Depth

Jon Skeet
ISBN: 978-1935182474

Let's get one thing straight, every single C# developer with a working knowledge of the language should read this book. I picked it up because it had been three years since I'd written any C# (I'd been doing Java) and back then all I had exposure to was version 1.1. I knew nothing of var, LINQ, Lambdas, extension methods or dynamic typing. I guessed a little about generics from my Java knowledge. I've read the book and now I know about all of them. Of course I don't know everything about all of them but I know enough to make use of them. If I went back and read the book again and again I would increase my knowledge of these features with each read.

This is not an introductory text. The book starts off with a a brief tour of C# 1.1. It then goes through all of the recent versions, 2.0, 3.0, 3.5 and 4 introducing most of the new features as it goes. It does what it says on the cover, it goes into each feature in depth. This is both the books strength and its weakness.

There is so much information in here that at times it is very heavy going. I will admit that I skipped a few sections when I felt that I knew enough and knew I could go back to it at any time. If I'm brutally honest, I feel that this book could be pruned quite a bit and still be in depth. Alternatively, maybe a text that gave an overview of the various features with some examples would have been more suitable for me.

Jon Skeet is clearly a C# junkie and very passionate about the language. Jon, you'll be glad to hear it does all make sense!

Wednesday, 17 August 2011

Pragmatic Version Control using Git

Travis Swicegood
ISBN-13: 978-1934356159

I was an early adopter of Subversion after having used CVS for a little while. I've come rather late to the Git party and I wanted a book that would give me a quick, yet solid, introduction. Pragmatic Version Control using Git is just such a book. I really like the Pragmatic Programmer books as they tend to be short and easy to read. They allow me to absorb a lot of information in a very short period of time.

The first thing that struck me was the brilliant simplicity of the example code. Many books on version control use Java as a language that is easily understood by most people. Even with Java you need a fair bit of code before you've got a program that does anything, even Hello, World! Swicegood uses HTML as his example code. This is perfect because everyone can understand it easily and you only need a little to do some interesting things. The HTML example is used throughout the book, in my opinion, very successfully.

Git itself took me a little by surprise. Having a local copy of the whole repository felt a little extravagant at first and it took me a while to get my head around the idea of having to add a file every time I want to commit it, even if I've committed a previous revision. However, Swicegood explains how and why you do both of these very well and now I see the benefit of local copies of a repository and having a staging area.

Branching is key to Git and Swicegood explains it in a lot of detail. The book closes with a chapter on Subversion and CVS integration and migration with Git and a chapter on setting up a Git server. The only disappointment for me was the sparse descriptions of GUI clients. I am totally addicted to TortoiseSVN and would have liked to have seen a Git equivalent explained in some detail.

Available on the Kindle here.

Thursday, 11 August 2011

Terminal World

by Alistair Reynolds
ISBN-13: 978-0575088504

I waited a long, long time for Terminal World. Even though it came out for the kindle at around the same time as the hardback, I had a feeling the price would come down at the same time as the paperback release. It was worth the wait, as a week after the paper back release the kindle version halved in price.

I'm afraid it's the same old story (no pun intended) with Alistair Reynold's post Revelation Space work. It lacks the depth and breadth and just isn't as good. And like House of Suns and Pushing Ice it sets the scene for a sequel, but you're left wondering if a sequel will ever materialise.

I did, however, love the characters in this book, especially Meroka. She was a real, down to earth, tell it like she sees it kind of a girl. If I met her on a dark night, I would want to be on her side! The main character, Quillion, who started off looking like he was going to be a weak, weaselly sort of a person turned out to be really strong. I think the book could have explored his past a bit more.

Parts of Terminal World really did have me gripped. The climax was a little disappointing and lacked Reynold's usual attention to detail and complexity. It's almost as if he got bored and didn't follow it through properly. The actual theme that was played out did take me by surprise, I still came away not feeling I fully understood everything. Maybe that was the idea?

I believe Reynold's next book will be for children. I'll still read it, but I imagine it'll be quite different. Hopefully still dark and full of space opera though.

Monday, 8 August 2011

An Introduction To Test Driven Development

Originally published in Overload 104

There are a lot of introductory articles for Test Driven Development (TDD). So why, might you ask, am I writing yet another? The simple answer is because I was asked to by Allan Kelly who wanted a piece for a small book he gives to his clients. I was happy to oblige, but writing about TDD is difficult. In fact if Allan hadn't wanted an original piece he could print as part of his book I would have suggested he just get a copy of Test Driven Development by Kent Beck. The main difficulty is coming up with a suitably concise, yet meaningful, example and Beck has already done this.

Allan was also quite keen for me to publish elsewhere, so I chatted the idea over with Steve Love, the editor of the ACCU's CVu magazine to see if he thought the readers would be interested in yet another TDD article. He said they probably would be as long as I thought carefully about how I wrote it. I thought this over for a long while. The majority of introductory TDD articles, at least the ones I have read, focus on unit testing. A recently completed ACCU Mentored Developers project read through Growing Object Orientated Software Guided by Tests by Freeman & Pryce. They focus on starting a simple application with acceptance tests and only writing unit and integration tests when the level of detail requires it or the acceptance tests become too cumbersome. However, it is a big book, so I decided to try and condense what I saw as the most important points into an introductory article and this is what you see before you. I hope you find it as useful and fun to read as I did to write.

Read more here.

Friday, 5 August 2011

R.I.P Andrew 'Mac' McDermott

The first time I encountered Threshold was at the first (of only two) ProgPower UK in 2006. I thought they were good and bough all their stuff. They turned out to be fantastic and Andrew 'Mac' McDermott's voice was just incredible. Unfortunately that was to be the only time I would see Threshold with Mac as he left the band shortly after the release of Dead Reckoning. It was a double shame as my wife and I had planned a short honeymoon so that I would be back in time to see them play in Nottingham at Fire Fest.

I found out yesterday that Mac died on 3rd August 2011. It's a real shame. Although it was highly unlikely I would see Mac sing again with Threshold, I had hoped for plenty more material with his other projects and maybe even to see him live.

He and his voice will be missed.

Wednesday, 3 August 2011

Russel Winder: You Need To Know Python

Skills Matter Tuesday 2nd August

As I've said before, I love seeing Russel speak. He was on form again tonight, despite his migraine. One of the reasons I like seeing Russel speak is his sense of humour. Although, there is always a sensible and serious message behind it.

Tonight I think the message was really that knowing multiple programming languages and paradigms makes you a better programmer in all of them. The reason Russel chose Python is that he clearly has a deep fondness for the language. It has always appealed to me, so much that I write acceptance tests for my .Net applications in IronPython.

Harking back to Uncle Bob's talk a few weeks ago, Russel started with a whirlwind tour of programming languages through time, starting with FORTRAN through to the creation of C and the world domination of C++ that was eventually, according to Russel, killed off by Java. I'm not sure I agree with Russel here. I suspect what he actually means is that within academic institutions Java took over from C++ on computer science courses. I was certainly still programming in C++ in 2006 and didn't switch to Java until later. Conspicuous by their absence all the way through, were all the Microsoft languages. Russel clearly isn't a fan. Last came all the new dynamic languages such as Ruby and Clojure. Where was Groovy, Russel's favourite, I hear you ask? It was in the mix too. Unusually Russel only mention Groovy a couple of times tonight. The focus, as expected, was very much Python.

Then we got into the heart of the presentation and Russel explained his thinking and delivered his message that knowing multiple programming languages and paradigms makes you a better programmer in all of them.

In the final part of the talk Russel examined some of latest features of Python, including with, its take on C++'s RAII. I am almost entirely unimpressed with garbage collected languages versions of RAII. So much so I'm going to write a blog post. Watch this space. Finally he discussed one of the most important issues of our time, concurrency and parallelism. Python is unprepared, but it's being worked on.

The video of Russel's talk is link from his blog here.