views:

371

answers:

13

Although I have seen many similar questions here, my question is specific to my profile.

I am a CS master's student with pretty good course and internship experience in OOP, UML designing, knowledge of design patterns, version control (Subversion, SourceSafe, TFS) and automated builds (FinalBuilder), bug tracking systems (Trac, JIRA).

I am pretty good at data structures and algorithm coding. During my internships and part-time jobs, I first learned and then worked on PHP-MySQL, Ruby on Rails, .NET(LINQ to XML), some web designing(XHTML, CSS, JavaScript). Currently I am developing win mobile apps using .NET compact framework and OpenNETCF smart device framework. At school, I have developed number of apps on Java SE/ME platform.

I will be graduating soon and I feel that I have become jack-of-many-trades-and-master-of-none. I feel l have learned something in many things, and I should master in some of above mentioned technologies.

For example, I feel I should

  1. Learn ASP.NET and .NET 3.0/3.5, because I already have pretty good experience with .NET 2.0/compact framework. and focus on learning T-SQL in depth.
  2. Learn J2EE technologies, and strengthen J2ME skills on mobile platform. Use JUnit extensively, focusing on test-driven-development.
  3. Learn some scripting languages like Python or Perl.
  4. Get mobile development experience on iPhone, Android platforms.
  5. Get better development experience on Linux platform (most of my development work is on windows)
  6. Focus on PHP-MySQL and Ruby on Rails, CSS, JavaScript (Its been quite some time I have worked on these)
  7. Just focus on basic algorithms and CS concepts. Know C, C++,Java/C# very well.

Based on my background, which of above mentioned or other skills I should master or develop, to stand out and have more options in job market?

At this point, I feel I am little out-of-touch with web development, and enjoy developing for mobile and desktop platform.

Thanks in advance for your help!

Edit 1:

Hi guys! Thanks so much for your answers, I really appreciate your help. I completely agree with Ed's response that I should focus on what I like. But lot of things depend on current job market.

The problem with me, is whenever I have worked in above mentioned technologies, I did like them a lot. I did things outside work, built some utility programs on those technologies. But then I lost touch with them, and some other work/technology came up.(e.g. first time I learned Ruby on Rails, it really blew my mind. That was probably the first time I really GOT MVC. It was amazing how fast things could be built using RoR). Not keeping touch with those technologies, is definitely an error from my side.

But at this point, considering the fact that I will be graduating soon and I need to focus on some areas, which areas should I focus on to get better/more opportunities, as an entry level developer. (BTW I am residing in Dallas-Fort Worth metrolplex region)

Thanks again for your responses, I would like to hear more from you...

A: 

Ok, so you have an education, it's time to get some practical skills. Whatever you do, learn something Web-based and lots of things fit into that category (Java, C#/ASP.NET, Ruby on Rails, PHP, Python, etc). It doesn't really matter which as there are jobs in all of them.

Pick one that interests you and write some code.

cletus
Ugh, "whatever you do learn something web based"? I can't stand web development, give me some hardware and a C compiler. Web development is not for everyone.
Ed Swangren
Cobol on Cogs is web-based. Should he learn that? :P http://www.coboloncogs.org/HOME.HTM
Mark Rushakoff
Actually, I would wonder why anyone would get their master's degree in CS who wanted to build web apps. Seems like a waste...
Ed Swangren
There are an ever decreasing number of jobs that have nothing to do with the Web. Like it or not, agree with it or not, it's still the case.
cletus
@Ed Swangren: A waste of what?
recursive
I won't downvote, cause it's a valid point but: There are an ever increasing number of jobs in web development that have very little future in them. Too much contracts; not enough jobs.
SnOrfus
+1 because there's no reason to downvote a perfectly legitimate response to a "career-development" question. If you'd said something like "become a male stripper", you *might* have deserved a down-vote (although maybe not, in this economy).
MusiGenesis
+8  A: 

At this point, I feel I am little out-of-touch with web development, and enjoy developing for mobile and desktop platform.

That is a key part of your question I think. Instead of thinking "which technology stacks should I learn", I would think "What do I want to do?". If you can answer that, the path you should take will become clear. Want to work in embedded systems? Better know C and how to deal with hardware as well. Want to write desktop apps? .NET or Java would probably be a good start. I'm sure that you are beyond these basics, but my point here is to think about what you want to do and the rest will come naturally.

