34
votes

I'm planning on moving to NY in 6-12 months tops, so I'm forced to find a new job. When I'm planing to start my life in another city it's also probably a good time to think about career changes.

I've found a lot of different opinions about PHP vs .Net vs Java and this is not the topic here. I don't want to start a new fight about which language is better. Knowing a programming language is not the most important thing for being a software developer. To be a really good developer you need to know OOP, design patterns, testing... and a language is just a tool to make things happen.

So back to my question. I have mixed experience in IT - 1 year as an IT support guy (Windows administration and support), around 2 years of experience in embedded programming (VB.Net 2005) and for the last 2 years I'm working with PHP/MySQL. I have worked with Magento web shop, assisted in some projects in Symfony, modified few Drupal sites.

My main concerns are the following:

  1. Do I continue to improve my skills in PHP e.g. to start learning some major PHP framework like Zend, Symfony maybe get some PHP certification.
  2. Or do I start learning .NET or Java. I'm more familiar to .NET so I'll probably choose it if choice falls between .NET and Java ( or you could convince me to choose Java :).

Career-wise, I don't know what is the best choice. Learning a new framework and language is more time consuming then improving my existing skills in PHP. But with .NET you have a lot of possibilities (Windows 7 Phone development, Silverlight, WPF) and possibly bigger chances to find better jobs.

