Does the development stack matter?



  • I am still studying for a degree, but I have had a few parttime jobs along the way. All of them were Microsoft oriented: SQL Server 2005, IIS, ASP and so on. Now I was always under the impression, that the "stack" doesn't really matter when it comes to being a good programmer. If you can make a great C# & SQL Server 2005 application, you can also make a great Java & Oracle application. Which was somewhat confirmed by this blogpost: http://www.codinghorror.com/blog/archives/001054.html 

    Now I was browsing for jobs at Google, and I notest they ask for experience in Linux/Unix. Now I don't have Linux experience, and I don't think installing Ubuntu is going to cut it. Say if I worked full time .NET for 5 years, could I apply at a open source shop (not Google specifically)?



  • @Ice^^Heat said:

    Now I was browsing for jobs at Google, and I notest they ask for experience in Linux/Unix. Now I don't have Linux experience, and I don't think installing Ubuntu is going to cut it. Say if I worked full time .NET for 5 years, could I apply at a open source shop (not Google specifically)?
    You could, but it's probably going to be held against you.  I'd think installing Linux and tinkering would be a great start.  At least then you'd have some comfort level. 

    Switching languages is always an issue, regardless of the platform.  But, if your background is in, say, C/C++, switching to *nix means a whole new set of build utilities, which is a much bigger deal than it sounds.  Still, what's the worst that can happen, they turn you down?


  • ♿ (Parody)

    If you've only ever used one particular stack, you've not shown any adapdability.  If you don't have experience in the desired stack, they have to take it on faith that you'll be able to pick it up.  Note this line:@Coding Horror said:

    Platform experience is merely a baseline, not a differentiator of real importance.
    If you have experience with a variety of stacks, even if not in the one desired, it at least shows your flexibility and capability of learning new things.  Not as good as having experience in the desired stack, but better than only having used one thing.



  • @Ice^^Heat said:

    I am still studying for a degree, but I have had a few parttime jobs along the way. All of them were Microsoft oriented: SQL Server 2005, IIS, ASP and so on. Now I was always under the impression, that the "stack" doesn't really matter when it comes to being a good programmer.

    ...


    I actually think you've hit the nail on the head with that comment. It's a subtle point a lot of people miss, and unfortunatly, due to the opacity of developing software you're gonna be suprised just how little a lot of people know when it comes to programming (If you build a bridge out of balsa wood, people can see it's rickty and unstable, but if you build some software like that, so long as it does what it's supposed to noone (outside the software world) will ever really know or care as it's just that 'computery stuff').

    Unfortunatly, not really understanding what you're doing (apart from at a higher overview level) has become an accepted part of coding, and a lot of the tools out there are designed to make it easier for people to not know.

     As an example, in this office there are several people writing web based applications, but I think only one of them has any real idea of how webpages work, now I'm not expecting everyone to be intimiate with the inernals of HTTP, but by using development tools to hide some of the underlying plumming the subtalties of why you do something can often be lost. (EG, a web page is a stateless 'one time' thing, so any notions of state or interactiveness have to be bolted ontop of the underlying request/response architecture; knowing this can help you write better applications).

    Maybe I'm just a luddite though (we use IBMs websphere here, and I really really shy away from using it, but then again I can get by with Editplus and a macro that runs Ant and bounces tomcat, and I feel I have a better understanding of the way things work because of this.)

     To be honest, if your half way competent it's probably possible to blag most stuff as you'll find it easy enough to pick up.



  • Hmm, I think you slightly misunderstand the point of Jeff Atwood's post.  Years of experience is not a useful indicator of success in a position but experience with a particular technology can be very important.  Can somebody who has always worked with Microsoft tools work with Unix?  Of course.  However, it's going to count against you because I don't want someone starting from scratch and learning everything on my dime.  I've done plenty of interviews and I would like to think I am pretty good at separating the wheat from the chaff.  I don't outright reject anyone with good experience but I'm going to weigh your inexperience with my tools against others who might be more qualified.  Personally, I don't have the time or inclination to teach someone who has never used Unix, in other words "Does it say 'University' after my name?"  That's because I would much rather pay 50% more and get someone who is extremely experienced with my tools and who I don't have to teach.

     

    If you are planning on going the Open Source route, start learning this stuff today.  It will help tremendously when you start looking for a job.  Heck, after you feel confident in your abilities, find an Open Source project you like that is fairly well-known and start contributing code.  This is a fantastic way to convince potential employers of your worth and network with similar-minded people who can give you great job leads.  Truth be told, if you were sitting across from me and your resume said "No Linux experience" I would ask you plenty of questions to get a feel for how you think and learn, but even if you display amazing adaptability, you are still saying to me "It's going to cost half a year's salary and plenty of your time -- not to mention lost business opportunities -- to take me on."  There are not many situations where I would find this acceptable.



  •  you better start learning *nix my friend.   Once you get used to it, the power of the command line will amaze you.  I have to install unix tools or cygwin on all my windows computers now because it is so much faster to do some things with a powerful terminal than with Windows.



  • @HumanResources said:

    That's because I would much rather pay nothing more and get someone who claims to be extremely experienced with my tools and who I don't have to budget for teaching.
     

     ^-- this is more like what most people are doing



  • @arty said:

    @HumanResources said:

    That's because I would much rather pay nothing more and get someone who claims to be extremely experienced with my tools and who I don't have to budget for teaching.
     

     ^-- this is more like what most people are doing

    Sure, and they will generally end up paying dearly for it.  In my case, I always strive to get the best people I can and I am willing to obtain the budget necessary for it. 



  • @tster said:

    Once you get used to it, the power of the command line will amaze you.  I have to install unix tools or cygwin on all my windows computers now because it is so much faster to do some things with a powerful terminal than with Windows.

     

    Repeat after me:

    The command line is my friend.

    The command line is my friend.

    The command line is my friend.



  • Say if I wanted to start contributing code to open source projects, where would I start? Experience level: Junior.



  • How about sourceforge.net?  Find a project you like, start exploring the code, and try your hand at a bug fix or three.



  • @bstorer said:

    How about sourceforge.net?  Find a project you like, start exploring the code, and try your hand at a bug fix or three.

    Yep.  Find something you like that plays to your strengths (system programming, daemon servers, GUI apps, web apps) and start playing with it.  Be sure it's something you are interested in because "fun factor" is going to be your biggest motivator for following through with this.  Then jump in to any forums/listservs/etc.. that the project has and read posts by the regulars to get a feel for the community around the project.  If it feels comfortable, start offering to so small tasks like documentation or bug fixes and work your way up.  Being a "bug bitch" and handling all the piddly little junk the greybeards don't want to mess around with is a good way to earn respect and become familiar with the code.  After awhile you will be part of the community and can go on to develop new features, etc..  By this point your name will already be in the code itself and possibly the changelogs, so you've got the credibility there.

     

    Once again, I will point out this is a lot to do if you are just looking for a job.  You really have to be interested in this stuff and be willing to work for the sake of the work itself.  You also have to like the community around the project and be able to fit in well without letting your ego get in the way.  If that sounds interesting to you, you're probably a good match for FOSS development.  If not, you'd best avoid it.  For me personally, I'm not really a good match for "community-driven" development, but plenty of people love it.  Good luck with whatever you decide to do!



  • @morbiuswilters said:

    If that sounds interesting to you, you're probably a good match for FOSS development.  If not, you'd best avoid it.  For me personally, I'm not really a good match for "community-driven" development, but plenty of people love it.  Good luck with whatever you decide to do!
    It really does depend upon the community.  Some communities are just a group of like-minded programmers who code their portions and keep the listserv quiet other than to discuss the interaction of their code.  Other communities require your CV, medical history, and more demeaning tasks than a frat induction just to join, and then they expect you to be involved in the weekly discussions on the future of the application.  Or, you could devote your time to a completely worthless project.



  • @bstorer said:

    It really does depend upon the community.  Some communities are just a group of like-minded programmers who code their portions and keep the listserv quiet other than to discuss the interaction of their code.  Other communities require your CV, medical history, and more demeaning tasks than a frat induction just to join, and then they expect you to be involved in the weekly discussions on the future of the application.  Or, you could devote your time to a completely worthless project.

    Yeah, I just don't do well no matter what the community.  I prefer to develop alone and if I'm on a team I have to be in a leadership position.  I wouldn't say my ego is too big, but I can be quite rude when dealing with people and when I get into technical arguments I tend to push to get my way.  If a technical decision I don't like is implemented I will spend my free time working on my idea and will wait for the original idea to fail so I can have mine ready.  I know I'm human and quite capable of errors but I relentlessly try to improve everything I work on, no matter who originally created it.  I also prefer being in a leadership position because I have a strong sense of direction and I'm usually thinking several steps ahead. 



  • @morbiuswilters said:

    Yeah, I just don't do well no matter what the community.
    That's because you're a crotchety bastard and nobody likes you.  I don't have this problem, because everybody likes me.  Consider being more like me.  Actually, that's good advice for all of you.



  • @bstorer said:

    Consider being more like me.  Actually, that's good advice for all of you.

    I would, but I don't want to end up kicking my own ass as well!  :-P 



  • Unfortunately, I'm afraid that 5 years of .net experience do not qualify you for a job in a *nix environment. At least not if they want you to be reasonably productive anytime soon. At an abstract level, most programming languages are relatively similar, but that doesn't necessarily help you the get the actual job done. In a Linux/Unix environment, you might run into the situation where you have to use vi through a painfully slow ssh connection to edit a config file. 100 years of VS mastership won't help you to do that. (BTW, for the same reason I wouldn't feel well if I had to apply for a job in MS shop, though I have experience in C# programming)

    So, if yo apply at an open source shop, be prepared to be ranked you as a rookie. 



  • @morbiuswilters said:

    Yeah, I just don't do well no matter what the community. I prefer to develop alone and if I'm on a team I have to be in a leadership position. I wouldn't say my ego is too big, but I can be quite rude when dealing with people and when I get into technical arguments I tend to push to get my way. If a technical decision I don't like is implemented I will spend my free time working on my idea and will wait for the original idea to fail so I can have mine ready. I know I'm human and quite capable of errors but I relentlessly try to improve everything I work on, no matter who originally created it. I also prefer being in a leadership position because I have a strong sense of direction and I'm usually thinking several steps ahead.



  • Lets stay ontopic, for trolling/flaming/sarcasm, ya'll can go play in the Vista thread.

    Trying to do some open source work seems an excellent opportunity to gain some experience with another stack. There are plenty of days I'm bored and wished I had some "fun" dev work to do. Never realized its right under my nose.

    However, I do have some trouble adapting to existing codebases, and that inability is sort of an obstacle at jobs. In college you are usually learned to design trivial applications, which you can all code by yourself.  Which is the direct opposite of the real world. And there is a project in the near-future for me on hold, where I and a designer friend of my are going to build a database driven website. But he has no coding experience whatsoever, and does design with Adobe tools. So that leaves me wondering how am I going to bridge the developer/designer gap. Adding logic to WYCIWYG html can be messy.

    Coding is one thing, working with people on real stuff, is a whole other ball game.



  • Just install Linux and get your hands dirty. That doesn't mean you have to start working on a large codebase like Firefox or OpenOffice.org. Just try to make a nice little webapp using Rails, Java or PHP and MySQL or PostgreSQL. Try to get the whole thing running. Once you are there - and this can be as little as a CD collection management webapp - you will have learned a lot. Your experience will surely help you to leverage that skills to bigger apps.

    BTW, I can only partially agrree with the Codinghorror article mentioned in the original post. If a company does something very special, like the low-level-security stuff mentioned, well, they just have to hire bright people and train them. There's no way around it, since only a very small number of people have that skill and are available on the job market. On the other hand, if I need people for a J2EE project, I don't have to hire ASP.net experts and retrain them. I can hire J2EE-experienced people in the first place. Especially in the Java world, I just cannot wait 6 Months for them to get used to *most-hyped-framework-of-the-week*, because in 6 months, that skill will have become obsolete. I will need *the-new-hyped-framework* people then. Does anybody use Spring anymore?



  • @ammoQ said:

    Just install Linux and get your hands dirty. That doesn't mean you have to start working on a large codebase like Firefox or OpenOffice.org. Just try to make a nice little webapp using Rails, Java or PHP and MySQL or PostgreSQL. Try to get the whole thing running. Once you are there - and this can be as little as a CD collection management webapp - you will have learned a lot. Your experience will surely help you to leverage that skills to bigger apps.

    I'd second that, getting into things like MySQL and PHP this way are a very good way to become familier with the technologies involved. It's also worth (if you really feel like getting your hands dirty) doing this from source too, eg download the source tarball and do the whole './configure && make && make install' thing. Doing this a few times can really give you a feel for the underlying system, especially when you've solved a few 'why the flip doesn't this compile... oh I need /that/ library built first' type situations it gives you a lot more confidence. Even things like having a different system can lead to some small forrays into the code. EG, I run NetBSD as my *nix-a-like of choice, and learnt PHP and MySQL (and apache) like that, and sometimes something won't build for something as trivial as a random #define in a system file somewhere (EG 'MAXINT' vs 'MAX_INT' or somesuch.) tracking down those kind of issues can be quite enlightening.

    Another skill I would recommend learning (and this may sound frivalous, but I'm quite serious) is using documentation, you can get a lot of stuff done by just knowing how to find the information you need, I work with people who would get a lot more done if they actually considered spending five minutes reading the API docs for the middleware stuff we use. 

    On *nix, 'man' is your friend. (and if that makes no sense 'man man' is your friend too. ;p )

     @ammoQ said:

    <snip>.. On the other hand, if I need people for a J2EE project, I don't have to hire ASP.net experts and retrain them. I can hire J2EE-experienced people in the first place. Especially in the Java world, I just cannot wait 6 Months for them to get used to *most-hyped-framework-of-the-week*, because in 6 months, that skill will have become obsolete. I will need *the-new-hyped-framework* people then. Does anybody use Spring anymore?

     

    But sometimes that can be an advantage, if you understand the basics of OO, surely C# and Java are syntactically very similar (I've not used C# so I may be wrong here.), so if you have an understanding of /coding/ and the various design patterns the framework of the week try to implelent (I'm thinking MVC here.) then you shouldn't find it that hard to retrain between the two, they may be different, but they're both basically abstractions of similar base concepts? Or am I being a little too naieve?



  • @ammoQ said:

    Just install Linux and get your hands dirty.
     

    Seconded!  You'll be spoiled for choice of languages for one thing... 



  • @Ice^^Heat

    Problem is that you live in the Netherlands (just like i do) and that this country started on the wrong foot with anything that involved software.

    Big internet companies used Windows servers so schools teached for Windows!

    Luckily i jumped in on OpenSource and Netscape Navigator in the old days.

    However this also had its drawbacks because i couldn't get any job that involved anything not related with Microsoft and had to learn the Windows SDK API myself.

    This was ofcourse with success but these days people finally understand the importance on Unix and GNU/Linux for their servers so the Netherlands plays along now. 


    Your Microsoft knowledge is still viable and usefull, but to get a nice job you should learn POSIX based systems ASAP!

    Then you will also discover the sleak processes of a POSIX system and how much fast and cleaner a HTTP request (as example) is handled.



  • @djmaze said:

    @Ice^^Heat
    Oh, come on!  The quoting system is about the only thing that works correctly on this freaking forum!

     



  • @mrrooster said:

    But sometimes that can be an advantage, if you understand the basics of OO, surely C# and Java are syntactically very similar (I've not used C# so I may be wrong here.), so if you have an understanding of /coding/ and the various design patterns the framework of the week try to implelent (I'm thinking MVC here.) then you shouldn't find it that hard to retrain between the two, they may be different, but they're both basically abstractions of similar base concepts? Or am I being a little too naieve?

    The languages are similar, but the frameworks aren't. When even the most simple hello-world-application consistst of several Java source and XML config files, knowing the language and the abstract concepts is not enough to get you started.

    The other problem: When someone is experienced in Java, he writes C# code like Java code. But C# has other style rules and other idioms. 



  • Of course depending on what type of development you want to do. But the GNOME project recently'ish started a project called the gnome developers kit, which basically is a vmware image which includes all the tools you need to start contributing. The GNOME project is pretty wide, so there are lots of sub-projects to choose from. A big benefit of this is that you don't have to set up your own build environment which arguably is the biggest problem people will have when they decide they want to start contributing. 

    http://live.gnome.org/GnomeDeveloperKit/

    http://live.gnome.org/GnomeLove 



  • I'd suggest that you play around with KDE. It's written mainly in C++ and using Qt (Platform independent UI toolkit). But you don't need C++ since you can use scripting languages. It's ideal if you want to sharpen your OO skills.



    It's highly platform independent and got a plethora of interesting frameworks (Akonadi, Solid, Phonon, and NEPOMUK to name a few), I highly recommend giving it a look.


    Start here
    <nr/>
    PS: yes I admit I'm KDE fanboy, I can't help it if it rocks.



  • So yesterday I started my new foray into Linux with the new Ubunutu 8.04 release,

    I'm very impressed by the ease of use of the system. What would you recommend for an IDE if your coming from a VS.NET background? Since VS.NET is pretty much uncontested as an IDE.



  • @Ice^^Heat said:

    What would you recommend for an IDE
    Try Code+Blocks (you have to get it from their site), kdevelop or eclipse. Those are the only three IDEs I know for Linux (most die-hards use emacs or vim)



  • Depending on the language you want to write, you could also try MonoDevelop for C# or NetBeans for Java. There are IDEs for other languages too, e.g. Eric for python. If you don't mind to pay, you might also consider non-free (beer) Tools like Komodo, SlickEdit.



  •  for dynamicly typed languages Komodo is my favorite.  For all else I roll with Eclipse (of course with about a billion plugin-ins).  For fast little GUI programs I roll with C# and Visual Studio.



  • I must unfortunately say I have uninstalled Linux again. I had some configuration issues like drivers and so on. I didn't have time to take on these issues, and I guess it is just little things like these that don't work for me because I found myself starting Windows all the time to actually get some stuff done. This is kind of a problem, because as a software programming enthusiast I feel I *must* do certain things to expand and grow as a programmer. So when I read this article: http://www.vanwensveen.nl/rants/microsoft/IhateMS_1.html I thought: I must use Linux! But in truth I don't like the dual boot hassle. I really just want one neatly configured enviroment that works for everything I do, be it games, programming or playing Blu-ray discs.

    There have been some things I always wanted to do, like learning C++, and using Linux. But I never found the discipline and "courage" to really get into it. And now I failed again after doing a Vista install last night over Ubuntu on my laptop. But ofcourse, there is the ever growing influence of the net and programming community. So this evening I listened to this: http://blog.stackoverflow.com/index.php/2008/04/podcast-2/ and reading http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html . And I thought: "Damn, I still have 2 C++ books in my bookshelf. Never did anything with them!". I did some chapters on C++ Primer 4 ed but never got to the pointers. I'm usually put off by Linux/C elitism, but this information is actually coming from a reliable unbiased source. And whats the use of actually learning another high level OO language like python? It has the same level of abstraction as .NET and Java, so I'll probably learn nothing new.

    Having teachers telling me I'm good at OO design and understandig design patterns doesn't seem enough for me, software development is an endlessly complex subject, and I must recognise how much I suck. I'm in a "JavaSchool", so OO is the main course. And I'm not even sure if C++ will be served as a side dish. I know that one of my teachers is a C++ enthusiast, but I am not sure if it will be thaught at all.

    Maybe I'll get on the Linux bandwagon again. Or maybe I'll try and finish a book on C++ some day. But it's not going to be easy. But at least I have the drive to get better, and I think that counts for something. The interest has always been there, maybe it just needs a little more of a push.



  • @Ice^^Heat said:

    I must unfortunately say I have uninstalled Linux again. I had some configuration issues like drivers and so on. I didn't have time to take on these issues, and I guess it is just little things like these that don't work for me because I found myself starting Windows all the time to actually get some stuff done. This is kind of a problem, because as a software programming enthusiast I feel I *must* do certain things to expand and grow as a programmer. So when I read this article: http://www.vanwensveen.nl/rants/microsoft/IhateMS_1.html I thought: I must use Linux! But in truth I don't like the dual boot hassle. I really just want one neatly configured enviroment that works for everything I do, be it games, programming or playing Blu-ray discs.

    I feel with you, but nowadays, virtual machines offer most (if not all) of the advantages of dual boot without the drawbacks, given a machine with enough RAM.



  • @ammoQ said:

    The languages are similar, but the frameworks aren't. When even the most simple hello-world-application consistst of several Java source and XML config files, knowing the language and the abstract concepts is not enough to get you started.

    The other problem: When someone is experienced in Java, he writes C# code like Java code. But C# has other style rules and other idioms. 

     

    And yet, hired on the basis of my prior experience with Java and with an assortment of Microsoft technologies like MFC and COM, I was producing perfectly acceptable C# code after about two days. The key was looking at the existing C# code base and picking up patterns and elements of style from that, rather than assuming that Java or C++ conventions automatically applied. 



  • @dgvid said:

     

    And yet, hired on the basis of my prior experience with Java and with an assortment of Microsoft technologies like MFC and COM, I was producing perfectly acceptable C# code after about two days. The key was looking at the existing C# code base and picking up patterns and elements of style from that, rather than assuming that Java or C++ conventions automatically applied. 

     

    True. If you are lucky enough that your coworkers have produced a large asset of good code, and you are not one of those write-only-programmers, you can pick up about any language in little time. 



  • @ammoQ said:

    True. If you are lucky enough that your coworkers have produced a large asset of good code, and you are not one of those write-only-programmers, you can pick up about any language in little time. 

     

    The problem is that this is exactly how WTFs get spread around in a projects - not necessarily by newbies to the language, but by newbies to the project. If the codebase is big (and not organized and documented magnificently), pretty much everyone ends up reinventing a lot of wheels. 


Log in to reply