28

I'm working as a software engineer, and I have a total experience of one year and six months. For the first one year, I was working as a Web developer with PHP and JavaScript. With my interest I was working with Java for the past 6 years, like I learned it from my school days.

I thought I should get a job first, and I joined as a Web developer with PHP. This helped me a lot. I really got to know about PHP, JavaScript, HTML and CSS. I even worked on Java at part times with other company. Now at the place where I am currently working, I am used with all the technologies I know (above mentioned), and I learned Android. I am said to learn ActionScript, and its increasing with learning new technologies like iOS. I feel this is too many things! I feel like I am doing wrong.

Now I am really worried about this -- whether it's going to have any bad impact on my career growth. Learning new things is really good, but I really want to go deeper and deeper (especially with Java) in one thing.

I really want to know whether working on different technologies affects my career or not, or is it an advantage. Is it good to continue on this path or change careers and focus on a single technology?

7
  • 8
    The core question here is generalizable to all technology fields and is in fact a really good question in my opinion. Though, I suppose answers are fairly directed towards software at the moment.
    – enderland
    Jan 8, 2013 at 14:42
  • 1
    The question could be generalized to fields outside technology, but as stated it's "localized" to software development.
    – GreenMatt
    Jan 8, 2013 at 18:55
  • This exchange houses such a bad attitude at times. Ignore these silly comments.
    – wberry
    Mar 28, 2014 at 17:32
  • 1
    This is a variation of what skills should I learn and thus off topic. Jun 25, 2014 at 13:54
  • My current software projects at work use: ARM assembly, C, C++, Java, Python, Bash, Perl, SQL, JavaScript (Angular+node), GNU Make, and probably a few others. —— That's not including the tooling for my hardware work. —— If projects are broken down into simple components, then learning the "right tool" for the job is quicker and easier than using the wrong tool. —— For team projects, it's important that everyone speaks the same (programming) language, which meant me teaching some GNU Make and Bash to half the team, but for other stuff - use whatever works. —— I'm actually a C/C++ guy. Nov 15, 2016 at 18:22

6 Answers 6

56

In my experience working for a company with a startup mentality, focusing too much on one single platform, stack, or technology could be detrimental, and we're always learning new stuff, especially since technologies change so quickly.

There is still the occasional developer I encounter on the Internet who focuses his or her energies on ten year old technologies that are outdated and that are slowly fading away.

Depending on where you're working and what your career goals are, you may find better successes demonstrating that you're capable of quickly acquiring, storing, recalling, and processing knowledge of new technologies and using that knowledge effectively to build great things. Employers that fit this category, such as the startups and small businesses, seem to prefer applicants who are diverse and who possess these traits.

Now, even if you work for a company that focuses on a single technology, whether it be small business or enterprise consider that while Java is a great platform that most likely isn't going away anytime soon, it's still a good idea to diversify for another reason: When you learn other programming languages, you begin to connect the dots together much better and more thoroughly master certain concepts. Now, I'm not a Python developer, but just spending some time playing around with some Django demos helped me understand more about what servlets in Java do, since Django solves this problem in a slightly different way.

In short, if you're knowledge is more diverse, you'll gain more problem solving skills that will help you succeed working with your language of choice. Don't limit yourself by not at least dipping your toe in the water and at least familiarizing yourself with other technologies.

I also want to add that this isn't true just for programming. If you're an automotive technician who specializes in Toyotas, but you've also worked on Ford, Chevrolet, and Honda, you'll probably be a better mechanic, a better problem solver, than someone who just works on one particular Make/Model. Seeing things from a different perspective is key to becoming an expert in your field.

3
  • 10
    Your answer had made me have a relief for my life. Wish I had a chance to give you +1000.. Thanks a lot @jmort253.
    – Vinay
    Jan 8, 2013 at 8:58
  • 4
    +1 for "Seeing things from a different perspective is key to becoming an expert in your field." Mar 3, 2013 at 2:35
  • In short: The opposite is rather true. I would also add that focusing on just one technology will turn you basically useless when it becomes obsolete
    – David
    Jul 9, 2019 at 13:37
28

Your motto should be "Jack of all trades, but master of (at least) ONE".

While it is good to learn various technologies, I think you should also focus on one technology and go deeper into that and master it to the best of your ability.

Once you have a deeper understanding of a technology you will be able to appreciate the advantages and limitations of various technologies. This will make you a more matured technical person who can appreciate why someone chooses a particular technology.

As you get more experience, it would also help you to know more about the various operating systems (OS), the hardware they run on, why a company chooses a particular technology/OS/hardware etc.

Ultimately you will soon realize that a person who is technology agnostic and who can easily pickup new languages/technologies and who can be productive within a lesser time will be the most sought after.

To give a different perspective, let us say for e.g. I am in a restaurant business as a chef who specializes in Chinese cuisine. While I try to excel to the best of my ability to master the various aspects of Chinese cuisine, it would also help me to understand other world cuisines like Italian, Indian, Japanese etc. This would not only help me to be more useful to my restaurant as a versatile cook, it would also help me to experiment with my core skill of Chinese cuisine and make it better or try something completely new. At another level in the same restaurant, I can also try to dabble in working the tables, handling table reservations, handling customers, their egos and their orders, working as a cashier, handling the suppliers etc. The skills learned in these areas could help me go into a completely different role as a restaurant manager or may be start my own restaurant.

