Archive for category learning

My preliminary NDC 2009 agenda

Torbjørn Marø over at kjempekjekt.no has posted his personal agenda for NDC 2009, and thought it was a great idea. And like all great ideas, they are copied relentlessly.

Day 1

I have some favorites here, but some sessions have stronger competition than others.

10:15 Michael Feathers Seven Blind Alleys in Software Design
11:30 Michael Feathers Working Effectively with the Legacy Code: Taming the Wild Code Base
13:30 Jeremy D. Miller Lessons Learned from a Long Lived Codebase
14:45 Udi Dahan Designing High Performance, Persistent Domain Models
16:00 Udi Dahan Intentions and Interfaces – Making Patterns Complete
17:15 Michael Feathers Design Sense Deep Lessons in Software Design

Day 2

I have intentionally left a couple of spots blank, ‘cause I can’t make up my mind. And unfortunately it has more to do with lack of topics in those particular slots than the opposite.

09:10 Peter Provost The Butterfly Effect
10:15    
11:30 Ted Neward Extend the Customization Possibilities of your .NET App with Script
13:30 Robert C. Martin Clean Code: Functions
14:45 Ayende Rahien Object Relational Mapping +=2: More than just Data <-> Object
16:00    
17:15 Robert C. Martin Clean Practice: Agility and Craftsmanship

Day 3

Even though this has some of the most interesting talks, I can live with seeing them later on video. I just don’t want to miss an opportunity to sharpen my saw with Scott Bellware.

Concluding thoughts

Moltke said “No battle plan survives contact with the enemy”. If I rephrase it just a little to “No plan survives contact with reality”, it will properly relay my feelings about my plan on this occasion.

There will probably changes in the official agenda, and I might be infatuated with a speaker or two during the conference. Looking at my list, I sway in the direction of technology-agnostic topics. That sounds about right.

But more important: I’ll see YOU there, won’t I?

2 Comments

I Have a Dream

The usual suspects

Whenever I’m presenting anything, I try to start off showing the “Top 20 replies from a programmer when their programs doesn’t work”. In case you’ve never seen it, here it is:

  1. It works on my machine.
  2. Where were you when the program blew up?
  3. Why do you want to do it that way?
  4. You can’t use that version on your system.
  5. Even though it doesn’t work, how does it feel?
  6. Did you check for a virus on your system?
  7. Somebody must have changed my code.
  8. It works, but it hasn’t been tested.
  9. THIS can’t be the source of THAT.
  10. I can’t test everything!
  11. It’s just some unlucky coincidence.
  12. You must have the wrong version.
  13. I haven’t touched that module in weeks!
  14. There is something funky in your data.
  15. What did you type in wrong to get it to crash?
  16. It must be a hardware problem.
  17. How is that possible?
  18. It worked yesterday.
  19. It’s never done that before.
  20. That’s weird…

I’m not quite sure who wrote it originally, but I was given a paper copy several years ago. I must admit I had a good laugh at the time, as I could relate to most of the replies.

So whenever I’m presenting this list, there’s a giggle and a great deal of nodding and smiling going on in the audience. Then I go on to present something that will alleviate one or more items in this list.

But it’s not a laughing matter! It’s the sad state of our beloved profession we’re laughing at. It’s not supposed to be like this.

The Dream

When I’m presenting the list in 10 years from now, there’s not a giggle. Not a smile. Just silent shame of times past or loud laughter at good ol’ days. Hopefully no one doesn’t even recognize the items on the list.

I might have a different kind of list. But not this one. We have made progress.

What to do next

So I propose this list as the metric for how mature your development organization is. Same rules apply as in the wtf code review metric. Less is better. Drop the Joel test. Drop the Nokia test. Drop test X. Use this. Now!

The worst part of this is that most of these are solved problems. Test Driven Development, Continuous Integration, and Pair Programming have existed a decade. Their poorer, but still useful cousins, Unit Testing, Automatic Builds, and Code Reviews have been around the block even longer. Iterative and Incremental development, Miniature Milestones, and Review and Adapt has been grown ups for a while as well.