Ed Swangren
I totally get your answer. But my question was from getting a job point of view. Which of the above mentioned technologies will be easiest to learn/master and practice based on my current knowledge and will be most fruitful while entering the job market. Based on my current experience, I have mainly enjoyed working on challenging projects(For e.g. my current research work with windows mobile devices deals with building mobile social networks), where I got to learn or do something more than ordinary. I would like to continue to do so after I graduate.
CuriousTiger
So the idea is to learn particular technologies, that will give me more options to choose from in job market.. Thanks for your answer. Do let me know what do you think..
CuriousTiger
A: 

Focus on finding a nice real problem to solve. This is the only way you'll be able to apply everything you learned so far. Getting a job would give you that, as well as getting involved with an open project of your liking. In my experience having real life experience is what makes you stand out on the job market.

Otávio Décio
+2  A: 

You seem to be familiar with the basics so any specialisation should be driven by your interests or requirement in the job market in your area. Any of you own suggestions are worthwhile.

The one thing you probably lack most is experience. So, why not join an open-source project that regularly releases new versions and has an active user community. This way you earn some experience and demonstrate ability in creating production quality code within a team and to a release time frame. Most graduates have very little to show there (student projects don't count).

Carsten
+2  A: 

Focus on development process and program design. Its the most useful skill because process and design is often overlooked by tertiary education.

The choice of programming language largely depends on which company you get a job at. Its not a good idea for a fresh graduate to try to learn everything on his own.

However, with that said, its kinda hard to get a job if your resume only says you can design software. So i reckon, you need to polish up on some programming as well.

Off the top of my head, i say learn .NET 3.5.

Andrew Keith
+2  A: 

Work on your people skills. How you interview and how you relate to people is going to be probably the most crucial factor in getting your first job or two.

slugster
that is a good advice. thanks!
CuriousTiger
A: 

I would say keep up with the new technologies. In my neck of the woods, WPF, WCF & MVC is highly desired. If you fancy chasing the $ cow, thats it.

Zac
+1  A: 

Now time to focus on the one or to things you are really passionate about. Your passion for them will propel you forward to being very knowledgeable and effective in those areas, and you will be happy because you are passionate. This is a virtuous cycle.

Alex Baranosky
+2  A: 

Pick what you like the most, and get a job in that ASAP. No matter what you study or how earnestly you study it, 8hrs/day of forced learning/practice with other devs will take you much further than any of the studying you'll do on your own.

I just got out of school a year ago, and I've learned 10x as much in this passed year than I ever did in the 7 years I was in school (3yr diploma program + 4 yr degree program).

SnOrfus
+1  A: 

Your post shows a focus on technologies and programming languages, those are generally learnt on the job and are relatively easy to learn once you've got the basics down.

What you should be working on is learning software engineering and people skills which are important when working with a team, with non-programmers, on a schedule and developing maintainable software. Testing, documentation, good version control techniques, communications, task/bug tracking, estimation, separation of concerns, encapsulation and so on.

Anyone can be taught Java or .NET or CSS but those who work well with others are harder to come by.

Schwern
+1  A: 

Not sure about CS as a whole, but the one graduate course I took required a paper on top of doing all the other undergraduate work. It also involved writing a thesis which should have some statistical analysis.

You've built a broad base of experience. Seems like where you would want to live and the available jobs are going to drive your decision more than anything.

Jeff O
A: 

Learn some scripting languages like Python or Perl.

If you already know some Ruby on Rails, why not just go with what you know and do Ruby? I'm confused about why you'd throw that experience away.

Benjamin Oakes
not throwing it away. Many companies look for Perl, Python skills.. thats why..
CuriousTiger
+1  A: 

If you want to see what skills are hot in your market start talking to recruiters and checking out the job openings. Use those to determine where you need to focus your learning efforts until you graduate if you want to stay where you are. Right now you should be at the gaining experience level and not at the "I want to try out another new technology level" Pick something and go deep in it and get some practical experience in an open source project. People with Master's are generally hired as specialists not entry level business application devs, so specialize now.

What were you hoping to have gained from a Masters? The answer to that may be key in deciding what type of job you want to look for.

HLGEM