I find it interesting that although programmers will try to pick up as much general knowledge as possible in the field, most eventually find a specialty that suits them well. If you were to say you have a specialty, what would it be, and how did you choose it?
views:
367answers:
14Specialize in not being too specialized. Otherwise your knowledge will soon become obsolete. The reality is that these things change over time. Years ago I would say I specialized in the Linux / Open Source space, and now I have specialized in the .NET / C# space mainly because that is what my employer uses. If I were to recommend something to specialize in, I would recommend researching proven design patterns.
Right now I'm leaning towards game development for mobile devices. I see everyone around me with some type of mobile device often playing games. I think mobile devices in general will continue to become popular. Also it's an excuse to sell fun, relatively simple games.
I'm wondering if deep WPF/Silverlight would be a good specialty. It's capable of alot more than meets the eye if you really know it well. (Lotta ins, lotta outs, lotta what-have-yous...)
Right now, I'm specializing on staying up to date with what is going on the in respective development fields.
I'm much more specialized on the web side of things now, and with all of the new items coming up, I've found that the only specialization is to specialize in being a learner, and being willing/able to adapt.
When I was in high school, I got some really good advice from an alumnus-- find the thing you like doing, and become very very good at it. So I'm specializing in image processing, because it's the thing I really like doing. The trick then is to find the aspects of programming which reflect that fundamental goal. So, templates because I can process images of many different bit depths. Factory classes, to generate scanners and image capturing devices of many stripes. Threading, to make responsive programs, even when running something which requires minutes to run; not the fastest of things, but something to experiment with.
So, find the thing you really want to do, and then learn the skills required to do the thing you want to do.
Specialise in compilers and type systems. That way you'll be inventing the things that the generalists need to know, and providing a new specialty for the specialists.
Functional programming has really caught my eye.
I probably don't even understand the basics but when I see C# language features like delegates, linq, and lambdas I get a little exited inside. Plus I'm also dabbling with Python.
Its kinda like peeking down a low cut shirt.
"oooohhh... I wonder whats in there..."
If I were to specialize now I would specialize in a popular and useful language. I've found that once you understand a language very well, it's really easy to transition that knowledge to particular programming packages, paradigms and even other languages.
Now to the flamewar choice on what language :)
The smarty-pants but ultimately correct answer is to specialize in solving the customer's problems for them. It doesn't always involve code.
I consider my specialty to be debugging. The worst problem I ever saw? An OS (who shall remain nameless to protect the guilty) that started scheduling a newly forked process before it was done populating its internal data structures about the process. This meant that certain system calls would return bogus values for a certain number of microseconds after a process was started.
If I could do it all over again, I would absolutely specialize in graphics and graphics modeling.
It is an area that has continuing research and growth, and you can do interesting work with it. It can also be fun, and rewarding as a career :)
Here are a couple of links that might prove useful to you:
"Generalist or Specialist: Why not Both?"
A generalist species is able to thrive in a wide variety of environmental conditions and can make use of a variety of different resources (for example, a heterotroph with a varied diet). Specialist species can only thrive in a narrow range of environmental conditions and/or have a limited diet. Organisms do not fit neatly into either group, however. Some species are highly specialized, others less so, while some can tolerate many different environments. In other words, there is a continuum from highly specialized to broadly generalist species.
and "Why Strengthen Your Strengths?"
Scenario: "Dude, I'm not seeing success in: __. I'm going to do something completely new. Yay!"
It's a cycle that viciously spins like a bald orangutan on Viagra:
- "I want to do something new!"
- "I'm not seeing results. Ahh!"
- "I want to do something new!"
- "I'm not seeing results. Ahh!"
- "I want to do something new!"
- "I'm not seeing results. Ahh!"
- Yadda, yadda, yadda.
For what it's worth, I tend to specialize in something until I reach a certain level of mastery, then I move on to another area. For the most part, the skills that I have developed have been complimentary, so I've never had to completely throw away the knowledge that I gained at any point.
Specialize enough to get/keep a job. Learn as broadly as you can otherwise to allow you to have a deep understanding of the entire computing space. Only learn the TLA technologies if you need to - their self-life is poor. But understand how they came about and their principles.
I'd say that I'm a Web Developer specializing in some Microsoft web technologies, e.g. ASP and ASP.Net. It wasn't so much that I chose this as it is what I was put into after university and have settled into it, working with former Microsoft employees initially. I enjoy designing and building web applications for people to be able to do things.