So there is no excuse. The answers are at your doorstep. But it takes discipline. And time.

But you’re not alone. I’m off trying to do my part. Our mission is clear. Will you do yours?

No Comments

MSDN Live with Steve Ballmer keynote

ballmerMSDN Live has toured Norway this fall, with a handful of presentations for .NET developers. I attended the last one in Oslo on Tuesday, where Steve Ballmer made the keynote!

Most developers have seen the developers, developers, developers talk, and we had high expectations for this keynote. He was quite enthusiastic in Oslo as well, telling us about things he thinks will influence our industry in the foreseeable future. This search at Youtube seems to find the whole show.

The rest of the day I attended the main track, starting out with a Silverlight 2 presentation from Gøran Hansen. While Silverlight 1 was mostly about animations and media, I didn’t give much attention. But the second version looks promising, with the CLR and a subset of the .NET libraries present. What I miss though, is maybe some background about the fact that running .NET WinForms applications in IE in object-tags has been possible a long time (without the automatic deployment of the framework). Props however to MS for finally supporting more than Windows & IE only! Gøran did a great job presenting, I really enjoyed his presence on stage.

Next up was another presentation from Gøran, which gave the audience an introduction to ASP.NET Dynamic Data. For those of us who attended NDC2008 and Scott Hanselmans keynote there, it was plain repetition. The only difference might be that this was showing the final bits released with SP1 of the framework, and Scott showing us some earlier version. It seems like a great technology to get you up and running very quick, but I wonder how many pages you end up with in the CustomPage directory after a while. Even though the topic didn’t tickle my fancy, Gøran did a great job on this one as well.

Then it was time for lunch, rather late according to my stomach. But it tasted good, and there seemed to be enough to fill up all us starving geeks. As always during the breaks, old colleagues and friends sneak up on you and says hello. Which I really do appreciate!

After the break, Anders Norås gave a talk about SOA. More specifically about how we should start thinking along the lines of enterprise service buses and leave our old crusty webservices in the dust. I really do concur with a lot his ideas, and I’m always happy to see code with binsor-love. I also liked his onion-architecture, which resembles my standard layered architecture (no, not the "standard standard"). Hmmm, looks like another blog post (again).

"Debugging your debugging habits" was up next with Rune Zakariassen from Microsoft. He showed us some tips & tricks for your debugging needs in Visual Studio, and presented a step-by-step recipe on how you best can find bugs in your code. I thought it was a nice presentation, even though my only real takeaway was the tracepoint functionality in VS. I’ve been a sucker for Debug.Writeline when I don’t want to impact the run of things stepping through, but this gives me an even less intrusive way keeping track of how the program executes.

Finally, Gøran entered the stage for the last time this day. He showed us how WPF databinding can be used with a variant of Model-View-Presenter called Presentation Model. The emphasis was really on this pattern, and how it helps attain SoC. He also mentioned DIP with the short version "Program to an interface, not an implementation". A good thing can’t be said enough so here is the original:

High level modules should not depend upon low level modules. Both should depend upon abstractions.

Abstractions should not depend upon details. Details should depend upon abstractions.

All things considered, yet another great talk from Gøran, keep up the good work and preach on about those design patterns and OO principles!

Yet again, great work by Rune @ Microsoft arranging this event. Until next time, I’m on twitter at http://twitter.com/haugern.

1 Comment

Introducing my Bookshelf

I have for a long time been very up front with everything I was aware of I didn’t know much about. As a countermeasure and a late follow up to Sources of Software Development learning (About Me), I’ve listed some books I’ve got in my bookshelf in my home office.

Let it be your starting point into the great resource of reading books. Blogs are great, but books really are in a different league when it comes to polish, hard facts, and references. I really find it a lot easier to get immersed in a topic when reading from a book than from my screen, and of course you have the added bonus of being offline while reading.

Amazon is your allied (especially now when the $ is really cheap for us Norwegians); go make your book order today!

17 Comments

Looking forward to Norwegian Developer Conference 2008

