Do you feel it's a good career move to learn multiple platforms, or do you think it's better to choose one, specialize in it, and learn it deeper than you could two platforms?
views:
351answers:
19I'd say to go for as much as you can: learning is never a bad thing.
However, while you should learn as much as you can, focus on what you're interested in, good at, will pay the bills, and your employer (even if it's yourself) wants/needs you to use.
Let me clarify that focusing on just one or two things may mean you're going to be out-sourced as soon as that item becomes a commodity. Focus on what you need to do now, but be on the lookout for where to shift your focus in the future as new technologies emerge.
I would argue that its not so much an either/or answer. You want to be an expert at something. That's your bread and butter. But to be too focused is an issue. What happens when that one specialty of yours becomes obsolete? You've painted yourself in a corner. One solution I think is, FOCUS on what you are doing at your place of employment, but come up with your own project to learn something new.
Balance in everything.
it's always better to have a deeper knowledge - but also to be non-partisan and very aware of what is out there.
I've always maintained that the platform makes no difference at all - an excellent programmer will always be excellent on any platform. Once you've understood and mastered something it is often a case of looking up how it is done, because you already know what you want to do.
It also depends on what you are considering as the two platforms.
You should definitely specialize. When employers are looking for an "expert" on something, being a jack-of-all-trades is not going to do you much good.
That said, you should make a point to at least have a passing (possibly more than a passing) knowledge about several different, important technologies. Many employers also look for things like "senior C# developer, with a working knowledge of Java and C++."
It's good to know several technologies, but it's important to be an expert in at least one area. Be an expert in as many as you can, but you won't be a very valuable employee or contractor if you're not an expert at anything.
Having a broad knowledge makes you versatile; the trick is to know enough so that if you need to become an expert in a different area, you won't be starting from scratch.
I think it is definitely good to learn multiple platforms and frameworks. Development has alot of choices and often it is a matter of negotiating what you are willing to live with. Knowing other frameworks you can make better judgments regarding those tradeoffs. Perhaps one framework is much better suited to a problem domain than another and so knowing how and when to switch can be very beneficial.
I think you should develop a way to learn fast new platforms. If you know perfectly one platform - this is excelent, but your deeper knowledge is valid only for certain moment in time. The platform changes usually and you should be able to keep yourself up to date with those changes. I think the effort of keeping up to thate with the changes of one platform is the same as learning new one.
Personally, I think it's good to program for a lot of different platforms. For example, in a typical week I could be doing anything from Cocoa/ObjectiveC on the Mac to ASP.NET in VB.NET through to MFC C++.
The thing about coding on a number of platforms, is it means you can't blindly code - you have to think about each specfific platform and how to best use it.
It's also helps personal growth to see pros and cons from different platforms, and thinking about how you can apply that knowledge to other the platforms you work with.
I personally think that you can't specialize into something until you get enough experience and to get experience you need to learn more than one thing.
Compare to an athlete: Kids should try different sports until the are mature enough to specialize into some sport.
The rest is just motivation. If you want to rocket things into outer space you maybe need to specialize and there is only 3-4 nations that actually send people to space.
If you feel the need to do new and exiting stuff every month keep your brain sharp and keep learning new things.
Learning other languages and styles helps you within your "core" subject. For instance, learning a functional language is likely to help you to write clearer code in C# 3 and use LINQ more effectively. Learning C will help you understand what references in Java (and C# etc) are really like under the hood - ignoring all the GC, of course.
Even within one platform, there are choices to be made: I'm quite a generalist within .NET, not being particularly proficient at any of the "periphery" technologies (WCF, WPF, WinForms, ASP.NET etc) but having more knowledge of C# as a language and the core platform. I've found that to work well for me, but others will no doubt want to specialise in one client area, etc. What I think is important is that you're conscious of the decisions you're making - that you have a clear-ish idea of what you want to be better at in 6 months time.
Knowledge is always good, knowing multiple platforms/languages could be useful, but you should know at least one inside-out.
My boss says this over and over, "Don't get married to a language." He's been around the block, so I trust his advice. His explanation is this. Things change. Technology changes. Knowing one thing really well is good, but it will only get you so far. Pretty soon you'll get stuck with the places with legacy systems and that'll be it. Now a few people can make a real killing off of this, but for each of those people there are 100 that don't.
Here are some examples, Btrieve, COBOL, Delphi. Now I'm not saying these are bad, I've used all of them. They have their place, but they are out dated. The simple truth is that it will be a lot harder getting a job as an expert Delphi programmer than it is saying you are an expert php programmer. Sooner or later the expert knowledge you have will become old and less marketable. Learning multiple platforms etc. is like keeping your options open. Here's a way to think about it: being an expert C# programmer is great. Knowing Ruby probably won't help you get the super senior C# programmer, but it might get you a good Ruby programming job when you need to find a new place of employment.
IMHO you should pick one and focus all your attention on it, up the point that you can perform moderately difficult tasks and build products. Then you should study the "main competition" enough to understand the differences - i.e. enough to hold your ground in a debate - then go back to studying your specialty and learn it well enough to architect enterprise-grade stuff. This is where the big bucks are - Nobody pays $80K for someone who knows a little of everything but can't actually provide solutions.
It depends what you want to do, where you want to work and who you know. It also depends what your interpretation of 'expert' is.
For me I want to do fun creative stuff, but retain technical expertise. I use Flex/Actionscript, .NET, ASP.NET, Flash, Photoshop, SQL server on a daily basis. I could do a pretty good job convincing users of most of these that I was an 'expert'. [I have no desire to be a SQL 'expert' but can certainly get by].
I work for a friend (who I've known for years) who trusts me with all these things. I love being able to switch around and coming to stackoverflow when I get stuck in any area.
If you want to work at a large 'boring' company then the reality is you need to specialize more. If you want to work at a small 'fun' startup company then a wider breadth of knowledge is much more valuable.
Just remember to excercise caution when writing your resume !
Specialize, but do not lock yourself into it. Be smart enough to know when the trends favor newer technologies. Don't get stuck being the smartest guy in the room when it comes to COBOL but haven't the slightest clue about C#. And when you do specialize, keep up with the trends, techniques and emerging technologies in other languages and platforms. You can never be too informed in this business.
Other answers seem to focus on languages. I think of the hardware and OS when I think of a "platform."
You should definitely know more than one OS and CPU combination. If you are a Intel Windows C++ programmer, learn how to code Java on a smart phone, or C++ on ARM (there are emulators) or Windows or Linux on Itanium (more difficult to find hardware for).
I don't think that you can really appreciate portability issues like data alignment until you've coded for a picky RISC/EPIC true 64-bit CPU; or not using back-slashes in file names until you've used Unix, or the advantages of command-line scripting and network shells until you've broken out of your Windows IDE and had to cross-compile code onto an ARM and launch a unit-test script and remote debugger over its serial port.
WOW, lots of answers here.
I was going to write a blog post on a crux that relates to this and decided to search here first. So I will comment here.
I have over 10 years software dev experience. Microsoft and LAMP (mostly MS). And the answer is "it depends". And if "it depends" is the true answer then it would be best to specialize up to a point but also generalize at the same time. The bottom line, it takes time, and at first you need to specialize in some sort of platform then generalize.
By platform I mean "MS Web Dev" (asp.net, sql, IIS), "LAMP", 3D Graphics, Game Dev Tools etc. Hopefully that helps.
By specializing in a platform you can offer immediate value to the employer, your generalized skills can and will put you over the top of others! That part takes time.