views:

377

answers:

19

I am programmer from a Linux/Unix background with experience in Perl, Java, Sybase, Oracle. I recently switched jobs and now I am working on C#, ASP.NET, Classic ASP and SQL Server.

Do you think you have to pick your camp and stick to it, or can you effectively live\work in both worlds?

Comments from people with experience would be helpful.

I know Joel says find your thing, specialize and don't generalize but what do you think?

+3  A: 

I think exposure (and limited experience) to both worlds has proven very valuable to me. I recommend dabbling outside your comfort zone.

Seeing this in new grads during an interview is a big plus.

Michael Haren
+1  A: 

I think it is valuable to have experience with many different systems. By specialising too much, you miss out on the opportunity to learn about how other people do the same thing. You also keep your future opportunities open - you won't have to turn down a job just because it's in an area where you have absolutely no experience.

I'm more of a generalist. I wouldn't want to specialise too much.

Greg Hewgill
+1  A: 

Specializing will help you get your next job. Being a generalist will make you more useful in the one you already have.

For the record, I work with both (but I haven't done GUI in Linux yet).

Mark Ransom
A: 

More knowledge is always a good thing. If Microsoft tanked tomorrow, would you still be able to find a job?

Ed Swangren
+9  A: 

Of course you can and you should be able to reasonably inhabitate both worlds.

I'm much like you and find myself bringing things from the Unix side to the Windows side (cygwin, unixutils, perl) to compensate for some of its deficiencies, but, as time passes, I'm continually finding the native way to do stuff and getting more proficient in both platforms. A particularly weird moment is when you start carrying back to Unix some of the Windows ideas (not very common, but has happened).

There are many core issues that are applicable in both worlds, and it's best to have experienced them to know what tools you have at your disposal on each side.

If you pick a side you'll be actively limiting yourself for a dubious gain. That's not to say that if you're currently working on the Windows side you shouldn't dig deep in the platform while this job lasts, just that you shouldn't refuse the next Unix gig because you learned a lot about Windows in the previous one. Just try not to forget :-)

Vinko Vrsalovic
+1  A: 

For some things, particularly job marketplace-wise, having one or more areas you're more "specialized in" might be good. Personally, I rather enjoy being able to work with a variety of different technologies. I'm usually doing a little bit of .NET, Java and the occasional C++ stuff, plus I'm trying to learn Python and Ruby and other stuff on my spare time. And yeah, regular user of both windows and linux.

It's also interesting to know that for some areas, having a broad, general knowledge of many different tools technologies can actually be a big asset. For example, I've done quite a bit of application integration (EAI) work, and you run into so many different systems and such different tools. Being a strictly-one-tool guy and doing EAI just doesn't mix :)

It's a fine line however, between knowing at least one thing well and a bit of many others and just having superficial knowledge of many things and no deep knowledge of anything at all. That can be quite more dangerous.

And finally, remember that a significant portion of core software development knowledge and practices is the same regardless of tools. Good design / functional / OO principles, TDD, configuration management, algorithms and all that stuff always applies.

tomasr
A: 

I think that in general having a broader base of knowledge will pay off in the long run. While it is good to specialize, continuing to understand several different languages and various operating system enviroments will continue to benefit you in the long term.

If you ever find yourself in desperate need of work, being extremely felixable and knowledgable in all aspects will give you an edge for any prospective employer.

Myself personally for work spend most of my time in VisualStudio with C# and MSSQL. When I have some spare time at home, I'm usually in Eclipse, developing using Java and MySQL.

ShaneB
+1  A: 

I can't see why you have to stick in one camp. I spend my day coding C#/.NET and evenings coding Objective-C. I think it keeps you objective(ahem) and allows you greater perspective than rapid fans of the "one true platform".

I find it's nice to switch between each. Change as good as a holiday and all that.

KiwiBastard
+2  A: 

I have several virtual machines running on a MacBook Pro, including Windows Vista, XP, Ubuntu Linux, and Fedora.

It's certainly possible.. I guess the value of it would be specific to each user. As a software developer, it seems like you'll probably have more of a reason to use several platforms than an average home consumer.

I also believe that there may be some value in being familiar with different flavors if you work in HCI, because it may help you to keep aware of the subtle differences in behavior between the interfaces of each system. A good UX designer with whom I used to work always used one platform at the office and intentionally used a different platform at home, specifically for this purpose. ..Just a thought.

keparo
A: 

If you read Reddit at all, you'll know that you can only use Linux if you want to be a Microsoft bashing troll.

Thank goodness for StackOverflow and real rational people

(Btw, I use XP, Vista and Ubuntu)

FlySwat
+4  A: 

Absolutely you can straddle both worlds.

In fact I think that the use of the word "both" is too limited in scope.

I know that there are people who believe that programmers are basically typecast by the environment that they're working in.

I believe, and can say from some experience, that the more areas of programming that you're exposed too, the more you realise that programming is just programming - no matter what environment you're in, no matter what market you're in, no matter what scale you're on.

The only thing that changes is the details.

Andrew Edgecombe
Good point... I forgot the mainframe world and the Mac world.... and well all the other stuff
Brian G
A: 

Depends on your goals... if you want to master programming, you need to become "multi-lingual" across many dimensions.

If you're content with being "highly proficient", you can stick to one language and ride it quite a long way.

ryw
+1  A: 

I made a similar switch not to long ago. I moved from linux to windows. It was a difficult transition, because I still find it difficult to manage a machine without conf files. Linux usually puts a whole configuration in one location.

However, fundamentals of the request cycle for web apps, tcp/ip, databases, does generalize pretty well. There will certainly be some ramp up moving from one platform to another, but many companies use windows stuff, so it won't hurt of spend a couple years experiencing it.

Nathan Feger
+6  A: 

I love the concept of linux, really I do, but I find that a lot of tools simply don't exist on linux yet, or that I prefer the windows versions. Plus, I really like the windows concept of an "Add/Remove Programs" thing, or even the idea of a central control panel, so that I don't have to edit lots of configurations scripts to make something simple work as intended.

So, I actually do live the best of both worlds. (OK, second best because its Vista and not XP, but what can I say, I'm just hoping that Windows 7 is actually decent and fixes most of the Vista issues.) Here's how:

I use a nifty program called "andLinux" to run the linux kernel inside a windows process. This allows me to run windows as my native operating system, meaning that windows programs work fine as intended. I can also run linux programs and not only do they show up in "windows" windows, I can even copy/paste between them like they were on the same OS. (Remember, the linux programs are actually running on linux, which is running as a process in windows, so they all behave properly.)

This, I've found, actually works better than the reverse, which is to main linux and run windows through Wine. The reason is that windows programs tend to have much more complex requirements, and I generally have more success with them (especially the internet/3D requiring ones) on their native OS. Linux programs, because they cannot rely on certain features being in the kernel, but instead require on those features as an additional package that can be installed on any kernel, are thus much much more portable, and don't suffer when run under andLinux. In fact, I prefer to use the linux version of Apache, since trying to run a windows web server gives issues with lots of things, like the fact that windows uses forward slashes for directories.

The only other thing that I really prefer about linux over windows is the general desktop environment. Linux desktops generally all have built in support for virtual desktops (no native windows version has this) and usually offer the ability to to customize the menus far far more than the windows taskbar. For this, I use a program on windows called "SharpE" (google "sharp environment" to find it) which replaces the Windows Shell and, even in its default configuration, behaves very much like a linux desktop, while still allowing you to access everything on your windows PC through it.

The major plus to all of this for me is, windows has superior support for most devices. For instance, I can actually use my dial up modem in linux this way, even though there is currently no linux driver for it.

I feel that this is the best of both worlds. I use linux apps where needed, and windows apps where more convenient, or when its just what I'm more used to, and neither one really gives me any problems at all. The best part is, if the linux kernel crashes, I just restart the program. ^_^ Hasn't happened yet of course, but the safeguard is there.

Just my opinion and experience here.

-Nicholas

Nicholas Flynt
Have you tried Ubuntu? It addresses at least some of the things you complain about in your second sentence. I like Linux, and Ubuntu has made many of the things I don't want to spend time on quick and easy.
David Thornley
+1  A: 

I think you young whipper-snappers have read to many "overly politicized" technology blogs.

They aren't "worlds".

They aren't "camps".

The world is where the people are, and they have data collection / analysis / business problems to solve.

Computers are the tools of your trade and pretty much any combination of current hardware / OS / language / methodology can be used to solve those problems.

The more tools in your belt, the wider the range of problems you can solve.

Ron

Ron Savage
Thank you for making me feel younger :D
Brian G
No problem. :-)
Ron Savage
+1  A: 

I used a lot of linux until I got a job, and wrote software to be used by other people.

That said. . .you should know some unix. For instance, we had a desktop app that the client was happy with, but they wanted it to go into a more serious production mode. We had to convert it so that they could run it in batch on a unix system. This demonstrated the benefit of keeping the engine separate from the interface.

One of the beautiful things about a language like python is how portable it is.

I've no experience writing for macs.

Baltimark
+1  A: 

In some domains, most OS's are more or less the same. If you limit your self to stream IO and internal processing you will notice little different between Linux and Windows. Most of my programs fit in this envelope (many omit the input side even) and I have got a fair bit done so it still encompasses it's fair share of programming. YMMV

BCS
+2  A: 

Yes!

And, there are many other lucrative worlds to straddle, and many tools work cross platform.

  • custom hardware: embedded systems, controllers, manufacturing
  • game consoles: XBox, Wii, PlayStation
  • phones: Ericsson, iPhone, Blackberry
  • Mac OS X, BSD
  • handhelds: Windows Mobile, Palm OS

just to name a few

Mark Stock
That is true the world is expanding... Android is coming out and there will be alot more people coding phone apps if google has its way.
Brian G
A: 

You can. And you should.

Once you mastered one system it will be much easier to learn the next one. And once you mastered two the third will be almost simple.

A good developer is somebody who can read a specification and API documentation and work from that. The more APIs and different architectures you have worked with, the easier it will become to just look at the docs and understand them.

When I started as a game developer 2 years ago I knew nothing about the DS and the Wii, but I had worked with a lot of other systems and dozens of libs/interfaces/APIs, so it wasn't difficult at all.

Writing code that is portable across multiple platforms usually leads to writing much cleaner and better planned code. At least after the first few tries.

The big drawback is that you sometimes will get confused about semantics. It takes me about a day to get back into pascal coding (I now and then have to fix very old code), but when I switch back to C I tend to put BEGIN and END everywhere.

Once I caught myself putting semicolons at the end of each line ... in a ruby script.

Some staffing people will simple toss you out of their shortlist for "not being specialized", but these are the people you probably don't want to be working for anyway.

Andreas