[ Content | Sidebar ]

On Commuting and The Economy

March 17th, 2011

Yesterday, I left downtown Cleveland at 3:45 headed to a 4 o’clock meeting. I was probably going to be 5-10 minutes late. Instead I ended up calling to reschedule, and still didn’t make it home till 6:15. Two and half hours, for a drive that usually takes me 45-55 minutes. Google maps says 38 minutes, but that’s not realistic on a weekday. As I was virtually at a standstill on I-77, and I saw some helicopters coming and going, I assume this was a very bad day for someone up ahead, and so as frustrating as the experience is, delaying my day (and many others) is a small price for life saving flights to the hospital.

But the traffic did get me to thinking, that most traffic jams are a multifaceted problem. I’m referring to those simply caused by congestion, fender-benders, or traffic stops (and the associated gawking). Wikipedia does a nice job of listing the negative effects. But I think in the current context of the US today, it’s worse than what they list. And I think we have the power to mitigate some of this.

As already mentioned in the Wikipedia list, there is opportunity cost, massive pollution increase, and psychological effects to traffic problem. What about our current time period makes this worse? Try the housing market. How? Workers commuting a long distance wanting to avoid the risks of long traffic tie-ups aren’t nearly as free to move closer to their jobs. Or they aren’t looking at far away jobs merely because of the commute. The tie-in between housing (mobility of workers) and jobs is clear, add urban congestion to that fire. Also, construction and maintenance projects that can make for better commutes aren’t exactly popular, particularly when tied to state and local budgets. Unlike the Federal Government, these state and local entities can’t run large deficits during times of tax revenue decline. Finally, consider the wasted fuel (which is getting more expensive with turmoil in the Middle East) and it’s effects on household budgets that are already stressed thin.

So what remedies exist?

The White House has been pushing for high speed rail projects across the country, but some states have turned the money down fearing the investment they would have to put with it. There are a lot of questions about the value, but it’s hard to imagine that making people more fluid is a bad thing for commute times and the job market. With this in mind, I asked a question about the speed of Ohio’s rail on quora.com.

Telecommuting has gained a lot of momentum, although I expect there has been some reduction during the recession (office space is not as much of an issue with a contracting workforce). While I’ve never been a big fan of working from home, it’s clear that it can save both the individual and company time and dollars.

GPS Systems are increasingly integrating traffic data. Just like emissions standards, having smart traffic systems as mandatory in cars could go a long way to assist in intelligent rerouting of commuters in the event of a backup. How many times have you been in a traffic jam and felt like you were rolling the dice when deciding whether to get off the highway and try another way? There are even social GPS systems like Waze that attempt to address this.

Google has been working on driver-less cars for a while now. Certainly safety, reliability and such are an early concern during testing. Once refined and proven, however, this technology would drastically reduce accidents, traffic stops, and save lives. If everyone were driving such cars (this is a loooong way out), speed limits could be drastically increased with little additional safety risk.

IBM, under their Smart Planet initiative, have been researching and implementing smart traffic systems.

I can only hope that some of these advancements lead to the kind of information available to drivers that is portrayed in this video “A Day Made of Glass” by Corning.

I think the challenge is finding reasonable first steps and getting some coordination between these initiatives. Given a recession, and global competition from rising powers like China and India, the US could gain a lot output from simple efforts to improve traffic scenarios. And maybe civil engineers (specifically transportation engineers) are on top of these ideas, but for now it certainly doesn’t look like the US is leading the way with solving these issues. Even if commute times aren’t drastically reduced, with solutions like the Google car or the high speed rail, imagine the productivity increase of commuting free time with internet available. You could use the time to pay your bill, catch up on news, do correspondence course work, etc. For some commuters, this is already a reality.

Some of the stimulus money was aimed at these kinds of projects, but in my mind, not enough. The long term economic effects of a mobile workforce are undeniable. And these efforts could payoff in terms of global competition for years to come.

What do you think? Does your city have solutions or efforts under way for this? Do you see a particular effort or company leading the way with this? I see mostly efforst coming from technology companies, but are there other significant efforts to address these issues?

Post to Twitter

Networking Yourself As A Developer