2
  • 2
    thanks a lot. Its really making me feel so happy that I going in the right path. Got to know because of you guys
    – Vinay
    Jan 8, 2013 at 11:54
  • 1
    Hey seeknew, this is a great answer. +1, but do you think your assessment can apply to other fields as well? If you can edit your post and possibly add a paragraph on that subject, we can use the answers to this question in determining more definitively whether it would be on-topic or off-topic (and a possible candidate for migration to Programmers SE). This isn't required, of course, but if you can add a generalized perspective, I believe it may help us make the argument that the question can stay. :) Good luck!
    – jmort253
    Jan 8, 2013 at 15:36
9

There are mulitple career paths open to every developer and which one you choose is up to you.

There is the Jack of Trades - this person knows the basics in a lot of technoligies and specializes in learning new things quickly. They tend to cluster around the parts of theindustry where change is most rapid and often are found in start-ups.

There is the Expert. This person goes into depth in at least one and sometimes two or more technologies while still gaining at least a basic knowledge of the surrounding technologies. This is the person who will eventually want to write books and do presentations about his chosen technology. They often end up as consultants.

There is the Specialist. This person tends to concentrate on only one technology and one that is less common than what the Expert learns. These are the people who are database programmers, statistical language programmers, etc. They tend to only work for large organizations that can afford to have people who are specialists. Specialists tend to make more money than Jack of All Trades but their job opportunites are more limited.

Then there is the Subject Matter expert. This is person who rather than specializing in one language, specializes in one industry or type of work such as embedded systems or Finance. They learn in depth about their industry as well as whatever programming languages they need for their jobs. They see programming languages as a tool to get a particular job done, not as an end result in itself. They often work in fields where a lot of business knowledge is needed to write good programms such as in accounting software or medical programming.

1
  • I like this answer but too sugar-coated. Jack of all trades master of none. With a large income difference between SME and JOT. An architect will make bang, but that requires at least five years of heavy involvement in one language/subject.
    – paulj
    Jul 1, 2021 at 11:16
2

Some good answers here.

In general, there are multiple tech career paths. Some rely on specialized knowledge, some rely on broad general knowledge.

Which to choose is really an question for you and your own personality. Some people love to spend 20 years focused on a niche area of technology and becoming the experts on it. Provided that niche area doesn't become obsolete, odds are you will always find a job.

Some people (like myself) hate doing the same thing day in and day out and thrive wearing multiple hats. It can be frustrating never having an expertise, but I've found that people are always looking for my type of skill set (generalist) and it's worked out for me.

These are often called T-shaped and I-shaped people. T shaped people have a deep knowledge of one area, but can communicate broadly across other areas of knowledge. I shaped people tend to be experts in one area and one area only, and prefer not to venture out of that.

0

Since you asked from a career perspective: In my experience on both sides of the hiring table, having a wide range of programming experiences is most often helpful, not harmful, and for a range of reasons:

  • Technology changes all the time, it's more useful to be a good learner than tied to a single language.
  • Many hiring managers are not actually tech savvy, and just like to see a "laundry list" of popular technologies.
  • In many roles you actually will need to work with multiple technologies.
  • Even if you don't, some employers will want to keep their options open.

With that said, make sure you're honest about what you know and what you don't know. Nothing gives a worse impression in an interview than not being able to answer basic questions about a technology you've listed on your resume. A good approach can be to list your level of competency in parentheses, as follows:

JavaScript (expert), TypeScript (beginner), Java (intermediate)

The other caveat has been covered in other answers --if you don't have any one area that you have expertise in, that can be problematic. In that case, however, the problem isn't your range of skills, its that you aren't an expert for any of them.

-2

You say you have a "total experience of one year and six months." You're very new to this field, and therefore my advice would be this: Don't specialize too early!

You may be interested in how Java works in it's internals and may think that this is what you want to do for a long time, but there are two problems:

  • How can you know you want to specialize in something, if you don't get in touch with other technologies?
  • How should you become an expert when you lack of so much contextual knowlegde?

By the latter I mean that computer science is a field where many things are connected togehter: If you really want to understand how the memory management is handled internally in Java, then it's probably good to know how it is handled in C programs. Same with multi threading, servlets, databases and so on. If you want to be a pro at something, make sure to at least get a good understanding of other basic concepts as well. I've learned so much by programming in C and learning what an OS kernel actually does, that it really helped me to become better at anything else computer related; be it networks, programming, security, and so on.

So don't narrow your expertise after only 1.5 years of experience, this is WAY too early.

1
  • 2
    this seems to merely repeat points made and explained in a prior answer posted more than a year ago. Note one of the rules for answering at this site is: Don't Repeat Others
    – gnat
    Jun 25, 2014 at 12:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .