Nobody builds bridges any more!

Once upon a time we had this thing we call the Industrial Revolution.  We did amazing things during this time.  We built steam engines, railways, bridges and canals.  These were massive projects that took years of blood, sweat and tears.  In the 20th century we had what some call the second industrial revolution.  The automotive industry appeared and began to thrive, information technology appeared and began to grow.

Watt Steam Engine

Watt Steam Engine

That was the revolution.  Since then there’s been some evolution of those existing ideas, but relatively few new genuinely ones.

No-one is building those fantastic railways and the amazing bridges that took them over seemingly impassable territory.

Why?

It could be funding, but where did the money come from in the old days?  Do we no longer have men like Brunel who will put everything on the line and strive to make these things happen?

Have we had the next revolution already?  If so what will the next iteration look like?  Will we even have one?  Are we instead going to maintain the current gentle evolution from one new idea to the next.  Assembly, C, C++, Java, .NET, JSP, ASP.NET, (N)Hibernate, ASP.NET MVC, jQuery and so on.   Building blocks built on building blocks.  Walls taken down, put up a different way.  An organic system where the latest trends flow and follow the current thinking the way a shoal of fish move together in the sea.

Computers as we know them appeared first with valves, then transistors, and progressed to microchips.  Then the microchips started getting smaller and faster.  But still microchips.  Now, I’m only 27, but I’m not convinced that computers have really fundamentally changed in the past 20 years or so.

In terms of software, the main operating systems as we know them today, and the companies that built them, were the last revolution.  We as software developers are really just building new trains to run on that old railway.  There’ll come a limit to what we can do, so while that’s a little way off, what’s the next “big leap” to take us onto greater things?  Let’s build a new railway that’ll cross new cravasses and take us new places.  Who’s the Brunel of our time?

Advertisements

Tip for debugging console applications in C#

Sometimes in a C# console application, you want to output text to the console window for release builds, meaning Debug.WriteLine() is out of the question.  Maybe you also want the output in some sort of log file?  It would also be handy to be able to indent the output to make it clearer what your application is doing.  This makes simple Console.WriteLine() impractical, too.

If it’s an enterprise application you’d probably look at Log4Net or similar, but if it’s just a little something you’ve knocked up, then that might be overkill so try this at the start of your application:

Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

The documentation for Trace and Debug gives more detail, but the great thing with this approach is you can now format your logging output in a more clear way:

Trace.WriteLine("Starting loop...");
Trace.Indent();
foreach (string name in names)
{
	Trace.WriteLine(name);
}
Trace.Unindent();
Trace.WriteLine("Completed loop");

Like I said, I’m not proposing it as best practice for large-scale production systems, but for those occasions when you need to see into your application without debugging it, it might prove useful.

Undo, UNDO!

There is little more frustrating when using a computer than message boxes.  Technical people ignore them because we think we know they don’t mean anything, and non-technical people just use a rule of thumb (always yes or always cancel).  No-one ever reads the small print.

There’s not much point asking users if they’re sure before letting them do something. They will be absolutely positively sure.  Until shortly after they’ve actually done it.  Instead, we should accept that users make mistakes.  Rather than blame them for blindly clicking OK on our message boxes, we should embrace the human condition and strive to try and provide rollback with *all* functions in our applications.

Instead of

“Are you sure you want to book 3000 items of stock in?”

try

“3000 items of stock booked in.” and offer CTRL+Z to simply remove those 3000 items again instantly.

This is a hard thing to get people to come round to.  It’s so ingrained to rely on confirmation *before* the action.  Maybe we should be more forgiving and provide a means to recover from their mistakes, rather than having them hit our call centre in a panic when something goes wrong?

UPDATE:

Note that I’m not saying you should never use messageboxes.  I’m just suggesting that the “Are you sure?” concept in particular be avoided.

Synergy

For a short while I had two PCs on the go – my old development laptop, and my shiny new desktop PC.

To ease the transition period and be able to use both PCs at once with one keyboard and mouse, I installed Synergy.  Similar to multi-monitor setups, this uses the network and a kind of remote-access solution to control the mouse and keyboard input of other machines.

One tip, if you find that you’ve set it up according to the documentation but find that the mouse moves to the slave machine and won’t move back, check that you’ve set up *both* directions of movement on both machines involved.

I.e:

  • Rule 1: Laptop is to the left of Desktop
  • Rule 2: Desktop is to the right of Laptop

This caught me out and took a while to find the cause of the mouse getting stuck on the secondary screen.  Hope the tip helps someone :).