Keynote : Tips and tricks for succesful software teams by Roy Osherove (Roy@osherove.com)This seemed to be a collection of thoughts, loosely tied together by a voting system - highest scores got presented. As we weren't there for the beginning, its a bit hard to determine how this worked but there seemed to have been some sort of voting on which of a list of topics should be talked about.First up were ways that he has found of working successfully in a team:
- Timebox iterations
- Use of user stories
- Use of whiteboard to show progress -it's big, it's visible (to all - team and visitors)
- Use a backlog to hold all the requirements - the new requirements don't make it into current cycle
- Bad tests better than no tests
- Integration tests better than no tests
- What did you do yesterday?
- What are you going to do today?
- What is stopping you?
Session 1: Data-Driven AJAX in ASP.NET by Jeffrey McManusJeffrey is one of the developers of document-sharing site approver.com and has a wide variety of employment history with some major companies - including Yahoo Developer Network. His was the most interesting talk of the day, and part of that was down to his interest and passion in the subject.His first comment was on how good it is that Jquery is going to be included in the stack. It is already possible to use ASP.Net Ajax with JQuery.He reminded everyone that ASP.Net Ajax is built in to .NET 3.5, optional free install for .NET 2.0He then gave some examples on when to use Ajax. He suggested the following scenarios:
- Feedback on long running tasks
- Provide info to user quickly economically in context
- Draw users attention to important events in lifecycle of the application
- JQuery in his opinion this is probably the current winner and is also easy to use
Session 2: Functional Programming in C# 3.0 by Oliver Sturm (Oliver@sturmnet.org)So what is functional programming?:
- A programming paradigm
- Avoids state and mutable data
- Well known languages Inc haskell, lisp, f#
- Focus on application of functions
- Many imperative and oo languages have fp features
- Functional programming languages have features that support higher order functions, currying, recursion, list comprehensions
- Any function should only work on parameters passed in, should not persist anything, or use any other variable - anything it isn't supposed to do is called a side effect
- Promotes modularisation - reuse stuff on a functional level rather than a class level
- Lazy evaluation --> greater efficiency
- Target of avoiding side effects has several advantages: scalability, optimization, debugging, testing
- By only relying on functions with no side effects then you can parallelise really easily. Testing is easier because no external dependencies so don't need mock objects or setup/teardown scripts
- Map (Select in linq) - do something for each element in a list (foreach in above example)
- Filter (where in linq) - extract elements based on criteria
- Reduce (aggregate in linq) - summarize elements according to some calculation (ie sum, count etc)
- Easy to unit test - no side effects
- Programming for scalability is easier
- Easy to get things done
- BUT make sure all of team understands it BEFORE you use it :-)
Session 3: Red, Green, then what? by Gary Short (Gary@garyshort.org)This talk was all about refactoring, and the title comes from the phrase "Red, Green, Refactor". Gary was up front about the fact that he works for DeveloperExpress, authors of two refactoring tools, but he was very impartial about tools when he was presenting and I think did a great job of being neutral about tools whilst really selling the benefits of a tool, any tool.What is refactoring?
- Improving code without changing overall results
- Improves understandability
- Usually motivated by difficulty of adding new functionality
- Software entropy - a tendency that over time codebase becomes chaotic. Some examples of this are subversion of object behaviour, multiple child objects, algorithms become more specific etc
- More confidence which means that you're more likely to refactor more often
- Changing a method signature
- Convert to initializer (decompose too)
- Make implicit/explicit - use of var keyword
Session 4: Go with the flow - introduction to windows workflow by Ben LambI missed the very beginning of this session, and so didn't necessarily fully grasp what this talk was going to give me. Ben also mis-timed his talk somewhat and so didn't get to summarize and wrap up as well as I'm sure he would have liked to. The summary for this talk is "Changing business requirements are the bugbear of the application developer. The Windows Workflow Engine (WWF) allows business rules to be modelled in a graphical environment, possibly by a business analyst rather than the developer, making changes easier to accommodate"He started using an example of an estate agent - they may deal with commercial properties, or residential properties, they may be part of a larger group, or chain. The workflow employed by an estate agent will probably differ between agents, or even between commercial and residential within one agency. So, if you were modelling the design for a system, you'd need to model these differences.I have a series of notes about this talk, but none of them make a lot of sense to me, and so I don't necessarily think there is much point in me distributing them. It's probably better to look at the Windows Workflow Foundation site, and try some of the Hands On Labs exercises.
All in all I had a good day and attended some good talks given by some excellent speakers covering an array of development topics. The event had more of a DDD day feel than something like ReMix as it was community led rather than vendor led. I would recommend the event and would be interested in attending again.