views:

1010

answers:

10

I recently quit my job. It felt like it was time to move on, and I had been offered another opportunity anyways. However this opportunity is only for this coming summer and after that I am going to need to find another job. I will possibly be looking for a job in the web development space, however my web dev skills are a bit out of date. I'm a PHP programmer but I never really got into the OO part of PHP which seems to be the popular thing now. I'm a novice with ASP.NET/C# and also Python (atleast from a web dev perspective) and I took a glance at Ruby once... My question is, really, what should I spend my time focusing on learning over the summer so that I can be the most marketable when it comes time to get that new job?

  • What language is the most popular now and possibly for the next few years?
  • Is there a specific style/way of programming in that language that i should focus on? (ex. MVC)
  • Are there any really popular frameworks for this language that would be very beneficial to learn?

[EDIT] I'd like to make it clear that i have a decent bit of experience in OO development and also with the .NET framework itself. I've done some C# desktop development, I'm just new to the web space with that.

+3  A: 

I would say that C#.Net and ASP.Net is very popular and has alot of demand on the market.

And by learning the .Net Framework you expand your expertise to other platforms such as the desktop platform, silverlight and the compact framework.

At this point, MVC is still gaining traction, but most of the demand is in ASP.Net webforms.

NOTE: Learning VB.Net is not a bad idea as well, as it has alot of followers too. And having both languages on your belt is a plus.

But to take full advantage, you will need to learn Object Oriented Concepts as thats what the .Net framework is built on and is very popular in the development space. This will make you a better programmer in the long run.

irperez
+15  A: 

I'd focus most on underlying concepts and CS fundamentals. If your OO exposure is limited, that sounds like a great place to start. The more solid your foundation is, the easier it will be to learn new languages, and adapt to new environments.

Rather than focusing on making you're up to snuff with the buzzword of the day, I'd instead focus on what's going to make you a better programmer 5-10 years down the line.

Some specific stuff I'd focus on:

  • OOP - if you want to work on serious software, web or otherwise, having solid OO knowledge is key. This means both understanding the concepts (ie, what's inheritance, what's composition, why would you use one over another), but also developing good design sensibilities: how do you break a real world problem down into objects (particularly an abstract problem that doesn't necessarily have obvious objects to begin with), as well as developing a sense of what sort of designs are easy to maintain, and which are a real pain (ie, how much inheritance is too much inheritance, and when do singletons really get you into trouble).
  • TDD and unit testing - if you want to write really good software, it's crucial to know how to test it well. Test driven development is a great tool in your toolbox, something you can take with you across a variety of languages, and if you approach it like a game, can really be a fun way to develop.
  • Network protocols - Many web developers don't know how HTTP works, which can be crucial when debugging web applications. If you're one of these developers, it'd be worth your while to sit down and learn a little bit about how HTTP works under the covers. Get to the point where you can make a simple web request using telnet, and where you can debug a web application using a packet sniffer.
Scotty Allen
I agree. In most CS focused job interviews you do not get grilled on specific technologies. You get grilled on algorithms and problem solving skills, they figure if you can do these two things well than you can pick up any technology.
spoon16
Unless he exclusively looks at small companies he still needs to get past HR. Working on Java or .NET will get him past HR ... working on .NET will likely get him past the .NET programming interview.
Jess
+3  A: 

If you just want the best chance at getting a job, learn C#/ASP.NET. Corporations that hire .NET developers typically expect less experience then companies looking for Java skill set. Those looking for Java developers seem to have a more seasoned team who scrutinize your background more - 3-6 months of tinkering around won't get you a foothold in a java shop (in my experience at least).

If you know .NET and php, you probably have a chance at over 60% of available web development positions. Unless you're in silicon valley and have lots of contacts with startups, don't worry about Ruby. It's a neat language, but open positions in Java or .NET still outnumber Ruby jobs 10:1.

Jess
+1  A: 

In this market I would stick to what you know. If you are most comfortable in PHP you should stick with it unless you are interested in learning something new.

What's most marketable and is your skill level in a language, not the language itself.

To answer your questions specifically:

  • What language is the most popular now and possibly for the next few years?

All of the languages you mentioned are growing in popularity and will be around in some form for many years. In addition, experience you gain while using one language will often transfer over smoothly to another.

  • Is there a specific style/way of programming in that language that i should focus on? (ex. MVC)

MVC based design patterns are becoming popular in almost all web development languages in some form. Make sure to use recently published books and resources when learning a web development language, old resources can become outdated very frequently.

  • Are there any really popular frameworks for this language that would be very beneficial to learn?

I know that Python and Ruby both have a primary web development framework that you will learn if you plan to use them for web development. I am less familiar with frameworks available for .Net and PHP.

Gdeglin
+4  A: 

1: C#/ASP.Net, but learn enough VB.Net tutorials to get through dimming a variable so you can add that dialect as well. The not so secret "secret" of the .Net world is that a very large percentage of corporate .Net environments still use VB.Net, and they aren't interested in anybody with religious convictions against it! Throw sql server in the mix and you have opened yourself up to a world of opportunity.

2: Have something to show them. A small site hitting a database, using a little ajax (link to the easiest ajax ever!), and a pretty skin.

Number 2 get's you hired so fast it makes your head spin. Number 1, if you learned enough, helps you avoid looking like a loser in front of your co-workers once you have that great web job! :)

[EDIT] To be clear - neither of the above makes you a good programmer, but it does get you hired!

Cheers!

Aaron
A: 

Here's a different take on things: you could make yourself marketable by getting really good at integrating some popular CMS (Joomla, Drupal, WordPress, ExpressionEngine, etc.).

There is a lot of demand for people who can get small businesses up and running with content management and blogs. You could carve out a niche writing plug-ins as a way to market yourself.

Just an idea.

Andrew Hedges
+10  A: 

Many of the answers above are very good. In addition though, speaking as someone who has hired (and let go) of several web developers there's a skill that seems to be missing from the above answers.

Learn to be a great team player! It's the worse to work with someone who thinks they are really great at what they do and doesn't work well with others. Make it clear to any potential employer that you :

1) understand that regardless of how talented you may be, if you can't get the job done you're not worth much.

