There’s a couple of good axioms about software design: You Can’t Future-Proof Solutions and the Ivory Tower Architect You Can’t Future-Proof Solutions basically details the fact that you can’t predict the future. You can’t possibly come up with a solution that is “future-proof” without being able to know exactly what will happen in the future. If you could do that, you shouldn’t be writing software, you should be playing the stock market. Ivory Tower Architect is a software development archetype whose attributes are that they are disconnected from the people and users their architecture is supposed to serve. They don’t … Continue reading Leave predicting to meteorologists and fortune-tellers
I had a conversation with Kelly Sommers the other day that was partially a short support group session on the annoying tendencies of development teams to completely lose focus on the architecture and design principles of a system and let the code base devolve into a ball of muddy spaghetti. One particular area that we discussed, and it’s one area I’ve detailed elsewhere, has to do with layers. Our gripe was that developers seem to completely ignore layering principles once they start coding and introduce cycles, put things in the wrong layer, etc. A brief recap of layering principles: Types … Continue reading Automated Testing Isn’t Just for Business Logic
If you’ve used any sort of static analysis on source code you may have seen a message like “Virtual method call from constructor”. In FxCop/Visual-Studio-Code-Analysis it’s CA2214 “Do not call overridable methods in constructors”. It’s “syntactically correct”; some devs have said “what could go wrong with that”. I’ve seen this problem in so many places, I’m compelled to write this post. I won’t get into one of my many pet peeves about ignoring messages like that and not educating yourself about ticking time bombs and continuing in ignorant bliss; but, I will try to make it more clear and hopefully … Continue reading “Virtual method call from constructor” What Could Go Wrong?
Mark Seemann recently had a great post that, as most of his posts seem to do, challenges the average reader to re-think their reality a bit. The post is titled “Is Layering Worth the Mapping”. In the post Mark essentially details some of the grief and friction that developers face when they need to decouple two or more concepts by way of an abstraction. Mark takes the example of layering. Layering is a one way coupling between two “layers” where the “higher-level” layer takes a dependency on abstractions in a “lower-level” layer. Part of his example is a UI layer … Continue reading The Rat-hole of Object-oriented Mapping
[Update: 25-Jan-12 5:45 pm; fixed typo] I was reminded recently of the misconceptions of the volatile modifier in C#, and I’d thought I’d pass along the recommendations of other’s that is tantamount to “avoid the volatile modifier”. The volatile modifier in C# “indicates that a field might be modified by multiple threads that are executing at the same time” . The first problem is that documentation. What does that really mean to someone developing code that uses multiple threads? Does that make the code “thread-safe”? The answer is “maybe”; the real answer is “rarely”. Most people just stick volatile on … Continue reading Avoid the volatile Modifier
In my previous Subversion (SVN) post I detailed some basic commands for using SVN for source code control. If you’re working alone you could get by with Part 1. But, much of the time you’re working in a team of developers working on versioned software that will be deployed to multiple places. This post will detail some more advanced commands for systematically using SVN to simultaneously work on multiple editions and versions of a software project. (hence the “less subversive”). Practices The basic concept of working on two editions or two versions of a software project at the same time … Continue reading Working with Subversion Part 2 (or Subversion for the Less Subversive)
NUnit introduced a feature called Explicit Tests (a long time ago, I believe) that basically mean a test is considered tagged as Ignore unless the test name is explicitly given to the NUnit runner. This is useful if you have tests that you don’t want run all the time. Integration tests or tests highly coupled to infrastructure or circumstance come to mind… But, it’s difficult to automate these types of tests because you always have to maintain a list of test names to give to the runner. The ability of NUnit to run explicit tests aside, I don’t generally use … Continue reading “Explicit” Tests with Resharper
Working with multiple client projects and keeping abreast of the industry through browsing and committing to open source and other people’s libraries means working with multiple source code control (SCC) systems. One of the systems I use is Subversion (SVN). It’s no longer one of the SCCs I use most often so I tend to come back to it after long pauses and my SVN fu is no longer what it used to be. I’m sure my brain is damaged from this form of "task switching", not to mention the time I spend trying to figure out the less common … Continue reading Working with Subversion, Part 1
DevTeach is coming to Ottawa November 2-4 2011. DevTeach has had some of the best speakers in the industry and some of the best sessions/tracks that I’ve ever attended. This year is no exception, the speaker line-up is full of experts and MVPs like David Starr, Mitch Garvis, James Kovacs, Laurent Duveau, Mario Cardinal, Guy Barrette, Paul Neilson, Rob Windsor, Benjamin Day, Erik Renaud, Joel Semeniuk, etc. and locals like Garth Jones, Wes MacDonald, Joel Hebert, Colin Smith, Colin Melia, Brad Bird, Rick Claus, etc. Tracks include Agile, Web Dev, Rich Client, SQL Server Dev, SQL Server … Continue reading DevTeach Comes to Ottawa!
Well, unless you’ve been hiding under a rock, you’ve probably heard about Microsoft Build conference that happened in Anaheim last week. It was during this conference that Microsoft finally released details about the successor to Windows 7. This event is solely developer-focused and, in my opinion, tablet-specific. It went into a lot of detail about the added APIs and usability changes in Windows 8 to better support tablet and touch-based computers. First off, the new touch-first usability changes are called “Metro” and applications written for touch are called “Metro-style apps”. The term “touch-first” is used because it’s not touch-only. Metro … Continue reading Windows 8, What Does It Mean to Me?