February 4th, 2011

In a tough economy, jobs can be hard to find. Especially the right jobs, ones that make you happy and help you grow in your career. Even if you are satisfied with your job, having a network of programmers, managers, and other IT professionals is a great thing. You have people to bounce ideas off of, and a safety net of jobs that you have a head start on should something go bad with your job or company.

Looking through the list I came up with, there is a heavy emphasis on social networks. Maybe that’s because I’m a working parent, and in-person events are hard to attend. You’ll see some on the list, but I’m not racking up frequent flyer miles going to events. But I think it also has to do with taking advantage of communities that span the globe.

Follows is what I would consider the basics of getting your name out there:

  1. Local User Groups – These are invaluable. Once a month or so, you get to learn about a new aspect of your favorite community while interacting with other members. And you can often present once you know the group, which is a great way to work on your presentation skills.
  2. A Blog – Sharing your ideas, and getting feedback is a great way to engage other developers who will take the time to read a thought out blog post. It will give you practice at clearly communicating your ideas, and processing feedback (and spam comments). Write about what interests you, and write in the style you like. For instance, Steve Yegge’s blog posts are my all-time favorites, and they are novellettes, but I write nothing like that.
  3. LinkedIn.com – It’s like facebook for your job. Sure, there are a lot of recruiters on there, and some other hassles, but it’s still a great way to keep in tough with old coworkers and keep up with what is happening in your region and field.
  4. Twitter.com – If you’re a developer and not on twitter, I’m not sure I understand why. Sure, there’s a lot of noise, but it’s like a new form of IRC. There is just so much instant sharing of good ideas, and promoting of content. For instance, I’ve gotten into quora lately (see below), and I regularly tweet out quora questions that I want more people to look at.
  5. StackOverflow.com – Yes, stackoverflow is about answering questions. But you also get to seeing the same faces answering the same types of questions, etc. Your quality and clarity of answers earns you a reputation. And what you end up building is a great resume. I regularly feel like someone could evaluate a programmer by looking through their stackoverflow profile alone. It would tell you what kinds of technologies they are comfortable in, how clearly they communicate, if they get easily drawn into arguments, and how much detail they can go into when necessary.
  6. Quora.com – Quora is new and trendy right now. It’s a Q & A site that wants it’s content to end up serving as a Wikipedia of answers. It has lofty goals, and it has drawn a fairly elite crowd so far. Similar to stackoverflow, I think there is social benefit and a resume like quality built upon your content.
  7. Facebook.com – Why facebook? It’s for soccer moms and college students, right? Most of the other communities tend to host a lot of tech people in general, and can be a bit homogenous. While facebook is the most broad representation of people I know… friends, family, old coworkers, you name it. So that’s the way I prefer to keep up with my family and friends. But it’s also a great way to stay connected about jobs, local events, and other relevant info. There are groups on there for developers, and you never know when one of your friends in another industry will have info on work relevant to you.
  8. Online User Groups – With StackOverflow getting big, I don’t find myself using user groups as often as I use to. But there are still questions that are so specific to a community, that I know I’m better off posting in a user group than on a general Q & A site like stackoverflow or quora.
  9. Regional Conferences – I’ve gone to Codemash the last two years. The presentations are great, and I’ve always come away with new ideas and interests. But I also come away with new contacts for linkedin and twitter, new reading suggestions, new acquaintances and friends, and job leads. I’m not looking for a job, but it’s great to know you have some backup plans. And when my company has been hiring, I have several times recommended people that I’ve met out in the community, and had them well received as strong candidates.
  10. Start Your Own Event – Many conferences and user groups will host open spaces, or lightening talks. They are highly interactive and you’ll have a hard time leaving without some new contacts.
  11. Vark.com – This is an interesting new service you have to try to believe. You sign up, and specifiy some topics you’ll answer questions on. Then you ask questions when you have them (preferably that are not google questions, but need a human touch), and vark will find someone to answer and get that answer back to you. I asked for a recommendation for a portrait lens for my Sony a390 DSLR camera, and got a well thought out answer with buying options. Like StackOverflow, this is a resource first and a community second, but your profile is a great way to show off your ability to communicate and explain detail.
  12. Give Camps – I haven’t been able to attend one yet, but am really hoping to this year. It’s for good causes, and you’ll meet other developers in your area from all kinds of backgrounds. What a great idea.

