This week I gave a presentation about Software Craftsmanship at the Norwegian University of Science and Technology (NTNU) in Trondheim. There were about 50 attendees, they were enthusiastic and asked a bunch of questions. Couldn’t have asked for a better audience!

Here are some pictures:

Software craftsmanship @ NTNU

Software craftsmanship @ NTNU

Here are my slides:

How do I become a good developer?

One of the students asked me this question. I’m not sure there is a short and correct answer to this question, but I’ll try to lead you in the right direction - so that you can find some answer. Pete McBreen suggests the Apprenticeship model for learning in his Software Craftsmanship book:

“We must reverse the decline in the quality of developer training. Learning software development is not the same as being taught how to program. Apprenticeship is more effective than training to learn a craft, since it is more about learning than it is about teaching. Apprenticeship deliberately avoids the "learned helplessness" of the schooling model by making the apprentices an integral part of the software development team (chapter 12).” – Pete McBreen, Software Craftsmanship: The New Imperative

Apprenticeship is simply explained: learning by doing with guidance from an experienced fellow. Read the Wikipedia article for more information.

What does it mean for me? Well, it means that you should find someone that can teach and help you to become a better developer. Don’t expect this person to tutor you, but expect this person to give you directions. This person will tell you what books to read, what problems are worth solving, what concepts that are worth looking into, what tools to use, what Open Source project you should look into etc.

Therefore I think you can start becoming a better developer by finding someone to pair up with.

What books should I read?

The first three books that pop up in my head are:

You’ll find more suggestions here and here.

Good luck on your journey to becoming a master in the craft of Software Development!

Friday, February 05, 2010 3:45:56 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [0]  |  View blog reactions  | 

Yesterday I watched a presentation by Tyler Jennings about Software Craftsmanship – a talk he gave at Øredev 2009. I think his presentation was both inspiring and thoughtful, and if you haven’t heard of the concept of Software Craftsmanship, you should most definitely check out his presentation. For me this wasn’t something new, but I got something very valuable from watching; Tyler pointed me in the direction of a man called Corey Haines.

Corey Haines is a really inspiring man – if you ask me. You might already know his story, if not; you’ll learn it from me.

Corey lost his day job in the fall of 2008. Instead of applying for a new job or do a startup like regular people would do, he decided to do something completely new. He went on a 3 week Pair Programming Tour, where he traveled around in the USA to visit other developers. He offered to pair program with them for free if they provided food and shelter. His goal was to learn more about software development by working closely together with other developers.

This was the beginning of his journey to become a master in the craftsmanship of software development. I strongly recommend that you visit his blog, and read his posts and watch the video interviews with the developers he paired up with.

During his tour, Corey paired up with big shots like UncleBob, David Chelimsky, Micah Martin and many, many more.

What inspires me about Corey is his dedication towards Software Development. He spent his savings traveling around to pair up with other developers to learn more about software development. Corey, if you are reading this, and you want to visit Norway sometimes in the future; I can provide you with free shelter and food:)

Here are some of my favorite video posts from his tour:

Thursday, December 10, 2009 11:22:18 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [2]  |  View blog reactions  | 

If you read my blog or if you know me personally, you know I'm a big fan of Unclebob. The reason I admire him is simple: he is a major contributor to the developer community. He writes books and articles, speaks at conferences and contributes to Open Source Software. It inspires me to see that he still have a glowing passion for software development, even though it has been his labor for 35 years. It's the same passion I have right now, but it has only been my labor for 8 years. When I'm turning 40, 50 and 60 I still hope I have this passion in me.

The cool thing about Unclebob is that he does not only talk the talk, but he also walk the walk. A couple of days ago he published a video where he is doing a Prime Factors Kata in Ruby. In this video you'll see mastery of programming. Watch it and enjoy!

I hope I someday can become a master software craftsman like Unclebob. Right now I'm still on my journey.

Read more about coding Katas on Unclebob’s blog.

