Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've got a question similar to this one: Is constantly looking for code examples a sign of a bad developer? though not entirely.

I got off college 2 years ago and I'm currently struggling with a University study. Most likely I'll have to drop out and start working within the next couple of months.

Now here's the pickle. I have no speciality what so ever.

When I got out of college I had worked with C, C++ and Java. I had had an internship at NEC-Philips and got familiar with C# (.NET) and I taught myself how it worked.

After college I started working with PHP, HTML, SQL, MySQL, Javascript and Jquery. I'm currently teaching myself Ruby on Rails and thus Ruby. At my university I also got familiar with MATLAB.

As you can see I've got a broad scope of languages and frameworks I'm familiar with, but none I know inside-out. So I guess this kinda applies to me: "Jack of all trades, master of none.".

I've been looking for jobs and I've noticed that most of them require some years of experience with a certain language and some specifications that apply to that language.

My question is:

How do I pick a speciality? And how do I know if I'll actually enjoy it?

As I've worked with loads of languages how would I be able to tell this is right for me? I don't like being tied down to a specific role and I quite like being a generalist. But in order to make more money I would need a specialisation. How would I pick something that goes against my nature?

Thanks in advance, Rope.

share|improve this question

closed as not constructive by Walter, Ryathal, Jeremy Heiler, gnat, Joel Etherton Jun 8 '12 at 16:07

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

2  
You are going to have a pretty hard time finding work after dropping out and not having much in the way of tangible proven skills...and even if you do it will likely be at significantly below the median pay rate. Should just finish school if you have the ability to afford it. –  Rig Jun 8 '12 at 14:48
    
Maybe my school system is different from that in the U.S. and I used "College" wrong. But I do have what would translate to a bachelor degree for IT. –  Rope Jun 8 '12 at 14:51
2  
Ah, that may change things I guess if you have the equivalent of a 4 year degree. You know, you don't have to have a specialty if you can sell your ability to accomplish the task. This question might offer some views on that. programmers.stackexchange.com/questions/93676/… –  Rig Jun 8 '12 at 14:57
    
Ah yes. I didn't find that one when I was searching for similar questions. I guess you've got a point. I think I'll just give getting through University one last shot and see if I can get the money to pay for it. Thanks a bunch :D! –  Rope Jun 8 '12 at 15:07
    
I am in a similar situation as you, Rope, with the slightly more concerning lack of a bachelor's degree. Thank you (and thank you to the responders) for the helpful question. –  jmlane Jun 8 '12 at 15:59

4 Answers 4

Have a look at Scott Ambler's article on Generalizing Specialists

It should give you some ideas on where to start and how to better market yourself.

Generalizing Specialist: A Definition
A generalizing specialist is someone who:

    Has one or more technical specialties (e.g. Java programming, Project Management,
 Database Administration, ...).
    Has at least a general knowledge of software development.
    Has at least a general knowledge of the business domain in which they work.
    Actively seeks to gain new skills in both their existing specialties as well 
as in other areas, including both technical and domain areas.

Generalizing specialists are often referred to as craftspeople, multi-disciplinary 
developers, cross-functional developers, deep generalists, polymaths, versatilists, or 
even "renaissance developers".  
share|improve this answer
1  
Wow. I never really thought of it that way. I really like that train of thought. Thanks! –  Rope Jun 8 '12 at 15:16

You might come to realize that sometimes you don't pick your area of expertise: it picks you. Whether you liked it or not.

That's not the case for everybody, but it's often the case.

I'd say just focus on the language you have the most fun with at the moment AND the language you seem to be the best at, and keep learning and coding away.

Expertise comes over time.

Bad habits as well, though... keeping an open mind is key.

share|improve this answer

I think "Jack of all trades, but master of none" is far better than "Master of one, other languages: none"

You learn the logic and process flow of many different languages, and start to see the logic and algorithms behind the syntax. A good programmer spends far more time thinking about how to code something, and how to code it well, than they do actually coding.

To me, spending all your time in one language limits your growth and potential, while learning many languages will only make you much more valuable of an employee, because you start to see beyond the syntax and to the actual logic of what makes code work and work well.

Sure some companies say X experience in Y language, but often if you can demonstrate that you've had X experience programming, and have sufficient knowledge in the language Y to do the job they're asking well, it's not a problem.

So use whatever language is the best fit for whatever job you are doing now, and don't hesitate to branch out and learn new languages as needed. Remember, the best programmers are the ones who are always learning :)

share|improve this answer
    
This might be of some concern to me. I tend to just write code quickly and get everything working and afterwards look for improvements. But I guess I do that because I'm more often than not trying to grasp certain aspects of a language and getting into it, results into me getting a better grasp. Afterwards looking for improvements I could have done only improves my skills I would think, right? It's just that I don't write down any architectural constraints before I start with one of my little projects. I'd very much like to get to know how to construct architecture though. –  Rope Jun 8 '12 at 15:26
1  
@Rope That's actually the best way to start when you're new to programming. Focus on getting stuff done first and learning the language, and once you have a solid grasp of what you're doing, then start thinking more about architecture and design patterns to make your systems more robust and easier to maintain. Your comment actually makes me think of something I wrote recently for my blog that you may be interested in reading :) –  Rachel Jun 8 '12 at 15:46
    
+1 to the comment for the shameless self promotion <jk> :-) And I would go read, except the workplace's filters block wordpress. :-( –  GlenH7 Jun 8 '12 at 15:55
    
I read through your blog and got the main points out of it. I actually know most of the things you are talking about. I work with Git most of the time to keep my source nice and tidy and keep track of changes. The only thing I did get taught at school was Testing but I don't remember much of it because I thought it was tedious and boring. But that was not unit-testing I believe. I just looked it up it's called TMap or something? But I forgot most of what was taught in that class. But it might be useful when I start an actual job :). Thanks for the insights by the way. –  Rope Jun 8 '12 at 15:58

Since you've worked with some languages already, you should have a general idea of where your favourite areas lie. Scripting languages? Low-level programming? Web development? In any case, a "specialization" can be guided, but will usually develop naturally just due to the kind of projects you work on during your career.

When you see a job listing that appeals to you for whatever reason, apply. First, they might exaggerate their requirements. If they don't, you will at worst give them one more CV for the bin. Second, if you can demonstrate with previous work that you can quickly pick up a skill, it doesn't (or at least shouldn't) really matter how much experience with a particular technology you have. And third, let them try to find a better applicant, if they can. As long as they don't find one, you're still in the race.

Finally, don't worry too much about whether you will like a job because of the tools you will use there. Nice colleagues, a friendly atmosphere and creative freedom are (in my limited experience) far more important to a good mood throughout a work-day.

share|improve this answer
1  
You've got a good point there. I'd rather work in a small flexible team with people I like than concern myself with the tools they use. –  Rope Jun 8 '12 at 15:18

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