views:

1077

answers:

14

I'm mostly happy working in my c# job, but when I browse job listings (particularly startups), it seems that the positions I personally find to be most interesting require lots of experience with a linux stack, c++, and python. I coded in c++ for a few years (it was my first programming language), but that was nearly a decade ago. The job postings I see all "require" years of experience.

More important than just the job, I actually rather enjoy coding in c++ and python. I like how low level c++ feels and I love how python lets me get lots done. But beyond tinkering, I know I don't have a professional level of proficiency yet.

I also fear that my Microsoft-oriented background will be, for these sorts of jobs, a black mark on my resume. Should I play-down that experience at the risk of looking like I haven't accomplished much over the past years?

I don't mind the current economy too much, since I expect such a transition will take at least a year or two. How can I build the skills and more importantly, once I have the skills, how can I show potential employers that I am qualified?

Are there any fields that need programmers with a combined c#/c++/scripting language skill set?

Are there any fields where a c# background would be the natural pool of experience to draw from for a non-microsoft technology?

+13  A: 

Pick up some open source projects and start reading the code and contribute. That is good to put on your resume I suppose

kal
+6  A: 

Develop some plugin for a open-source project, contribute in open-source forums... I think your c# work wouldn't be a black mark for a serious employeer.

Sorry for my english!

Matias
+1  A: 

A Microsoft-oriented background is not a bad thing....its a good thing.

Jobo
Well, I'll agree that it's not a *bad* thing, anyway. :-) You might want to explain your reasoning though.
Head Geek
I dunno, dealing with bad code could help people avoid the same mistakes? That would be one of the good things.
Calyth
I don't think its a bad thing. I just believe that the folks who work in the areas that I would like to get into perceive it to be a bad thing. See the previous two comments to your post as evidence :)
Abtin Forouzandeh
As Abtin explained, regardless of your leanings this does not answer the posted question.
Shmoopty
+8  A: 

If Python is helping you 'get lots done', then use it to do something handy at work! Say, for example, automation or analysis of something ancillary to what the main body of code is doing.

ctd
I like this suggestion and I'll have to find a chance to apply it. It gets around the fact that free time outside of work is a rare commodity.
Abtin Forouzandeh
I'll second this answer. I'm mainly a C# programmer at work, but I have a lot of mundane things that I need to do (like importing into databases) and I like to use Ruby scripts to take care of those tasks. Python would be great for that kind of thing too.
Matt Ephraim
For me, exact same scenario as @Matt Ephraim but used Python instead of Ruby. While I used C# for the main projects, I used Python to handle a lot of the supporting grunt work such as application/database build scripts as well as for code generation of C# and SQL as needed.
Ray Vega
A: 

Just do what your heart tell you -- you can't be expecting to learn new language or OS just so you can jump on to the startup scenes.

I'm sure there are plenty of startups using C# and Microsoft stuff.

Startups use these technologies mostly because of the cost issues and it's has a lot of problems solved for you already in form of open sourced libraries.

On a side note, since you are already in C#, why not start something with Java? 75% of Open Source projects are in C and Java. You'll be able to learn from a lot of codes.

Seymour Cakes
A: 

If you want to transition away from the evil that is C# then become proficient in another language or two. I keep my POSIX API and C/C++ skills sharp by regular use. I'd recommend learning something like Ruby (not necessarily Rails, yet) since there's a lot of call for "web application" these days.

The only way to get out of that rut is to change careers or to pick up new and useful skills. Maybe it's that your current employer only uses C# because they are full of PHBs who got on the buzzword train? Can you try and suggest they transition or involve other more useful tech. Justify the business case by showing them that there are better tools out there for some jobs and choosing something just because it's the de-facto standard on Windows these days isn't necessarily smart.

