I'm just back from NDC 2009, a three day conference in Oslo which I attended with Kalle Hoppe and Emil Cardell.
It has been a truly great experince, much thanks to a great set of speakers such as Robert C. Martin, Scott Hanselman, Phil Haack, Mary Poppendieck, Udi Dahan, Scott Bellware, Roy Osherove, Ayende Rahien and many more. The arrangement was also pretty good. The conference was held in Telenor Arena which is a roofed soccer stadium with a capacity of 15000 spectators. The stands where divided into five scenes. On the field there was a big scene, tables where lunch was served and sponsored stands. There was also two less informal scenes on the upper level of the arena where Roy Osherove and Carl Franklin played some music and held an open space session one night and where Scott Bellware held a TDD workshop the last day.
Are you a professional?
The keynote speech, titled "Are you a professional?" was delivered by Robert C. Martin. In the speech uncle Bob talked about eight principles of professionalism for software developers. The principles where:
1. Do no harm
Our programs should do what they are supposed to do. We should make every effort to make sure that our programs work. Having to be done in time does not excuse doing things that slows us down. We must always be able to make changes to your code without big costs and the way to make sure that our code can be changed is to change it all the time. We should live by the boy scout rule: When you leave a camp, leave it cleaner than you found it.
2. Work ethic
When we go home our work is not done because we have a responsibility to improve ourselves. A professional does the work during the day. During the nights and the weekend we improve ourselves.
3. Know your field
We should know LSP. We should be able to write a quick sort from memory. If you we can't we haven't studied our field. If we pick up a book on C# and read it and think we are programmers we are really fools.
4. Continuous learning
It's irresponsible to stop learning. We must always be learning. New languages. New disciplines. It's not our employers responsibility to improve us, it is ours. We should step outside of our comfort zones and learn new things (such as other languages than the ones we already know).
We should have practice routines. We could sit down once a month and write quick sorts or word wrappers. We could create a set of programs that we write every month or so to train our minds. We could arrange coding dojos and play ping pong (One person writes a test and the other writes code that passes it. Then the second person writes a test and the first person writes code that passes it. Each persons total time is timed and the fastest wins.)
We should learn from one another. We should pair program. Not all the time but we should do it sometimes. We should be careful with just sitting with our earphones on and not talking to each other.
We should avoid silos. It's not good that John is the only guy who knows the database. We should avoid Silos by collaborating with each other. It's not good that John is the only guy who knows the database.
7. Become mentors
We should use our skills for good by giving them away to our juniors. If we are a juniors we should find a coach, someone to be our journeyman.
8. Know your domain
We should know the domain in which we are working. If we are in a finance domain we should know it. Programmers should know what they are programming. Requirements are not enough. We should identify with our customers. We should understand why the customer wants what they say they want. We should understand our customers needs, not just the requirements. We should make our customers problem our problem.
Other interesting speeches
While we spent quite a lot of time listening to Roy Osherove and Ayende Rahien talk about unit testing, mocking and IoC the most interesting speeches came from a (for me) rather unexpected and unknown source, Rafal Lukawiecki who gave several speeches on data mining with Analysis Services.
In his first speech Rafal described data mining as the process of first exploring some data, finding patterns in the data and then finally perform predictions based on those patterns. The final step could also be about finding patterns in the past to, as an example, detect fraud. The techniques and technologies normally used for this is statistics, probability, artificial intelligence, machine learning and database technologies.
In a later speech titled “Architectural use of Business Intelligence in Application Design” it got really interesting as Rafal suggested that we could use data mining to build intelligent applications. One practical use for the web would be to perform smart input validation.
A simple example would be input validation when users register on our site. We could first perform some or all of our regular validation and then, based on our other users find the probability that each field is entered correctly.
Say for instance that someone enters “John” as first name and female as gender. Using data mining we could then easily find that the values in the first name and gender input fields have a very low probability of being correct and ask the user to verify this input.
Except input validation techniques like this could also be especially useful for building adaptive user interfaces and for performing business process validation according to Rafal.
We really had a blast, learned a lot and got very inspired (and when Kalle got do discuss nerdy houses with Richard Campbell from .NET Rocks I’m not quite sure how to describe his feelings but I’m guessing for something like “sparkling" :-)). I really recommend anyone in the business to attend next year! And who knows, maybe EPiServer will even be one of the sponsors then and hand out some free bath thermometers ;)