Monday, November 23, 2009 8:56:47 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [0]  |  View blog reactions  | 

I give technical presentations from time to time, and use Visual Studio frequently during these presentations. Lots of people have asked me what Theme is use because they think the black background and the font colors are nice.

Here’s what you have been looking for: I use a theme made by Roby Conery. Rob’s theme mimics the Ruby color scheme in TextMate (text editor for Mac).

I use TextMate when programming on my Mac. I typically write programs in Ruby or Python, and I must admit that TextMate has a very nice color scheme for these languages. I especially like the black background because it eases my eyes when looking at the screen.

Here are some samples of this theme:

image

image

Thursday, November 19, 2009 8:53:37 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [3]  |  View blog reactions  | 

About a year ago I assembled a WHS (Windows Home Server) from old computer parts I had lying around – finally I could put them to use. I added the following hard drives:

  • 200 GB SATA (for the system)
  • 200 GB SATA (data)
  • 200 GB SATA (data)
  • 400 GB SATA (data)
  • 320 GB USB (data)

I can’t remember why I decided to use the smallest disk for the system, but it was a mistake. There are some good reasons to choose a larger disk:

  • Size of the system disk limits the file size when transferring files to the server. WHS splits the system disk into two partitions: C:\ (20 GB) and D:\ (remainder of the disk is used for data). When you transfers files to a WHS the files will land on the D:\ drive before Drive Extender moves them to secondary disks in the storage pool. So if you have 40GB disk for system, you’ll have 20GB available for data. This limits you to only transfer files less than 20GB, which is small in the year of 2009 when HD videos are common. I discovered this limitation while trying to move a 120 GB virtual hard drive file to the WHS for backup – not fun at all
  • When your amount of data grows, you need to swap out the disks in the storage pool. When I have replaced the 200 and 400 GB disks with brand new +1 TB disks, I’m still left with a 200GB system disk when I could had a 1 TB system disk – argh!

So instead of making the same mistake as I did, install the system on a large disk! I can recommend a +1 TB disk.

Using a small disk for the system was a bad design decision by me. This forced me to replace the system disk with a 1 TB disk. I started on this “little” project this weekend, and ended up spending lots of hours on it. As usual, before jumping into conclusions, I did some research, and luckily enough I found a good post on the WHS forums over at Microsoft’s.

IMG_1344 

The cool thing about WHS is that it’s designed to take care of your data. It’s by design enabled to handle a crash on the system disk. If your system disk crashes, you can just replace the disk with a new one and reinstall the system. During the installation process, it will discover your other disks from the storage pool, and based on them it will be able to recover all your data. You’ll have to use the “Server Reinstallation” option while installing WHS.

The process

  • Buy a new disk – I bought a 1 TB disk
  • Shutdown the system
  • Replace the old drive with the new one
  • Boot up the system from the WHS DVD
  • Choose the “Server Reinstallation” option
  • The Drive Extender rebuilds your data from the storage pool
  • Create user accounts, install add ins etc.

Read the forum post in detail, and notice the caveats; when doing this you lose the backup database, installed add ins etc.

While doing research I also checked if people had experience with replacing the system disk using imaging tools like Norton Ghost and Acronis True Image. There seemed to be mixed results out there, and it’s not supported by WHS.

And before you go assembling your own WHS I recommend that you go read the white papers!

Here are some other WHS resources:

Happy hacking!

Tuesday, July 21, 2009 8:29:17 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [14]  |  View blog reactions  | 

About three weeks ago, I asked my readers and some people in the Norwegian developer community about what books they have in their bookshelf. The response was good, and I ended up with many good book recommendations.

Today I placed a new order on Amazon, and spent 200$ to upgrade my bookshelf. If you read further, you’ll see which books I ordered.

Software Craftsmanship: The New Imperative
Pete McBreen