That said, if I get a programmer in an interview for Linux/C++ position and they tell me they've spent the last n years (n > 1) working on Microsoft tools exclusively then I get scared. Their skill set for real programming is rusty and Windows programmers tend to do things in backwards ways - not because they're bad programmers, but because the Windows way is backwards compared to the Unix way (The unix way is the KISS, modularity and principle of do one thing and do it well. The Windows way is of complexity and being monolithic to do many many things, often poorly).

Adam Hawes
I'll take your comment to be in support of my fear that extensive c# experience will be a black mark on my resume.
Abtin Forouzandeh
If you're looking for Linux work then spending the last n years on C#/Windows without any serious Unix practice means you'll have a learning curve that other Linux programmers won't have. Just start practicing the skills you need to get the experience and you'll be fine.
Adam Hawes
I think this answer should stop getting voted down. It provides insight into how to make a transition to a new job work.
Abtin Forouzandeh
A: 

Not exactly an answer to your question, but you could start doing work in Boo, which is a Python derivative that lives on the CLR and compiles to IL. Perhaps developing an open source project, or contributing to an existing Open Source project using Boo (there are a few) will give you some "Python Cred". I don't know how much independence you're allowed in your workplace, but try proposing that some new work be done in Boo or Iron Python.

Alternately, you could start doing work on open source with Iron Python, like making sure Django runs on Iron Python (just an example, it might already be done), or other Python/.Net crossover points.

Adam N
+2  A: 

To be honest, I would keep the C# job (pay the bills) and then play with C++ on the side and explore IronPython at work. My understanding is that IronPython is a fairly good port of Python on the .NET platform (I am a Java and PHP developer, so I only have a passing knowledge). It could be a good way to start building that resume with Python.

The commenter above beat me by 30 seconds on the Iron Python recommendation...

Kevin Eaton
+7  A: 

As the owner of a small software company as well as a programmer, I would prefer to judge an applicant's level of skill with a programming language by looking at actual working source code he's written. If an applicant can't show me his previous work because it's all proprietary stuff (which has usually been the case so far), it makes judging his skills a lot harder. But if he has worked on open-source projects -- and especially if he has led them -- that gives me something to go by, as well as possibly a measure of his people skills, depending on the size of the project. It also looks good (to me) because I know that really good developers write code because they love to do it, and they'd do it on their own even if no one paid them for it.

Starting or contributing to an open-source project, or at least writing programs for your own use, would also give you practice with the programming language, and could expose you to programming idioms that you haven't run across before. Of course, it could also expose you to programming idiots, so do your research before blindly accepting something you see as good form.

As for "years of experience:" in my opinion, that's primarily a way that managers measure things that they don't personally have the skills to measure directly. Ten years or more of experience with a programming language looks good on paper, but if it was one year of learning and nine years of repetition, it doesn't make you a better programmer than someone with two years of different kinds of programming work. In other words, it's pure management-speak. A good startup won't be stuck with a lot of management yet, so you're a lot more likely to be judged on your programming skills alone, if you can show them, instead of an indirect measurement like how many years you've used a language.

Head Geek
+1  A: 

Or you could just work at Microsoft shop that does a lot of C++ coding and uses scripting languages. Or you know, a shop that isn't tied any particular set of tools.

I'm a game programmer and we use C# for tools and data management and lots of cross platform C++ for game code. And the odd scripting language for doing one off tasks.

Rant follows: There seems to be a bit of snobbery about open source projects in this thread. It would seem to me that perhaps proficiency in a language is more important than proficiency with any given platform. You should be able to pick up new API's / platforms quickly. If not there's either something wrong with you or the API. I don't see how experience with multiple tools and platforms should ever be a 'black mark'. The more ways you can think about problems the better. And personally, I wouldn't want to work for any company with that kind of culture. /Rant

BigSandwich
I'm not noticing open-source snobbery here so much as recommendation. If he wants to come over to the light side of the Source, it's a very good route.
David Thornley
eh, Maybe I'm just used to working in a field that requires an NDA. On the other hand, just read the post at the very bottom of the page. Also, "light side of the Source"? Really? There's nothing inherently altruistic about open source.
BigSandwich
I do; however, agree that if the OP wants a different work, he'll probably need to work on his skill set some.
BigSandwich
+1  A: 

