Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

We are a team of about 15 employees, in a non-IT enterprise. Today, we mainly develop websites, using PHP, MySQL, etc. We run a bit less than 100 linux servers on ourselves.

But today, we are confronted with a too-big-for-us-to-code project. We selected a great provider (yes, outsourcing), and now they ask us to choose between C++/Qt and .NET/WPF.

The app is highly graphical, and meant to be distributed on Windows systems. .NET is recommanded to us as easier to design and more lightweight.

But what about our team ? Can we handle, with our small number, both universes at the same time ?

responsibilites :

  • during the dev : design the app, review the code
  • after the dev : host servers, do maintenance and answer user calls
  • in the case we need a v2, we intend to call back the same provider

What do you think ?

EDIT

We finally chose C++/Qt. The reasons are :

  • the dev time has been tested to be somewhat equal
  • it suits us better from a management point of view
  • and it increases cross-platform portability
share|improve this question
    
What do you mean by "selected a great provider". Do you mean you outsourced the project to another company? –  AndrewC Oct 11 '11 at 18:17
    
Depends much on what your responsibilities will be in that project. Will you just run the servers? Will your team take parts of the development? Or will your provider hand you over the sources after the project is finished and you have to do the maintenance? –  Doc Brown Oct 11 '11 at 18:25
    
@AndyC yes we outsource it, meaning that –  Fabien Polley Oct 11 '11 at 18:28
    
@DocBrown our responsibilities will be to review the code and ensure maintenance for users, not directly make the app –  Fabien Polley Oct 11 '11 at 18:30
    
I really wonder what kind of tests did you do to deem C++/Qt and C#/WPF equal in dev time. I would bet my ass, that when done right, C#/WPF would blow C++/Qt out of water. –  Euphoric Aug 23 '12 at 14:00
show 1 more comment

6 Answers

up vote 10 down vote accepted

I'll go the other direction on this one: if your team has linux experience and familiarity, and you run your own servers, outsourcing to a .NET shop will be a disaster. You won't have the experience to rein in the outsourcers when they get crazy, your linux and PHP intuitions will fail you in the Windows environment, you won't easily spot goofy .NET constructs, and you'll curse the fates that bind you to supporting two sets of servers, one Linux, one Windows. If you hire some Windows folks to support that set of servers, the culture clashes and arguments will astonish you.

share|improve this answer
    
"your linux and PHP intuitions will fail you in the Windows environment" that's the kind of fear I have... Can you share experience on the subject ? –  Fabien Polley Oct 11 '11 at 19:18
    
"You won't have the experience to reign in the outsourcers" note that I do not have experience on C++ either –  Fabien Polley Oct 11 '11 at 19:25
1  
Windows file permissions always seem odd to native linux users. I've heard that programmers from Unix/Solaris/Linux environments always write code that creates files with incorrect permissions under Windows. The odd case-insensitive file naming under Windows causes people to overlook problems. Default exclusive file access can cause programs to block, and unix types will miss that at first. Lack of parent/child relationship among processes can cause conceptual problems. Explict volumes ("Drive letters") can cause some hangups. –  Bruce Ediger Oct 11 '11 at 20:07
    
In the end, the app will be deployed on Win machines, so C++ or .NET seems rather equal for almost every problem mentionned –  Fabien Polley Oct 11 '11 at 20:35
    
however, you hope that the devs you'll get will be more experienced as c++/qt devs. C# is "easy" and as a result you will get the junior devs handed project work. I've seen a lot of awful outsourced C# code to always prefer the more 'difficult' option. –  gbjbaanb Jan 26 '12 at 11:46
add comment

Outsourcing it is fine, but you should have some of your own employees that also understand the system and how it works.

If your guys are all currently PHP guys then perhaps see if any of them are interested in some .NET training and get some for them.

Having something outsourced that none of your employees know anything about is a risky business.

Edit