About the sites that involve getting and receiving help (StackOverflow, Quora, Vark), you’re probably only using the site well if you’re both asking and answering questions. Asking a well worded thoughtful question with adequate detail is as much of a skill as answering a question.

Finally, my advice would be to simplify cross-posting to these groups by integrating accounts when you can. For instance, I have linkedin and facebook set to watch my twitter account. If I post anything with the #fb hashtag, facebook picks it up and posts it as my status. Similarly, #li is picked up by linkedin. Beyond simplying the effort of getting content out, all that linking back and forth helps out your search engine traffic as well.

Happy networking…

Post to Twitter

Expert Business Objects: Read It, Even If You Don’t Need The Framework

January 31st, 2011

I’ve been reading Rocky Lhotka’s Expert C# 2008 Business Objects book. CSLA is a bit of a polarizing framework. A lot of comments on the book are along the lines of “outlived it’s usefulness given the current framework updates” or just generally “not keeping up with modern software trends.” It should also be noted that here are also a lot of positive comments from satisfied framework users.

Here’s what I think so far. The text of the book, not necessarily the framework will change the way I do development. Rocky leverages implements many key interfaces and observes many simple conventions that lead to a smooth experience with objects in any .Net UI paradigm (WPF, Silverlight, Web, WinForms, etc). It’s a case study in all of the things your objects should do to ease databinding and support transactions and multilevel undo. And that says nothing of the way these objects support remote calls (via marshalling or traditional copy by value calls).

True, the framework could stand to get away from singleton methods and other aspects that make unit testing and mocking more difficult. But reading this book, I think most developers and architects with any reusable frameworks of their own will realize just how many opportunities they missed.

Post to Twitter

On Terminology

January 28th, 2011

I should have written this a long time ago. One of the most universal lessons I’ve learned as a consultant is to be careful with terminology and jargon. Context, industry, experience all play a factor in how people will interpret what you say.

At one client in particular, it got so bad that I regularly threatened to create a swear jar that was for ambiguous terms instead of profanity. This was inspired by a long argument about control tables, only to learn that everyone in the room had a different definition of control table.

Examples:
Currently html 5 is a hot term, and the source of a lot of argument. Many people mean a host of technologies when they say html 5, including css 3, etc. So much so that the standards people have gone to using just “html” when referring to specifically html 5.

I regularly think developers misunderstand the term n-tier application (or n-tier architecture), and this is part of a larger problem of sloppy use of “layer” and “tier”. Architects generally are more precise, and use tier to indicate a boundary (process or network), while layer is a component that will run in process. In the .Net world, anything using a remote call (even to a process on the same box) like WCF, SqlServer, MSMQ, etc would be a change of tiers, while multiple DLLs in the same process are just layers. Often times, when discussing a n-tier application, developers will respond as if you are talking about a 3-layer business application with a UI layer, Business Logic Layer, and Data Layer. What’s confusing about this, is that such a 3-Layer architecture in a ASP.Net world is actually part of a 3-tier application, where the html, javascript and css on the client is considered Tier 1. The ASP.Net web/application server is considered Tier 2, and the database server is Tier 3 (even if it is running on the same physical machine because it is out of process). And the 2 layers (UI and Data) that the developers are confusing with tiers, are in fact responsible for managing the different tiers (web content and database interaction).

When I started writing this post, I asked for suggestions on twitter. The first response mentioned agile, which is certainly a bombshell of terminology. It is a methodology with practices in multiple areas of a project. How many teams do you know that say they are agile, by which they mean they don’t have a process (and don’t document)? A work contact of mine regularly describes a group of cowboy coders we are familiar with as Agile because they’re boss came over and yelled requirements at them, and they worked all weekend to implement. Agile is a reaction to the realities that caused that environment, but I doubt that any real Agile practitioner would describe that as an Agile team. And how many teams have started calling they’re morning meetings a scrum without any real implementation of Scrum?