PHP jobs are less well payed then .NET, at least, according to my research (correct me if I'm wrong). But if I start now with .NET I'm just a beginner and my salary will be low. I need at least 2+ years of experience in some language to even try to find some job that is paying higher than $50-60k in NY. My main goal in the next 2-3 years is to try to find a job in the $60-80k category. Don't get me wrong, I'm not just chasing money, but money is an important factor when you're trying to start a family.

I'm 27 years old and I feel that there isn't a lot of room for wrong decisions regarding my career, so any advice will be very welcome.

Update

Thank you all for spending time to help me with my problem. All of the answers and comments have been very helpful. I have decided to stick with PHP but also to learn C# and Silverlight 4. We'll see where the life will take me.

5
  • Learn both. Start a project in each. it does not take that long.
    – Geoffrey
    Jan 14, 2011 at 14:03
  • Try Code Igniter. It is super easy to learn and well documented.
    – B Seven
    Nov 25, 2011 at 22:32
  • 2
    There's no harm to learn 2-3 languages.
    – Rudy
    Dec 29, 2011 at 10:42
  • Since this was bumped by someone I have to ask: embedded VB.NET? .. Aug 30, 2012 at 13:44
  • @SimonWhitehead it isn't exactly embedded but I couldn't find better word for explaining it. It was an application written in the VB.NET for a piece of industrial hardware (made by my co-workers and me) that was communicating with two DACs (data acquisition cards). Aug 31, 2012 at 7:05

13 Answers 13

63
votes

I'm 51 years old and have used at least 15 languages and/or frameworks since I got my first paying gig after graduation in 1987.

Bless you.

I never went into management because I didn't want to, but I know how to program and I know how to keep teams motivated and delivering good code. You need to work on people skills and look for interesting work that stretches you. I've never stopped learning or having fun, but there were times when I was on the road I could have done with stopping - but not coding, travelling.

As long as you can make a living and meet your personal commitments without compromising your principles, as long as you enjoy what you do (a luxury my parents' generation didn't have) just keep on keepin' on.

.Net and Java are generally corporate (because they're expensive to do useful things with, but scale really well), PHP is generally startup, I do Ruby (usually startups that came out of design studios for some reason) for lots of people as an independent. If you stick with PHP learn the OO stuff, because I think it will finally start being the way people do things, even though it is a slightly better reimplementation of what you have with Java and they could have made it much more dynamic. People who do Python and want to travel can end up doing all sorts of interesting scientific and gaming stuff all over the world. Perl is still a runner too and has a similar profile.

Forget the language, pick and industry you like, pick a company managed by human beings, and go have some fun delivering value to people who appreciate it. You won't regret it.

3
  • 9
    PHP is very weak on OO. It started off as a template language and it shows.
    – Benbob
    Nov 25, 2010 at 5:34
  • 5
    @Keyou, doesn't mean you shouldn't push the use of php OO features as it takes the language to another level :) Apr 2, 2012 at 12:50
  • @Keyo Who told that PHP is weak on OO for your information PHP OO now is very close to Java See PHP5.5 and it keeps improving
    – Hmmm
    Aug 14, 2013 at 11:12
118
votes

What on earth does the choice of programming language have anything to do with your career?

This question is like asking, "I have two choices for a place to work. Should I work at the one where the boss has a norwegian accent, or the one where the boss has a spanish accent?"

There are much more important career considerations.

  1. Startup or established company?
  2. Product company or company where IT is a support function?
  3. Will you be learning new things or rehashing the old?
  4. 9 to 5 or "work any 80 hours you want?"
  5. Nice co-workers or mean co-workers?
  6. Smart co-workers or stupid co-workers?
  7. Suit and tie or t-shirt?

This list could go on for hours. The choice of a programming language is just about as relevant to a programmer's career as the choice of whether to comb your hair to the left or to the right. It's all software development no matter what programming language dialect you happen to be speaking.

32
  • 19
    You have a point. But the type of programming language is in most cases closely tied with the company profile. In my understanding the PHP is mostly used in startup companies and major established companies uses .NET for their development. Nov 21, 2010 at 15:24
  • 29
    the real answer: spend a few months earning a five digit Stack Overflow reputation, and you'll be getting job offers in the $100K+ range without an interview. Nov 21, 2010 at 15:24
  • 37
    @Joel: as much as I love StackOverflow (and being a few weeks away from reaching a five digit reputation just for fun), if I ever get a 100K job offer because of that, I'll buy you a beer :-) Nov 21, 2010 at 15:29
  • 25
    For some people, the language has everything to do with your career. I'd love to work for lots of big companies, but not at the expense of writing a language that would frustrate me/reduce productivity. I'm not saying I'm only happy writing one language, but there are definitely languages I would not like to code in full-time, and it would be stupid for me to accept a job, for example, with flexitime writing Objective-C over a 9-5 job writing C#. You may not share this opinion, that's fine. But don't assume programmers that do are idiots. Your list of important considerations is yours. Nov 21, 2010 at 15:45
  • 39
    @Joel. Can I have a 100K job? I have a 5 digit rep and am currently unemployed. Nov 21, 2010 at 18:48
23
votes

Learn as many languages as you can, preferably at least one from each major area of development.

  • Scripted programming languages (you have PHP already, try Ruby, Python or something else)
  • Compiled to virtual machine languages with rich frameworks: .Net, Mono, Java
  • Compiled to bare-metal: C/C++
  • Functional languages: Lisp, F#, Haskell

Each one of these will teach you something about the fundamentals of software development. Of course, on top of that you'll need to experience different design approaches (OO, functional, data-driven), different team working methods (agile, tdd, compared to more rigid types), different platforms, different deployment mechanisms (native, framework based, web). The list goes on. Language fluency is just one tiny part of the whole.

For all these things, you need to make at least one real product using them to be proficient.

Some people will tell you you need to specialise in one technology (PHP, .Net, Java) and build a career largely around that one to make progress. I don't agree with this at all. I'll take a developer who has been around the block a few times with different platforms and technologies over one that has spent 10 years doing one thing any day of the week. The reason is that technology changes every year, and the developer who is capable of picking up a new tech, reading the API and applying their experience in more general ways than just knowing the library functions off by heart, will be far more productive in the long term. Ok, so that 10-year .Net veteran will be off the starting blocks in .Net faster, but that early lead is lost in about a month. It's irrelevant compared to the wider picture of being experienced in a range of approaches and technologies.

6
  • 3
    I would also add to your list, logic languages (Prolog), mathematical languages (which are a subset of functional as a rule) (Mathematica, R) , prefix/postfix languages (PS, Forth), assembler and hardware-based (for FPGAs and the like).
    – Orbling
    Nov 21, 2010 at 15:48
  • 8
    I agree... it's fun to learn new languages. But when you're trying to improve your general software development knowledge while learning new PHP framework and an additional language (C#) which you wish to use in the future, learning new languages for fun is not an option or at least not an option without major sacrifices in other parts of your life. Nov 21, 2010 at 15:55
  • 4
    I agree Christian, this answer is a bit extreme. But perhaps the takeaway from this answer should not be, "Learn a bajillion new languages right now or you can just kiss your dreams goodbye." It should rather be, "Yes, you should try to land a job in a language you're not familiar with, because that's a better career investment in the long-term." Plus it's the best way to really become proficient in a language.
    – Neil Traft
    Nov 21, 2010 at 17:31
  • 1
    @Orbling: you're right, the list wasn't complete, I just picked the main 'career' ones to avoid it becoming too daunting a list ;) Nov 22, 2010 at 10:02
  • 3
    As for extreme - I wasn't suggesting you learn all these languages in a year :) Since the question was in the context of a career, I don't think this is unrealistic at all. We all have to take responsibility for our own professional development, and even if you do one hobby project in a year using a tech you haven't used before, it'll help you a great deal. Open source is a great way to do this too, because it means you can be involved in a real project without starting from scratch, and get help from peers in the community. Nov 22, 2010 at 10:06
7
votes

I would suggest looking for a PHP job because that is what you do best.

I would also suggest you start educating yourself in the new technologies you want to learn so you can eventually start looking for jobs using those, but don't do it on a deadline so short because you will find that these things are huge and employers expect you to know enough of these behemoths to be productive. That requires time and practice. Do not underestimate the amount of time and amount of practice you will have to do.

To give you an estimate of what "I can program in Java" potential employee should be capable of, you can have a look at the Sun Java Tutorial. I would expect you to be familiar with at least half the concepts listed, where familiar means being able to use it in a program written by you, and use it correctly. I would expect it to take longer than 6 months spare time studying to reach that level.

12
  • 7
    6 months? really? The kind of programmers I hire learn the language and platform in their first week on the job, which is why I NEVER care what language somebody knows when they apply for a job at Stack Overflow or Fog Creek. Nov 21, 2010 at 15:26
  • 4
    @Joel, please note I am talking about picking up stuff in your spare time. Alone, without a mentor around. This might not be as efficient a way to learn new stuff as being physically in your offices with you and your employees around... Perhaps you will want to hire christian.p to prove me wrong?
    – user1249
    Nov 21, 2010 at 15:31
  • 3
    @Joel When your app is written in your own custom created language, you don't have much choice, eh! ;-) Nov 21, 2010 at 15:43
  • 3
    @Orbling. Isn't that a bit easy on them? Why not something like "please find and fix the bug in this BrainF*ck production code! Me and my 5 colleagues will watch you and time how long you take"?
    – user1249
    Nov 21, 2010 at 20:02
  • 5
    @Joel - I suspect that when Christian is looking for a new job in a new city that he will find that not all employers are as language-agnostic as you are at Stack Overflow / Fog Creek. Indeed I would hazard a guess that far from not caring what languages he knows, 95%+ will toss his résumé in the bin instantly if it doesn't match the correct language keywords. Nov 21, 2010 at 22:42
6
votes

I hate to seem like a troll, but the language you should learn is English. There are a bunch of errors in your post and that just looks sloppy. If I were hiring and that was your resume, I wouldn't care what programming languages you said you knew, I would assume that your sloppiness with the English language would carry over to your programming work.

It didn't appear that you are coming at English as a second language (I could, of course, be wrong) but there were enough grammatical and spelling errors to give most hiring managers pause. Since they are only going to see your written word at first, you need to get that fixed.

5
  • 6
    It's off topic, but thanks for the heads up. English is in fact my second language. Believe it or not (or maybe it's obvious to you) but I learned how to speak/talk English all by myself (without language courses). Nov 21, 2010 at 17:09
  • 3
    Since it is your second language then you are doing fine. Obviously have someone check your resume just to be sure, but I know that if I had to do my comments in French, say, it wouldn't be as lucid and well phrased as yours has been in English. Wasn't being snarky, just trying to be helpful. There are any number of Americans who don't bother with their spelling and grammar and it hurts them in the market. Nov 21, 2010 at 20:02
  • 1
    I know my English needs improvements and I'm doing my best to improve it. But I'm thankful for your comments because I know when I'm applying for a job it's the overall impression that matters. So if my writing is sloppy, it's gonna hurt my overall chances to get a job. Nov 21, 2010 at 20:32
  • 1
    Once upon a time, if you applied for a job through a recruiter, they would take the time to polish your résumé and make sure the spelling, grammar and overall style were correct. But I've recently been interviewing some candidates, and it seems that recruiters don't bother anymore, they just stick their logo on the top right corner and send the résumé on. So I'd recommend getting a friend you trust to go over your résumé and application letters/emails. Nov 21, 2010 at 22:45
  • 1
    @Carson63000 My experience of hiring through recruiters is that when they try to ‘help’ they often make a complete mess of candidates’ résumés. As a result, I had to give candidates with sloppy CVs the benefit of the doubt. Given the choice I’d have cut idiotic recruiters out of the equation altogether. May 31, 2011 at 20:19
