10

I have been a professional developer for just over half a year and have been amazed at how big the world really is out of college. I have continued to learn in my free time but I am wondering where should I focus?

FOCUS 1) The development stack used by my company. Quickest payoff in my day to day development. #Deepest

FOCUS 2) A different language with the same paradigm. See if I can generalize my knowledge and way of thinking.

FOCUS 3) Different language, different paradigm. Expand my borders and learn new ways to do things. #Broadest

If anyone has a different focus feel free to put that out there.

6 Answers 6

18

Yes.

I would say that you need to do both. Start with #1 as that has the immediate payoff, and you haven't been doing this for very long. But you definitely need to do some of #2 and #3.

4
  • Good plan, making myself immediately more useful will increase my value in the company while the latter two will increase my value as a developer in general. Dec 17, 2010 at 16:06
  • Exactly. Although I think you'll find that over your career, making your self valuable as a developer in general will also increase your value in the company. The payoff can be a couple of years though.
    – Marcie
    Dec 17, 2010 at 16:09
  • 1
    Maybe the answer should be "Both" instead of "Yes". Looking at the title of the question and the answer, I'm confused.
    – Amr
    Dec 17, 2010 at 16:42
  • 1
    I have found that as I learn a new language or paradigm, I become more effective at #1 - I believe this is because having a broader experience gives you different perspectives on how to solve a particular problem. Same lesson learned as: If you only have a hammer, every problem starts to look like a nail.
    – Astra
    Dec 17, 2010 at 16:52
26

When people ask me for career advice your question is one of the first questions I ask them. I don't think anyone can answer this question for you; I think you have to decide for yourself whether focussing on depth or breadth is more likely to meet your career goals.

When I last changed teams I had two opportunities: to work on the XBOX developer tools team, or to work on the C# compiler team. I realized that it came down to breadth vs depth. On the XBOX team I could work on security systems one day, audio systems the next, video, networking, hardware interfacing, you name it. Sure, some people are experts, but everyone has to know a bit about everything. On the C# compiler team I could dive into one language and one compiler and really understand the whole thing in depth.

I gave it a lot of thought and decided that I was more tempermentally suited to being an expert on one thing rather than a dilettante at many. That was a good choice for me, but it might not be for you. Some people are highly successful knowing a little bit of everything.

My advice therefore is to turn the question around. Figure out what kind of person you are, and then see if your company has opportunities for someone like you. If not, find one that does.

1
  • In hindsight of who you are, this post is, really, epic. :)
    – ashes999
    Nov 15, 2013 at 15:15
13

Being a specialist can make you more expensive. But job opportunities requiring that high level will be limited, both in their numbers and geographically.

Being a generalist perhaps pays less but opens a wide variety of job opportunities to you, potentially around the world.

Also for higher level and managerial jobs it is preferred to have a person experienced in a variety of things, techniques and technologies. Knowing edges and being able to see a big picture makes you a valuable asset.

1
  • Oh, I didn't even think past my current employment (although I hope this will be a long term sort stay). Dec 17, 2010 at 16:03
3

I think at your stage of development, getting some depth is the first priority. I see too many people who know a little bit about a bunch of things but can't get past doing entry level work because all their knowledge is entry level.

If I wanted to be a specialist, clearly, building depth is the best first choice.

If I want to be a generalist, build depth first (get to at least intermediate level) in one stack and then branch out to other languages. If you build some depth first, you may find it easier to build depth in multiple languages as you have more concepts available to you and know more of what you might want to learn. Then I would branch out a bit into something else. Then come back and build depth to the advanced level, then branch out again and learn more things that are very different from what you already know. Then expand that depth in a different area to an intermediate level, learn something else again, etc.

Caveat - I'm a specialst so I clearly favor depth of knowledge

1

Both options have their place. Focusing on the development stack used by your company will help you in your job, but learning about other technologies will help you in your career.

In the late 1990s, COBOL skills were in high demand by companies needing to prepare their software for the year 2000. But anyone who still knows only COBOL today will have a much harder time finding work.

In the same way, today's technology will be obsolete long before most of us are ready to retire, so learning new skills and technologies is essential.

0

Go ahead and learn something like Haskell or a Lisp. Learning a functional language has really though me to decouple my code, making it simpler to debug overall. The only problem you might encounter is that you don't want to go back.

http://book.realworldhaskell.org/read/

http://lisperati.com/haskell/

http://learnyouahaskell.com/

2
  • That's correct, learn functional programming, as for me, I vote for OCaml or F#
    – 0xFF
    Dec 17, 2010 at 17:50
  • F# would integrate well with C# or other .net stuff you are working on. Just something to keep in mind. Clojure works well with Java. Dec 17, 2010 at 19:06

Not the answer you're looking for? Browse other questions tagged or ask your own question.