Saturday, August 20, 2011

Artistic Growth


More than most professionals (perhaps with the exception of doctors) software developers contend with change and growth.

Outsiders identify the instigators as advances in hardware and new deployment platforms, but when you're deep inside the works -- a fish in the fishtank -- the view of change and growth are quite different.

From inside you see your assignments and what the nearby developers are creating, along with occasional somersaults from the development environment. Food drifts down in fits and starts. Occasionally you get a new bubbly castle.

In the workplace you tend to get caught up in the office rivalry to impress your boss with your capabilities; you want to eventually move up the ladder from programmer1 to the lead software architect. In this industry staying static -- just creating with the same level of technological adeptness -- is a certain downward spiral. It's like being a plastic plant: you may look really good all the time at just one thing, but nobody is going to get terribly excited over what you have to offer. After awhile you will disappear amongst the accumulated algae.

People acquire skills on the job in various fashions, with as many styles of growth as fish have personalities. One key element to success however is to challenge yourself by volunteering when you smell opportunities. The way you move beyond what you currently know is to step outside of your comfort zone and offer to assume responsibility for something that is slightly beyond, slightly harder than what you think matches your present capabilities. Then the only way out of this predicament is to learn new things and to ask for help.

You need to make an occasional leap out of the fishtank into a new body of water, spawn and reseed yourself once in a while. Growth is all about the research, the struggle, and the experimentation. And more than anything growth is about the stretch.


Saturday, July 16, 2011

Artful Observation


Now that you've slept with that little software baby of yours for the past three months (or past year) you may feel confident that you actually know how it works. Do us all a favor though friend and patiently watch it run. And no I don't mean by peering over the shoulder of the user or by firing up a remote server-session to view the batch-log scroll by.

No, really watch it. Turn on the full eight-hundred-million candlepower searchlight and glare that baby down to its bones. Numerous tools enable visibility to the hardware utilization; you can even configure the lowly task-manager to show such useful metrics as GDI objects, memory use, CPU, page faults, threads, and network activity (the big six resources).

Is your process pegging a CPU? Do you have a memory leak? Did you fail to deallocate objects? Are you performing way more disk IO than you need to? Are you losing control of the quantity of threads that you are spawning? Are you hosing the network? Well maybe you should fix it!

During the heat of design and development it's certainly less demanding to code things for quick creativity that end up just wasting resources. Code that runs efficiently, however, is also code that allows for scalability. Raise the bar on the quality of your work: refactor those resource-hogs and take the time to seriously watch your application run.


Sunday, June 5, 2011

Artistic Targets


Unfortunately it's exceedingly difficult to be both a great painter of landscapes and a great portrait artist. Or to be an exceptional travel writer and an author of thrillers. For similar reasons, developers end up specialized toward specific targets, across the dimensions of both deployable device(s) and targeted subject matter.

Sure some of this happens because we get typecast, but mostly this is due to time limitations: to excel at user interface design or a particular IT subject matter you must invest the effort to become totally immersed and familiar with it.

Yet as an artist, it also benefits a developer to expand his repertoire to adjacent presentation formats and related business fields. This is easiest to accomplish at the fuzzy borders of both. When you are designing a web page, see if you can also do a "light" or a mobile version. If you are working on CRM development see if you can stretch into analytics.

The main benefit of this -- aside from the obvious increased skill set to offer employers -- is that (like an artist) your new experiences will cross pollinate with the old, making both stronger. This is only beneficial to a certain depth however: if you attempt to be a jack of all trades you will find that you are a master of none.