2) Most everything is accomplished by a team of developers and you like to work in those environments

And beyond that, given the dynamic nature of web development and the fluidity by which developers are able to create their own style, make it an expressed interest that you'd like to learn their processes and are willing to adapt to their preferred methods and environment.

Killer...

jerebear
This is an excellent point. I've worked with cowboys who got in over their head and managed to nearly sink the company because they were too proud to let anyone sniff around their code. Stinky! People skills are quite underrated in our profession.
Andrew Hedges
Absolutely. This point can't be emphasized enough. Listening skills are highly underrated, also.
Jack BeNimble
"many of the answers above are very good" - tends to happen when answers are sorted by score, yes.
Konerak
+3  A: 

I write this starting from the beginning.

I agree that a solid OOP is the first place to start. However, you should familiarize yourself with design patterns, because not all OOP is wholesome goodness.

I would then look at Uncle Bob's book "Agile Principles, Patterns, and Practices in C#". This book is explicit and leaves nothing to the imagination, which as a beginner you need.

Design patterns tend to be difficult. You really don't get them until you do them. Academically, these probably should be first, but I found them to be useful after I read the Agile book.

Martin Fowler and a few others have additional topics you need depending on the direction you go. Eric Evans teaches us Domain Driven Design, which is also great. DDD is a high level methodology. I would attempt this after you are proficient in Agile. This is more binding consulting to programming, but so is Agile.

And, if you like Rob Conery's Mix speech, don't forget about having fun and pounding out code (that is always in perfect form of course). His MVC Storefront video series will make your head spin. The casts are like reality TV. You will see how he applies these concepts, and how the world responds.

The ultimate advice no matter what the subject is it's ok to bend the rules after you master them and have good reason to do so. Take them for granted, master them, then decide. A lot of these concepts, like Test Driven Design, you won't get until you actually do them. Before TDD, I would program several cases and see which I liked. After TDD, I programmed the best one first.

Good Luck.

Dr. Zim
+2  A: 

No single skill will help you meet the whole market.

Perhaps look at strengthening what you have. You could look at a couple of php frameworks, not because they will be able to get you a job but to further understand php and its uses. You will get a practical opportunity to understand OO and you might interview at a place that uses one the frameworks (always look for maximum reuse).

Leah
+1  A: 

Even though a lot of companies themselves lack knowledge, mention and know-how of these will certainly set you above the run-of-the-mill web developers simply because they bring so much value:

  • HTTP stuff like headers (etag/expiration, x-requested-with, content-type/mime types etc ), verbs (put/post/delete/get), optimization (reducing round trips or payloads, compression) and so on. HTTP is finally getting the attention it deserves.
  • RESTful apps along with JSON, POX, SOAs, open/web APIs and all that jazz
  • Tools of the trade like wfetch/fiddler, firebug, wire framing, svn, build systems, ...
  • Performance stuff like spriting, minifying, file coalescing, script tag order, db caching, server/client caching, CDNs, ....
  • JavaScript ninjas now command respect because of RIAs so pick one of jQuery, ProtoType, Ext or Dojo. Being on par with a lot of crockford's videos on javascript in my opinion is essential too
  • Frameworks are also getting increasingly mature and useful because of the productivity gains they offer. Within PHP for example there is Symphony, Zend, CodeIgniter, Kohana and then some platforms like WordPress, Joomla which can all jump-start your project

In terms of marketability, the newer, flashier technologies like Ruby on Rails, ASP.NET MVC, Linq, Hibernate and other TLAs (Three Letter Acronyms) such as TDD, DDD, ORMs are getting a bit of attention (probably for good reason) and in years to come, they may put you ahead of the curve.

Going for breadth is one thing but over the years you'll want to have depth in a few niche areas. This would include have a following of developers however small, within a niche area. You could build plugins, tools or actively contribute to an open-source project.

aleemb