5
votes

The long term answer to this question is basically what our esteemed host (Joel Spolsky) and Steve Streeting said. Programming at it's core is not about languages it is about using the computer to solve problems, and is a craft that must be learned and worked and thought about over time. Knowing how to code does not make one a programmer.

But you asked a pragmatic and time-sensitive topic .. what should you do NOW?

I suggest that you dig into PHP until the move. Dig into it, hard, really hard, 20 hours a week outside of work hard. With PHP it is pretty easy .. get a hosting account and a domain and start building apps. With focused effort, 6 months is an eternity. Over that time, get to be really good at it. This will help you find a good job once in New York, and will very likely make you a better programmer to boot.

BTW .. if you didn't know already, there is an IT employment site in the StackExchange family.

THEN, when the life transition has settled down a bit, begin following Mr. Streeting's playbook and educating yourself about the craft of programming rather than the trade of coding. Use some time outside of work to read and do things on other platforms and with other tools.

1
vote

I think the primary point is, eventually a software engineer should get to the state where the language is largely immaterial to the task at hand, except in its limitations.

Whether you know a language or not should not make a difference, providing you have a manual, only to speed for the first day or so while you find your bearings.

Having said that, proprietary languages tend to have less documentation and examples spread around the web, and thus are harder to become accustomed to and pose a problem if you wish to take your work home with you.

