Over on his blog, James Robertson continues the seemingly endless meme of static versus dynamic typing. I learned to program in Smalltalk around 15 years ago and still use it for my hobby projects. However, I earn my living as a C# programmer so I know the arguments from both sides. Just for the record I prefer Smalltalk's dynamic typing to C#'s static typing, I just haven't come across the problems in Smalltalk that the static typing advocates say dynamic typing will lead to. What I have come across though is the verbose way that static typing makes me code. Take this code snippet for example... void FilterSelectionViewFilterButton_Click(object sender, EventArgs e) { //GS - Get the selected filter type Button b = sender as Button; FilterSelectionView fsv = b.FindForm() as FilterSelectionView; ComboBox cb = fsv.FilterSelectionViewComboBox; AppModel.FilterType ft = (AppModel.FilterType)cb.SelectedItem; //GS - Store the selected filter type AppModel.Instance.CurrentFilterType = ft; //GS - Close the view b.FindForm().Close(); //GS - Process the current filter type ProcessCurrentFilterType(); } The above code is an event handler for a button click running in a controller class. The line that get's on my nerves is FilterSelectionView fsv = b.FindForm() as FilterSelectionView; I declare a variable of type FilterSelectionView then I assign the result of the FindForm() method to it. Now FindForm() returns a System.Windows.Forms.Form and since FilterSelectionView is a subclass of System.Windows.Forms.Form you'd think you'd be able to assign it to the variable fsv, but no you can't, you have to cast it, you have to add the code as FilterSelectionView. Oh joy! If I had a pound for every time I'd written that I could retire :)