I suggested a colleague to try pair programming and he agreed. After one week, we reviewed our first impressions.
First of all, I was interested in quality of the code we produce. However, it is difficult to say, what the quality is. We chose maintainability term instead. Zdenek (my pair) consider it significantly better in pair, I think it is somewhat better.
As for velocity of development, Zdenek finds it really faster, I find it somewhat faster. However, these are only our first impressions. I think we can explain much of velocity gain by ongoing focus. I mean, if you start losing concentration, your pair takes over so there are much less slow downs comparing to working alone.
I feel a little bit less of personal comfort, while Zdenek did not observe that.
I was also interested in the level of learning. Zdenek is extremely satisfied, because he is new to project and pairing helps him very much to get to it. I feel like learning less, but that is mostly becuase of different style of work now. Especially, I am the driver most of time, although it got better in last days.
We both expect the higher probability of success of the project.
There are some practical issues regarding pair programming. We have no specific keyboard sharing rules yet. Mostly, the one who feels bigger focus is a driver. We already changed a workplace a bit (moved a piece of furniture) to make us feel more comfortable at a single table.
Basically, our first impressions are mostly positive and we want to go on with pair programming. We extremely appreciate ongoing focus and ongoing code-reviewing.
Tuesday, July 21, 2009
Pair programming begins
Tuesday, April 21, 2009
Strange values in chart
Infragistics stacked column chart allows to display both negative and not negative values. However, I was adding some post processing based on values and discovered that one has to be careful with Box.Value.
Among others I had a stacked column with values 0, -50, 0, 50, 0. This is what I obtained (Box[][] rows were collected from SceneGraph by Row and Column):
((NumericDataPoint)rows[3][0].DataPoint)
Value: 0.0
((NumericDataPoint)rows[3][1].DataPoint)
Value: -50.0
((NumericDataPoint)rows[3][2].DataPoint)
Value: 0.0
((NumericDataPoint)rows[3][3].DataPoint)
Value: 50.0
((NumericDataPoint)rows[3][4].DataPoint)
Value: 0.0
rows[3][0].Value
0.0
rows[3][1].Value
-50.0
rows[3][2].Value
-50.0
rows[3][3].Value
50.0
rows[3][4].Value
-50.0
There is a kind of warning in the documentation of Box.Value: The intent behind any data objects referenced by this property are dependent upon the Layer that added this Primitive to the scene graph.
They tend to use it, though, as I saw on forums.
I spent some time trying to find better way then casting Box.DataPoint to NumericDataPoint, but I failed.
Monday, April 6, 2009
Selecting not nulls?
Having a collection IEnumerable<Nullable<T>> myCollection you can select values that are not null by calling myCollection.OfType<T>(). What is not so obvious is that calling myCollection.OfType<Nullable<T>>() would provide the same result.
This is because Enumerable.OfType<TResult> uses is internally to determine the type of item. It means, you can use Enumerable.OfType<T>() even for reference type T to get items that are not null.
Of course, I would prefer calling Where<T>(item => (item != null)) to calling OfType<T>() because the first call is much better in revealing its intention.
Tuesday, January 6, 2009
Collection Initializers
Collection initializers are very welcome in C# 3.0. Typingnew List<int> { 1, 2, 3 }
is of course much more convenient then typing
List<int> l = new List<int>();
l.Add(1);
l.Add(2);
l.Add(3);
However, when seeing examples (e.g. MSDN), one could think that you are limited in a single type in a collection initializer. But that is not true. You can use several Add overloads arbitrarily. Having the class
class MyCollection : IEnumerable
{
public void Add(string s) { ... }
public void Add(int i) { ... }
public void Add(SomeClass c) { ... }
//...
}
you can initialize it like this
new MyCollection
{
"something",
1,
2,
new SomeClass { ... },
"yet another string",
3
}
Wednesday, November 26, 2008
Infragistics.Documents versus ActiveReports
PDF document had to be rendered from an application. We used to use ActiveReports for PDF reports, but have experienced difficulties when maintaining them. I gave a try to Infragistics.Documents library. It looked nice, but a lot of coding would be required. I think one could prepare some set of classes that would allow fast creation of documents, but it would take some time we did not have. I had to admit, that it is much faster to create the document in ActiveReports, using the visual designer.
Perhaps this is just another prove of the rule "the less code you write the better".
Thursday, November 13, 2008
Good bye floppy disks
I did a big tidy up at home recently and found a bunch of floppy disks. My wife were interested in two of them. I coppied their content to an USB disk (yes, I still can access the computer having a floppy drive) and I guess I will never use floppy disks again.
Rest in peace, floppy disks!
Thursday, November 6, 2008
VisualStudio 2008 dead and alive
My VisualStudio 2008 stopped from runnning. After started, it reported several problems with loading of its parts and then crashed. Well, I wanted to repair the installation, but the installation program did not start, even. Because of that, I could neither uninstall the VisualStudio. Fortunately, I found the article on stackoverflow that helped me uninstall the VisualStudio.
I guess the problem was caused by uninstall of DataDynamics ActiveReports. Did anyone out there experience similar problem?