2
  • 3
    The language is rarely hard. Learning the ecosystem and best practices my take quite a while...
    – user1249
    Nov 21, 2010 at 16:00
  • @Thorbjørn Very true, it can take some time to acquire best practice within a language. Though that very much depends how you learn it, some languages are a lot harder than others to find information on.
    – Orbling
    Nov 22, 2010 at 0:09
1
vote

My advice is to find a job doing what you are interested in, and enjoy doing. If you enjoy PHP, why not continue to develop your PHP skills. It is much easier to learn and develop skills doing something that you are interested in.

Have you ever looked at .NET or Java before? If not, that might suggest that you aren't interested in those languages, but perhaps you could spend a week or so looking at each and see for yourself whether you are interested in either.

1
  • I'm familiar with Silverlight 4 and C# (also I have 2 years in VB.NET 2005), that's the main reason I'm thinking about switching. Nov 21, 2010 at 16:00
1
vote

Short term; I don't know what the hiring practices are in the US, but considering you are moving in 6~12 months I would, for the time being, consider sticking with PHP since you have two years of experience with it.

My experience here (in the Netherlands) is that companies tend to have a very short term focus on technologies and framework experience. The language is really not -it-, even if they are asking "3 years of C# experience" they mean to say "3 years experience with the framework/class libraries and tools you'd be using with C#".

