Wednesday, May 24, 2006

The Skills that Don't Pay the Bills

The other day I was asked a question by a friend/co-worker about what skills are important to have for a developer today. Reflecting on the question, I think he wanted to know what skills make somebody a more attractive candidate on the job market. Of course rather than answer the question, I went off on a tangent regarding a recent pet peeve of mine.

More and more, I'm finding that .Net developers are losing touch with how things work. Microsoft has abstracted many programming functions to such a high-level, many people in the industry have forgotten (or no longer bother to learn) what's going on under the hood. I suppose this is a natural and necessary evolution; the growth of the talent pool doesn't come close to the expansion of software development and implementation needs. By dumbing the work down with every release, Microsoft expands the pool of workers while fostering a need for the latest software and training.

The result is an increasing gap between programmers/engineers and coders. So my answer to the original question was--try to be the former rather than the latter. In many ways the distinction is subjective, but if I wanted to gauge somebody's programming abilities, here are some of the things I might ask.
  • Write a function that sorts an array. Describe it in big-O notation.

  • Write the pseudocode for a simple XOR encryption algorithm

  • You have a table in a database with 1,000,000 rows and need to extract a single-specific record. What is the maximum number of records that will need to be evaluated to return the required row if the column you're looking at has a clustered index vs non-indexed with unique values.

  • Write your own string-builder

  • Design a custom cache mechanism

From what I've seen of the job market of late, it's unlikely these things are going to help one command a higher salary, but I think this depth of understanding is becoming a lost art in business software development.

2 comments:

Anonymous said...

a much smarter person than me said:

Civilization advances by extending the number of important operations which we can perform without thinking about them.

you might say that the art of creating fire has been lost, but it allowed certain people I know to focus on cooking omelettes in office, instead of worrying about tinder ..;-)

That said, i do agree with the thought that depth is hard to find ..

jkody21 said...

That's a great point and adds an interesting perspective. I also agree that constantly re-inventing the wheel doesn't lend itself to progress (although it creates a vast and interesting assortment of wheels ;)).

Personally, I feel better equipped to deliver solid designs, solve problems, and produce better code if I understand the underlying technologies. Additionally, some brilliant people have gotten us from fire to omelets; if I can absorb some of their knowledge by studying their work, I may have different insights when dealing with my own programming obstacles.

Thank you for making me think about this one. Thoughts?