“This book is the foundation of the Craftsmanship movement that seem to get momentum these days (and that is a good thing). “Software craftsmanship” sounds nice and has a positive ring to it, so it does not seem to be hard to endorse. But for Pete McBreen software craftsmanship is more than just taking your job serious. It’s a way to organize teams, a way to run projects, a way to run the whole industry, a way to organize learning, and a new way to look at developers. I really like many of his ideas, and I hope people like the Craftsmanship movement not just because it sounds nice, but because they know what this book is about. Read it and see what you think of “Software engineering” when you’re done.” – Tore Vestues

Working Effectively with Legacy Code
Michael C. Feathers

“Don’t be scared away just because the title has the word “legacy” in it. This book is not about VB6 or Fortran. Not at all! It’s probably the best book I’ve read about writing automated tests. It is about how to work with code that is not tested (which is Feathers definition of legacy code). And it is about testing in general. If you want to write tests for code that is not previously tested (or written in a way that makes it testable), this book is for you.” – Tore Vestues

Test Driven Development: By Example
Kent Beck
Kent Beck is the man behind design patterns and TDD. Do I need to say more? If you don’t know his work, have a look at his presentation from RailsConf 08.

Extreme Programming Explained: Embrace Change
Kenth Beck

“Extreme programming is beautiful. Not only because it uses the well known practices of TDD, CI, Pair programming and so on. Xp is beautiful because it understands that practices do not stand on its own. You need a mindset. The mindset is expressed through the Xp Values, and throughout the entire book. Xp is close to a philosophy. Read the book and I’m sure you will see software development in a slightly different way.” – Tore Vestues

Agile Software Development
Alistair Cockburn
Twitter sphere is amazing. I got this recommendation from my online friend Liam.

Here is a review from Amazon:

“Every fifteen years or so, a great book pops up that describes what projects are really like. There was Brooks, then DeMarco and Lister, and now there’s Cockburn.

Why is there such a gap between these great books? Possibly because the message they contain isn’t the easy-to-digest dictate: “run your project this way and everything will be fine.” Instead these books all focus on the fundamentals of projects: people and the way they work together. These books treat people as people, and not replaceable parts in a process. The books accept people’s foibles and inconsistencies, and work out how to work with them, rather than how to try to stamp them out. The books ask: how can we help these funky people work better together to produce great software?

Agile Software Development has some great answers, which makes it a significant book. It deals with the issue that programming is essentially communicating. It looks at the success factors of individuals, and how to help align the project with these. It discusses practical ways to reduce the latency of communication (do you know how much each extra minute taken finding things out costs on a 12 person project? How do you line your walls with information radiators?) The book mines the metaphor of development as a cooperative team game, and looks at development organizations as a community, where good citizenship pays.” – Dave Thomas

I want to thank all of you how responded to my post, and my twittering. If you wondering; the total cost of the books was 160$, and 40$ in shipment L

Thursday, May 28, 2009 11:50:18 AM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [4]  |  View blog reactions  | 

My employer, Capgemini, just released a Norwegian technology blog. We have been working on this project for a while and have finally released it! Puh!

My first post on this blog was about technical debt. I was so inspired by Ward Cunningham’s metaphor that I just had to write about it. Anyway, the content of the blog is in Norwegian. If you are a non-Norwegian reader, it’s probably not in your area of interest.

Feel free to visit our blog and follow us on twitter.

Wednesday, May 13, 2009 2:53:49 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [0]  |  View blog reactions  | 

If you are a software developer and consider yourself as a professional, you should watch this presentation. Robert C. Martin aka UncleBob has been a programmer for 40 years, written tons of articles and some really good books. He has worked very hard to promote professionalism and craftsmanship to software developers. In this keynote you’ll see him talk about that. Watch and learn!

Thanks to UncleBob for giving us such a great presentation. And thanks to Fredrik for pointing out this video for me.

Tuesday, May 12, 2009 9:29:38 PM (W. Europe Standard Time, UTC+01:00) 
  Permalink  |  Comments [0]  |  View blog reactions  |