(Otherwise, why they want to hire anyone needing 3 years to learn C# syntax and language features is beyond me. It sounds like someone I wouldn't want to hire.)

Learning new languages; static, dynamic, functional, is of great value when it comes to broadening your perspectives. However learning the relevant class libraries and way of doing things in that language will require experience.

I'd recommend coming to a decision picking one technology stack and learning it deeply. Use the other environments for inspiration.

Of course personal preference comes into play also. For instance, while there is plenty of market for it, I would never ever accept a PHP job :-P I choose a stack and I job hunt based on that.

As for making a career, long term, I think you should look beyond coding (in the end it's all about learning and being able to read and/or skim documentation) and the technology of the day and look more into soft skills and such. Technologies come and go rather quickly. Of course there is a lot to learn when it comes to good practices and more general know-how, unfortunately they are rarely looked for on the job market in my experience.

1
vote

I think that often people mix programming languages and frameworks/technology stacks. It's relatively easy to learn a new language, but's much more difficult with big technologies. I agree with some answers that what is most important is your overall programming/problem solving experience, but I don't believe that anyone can UNDERSTAND a completely new technology in 1 week.

Sure, a large portion of developers have never read a single technical book and don't understood the very building blocks of technologies, they are using. They just hack their way out of the problems and are very "successful". I have myself started career in PHP without even understanding how HTTP works at first. But some employers, which I respect most, are expecting a deep understanding of "how things work", simply because this tends to increase chances of success of their projects.

The very least you need to do to gain this understanding is to read couple of GOOD books with enough time to prototype solutions to common problems in a new unfamiliar development environment. Is it possible to do in a week? I would love to work with people who are capable of this, but I don't hope to see such people any time soon.

Some employers actually are ready to give you enough time to gain this understanding, respecting your overall deep technical experience in other technology stacks (if you have one), but unfortunately most are not.

Also, when you are changing technologies, what is most important is your personality - how humble and curious person you are to spend enough time to understand how things work and how things are done in your new area.

So to sum up, my answer would be the following. Pick a technology, which has enough potential and which (most importantly) will make you happy in your job. Specialize in this technology, the job market will value this and few years needed to get your target salary will be worth it. But never be overzealous, spend some time with other technologies, it will make you a much better PROFESSIONAL overall.

1
vote

I have to agree with Joel. But his answer goes beyond technical skills and preferences.

In my experience it's usualy your job requirements that point you towards a specific technology or programming language, not what you would like to use; unless its a startup that has not defined what they are going to use yet. And no one can guarantee that you will find a job/company utilising exactly what you are looking for.

So the real question is: are you good in learing new stuff? can you address a problem and solve it in a timely manner regardless programming language?

A good programmer should be well aware of software construction and software engineering concepts. Your question makes me believe that you haven't invested enough time towards learning those, which probably makes you uncertain of your skills and what your actual potentials are. And honestly, if you haven't done that its about time you do, because without those you will probably not go far.

There is another thing that most of us programmers tend not to give any attention to before we get older than 30: Programming skills is only half of the skills that make a good programmer. Are you a good team player? Are you willing to pass knowledge to coworkers as willingly as you are (or should be) receiving knowledge from others? People skills are higlhy underestimated by many of us, while they are actually very important.

1
vote

I disagree with most comments listed on this board.

Apart from learning software engineering principles and theory, the language you choose to master is a career choice. That's why there's Java programmers and PHP programmers. PHP programmers are probably not going to be working for NASA and Java programmers are probably not going to be working for a web shop.

If you want a job in corporate America, you're better off going the Java/.Net. Good income in you can get in but be prepared to donate your life to them (time wise).

If you want to be an independent freelancer, and live in the fast lane with web technology you're better off with PHP. A lot of work here but the pay varies greatly and being independent is work itself with every Tom, Dick and Harry with an idea trying to hire you for pennies.

There's some overlap with PHP and Java but only seen in Corporate jobs (Java REST Services with PHP front-end) however you will not find web shops or independent freelance work anywhere near Java.

Both require a lot of time and dedication if you want be useful in any given situation.

To be a competent and sought after PHP developer you need a bag full of skill sets. Chances are you'll be expected to know CSS, HTML4/5, and most definitely Javascript DOM/Ajax/Jquery plus at least a viable framework such as Zend (corporate America's taster's choice), Codeignitor, cakePHP, etc.. and then you'll need to know the "big three" CMS's: Drupal, Wordpress and Magento. Get these skill sets under your belt and you'll be a PHP specialist with the ability to land work anywhere you go. As you can tell, taking all this in is a devotion to a language and it's tools 'cause learning Perl isn't going to help you be an expert Drupal or Zend developer.

The same goes for Java: OOP, J2EE, REST/SOAP, Spring/Struts, etc.. and it's fleet of other tools that take years to masters.

Has anyone here tried coding Java for a year and then gone back to PHP (or any scripting language). It's difficult. It feels awkward.

I work for a fortune 500 company and Java developers would not be able to do what PHP developers do and PHP developers would not be able to do what Java developers do. But they both do well financially 'cause they're specialists in their field, their language of choice and the spew of tools that come with it.

0
votes

Language and platform are not that important. Learn solid people and comp sci skills. A lot of people have said this but haven't given specifics so let me do that. Here are some things to learn

  • algorithms and data structures.
  • concurrency
  • machine learning
  • systems level programming
  • information retrieval and search engines

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