Just to clarify, I don't mean that you should just have a few of your guys look through it when it's finished to learn how it all works, I mean you should have a few of your developers who are involved regularly with the project, who understand how it works as it progresses and who can be your "go between" between you (I'm presuming your the "manager") and the people you outsourced to. This means you should have developers learning .NET now.

The same people talking to the third party will help to build up a good working relationship and is also better than all of your developers bombarding them with questions.

share|improve this answer
    
In the case .NET is choosen, we do intend to get trained. The main question is : can we get a satisfying experience when we are used to live in an opensource context. –  Fabien Polley Oct 11 '11 at 18:36
    
@Fabien - No one can tell you what kind of quality you will end up with. The question I would be asking is who is going to maintain the application after you pay for it and that outsourced team is gone? Request full technical documentation because my guess is that it will be your team. Then buy a .NET book and start learning as much as you can immediately. –  P.Brian.Mackey Oct 11 '11 at 18:40
    
Should I consider .NET people will be lost for OpenSource work ? Keep in mind that I'm trying to compare the cost of affecting permanently resources on .NET against the cost on developping under C++. Formation will be needed there too. :) –  Fabien Polley Oct 11 '11 at 19:10
add comment

Can we handle, with our small number, both universes at the same time ?

Your team specifically? That I dont know.

But many developers work in both worlds. Its not that big a deal. All thats really needed is a willingness to learn the new technology. I think you'd be suprised how much can be learned in a couple of months working with the new technology.

I actually question the wisdom of outsourcing such an app if you are going to be the ones supporting it. If they produce a piece of junk, and then up and dissappear, you're screwed. A better approach might have been, if you needed extra resources, to bring contractors inhouse to help you develop it.

share|improve this answer
    
We've come from raw php to uml, frameworks, versioning, documenting and other processes in a few months. Such surprises are now a requirement :) We've been working with the outsource since, and I've come to trust them for being responsible and qualified. That being said, "not that big a deal" is an answer in itself. –  Fabien Polley Oct 11 '11 at 20:17
add comment

Given the constraints listed, I think that the best choice is C++/Qt.

C++ will do anything that C# will do, you'll have more access to 3rd party libraries, Qt itself is both cross-platform and available under LGPL if that fits your needs, your team would have better access to Qt than C#, the option would exist to provide for Linux & OS-X, etc.

Furthermore, even Microsoft has recently acknowledged that C#/.Net isn't all that they claimed it to be. Here's a talk by Herb Sutter that sheds some light on C++ for future development... http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C

Honestly, the only place that I think C# would have a real advantage is if the developer can finish the C# version for a lot less $$$ than the C++ version, which is unlikely. Even so, if you're still thinking C#, you should also consider Java, because you still get most of the benefits that I've listed for C++/Qt.

share|improve this answer
    
I pretty much disagree with everything you have said here. 1. There is a tonne of managed C# librarys out there. 2. you can use unmanaged code in C# projects. 3. You can provide for linux with C# - it's called mono. Not only those points, but I think when you say that java gives the benefits of C++/Qt and C# doesn't you know your post is slightly ridiculous. :) Without being harsh, your post reads like a pretty typical anti-Microsoft rant based on conjecture and not substance. –  AndrewC Oct 12 '11 at 8:38
1  
@AndyC, what you say is true - but none of it applies to serious, real-world products where a lot of money is on the line, especially for a company that doesn't know C# in the first place. Mono isn't something I'd bet the company on, no way. For a linux team, this answer makes a lot of sense. He also never said Java gave benefits of C+/Qt but not C#. Your comment reads like a typical pro-MS rant based on what your paranoia thinks he said :) –  gbjbaanb Jan 26 '12 at 11:36
add comment

If you are an open source focused shop I'd strongly recommend avoiding Microsoft stacks, especially through outsourced deals. I've seen this happen and it isn't pretty.....

Reasons:

  • You'll get stuck supporting two platforms (Linux and Windows). Or even worse, you will decide at some future date to standardise on Windows and get locked in forever......
  • There is a fundamental culture clash between the two worlds. Mindsets are different, approaches are different, team dynamics are different.
  • Microsoft products don't play well with non-Microsoft products in general. They make it relatively easy for you to go all-Microsoft, but not very easy to interface with the rest of the world.
  • If there is a new outsourced relationship being put in place, that is hard enough to manage already. You don't want technology and cultural differences on top of that!!

If you want .Net-style platform capabilities but an open source approach, you are much better off by going the Java platform route. Advantages:

  • Java itself is open source (OpenJDK), as are most of the major IDEs and tools
  • Java works excellently on Linux and Windows alike.
  • You can deploy client applications easily to either Windows or Linux machines with Java Web Start.
  • The open source ecosystem of libraries for Java is the best of any language, particularly on the server side but for networked client side applications it is also very good.
  • If you don't like Java-the-language, there are many great open source languages that run on the Java platform (Clojure, Scala, Groovy, JRuby, etc....)
  • If you want to leverage your PHP expertise, you can even run PHP on the Java platform with tools like Quercus (disclaimer: I haven't tried these myself)
share|improve this answer
add comment

In my experience (I was in a team that made a similar transition) there will be dificulties and frustrations, but you'll do fine, it all depends on the team's motivation to change.

Something that helped greatly was a one-week intensive training in .NET before starting the project.

share|improve this answer
    
This would not be just a transition : we will, anyway, keep a strong foot in opensource world. The question is, do we try to step one in MS's, at the same time ? –  Fabien Polley Oct 11 '11 at 19:21
    
Is your team motivated on this? Have you talked to them? I think Bruce Ediger's answers puts a fine perspective, it may be a bad idea. –  Pedro Oct 11 '11 at 19:46
    
Team will go for it if we do. The thing is, I've spent the last 5 years trying to eradicate MS from the company. I'd like C++ to be the right choice. But my consciousness hurts. –  Fabien Polley Oct 11 '11 at 20:22
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.