ndc2008Logo_thumb I’m happy to announce I’m going to NDC2008 in Oslo. It seems like it’s going to be two days packed full of everything a developer could want, I wish I could do Haugern.Clone() a couple of times.

I haven’t quite decided yet what I will observe first-hand, but whatever I choose, I’m sure it’ll be interesting!

No Comments

My take on Software 2008, the agile methods in practice seminar

I’ve just returned from an arrangement hosted by The Norwegian Computer Society, called Software 2008. I attended the “Agile methods in practice – What is it and how to do it?” full day seminar. (NB: The last two links are only available in Norwegian!).

Here’s a short review of the day.

First quarter

The first talk was given by Aslak Hellesøy. He gave a general and a bit historical view of the agile methodologies. He spoke well, and had good anecdotes in his speech. I liked in particular the little story about how cargo cults came about, and how we see them all over the place today in the software industry.

The second talk was given by Trond Pedersen and Nils Christian Haugen. They had an original take on their speech, it wasn’t even a speech; it was a role play. They guided us through some typical scenarios in a software development project and showed the agile aspects of it. I think it was a bit contrived, but a think they got across some good points.

Second quarter

The “long” sessions are now history, and we’re given a serious of Lightning Talks. The topics ranged from how “GUI prototypes are evil” to “how to delete production code”. The two talks I enjoyed the most was from Kaare Nilsen, and the one from Trond Wingård. The first because of his charismatic appearance, and the second because of its great topic on present value effects with incremental delivery in agile projects. This could be a real eye opener to just about anyone.

Third quarter

The seminar crowd paired up with each other and interviewed each other to form mind maps. The topic was how we could introduce agile methods in our own organizations.

After a slow start with some standard awkwardness we managed to get some drawings and text down on paper. It was an ok exercise, but I’m not really sure I have any real use for it.

Fourth quarter

Here most of us was introduced to a concept called “open spaces“. I have heard of it before, but have not been a participant in such an endeavour. A range of topics from the days agenda was thrown on a flip over and we sat in on which topic we would find most interesting. Well, you could either have an “engaged foot”, or an “interested foot”, or both to participate in any given topic. But if you found yourself twiddling your thumbs, you just wandered off to another space to see if you would get any “feet” there.

I sat in on a topic about what agile practices does and doesn’t work, and I think we had some interesting discussions and got to poke a bit into the material. The session was a bit on the short side, but I certainly grew fond of the concept.

Summary

All in all, it was a good day, and I got some good input which I will take with me to my own organisation.

I liked the discussions and mingling the most, and I’m definitively going to engage more in such events.

1 Comment

What happened in 2007

Here the main things that happened in 2007 grouped by month.

January

It’s my last month at my former employee Adrega AS. We’re working hard to get as much as possible done on a new module for our product before I leave. I’m sad to leave, but I think I’ve accomplished a lot as developer and development manager the past 3 years there.

I have my birthday the 8th and I’m just a year from my thirtieth.

February

I start up my career at my current employer Norconsult Informasjonssystemer AS. It’s a soft start, but I eventually get everything up and running and start to get productive on an internal project merging two older applications; Visual Project & GProg ProsjektØkonomi -> ISY Prosjekt Økonomi (project economy). I’ve long neglected a lot of hard core technical topics, but now I’m back in and I start reading technical blogs. I find that they’re a great source for what’s hot. Take a look at my blogroll.

March

Still doing work on ISY Prosjekt Økonomi, I’m mostly doing the administration part. I’m finding it somewhat hard to adjust to my new position, being a peripheral employee in contrast to what I was at my previous job.

April

I’m supposed to get technical responsibility for a new application currently developed by a sub-contractor, but it is in no way finished. So I’m still doing work on the ISY PØ application. I’m getting more involved every day, and I’m doing some interesting work in the core of the application. I’ve stated my interest in development methodologies at work and I’m getting involved with an ongoing quality project. I’m also starting a job making an aggregate installation for the Visual Project product line.

