views:

82

answers:

3

Considering that I believe that the best way to effectively gain experience with a given technology is to work, how do you make the decision between "I'm implementing our next project in x because we need to" and "I'm implementing our next project in x because I want to/think it's awesome"?

I get that it's about using the 'best tool for the job' but all you have to do is look around at all of the fanatical debates about what the 'best tool' is. Given that I can develop my next work project using [example: .NET 3.5] without a learning curve or I could implement it using [example: .NET 4] which WILL have a learning curve plus any potential deployment issues (deployment dependencies for eg) that would have to be worked out as well.^1

I can see the argument for learning in your spare/free time, and I do that because it's fun, but it's not nearly the same as being forced (or forcing yourself) to learn a technology for a project, that you're getting paid for, which has a deadline.

1> I work in the MS Stack, so the examples could just have easily been WinForms/WPF, WebServices/WCF, EntLib/NHibernate or even paradigms like Waterfall/Scrum etc. I hope you get the picture.

A: 

There is another side to this. Sometimes using existing software can force choices to be made. For example, using the latest version of a CMS may force the development to be at a particular framework level so that there isn't a choice here. Same can apply to using a particular version of a database server software.

JB King
+2  A: 

Your question is quite difficult to answer as it often comes down to the nature of the environment you work in. If the company supports progressive development and values staying at the top of the technology stack then your decision on which components / framework to use becomes more your responsibility. If however you are working in a financial / service orientated environment whereby the emphasis is pushing out client work in as short a time as possible in order to meet client SLAs and deliver within budget then it's more likely you should emphasis the reuse of well understood components and experience.

If this sounds overly familiar then perhaps you should consider changing the environment you work in?

If you cannot afford to change jobs in the current climate then perhaps another way to stretch your skills is to create a couple of side projects. Set yourself some challenges that are completely different from your day to day development tasks. That way you will generally find the extra development effort on your own time to be more fulfilling and interesting as you are not only learning new technologies but also gaining new insight into alternative methods to previously understood practices / approaches.

Another possibility would be to approach your company with the purpose of training in new technologies. That way you can determine a suitable business case and schedule it in properly outside of any normal delivery periods. That way the company doesn't feel a need to pressure you into delivering in a product rapidly as you've already arranged the time away from normal development duties and you get the opportunity to develop the companies / your skillset as deemed required.

Brian Scott
+1 for the recommend to approach the company with the purpose of training in new technologies. It's an elegant solution to dovetail the interests of the company and individual edification, provided the new technology does afford some gain for the company (I can't think of any reasonable cases suggested where it wouldn't).
Robert Hui
A: 

For software engineers, one's reputation for good judgement is as important as one's technical ability. If an engineer can't be trusted to always optimize for customer or project success, that engineer's reputation will be dominated by "requires close supervision", independent of skill level. This is career-limiting; once lost, trust is difficult to regain.

To expand expertise in a particular technology without compromising integrity,

  • join or undertake a project where the use of that technology is justified by the problem or domain

  • participate in an open source project that employs the technology

  • initiate a complementary side-project that employs the technology, e.g. improvements to in-house tools

Dave