What To Do?
In order to manage this better in my own day to day work, I have made it a point of regularly looking up terms that I feel I understand at a high level, but lack some certainty about it. You don’t need to read entire books or long articles on every topic you come across, but definitions combined with articles or posts that provide some context for use help.

And the next time you feel that terminology could be the issue, just ask the person to step back and clarify what they mean by the term. You don’t have to come of as ignorant of the subject matter, just make a simple statement like, “I think the implication and meaning of the term X is at the heart of what we are talking about, can we take a step back and make sure that we all our talking about the same thing?”

The Really Hard Cases:
I think examples like html 5 and n-tier where one bad definition has almost universally taken hold are the hardest to deal with. Which term do you use? It seems obvious to say that you want to use the correct term, but do you want to spend all of your time explaining that you mean the lesser-used more-accurate definition?

In these cases, I simply try to avoid the terms, or add some kind of specifier to the statement. For example, let’s say I was recommending training on the new and upcoming Web Standards (html 5, css 3, javascript). Rather than say “I’d like our developers to train in html 5″, say “I’d like our developers to train in the html 5 way of doing sites.” In extreme scenarios, you can stretch that out to explicitly say “html 5, css 3, and javascript.”

I could write a book on the number of times I’ve heard people misuse the term Service Oriented Architecture during my time as a consultant. I’ll sum up by saying this, SOA has nothing to do with Web Services. Web Service is merely one of many transports you could choose to implement SOA. But the mere presence of Web Services is no more an indication that you are in a SOA environment than the an engine is evidence that you have a car.

Finally, take care when using terms that people are sensitive about. Telling someone who has made a point of learning and practicing Agile that your team was “basically Agile” because you ran around changing on a whim is offensive to the time and investment that person made in learning

More Examples
Do you feel confident that everyone one your team would define these terms in compatible way? How sure are you that your definition is right?

  • Agile
  • Unit Test
  • Functional Test
  • Integration Test
  • System Test
  • Specification
  • Requirement
  • Layer
  • Tier
  • Physical Architecture
  • Logical Architecture
  • Instrumentation
  • Testable Code
  • Document
  • Entity
  • Messaging
  • Workflow
  • Automated Workflow
  • System Workflow
  • Document Workflow
  • Service
  • Pattern
  • Framework

Post to Twitter

Chad Fowler’s Keynote

January 18th, 2011

Chad Fowler’s keynote at Codemash was excellent, and well timed to get me through the week. While I have really enjoyed my time there, and learned a lot the last 2 year’s attending, I run into a lot of attitudes that are hard for me to handle.

Simply put, I work in multiple dev communities (Ruby and .Net), and both can be dismissive of each other at times.

This manifests itself in a couple of ways:

  • not just making a case, but implying anyone who disagrees is stupid or ignorant
  • assuming that success with their tool (framework, methodology, ide) means that all other tools fail
  • judging a tool based on an experience where they never tried to learn the tool

Since the last one is vague, I’ll give an example. You learn how to use database VendorX’s product in college and in your first couple of year’s programming. You have read up, you know the product inside and out. You get a contract to do work on a project that will use VendorY’s database. You consider yourself a SQL expert and decide to learn on the job. However, DDL, Programmable Sql, and identities are handled differently, and you are frustrated by this, and declare VendorY sucks. But you never picked up a book or put in any of the effort for VendorY that you did for VendorX.

So what does this have to do with Chad?

He’s a part of a vocal Ruby community. And many in this community are the source of my frustrations above. (To be clear, I may agree with what they are saying, I just am turned off by how they say things). So when Chad started talking about his experience in corporate America and poking fun of Six Sigma, I thought “here we go”. (For the record, I have no experience with, or understanding beyond the basics of Six Sigma practice, and no reason to defend it).

But Chad showed a deep desire to learn about and understand what he was working with, whether he liked it or not. He revealed that he was a trained Six Sigma “black belt”. He explained his frustrations, but also talked about the pieces of it that he found effective, and it sounds like he carried over pieces that were useful into his future places of employment.

Why does this strengthen his my view of his credibility? First, he had the humility to realize his first impressions may have been wrong, and the practices of 6S deserved more investigation. Second, he made an attempt to understand the context, history, and motivations involved, so his end argument was full of salient points, not just “gut-feelings”.