My oldest son turns 3 the 10th, and is definitively growing his own mind by the minute :-) .

May

Working with ISY PØ most of the time. I’m also involved with another section at work regarding  a planning module with a third party tool from Ilog called Gantt for .NET. If I tell it to dance, so it does.

I’m buying a few books from Amazon on development; WCF, WPF, Software factories and some more.

Most of May and June I’m home with my youngest son which is about 9 months old, giving our father-son relationship a real boost.

June

I find myself intrigued by the blogosphere, and I order a web hotel to host a blog.

I’m still mostly changing diapers at home though.

July

It’s a month mostly filled with summer vacation at work.

After a lot of waiting (felt like ages!) my web hotel is around and I start blogging. It’s going slow, but at least I got it out there.

I download my first podcast from .NET Rocks, but don’t listen to it right away.

My wife and I celebrate our 5th wedding anniversary.

August

Things are now rolling at work as I embark on a new development project with some initial analysis and estimation. It was the only thing missing, so I am very pleased with situation at the moment. I’m also guide for two new employees at our section, showing them the out and ins of NOIS and the projects they will start on. They are fresh out of school as MScs.

My youngest son is 1 year old on the 27th.

September

We’re awarded the project we just estimated, and starts up the initial exploratory phase. Deliverables from this phase will be a specification document and a working prototype showing a vertical slice of the architecture and testing its feasibility. I’m also pretty involved with our company’s effort to evolve our development methodologies. My first submission is a guide to source control going a bit further than just check-outs and check-ins; going into labels, branching, merging and general best practices.

I get hooked on podcasts, and I download episodes from .NET Rocks and Hanselminutes continually. My commute is 45 minutes twice a day so I got plenty of time to listen to it. Good thing I have a lot of catching up to do.

October

Now working full time on the prototype, trying some technologies and how they can fit into the big picture. We’re steadily heading towards a smart client solution as a rich and responsive user interface will be crucial. We don’t want any stone unturned, so we’re trying AJAX-solutions and different vendors before we’re going down the Windows Forms-road.

November

We’re settling for the smart client solution, and we’re ramping up the environment (continuous integration ++). We also have our first sprint planning sessions, and project kick-off with all participants.

The wife is 30 years old on the 16th, oh my, she’s old :-)

December

Our first sprint started and we’re developing at full throttle now. We’re going TDD and I find it a very good methodology.

I’ve listened to 114 hours, 20 minutes and 52 seconds of quality podcasts from .NET Rocks and Hanselminutes since September.

We’re celebrating Christmas with my mother and I’m amazed at the all the presents for my sons.

1 Comment

Catching up

In my last post I mentioned that I’ve been doing a lot of catching up on the technology side of things lately, and when I started out reading blogs I quickly realized it was a lot of ?LAs (1,2,3,4,5,.. Letter Acronyms) that I didn’t grasp or understood.

So I made a list of every ?LA and buzzword I didn’t know about while reading (and didn’t need to because of context at the moment), and I’m now at a point where I want to grok’em. I also wrote down things I had heard about or just scratched the surface on, which I wanted a clearer view of.

One by one, I’ll describe them in my own words. I’ll provide pointers to references where I found useful information and I’ll let you in on what detail made me go “Oh, a-ha!”. The list can be found here.

No Comments

Sources of Software Development learning (About Me)

I’ve been steadily increasing my knowledge of SD during my career, but just now I found yet another way to squeeze in some more learning.

So I thought I’d share how I’ve been learning earlier and how I’m acquiring new knowledge these days.

The early years

During my college years I was laying the newly discovered internet at my feet. I had a huge interest for the hardware part of computers, and was an avid reader of Tom’s Hardware and Anandtech. This of course wasn’t a drawback as I worked part-time in a local pc hardware shop as technician and seller. So via classical web pages I was ploughing the local hardware fields. I also had a subscription to the Norwegian version of PC World magazine at the time.

As I turned my interest towards programming, we where introduced to the first beta of Visual Studio .NET in one of our college courses and I was hooked. Again I turned to the web for more, and I picked up the occasional Dr. Dobbs Journal.