First of all, become comfortable in a non-Windows environment. Install a Linux flavor on an old computer, and use it for something interesting. Mine has been running since college, and I use it as a file server, development machine, version control server, etc.

Don't waste your time poking around, just get a book on Linux for beginners, and crash through that SOB. It's a lot of stuff - iptables, host files, samba shares, oh my. Later, setup a RAID for extra-credit, and to avoid data loss.

Secondly, dump the proprietary mindset. Stick to POSIX, ANSI and non-proprietary languages. That way you will avoid Fire & Motion.

Andrei Taranchenko
+6  A: 

A lot of the other answers are very good but each seems to only address part of the problem. So to summarize them all:

On building experience

  • If you are familiar with another language, try to convince your job to incorporate it somehow. Tools and script development are good choices for this. In the case of Python, you can even stay in the .net realm (thus possibly making it easier to convince management) by using IronPython.

  • Learning linux goes hand-in-hand with this transition, so install it on an old machine or a VM and learn to be comfortable in it. You might be able to speed up this process by working through a beginners book.

  • Find an interesting open source project and contribute! Not only do you build experience but you build a portfolio of work to show. This will set you apart from most programmers who cannot show code because it all belongs to previous employers.

  • Leading an open source project is even better. But even if you don't lead, your interaction with a project can be used to show your people skills.

On transitioning the job

  • A good employer will not care about the specific languages in your background. Instead they are looking for proxies to indicate overall programming proficiency. Being able to show off source code is great for this, and open source contributions are a great way to do that.

  • If you are looking at startups where hiring approval flows from techies, you will be scrutinized for skill more than at a big company where the hiring is done by management. This is a good thing since it means you can bypass requirements like "10 years of experience" by demonstrating proficiency.

  • There is in fact a prevalent anti-microsoft attitude in non-microsoft shops. Again, the best way to counter this is by being able to show actual work you've done.

Abtin Forouzandeh
+3  A: 

Jump ahead of the curve. All of the mainstream languages now disallow pointer manipulations and are garbage collected so you're not bringing anything new to the table by building experience in Python and C++.

The next overdue features for mainstream languages is going to emphasize a) correctness by way of strong type-systems and b) parallelism to take advantage of multicore processors which are being shipped standard in new computers. Microsoft knows this which is why it's researching OCaml and Haskell and investing in F# (an OCaml variant).

I recommend learning Haskell. It's not owned by Microsoft, has some "next generation" features, and is incredibly fun.

mbac32768
Would you include Erlang in your list of suggestions?
Abtin Forouzandeh
I don't know, I haven't used Erlang much.
mbac32768
A: 

Man, I wish I HAD your problem! I live in south Florida and all I SEE are C# based jobs! I have C++ experience right now and every employer I see seems to be asking for 3-5+ years in C#! I tried hard at my last job to push for us to start using .NET but couldn't get anyone on board and now I am out of a job and CANNOT FIND a C++ position! A month or two before my layoff I began to take some online training in .NET and C# that the company offered (SkillSoft) but was not able to take much before the layoff. I now have a placement firm that offers the same training so I am going to take it but I dont know if it will be enough for me to land a C# job.

If your 'happy' with developing in C# maybe its just your location that is the problem. Check out South Florida (Ft Lauderdale, Boca Raton, West Palm Beach) and search for 'software engineer' or 'C#' or 'developer' and you will see at least 100+ jobs offered in .NET programming. Type C++ and you will see less than 10.

If you REALLY want to get out of Windows programming, do it for the right reasons, because your sick of it and want something different for yourself. If you are strictly concerned about money, I dont think its a wise move to migrate away from it completely. However, it is always a good idea to at least become familiar with other platforms and there are still a lot of opportunities out there for linux guys.

Good luck!