That quality, like offering a solution when you complain about a problem shows a deeper level of maturity. I was glad my first impressions about Chad were wrong, and I chose to stick around for the keynote, it was worthwhile.

Post to Twitter

Pre-Codemash 2011 Thoughts

January 10th, 2011

I’m looking forward to Codemash this year. Thanks again to my work for sending me. Founders like Jeff Blankenburg do a great job putting this conference together.

Last year, I concentrated on TDD/BDD, Silverlight, ORM, Ruby sessions with a few others thrown in for fun. This year, I’m still going through the schedule. I’d like to sit in on some mobile presentations, but I’m just not sure how much time in 2011 I’ll really have to spend with it. Primary goals this year are: I want to try to network more in the evenings, focus on good content, and try to capture as much as I can so I remember to go back and investigate good topics after the conference. One of the things I learned last year that should help: speakers make the presentation, not the topic. I’ve sat in on some topics I wasn’t interested in and found the content to be great, and vice versa. For example, I wasn’t that interested in prism, but Brian Genisio gave a great talk on it.

It’s hard being away from my family for 3 days, but I really enjoyed this conference last year, and it’s good to get a perspective on what other developers are up to. And on the positive side this year, I’m going there without a cold. Now if I can manage to stay healthy, after all last year there was an epidemic at the conference.

Finally, I look forward to struggling for bandwidth for 3 days. When geeks get together for a conference, there’s not much to go around…

Post to Twitter

Christmas to Myself

December 24th, 2010

Archer: Season 1 comes out this week! I watched the entire season on Netflix three times this fall…

Post to Twitter

Remote Time Capsule Logging With Snow Leopard

October 18th, 2010

There is a field for a remote IP when configuring the logging of a time capsule. It is intended to have the device log to a Mac on your LAN, so you can view the logs via the console program.

There is some work on the other end to let snow leopard listen to those messages. In order to do this, follow the steps in the answer of this super user post.

Post to Twitter

Questions to Ask About Any New Custom Application In An Enterprise Setting

October 8th, 2010

How will this new software handle:

  • Authentication
  • Authorization
  • Exceptions
  • Instrumentation
  • Persistence
  • Object/Data Distribution
  • Business Intelligence
  • Team Turnover
  • Quality Assurance
  • Increased Load
  • Validation

This is a work in progress. Suggestions?

Post to Twitter

Understanding Types in .Net Part 1: var keyword

September 24th, 2010

It’s surprising to me how many developers don’t understand the .Net type system. So I decided to write a series of posts on of some of the misconceptions.

The “var” keyword, introduced in C# 3 is implicit typing. For all intents and purposes, this is the same as strong typing. It is strongly typed at runtime. Implicit typing means that at compile time, the type of the variable is determined based on what is originally assigned to it. You can sort of think of it like a text macro in C. In that metaphor, the token var is replaced with the appropriate type. If the compiler determines that variable is a string, then you can not later assign an int to variable, the same as if you had declared it a string in the first place.

The intent was to make typing easier with some of the linq types and generics. See the following lines of code that do the same thing:

List<ICustomer<Retail>> Customers = new List<Customer<Retail>>();

// add customer here

// old way
IQueryable<ICustomer<Retail>> lateCustomers =
                              Customers.Where(c => c.Bills.UpToDate == true);

// new way using var,
//   c is still typed as IQueryable<ICustomer<Retail>>
var c = Customers.Where(c => c.Bills.UpToDate == true);

Here are some unit tests demonstrating that var is still strongly typed.

using System;
using System.Collections.Generic;
using NUnit.Framework;

namespace Tests
{
    [TestFixture]
    class TempTest
    {
        [Test]
        public void VarTypeIsStatic()
        {
            var v = "foo";
            string s = v;
            // v = 3; //This would be illegal
            Assert.AreSame(v.GetType(), s.GetType());
            Assert.AreSame(v,s);
        }
    }
}

Hopefully, this becomes more clear to developers in .Net 4. After all, why would the dynamic keyword be added if var was weakly typed?

Post to Twitter