At the time I also discovered Amazon, where I could find great books on .NET and ASP.NET in particular which I was in love it. I bought Alex Homers first ASP.NET (Wrox) book early on, I even submitted a “bug” in the book and I think it still there on its errata. It seems that Wrox denies the books existence, as they doesn’t have it on their web pages. I guess it was replaced by the Professional ASP.NET 1.0 book from 2002. Anyway, here’s a link to the original BETA book!

Fresh professional

The first flirt with IEEE was during my master thesis, and for quite some time after graduation, I had “forgotten” all about it. We had full access to the vast library from IEEE at the University, I remember I had no idea so much had been written about my specific field of interest, and was amazed at the time.

During my first year as professional I had little or no time to further educate myself except the occasional web-browsing you do during death marches. So my main source of mental income where of course from my colleagues.

Making the leap

I hadn’t been developing professionally for long, before I was promoted way past my level of incompetence. I was suddenly the company’s developer manager and I was terrified at first. So to compensate for my incompetence, I scouted the web again for useful information on how to succeed. At least I had the clear sight to see my shortcomings, and make up for it after the fact, which of course is useful at any given time.

I turned to Amazon again, searching for management books in general, software development management books, etc., you name it. A couple of colleagues had heard about Scrum, so I tossed a couple of books about that into my shopping cart. In my search I also found other books, in particular from Steve McConnell which had gotten great reviews. From there it was just the snowball effect, Amazon makes a great salesperson with all its semantics on its books. I ended up with 10 books, and that Christmas I didn’t do much but read!

So with my hard-earned death march experience, possibly natural management talent, a fresh literature study, and a big pile of beginners luck, my management career was of to a flying start.

My brief encounter with IEEE was at this point also coming back to me, and I applied for a personal membership that same Christmas, and we’ve had an ongoing romance since.

It wasn’t long either, before I found specific websites where I could find useful development management information, tips & tricks, and so forth. Joel on Software was one of the first sites I found, and it was a lucky strike.

Doing more managerial tasks, my interest was turned in that direction. I continued to add books to my collection from great people like DeMarco, Lister, Brooks and Yourdon. My technical reading was not up to speed as I had great confidence in my subordinates doing that for me. I still had to code some, but I was more an organizer, scheduler, project manager and so on at the time.

Time of change

Commuting for a 2+ hours a day can make your day pretty short. And it certainly didn’t get any longer when my second son was born. So I was tempted by an offer from a company closer to where I live. I left the firm I was part of building up, and started fresh in Norway’s largest consultant company in engineering disciplines.

Gone was my manager title, and I was back into the world of {} and ;’s at full throttle. And I went off into the web to get up to speed on the technical side of things.

I browsed the usual suspects (Amazon) and found new books to silence my hunger. The theme of books this time was architecture, design, and construction. I should really mention Martin Fowler, which I got a couple of books from. I was tossed into ASP.NET 2.0 and AJAX development project, so I figured I needed some reference work on that as well.

The present

After just a couple of weeks into my new position, I had turned to a several technically oriented web pages which all had the form of a blog. As I followed even more links from those pages, I figured out the beauty of RSS feeds. It wasn’t all unfamiliar, but now I grokked it and started subscribing to feeds through SharpReader.

I was thrilled, much like when I first saw the IEEE library. There were lots of bloggers out there with great things to say about nearly everything I potentially could be interested in. Here I could really see what the innovators and early adopters where doing in our community. So blogs are definitively a great place for information.

My latest addition in my toolbox of learning is podcasts. I still do some commuting, and what better way to fill that time than listening to interesting people talking about interesting subjects? Well, I’m hooked.

And to sum it up

The most important thing here is to never stop learning. Continuous Learning. That should really be the motto. So, to facilitate that today I use these primary sources:

  • Books
  • Magazines
  • Professional societies
  • Blogs
  • Podcasts

In a later blog I’ll get more in detail on the specifics in those bullets. Until then; happy learning!

1 Comment