|
Why
New Developers Should Consider Contracting
By Max Pool
A lot of young and talented developers are continually
looking for new projects and problems to solve and gain experience with;
however, there are very few single environments that provide the
ability to diversify and grow. Most jobs consist of working on legacy code
where there is very little architectural “wiggle room”. As a
result, many developers feel the need to move to a different job or
environment to get to the next level of learning.
While job hopping is one way to gain diversified
experience, may I offer an alternative - contract work.
In hindsight, one of the fastest ways I matured
as a software developer was through the experiences I had while working
with a consulting company. Why is this? A few reasons:
Many New Projects (And A Few Old
Ones)
Opportunity for a diversified workload is probably the biggest
reason contract work is a great environment for learning. The
opportunities for new projects and clients come fast and furious. In fact,
in my experience I rarely was on a single project for more than 6 months
(and even then, I was working on different client projects on the
side).
The ability to start with a clean slate every 2-3
months is priceless. I always joke that the only code I am proud
of I wrote less than 6 months ago. It’s for this exact reason, I got in
the habit that I got to learn from every project mistake and continually
get better.
Old projects exist as well (and this is OK) as it allows
for developers to also learn how to maintain legacy systems. Brainstorming
how to introduce unit tests into a Lotus Notes application can be a very
daunting (but rewarding) task. Not every project gets a clean slate at the
end, which is a great equalizer in terms of learning to write maintainable
code.
Different Problem Domains
With different projects comes different problem domains. It is insanely
fun to be building a restaurant’s blog, then to go to a meeting about
blood pressure machines, and finish the day off with learning about
retirement funds. Don’t get me wrong - it can be exhausting…but it is
enlightening.
Probably one of the coolest domains I ever worked in was
I had the opportunity to write an application that physically moved a HUGE
dirt shovel for a coal mining facility. What an awesome domain!
Physically coding with a hard hat on, in the middle of a strip mine, and my
code is moving a 2000 ton machine around - can I get a hell ya?!? These
opportunities do not present themselves often if you work for a company
solely focused on one business domain.
Architectural Responsibilities In
most consulting shops, you are the lead developer, architect, and tester.
Although being your own tester sucks, the trade off of being your architect
provides unbelievable experience opportunities to implement the patterns
and architectures you see fit.
Probably the hardest thing to gain is wisdom and insight
of architecture. When to use them, when not to use them, when to use them
but then break them. Different projects, different domains, and the
responsibility to pull it all together provides the opportunity to gain
this experience quicker than most job environments.
Learning To Deal With People
With consulting comes dealing with clients. Thankfully, I never had to
deal with any assholes, but communicating with people is a skill that takes
a lifetime to learn. If you do not learn how to talk to clients, you
probably also don’t know how to talk to your boss, manager, or even
spouse. Consulting forces you out of your dark corner, even if it is just
in small doses.
Being a consultant is what you make of it. If you decide to be a hermit
that never talks to clients and always decide to solve
different problems with the same solution, you probably will not learn
a lot. If you decide to sharpen your skills as a communicator
while experimenting with different technologies, patterns, and
architectures consulting might just be a good fit….
Until next time,
Max Pool
To
read more of Max's work, visit his blog.
|