I'm a 21 year old University student studying Computer Science. I have been using Linux throughout the whole of my degree so far. Now that I'm nearing the end of my degree I've started looking at graduate software engineering/developer positions at various companies.
I notice that the vast majority of companies I'm looking at are strictly Microsoft users, from windows to visual studio. Am I going to be at a disadvantage as most of my experience is unix/linux development based?
Most jobs speak of C#, Visual C++, .NET, Java, etc etc Where as I am mainly using Java, C++, Perl, Python and programming to the standard Unix standards, would I be better off ditching Linux and spending my last year of University brushing up on Windows based technologies, languages and API's, would this increase my chance of getting into the industry?
I suspect that your "most jobs" observation is from looking in the wrong places.
Whether or not "most jobs" are using MS technologies, would you WANT to work with MS technologies? If you went and boned up on your .NET and Visual C++ and had to use Windows all day, would that be the kind of job you wanted? If not, then it doesn't matter if that's what "most jobs" call for, because those aren't the jobs for you.
There are not hundreds of jobs out there available for you that are a good match for you, and for which you are a good match. Don't worry about the broad playing field of the job market, but instead focus on the jobs that DO interest you.
In a word, no. College is a time for learning the fundamentals of software engineering, not to learn specific APIs and toolkits. Only the kind of people you would not want to work for would turn away a new grad because he didn't learn technologies they use before joining the workforce. Focus carefully on becoming a good programmer. The APIs and such are really irrelevant if you can demonstrate yourself to be a strong problem solver.
And you should also look around more - most Enterprise Software companies snatch up Linux/UNIX people as much as they can. You need to adjust what companies you look at if you want to keep your UNIX skills.
There may be more jobs utilizing Microsoft technologies when you're looking at sheer quantity. However:
There are far, far more applicants for those jobs because so many schools and certification programs are geared strictly around teaching you specific frameworks and technologies. You may find that despite the size of the job market it's not necessarily easier to find a job because there are so many (ostensibly) qualified people out there competing for it.
Being familiar with UNIX generally translates well to being able to understand Windows but that's not necessarily true for the reverse. My experience has been that working in UNIX you're more often closer guts of the system, so it's far less intimidating to later have to work on a Windows-based platform where much of the internals are abstracted or sealed.
The jobs that do exist for UNIX programmers and systems administrators tend to be highly paid and hard for companies to staff, due to so many students coming out of school thinking they need to learn Microsoft technologies to get a job ;) I've seen several instances of this already in the few years I've been in the industry.
What about what you like doing? Do you want to work with Microsoft technologies and platforms for a living? Do you prefer Linux? You should definitely consider whether the paycheck is your sole motivator. You'll be spending 40+ hours a week immersed in the environment, so hopefully it's something you enjoy on some level.
The most important advice I've ever been given is "do what you love and the money will follow". If you enjoy your work, then you will excel at it, and excellence is rewarded. If it's not rewarded where you work, then find another job ;)
If you are truly concerned about the lack of jobs in Linux and UNIX programming, then by all means, start getting familiarity with programming for Windows. More knowledge never really hurts you in a job interview/application. That would also give you an opportunity to decide if programming in that environment is something you are even interested in pursuing as a full-time job following school.
I'm part of a UNIX systems engineering group, and every last one of our senior engineers is heavily headhunted.
There's no shortage of demand; indeed, if you're in the Austin area, get in touch and we can talk about an internship.
The point of a CS degree is not to learn the specific technologies that are in-use today. (If it were, your degree would be out-of-date before you finished it.) Technology changes so rapidly -- and development technologies are no different. Yes, you see a lot of Microsoft-specific development jobs today; but how much will the technologies used in those jobs change by the time you graduate? (Think about how rapidly we've come from .Net 1.0 to .Net 3.0, as an example.)
As a CS student, focus on learning the following (which will be valid regardless of how much technology changes):
Finally, as a note, if the above advice is not to your liking, I'd give the general advice that I'd give to anyone in a "suboptimal" situation: Make the most of it. One way you could do this is to challenge yourself to write code that will compile/run on Windows, as well. If you can do this, you'll set yourself up with yet another valuable skill: cross-platform development.
Yea, dump Linux and focus on Windows. As someone who has had decent UNIX/C jobs for over 25 years, I'd like to make sure my skillset stays in demand!
But seriously... even now I work at a company where I interview people looking for strong Linux/C/C++/Java/Python/Perl skills -- all the things you probably enjoy learning more about. Yes, there is a side to our company that targets Windows development, but the UNIX side of the house remains strong and I've always managed to find work in this space.
So keep it up, and I'll welcome you to the UNIX guru club gladly (but I am happy that there are relatively few people like you coming out of school these days, so I can continue to market my skills!)
I think you have to decide what you want to do first of all. It is a little daunting at first that so many jobs are targeted towards windows developers. Having said that, I'd say they carry a greater percentage of the cruft - purely because it's easier to get started on and requires less technical experience.
If you possibly can, try to get some work experience in a linux house and a windows house and see which you prefer / which you could tolerate.
It also depends a lot on where you look. I've found that both the better jobs (in general) and especially the linux jobs aren't as well advertised, so it may be that you're not seeing the jobs you want. Try searching google for linux-based companies in your area and send out some speculative CVs
Good luck
I've only been in the workplace for 1.5 years, and can say that i've only needed the programming fundamentals from school so far.
Just be prepared to pick up an insane amount of knowledge that they can't teach in school during the first year of real work.
First couple months will be scary, then you'll feel right at home, provided you find a good company.
GL!
Come to Silicon Valley and you'll see a much different picture.
Seriously, though, if you're worth your salt, then it doesn't matter where your experience lies, it's all about your ability to make things happen. Anybody who knows how to do software really well can pick up a new environment without too much difficulty.
In my area here there are loads of job going for people with LAMP knowledge. As far as i know they have a hell of a time trying to find people with experience. Linux experience is getting more and more in demand.
When employers are talking about C#, .Net, Perl, they are not talking about your knowledge, it's about your work experience with that language.
Please stop studying, and start working, for example, for an open source project. Build something. Studying a language is not my hobby, yet I know all the languages you mentioned. And, I'm programming for my job in Perl, the language I last used 10 years ago!
I wouldn't ditch Linux as you probably already have some good experience in that area and it would stand you in good stead for a Linux or Unix based company.
Don't get too caught up on the actual programming languages. These days I'd say it's more important to have an understanding of fundamental areas such as relational databases, XML/XML Schema/DTD/XSLT, Unit testng, HTTP/REST, server side and client side application design and design patterns.
If you have experience in Java and/or C++, you are not going to find moving to C#, Javascript etc that difficult if your job requires this.
Of course it is the APIs (.NET Framework, etc) that require the most effort to learn, the languages obviously have differences, but as soon as you need to do something productive with the language you need to know an API.
So in summary, focusing on the areas mentioned will increase your chances far more than a narrow focus on particular languages.
I wouldn't say "ditch" Linux. But I would say to bring yourself up to speed with Microsoft technologies.
I got hired for my current job (maintaining large applications in Visual C++) on the basis of my C++ ability and geometric aptitude. I had barely touched Visual Studio before, and no experience or knowledge of MFC.
About a year later, they like me and I like them. Things are good.
There may be a disadvantage with most of your experience being unix/linux development based if you are applying for strictly Microsoft jobs and there are dozens of applicants each time that have those qualifications. At the same time, there are some basic development ideas that are more important than the tools to some extent:
1) Version control - Do you know why it exists, how it can be used, what continuous integration is, etc.
2) Testing - What are unit tests? What are integration tests? Black box and white box testing? Why are tests important?
3) Code organization and quality - Do you refactor? Do you understand OO principles? Can you build out various classes for simple problems? Do you use a good variable naming convention?
4) Algorithms - Do you know why BubbleSort is an inefficient algorithm? Why is quicksort commonly found in frameworks when its worst case complexity isn't the best? Can you design and explaing a series of classes for solving a simple problem of setting up a ticketing system that sells concert tickets to people for example?
Another side is the question of how Windows-y are you. Have you never ever used Microsoft Windows? Have you troubleshot problems with Windows, e.g. using the Event Viewer or various system tools? There is this broad spectrum of knowledge that would play a role as well I'd think.
Lastly, what kind of work do you want to be doing? If it is web development then knowing Perl, Python, and Java should set you up well I'd think. PHP may be something to add in there as well as to note what web server software do you use, e.g. Apache, Microsoft Internet Information Server, or something else? If you want to be programming PC games then Windows would have some advantages.
There are some big players in the linux and unix markets - DOD and wall street come to mind. It doesn't hurt to add MS platform to your experience, but linux is not hurting anything. Broaden your tools knowledge and just keep looking. As I think others have said you might need to relocate.
Cross platform experience and knowledge is also a wonderful thing to bring to the table.
Don't abandon linux unless you have a desire to go to Windows.
You've got some c++ and java background which is probably the best you can do regardless of if you're doing it on linux or windows. Those two languages are probably the most transferable to c#. The language syntax is extremely similar, and c# shares many of it's features and concepts with java, so your background will help you well, regardless if it is in windows or linux.
There are free versions of visual studio express which you can use to learn your way around, but again, visual studio will share some of the same feature sets as other development environments like eclipse or other java IDEs.
And don't underestimate linux in the workplace. Although I'm a windows developer, I do know that linux environments are not rare, so there has to be jobs to go along with that.
You're biggest hurdle will probably be discovering all that the .net libraries have to offer, but everyone goes through that even the ones with experience.
I don't know where you're getting the idea that Linux is not in demand; most jobs in defense related fields, electronics, embedded systems, quantitative trading, web based, etc. want Linux.
It may very well be part of what companies and cities you are looking at. You may do better in places like DC and NY.
First of all, you are in a technical field: you should work on what you like. If you are competent and keep learning, have decent communication skills and are a generally pleasant person, you should do well with your career.
From the tone of your question, it sounds like you are either unhappy with Linux, or you like it so much that you think there must be a downside. If you don't like Linux, by all means, start learning Microsoft stuff. But if you like Linux, stick with it, even if it means moving or working a little harder finding a job. It's better to have a job that you enjoy.
And BTW: I'm not sure your premise is correct, there are plenty of Linux / Python / C++ jobs.
If the only thing you know coming out of college is what the instructors have told you to learn (which it sounds like in this case it is Linux and programming in that environment) then you need to branch out and learn programming on the Windows environment. College institutions are so far behind what's going on in the real world you have to supplement what's happening in the real world yourself.
Go ahead and take time to learn Windows programming in a Windows environment now while you are younger and can stay up till who knows when at night. You honestly have nothing to loose and everything to gain before life hits you square in the face. You should take full advantage of your situation of being in college and just be a funnel for knowledge, no matter which platform it is.
The more you know, the more rounded you become, the more experience you have and that is a good thing. You'll be pleasantly surprised that learning another system or way of doing things will give you insight into how to solve problems better.
Oh, and while you are at it, don't forget to learn how to program on a Mac using OSX as well.
For what it's worth, I've been doing software development for more than 25 years. I have had no jobs that absolutely required me to use only Windows. Nowadays, with the popularity of languages like Ruby, Python and Java, it's entirely possible to have a rich, satisfying and well-paying career without locking yourself into any one platform.
Your best bet for a stable and long-lasting career is to experiment with and become familiar with a lot of different environments. Adaptability is one trait that helps ensure survival.
I can't believe it makes much difference. Learn OO and functional programming, learn the concepts. When you have a full time job you have less time for studying concepts. The switch from Java to C# is easy if you know the concepts.
Maybe you can study Hadoop, runs very well on Linux. A very new and very fast technology.
NO!.. Learning, using and programming for Linux is NOT ruining your "chance" at a good software engineering career any more then learning to speak and understand a second Human language (like German or Chinese) will prevent you from getting a job that primarily uses your Native language (say English).
However... by NOT learning the foundations of Windows Application Programming you are restricting your pool of employers; depending on your demographic location.
As an aside.. I recently discovered this site for Linux Jobs, Linux Apps and Linux Kernel Driver development Jobs.. check it out.. some amazing jobs for Linux out there.. all over the world!
http://linuxkernel.specialtyjobmarkets.com/
and
http://linuxkernel.specialtyjobmarkets.com/Resumes/JobOpenings/PublicRecords
Good luck job hunting when the time comes.
As a recent grad, I was in the same boat as you. I was worried about learning the MS garbage, but I stuck with C/C++, Java and Perl all on my Ubuntu box. After graduating in 09 in the midst of all the job loss, I started my career search. During every interview, the interviewers perked up when they heard about my interest and experience with Linux/UNIX. I easily snatched up a job developing in UNIX and am enjoying it thoroughly.
I've noticed that because of my experience with Linux/UNIX, I feel that I'm above the curve. The other new recruits seem not to get a some of the things our work needs to do to get done and are constantly coming to me asking questions. So my advice is do what your doing and not worry about MS. If you need to work with it, you'll pick it up pretty quickly.
Most jobs speak of C#, Visual C++, .NET, Java, etc etc Where as I am mainly using Java, C++, Perl, Python and programming to the standard Unix standards
Aha! I see a connection there. How about it? Java is very commonly used today for a huge variety of tasks (and this is specifically in the industry, not just hobby projects). And its use is not going away very soon (unlike some people biased towards MS technologies might think ;).
Linux is an excellent platform for Java development. Arguably the best one, actually. (All Java tools work perfectly on it, plus you get to leverage the wealth of non-Java open-source tools in their most native environment, starting with the powerful Unix command line tools that help you automate everything you should.)
So, no, you definitely don't have to focus on Windows-based technologies, unless you really want to. And Java is not your only bet either, even though in this answer I concentrate on it.
Just as an example, in the Java development team where I work, out of the technical people (about 11), 6 use Linux, 4 Windows, and one Mac on their work computers. And I do not think such ratio is that exceptional, compared to other smallish software or technology companies, at least in this part of the world. And well, come on - look at what Google uses (and values) [1], for example! Linux. And Java, Python, C/C++, and so on.
[1] http://www.google.com/support/jobs/bin/static.py?page=why-ca-mv.html&dep%5Fid=1054&loc%5Fid=1116&topic=1054You just don't need to worry at this time about specific job requirements. Most good software companies don't require specific skills from new grads. Instead, strong problem solving and learning abilities are much more valuable to the employer.
Depends on what you want your career to be like.
If you want to be a drone programmer in some big company then you'll need to come up to speed on Microsoft technologies. There's lots to choose from and realistically you will only ever master one little part before much of it gets obsoleted. Remember of course, that big companies tend to keyword match resumes. The HR staff or recruiters don't really know what they are looking for. They merely play keyword bingo.
If you seek satisfaction from your passion for programming then perhaps you should be looking at startups and technical field computing. There are many great suggestions in the other answers to your question.
If you want to truly be part of something awesome and you can't find a compatible startup then find some problem that you can solve and solve it. The slow economy and being young are two great advantages to starting now. Remember, the odds of getting a job with a big company are slim and the odds of being laid-off as things get worse is high.
I'm a guy who learned Python, then Java, then got a job as a Java Software developer.
The first time I ever developed Java in Windows was at work.
Up until then, I had been coding in Ubuntu.
Make good-looking code, use your smarts, and be a good co-worker, and people won't care what OS you use.
That being said, some companies may fear hiring a "Linux Zealot" if you aren't willing to consider other operating systems than the one you primarily use at home.
My suggestion: Be familiar with Linux, Macs, and Windows. Virtualize Windows from within Linux and play around with Windows dev tools if you feel like it. Install Eclipse on all of them and note the differences in how your code runs on each platform. Then, when a company indicates that they use a particular OS, you won't be fazed by it.
The language and OS you use , are merely tools to do your job. Just like a hammer is a tool for a carpenter.
The most important thing is, that you know how to develop good software.
Be aware of the concepts, know about data-structures, design patterns, algorithms, how to properly design a database, how to build understandable, adaptable software that does what it should do, and does it efficiently.
That is what software development is about; the language or tools you use are of lesser importance. In fact, languages and tools evolve over time. The language/tool that you use right now, can be obsolete in 5 or 10 years, but in 5 or 10 years, you'll probably still be a software developer, you'll just be using other (better) tools. And this is no problem, since, if you know about the fundamentals of software engineering, it is quite easy to learn a new language and add this language to your skills (toolset).
Tons of jobs for linux & unix developers out there. Java and C/C++ are in high demand right now.
I suggest you learn a bit of .net (C#) just for the times when the market is low and you need a job.
Absolutely not. The fact that you are able to use Java, C++, Perl, and Python demonstrates your ability to learn.
start a startup :) if you can - start a consulting firm on open source software. (I was thinking of Paul Graham)
although .NET and Visual Basic is highly needed in your Area, you can advocate the use of open source instead and try to gain some marketshare.
You can learn on your own though if you want to really try these things.
Here in the Philippines there is a strong need for developers particularly in the LAMP stack - as a lot of companies have to try to limit their capital and prefer open source alternatives like open source CMS's, open source financial platforms, CRM's and even accounting software.
You could also get certified in Microsoft - but that would mean studying.
after graduating from college, i knew i had a lot to learn as I wasn't experienced.
College just gives you a base knowledge from which to learn and grow more about your field of Choice.
you can also try learning ruby on rails, as there seems to be a strong demand for web developers with ruby. Goodluck!
As you I always used Linux until a year ago or so, when I became extremely frustrated by the fact that Linux does not make any progress as a desktop os.. (GPU drivers which do not work, the NetworkManager still does not work with our WPA Enterprise setup here, etc)
Also since windows is not as bad as it was 10 years ago (Win98, lol) I suggest, that you probably get Windows and VS and practice a bit, you will learn it quickly.. an alternative would probably be to get a Mac..
However I think tools and operating systems are not the important things. C# and .net are quite similar to Java somehow, c++ is the same on both platforms, Linux and Windows are built onto common concepts, which are described in Tanenbaums book.
It matters what you do and maybe how you do it, but not what OS or tools you use ;-) For example do you have experience with computer graphics, image processing, AI, robotics, concurrency, cryptography, etc?
You have to learn to survive in a Windows environment to get your job done, because you will be using or interacting with users of that OS. But software development is not usually OS dependent, unless you are a Systems programmer, but there are not many jobs in that field. Most jobs are application development, which is simply programming logic based in a given language.
To put it in perspective I would suggest using Google Trends [1] and combining that with your other specialist skills and ambitions for the area you want to work in.
[1] http://www.google.com/trendsI say, use whatever suits you. Even Microsoft developers use Linux. If you can't develop whatever they want you to make outside of Windows/Visual Studio, then they're probably not worth working for.
BUSINESS likes Windows. It's easy to use and has been since 1995. Linux is only recently overcoming that problem. I say this as a programmer who uses Ubuntu on my home PC, and XP at the office. I've been a computer guy for quite a long time... and I still have to puzzle through linux mindset. That said, don't give up on linux. I see Corporate America (or at least my area of corp. America) looking at Linux as a possible way to go forward. Yes, learn windows, learn .NET. Learn any tool you can put into your toolbox.
I would counsel you to look at the tools in your toolbox, and if you find one is dull (windows skills, .NET, etc.), then to take out the file and sharpen it. It doesn't take much time, but if the tools aren't able to work when you need them, then you are up a creek without a paddle.
I think that knowing Linux is a great foundation. As noted above, more and more companies are experimenting, if not outright moving, to LAMP stacks (or similar technologies on Linux).
Plus, if you are not nervous about working closer to a hardware level, there are plenty of hardware design companies and contract engineering firms that are working with embedded linux on new devices. Exciting stuff if you have strong Linux skills.
In my point of view...
would I be better off ditching Linux
Absolutely NOT! Knowing this is an asset... keep your knowledge up to date!
I have had the privilege of extensively learning Linux many years ago. What I've discovered is that Linux opportunities may be rare... experienced Linux developers are even rarer. This has created a huge demand for my services and I often get paid a premium for this exact reason.
spend my last year of University brushing up on Windows based technologies
Absolutely! You don't have to be exclusive to one technology. Learning other technologies will be an important asset on your resume. Learn as many technologies as you can. Only an idiot will turn their back on various technologies, libraries, API's, etc on the basis of having found "the perfect one".
I think a good software engineer should be productive on any OS. By understanding and using Linux, you really do have an advantage in your arsenal. However, as there are shitty things on Windows, there are also really nice things. Give yourself the pleasure to learn about them :)
It's like asking weather C is better than Java. We could argue for hours, however, at the end, I know I will be right by saying that by understanding both of them is the best.
However, if a company refuses you because you've got a strong linux base instead of Windows, be happy.. it'll just mean you won't work for an idiot. Linux people are mostly extremely curious and usually pretty smart. I'm not saying windows people are dummies, far from that, of course. Maybe these days with Ubuntu where anyone can install and run it in three steps is no true anymore, but not so long ago, to configure a distr. you really needed to understand what you were doing. I mean, when you know how linux works, windows is really a piece of cake to learn.
Last thing, even if everyone is running Windows, it's sometime possible to still use Linux. I'm thinking of Eclipse framework development where lots of developer works on the same project on differents OS.
No if as stated in your question the reason is for you to be better adapted in what the companies are looking for.
The last year of school in my own experience is when I learned a lot. This is because you are confident with all your skills and is at ease with the tools that you have been using. The focus then becomes learning stuff that improve your chances with solving problems. Learning MS technologies to be attractive at the job market is not as fruitful investment of your time because your last year of school is one of the few large block of times in your life when you only have to study and not deal with deadlines from the boss.
If you have a look in serious job boards, you will see how much are paid C++ developer on Unix/Linux. Yes, there are more jobs for .net but they are less paid. With a decent CS degree you can study hard Linux, C/C++, multi-threading, STL and Boost library.
Then you will do a very interesting job and getting a very good salary especially if you will work in the finance.
Good luck and you should be proud of using Ubuntu instead of Windows!