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.

I've been programming in .NET for several years now and am thinking maybe its time to do a platform switch. Any suggestions about which platform would be the best to learn? I've been thinking about going back to C++ development or just focusing on T-SQL within the Microsoft stack.

I'm thinking of switching because:

a) I feel that the .NET platform is increasingly becoming commodified--meaning that its more about learning a GUI and certain things to click around than really understanding programming. I'm concerned that this will lend itself to making developers on that stack increasingly paid less.

b) It's very frustrating to spend your entire day essentially debugging something that should work but doesn't. Usually, Microsoft releases something that suggests anyone can just click here and there and poof there's your application. Most of the time it doesn't work and winds up sucking so much more time than it was supposed to save.

c) I recently led a team in a small startup to build a WPF application. We were really hit hard with people complaining about having to download the runtime. Our code was also not portable to any other platform. Added to which, the ram usage and slowness to load of the app was remarkable for its size. I researched it and we could not find a way to optimize it.

d) I'm a little concerned about being wedded to the Windows platform.

What are the pros and cons of adding another platform and which platform do people suggest?

Thanks!

share|improve this question

closed as not constructive by Yannis Rizos Mar 7 '12 at 17:44

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

4  
Why are you considering a platform change? –  Larry Coleman Jan 11 '11 at 18:19
1  
Are you bored, do you think there will be other opportunities? –  JeffO Jan 11 '11 at 18:52
1  
This question is too vague to be of any use, currently. Please edit to include why you are thinking of switching platforms. (Productivity? Variety? Employability?) –  Eric Wilson Jan 11 '11 at 18:53
    
None of your reasons seem like valid criticisms of .NET. a) C# has powerful functional constructs and dynamic language types. b) Code generation is for things like Linq to SQL, not building full-blown applications. c) You will always have somebody complaining about having to download things. If you switch to Java, it will be the Java runtime they complain about. Only d) the concern about WPF slowness, might have some basis. –  Robert Harvey Jan 12 '11 at 3:16
1  
@Robert: I typically try to use MVC, but it doesn't line up very well with what people need sometimes. In my current project, for instance, people want modal popups interacting with several database tables. Maybe its because I'm only intermediate with the MVC framework, but I found getting that behavior working with MVC quite challenging--primarily because of model binding and form submit behavior. –  q303 Jan 12 '11 at 18:14

8 Answers 8

Java

If you're going to shift the entire stack (Web, DB, services, everything), then I would suggest Java/J2EE. It's the go-to open source stack for most large enterprises.

Pros:

  • Open Source options for technologies
  • Solid job opportunities
  • Free development tools (Though, .NET stack has those as well with Express editions.)

Cons:

  • Learning curve
  • Job market is different in all areas, may have a hard time getting started with less experience than your current technology

Of course, the .NET stack is solid, and what I currently use. If you're switching for sure, Java is a good choice in the current market.

share|improve this answer
2  
What about Oracle and the fight over Java? Also, I get the feeling that not a lot of large companies use .NET for some reason. Most of the places I've been are small teams looking to leverage .NET to reduce their development costs. –  q303 Jan 11 '11 at 18:17
3  
What fight over Java? It actually is less exciting than news outlets would like you to believe. –  Mchl Jan 11 '11 at 18:20
    
Large companies aren't going to rewrite existing systems just because there's there's some politics. News isn't worth millions of dollars to most companies. Once it's economically feasible to switch, they will, but that probably won't be for a long while for many. –  Ryan Hayes Jan 11 '11 at 18:30
2  
@Ryan. I'm just saying that it doesn't seem like a lot of major companies are hiring in .NET--even Microsoft doesn't hire in it. From what I've seen, it's the 3 or 4 person shop that wants something built and think that the .NET abstraction will lead to productivity gains and that a .NET person would be cheaper than someone in Java. –  q303 Jan 11 '11 at 18:48
1  
Here in the Boston area, .NET/C# is probably the single most common hire in my admittedly subjective opinion. There is a HUGE demand. –  Adam Crossland Jan 11 '11 at 19:58

Python and Ruby seems to be where all "the cool" kids are these days

I still think .Net and C# is one of the best platforms there is right now, especially when it comes to application development since it has excellent support for multicore/multithreading programming and wpf/silverlight is great for next generation UI's (and hopefully smartphone development with Windows Phone)

That being said, Python and Ruby seems to have a great community and is strong on the web development side of the track so that's a great Pro

share|improve this answer
1  
I make my living as a .NET/C# engineer, but I work a lot with both Python (through Google AppEngine) and Ruby (through Rails) quite a lot, and I feel like they are excellent complimentary skills. Ruby, in particular, really stretched my idea of what you could do with a programming language. –  Adam Crossland Jan 11 '11 at 20:00

I'd echo MattiasK but for a different reason. Do something that's really going to blow your mind. Be it Haskell, Erlang, Ruby, or any of the functional and/or dynamic languages. If you go with yet another OO language you don't really learn anything new, other than some syntax. Doing something VERY different can actually help you generate new ideas that could be of a big benefit in your "day job" as well, beside just being fun. I've actually just kicked off a whole dynamic/functional learning session with Node.js and Javascript. Yes, some will scoff at Javascript, but if fulfills the requirements of being object oriented, functional and dynamic, and with the development of projects like Node.js and the new JIT compilation of Javascript in Google's new V8 engine really make for some interesting developments in the Javascript world.

share|improve this answer

I recently shifted away from .NET. Nowadays I code a lot with C++ and Qt for cross-platform desktop applications and Python with Django for web applications.

If you plan to write desktop applications I suggest sticking with C++ and Qt. Google Earth, Opera, Skype all use Qt. It's extremely powerful.

If you plan to stick with web development I suggest Python with Django. Python is an awesome language, Django is extremely easy and powerful and it comes with an integrated ORM.

share|improve this answer
    
May I ask, how do you keep the file size of the application low using Qt? My executables are always 50mb big. –  Daniel S Jan 11 '11 at 21:38
    
@Daniel S - Are you statically linking to Qt? Otherwise there's really no reason to end up with such large binaries. Also what platform are you using? On Mac OS X you generate bundles with Qt embedded which usually leaves my application with 16mb in size. On linux and windows I usually end up with a pure binary executable around 150kb in size. –  Raphael Jan 11 '11 at 21:44
    
@Daniel S - Also, what version of Qt are you using? –  Raphael Jan 11 '11 at 21:44

The computing becomes more and more about parallel and distributed systems now that Moore's law for CPUs no longer holds. This makes functional languages that are easy to parallel ever more attractive. And these are attractive for their expressiveness, too. Specifically three of them seem to me going to become hot in near future.

F#: an offshot of ML, a concise functional language, easily interoperable with existing huge .net infrastructure. A good starting point, a technology you may use in your existing projects.

Scala: a rather nicely designed language, interoperable with existing huge Java infrastructure. Used by sites like Twitter or Foursquare. To my mind, more expressive than F#.

Erlang: a very simple language to build huge highly-distributed systems. Mostly used by telecoms, but deserving a wider acceptance.

Also, taking a look at Haskell may be quite refreshing.

Currently all this tech is not exactly mainstream now, that's why you don't see huge lots of jobs requiring these, and that's why these jobs may pay above average, and land you in a more advantageous position when mainstream finally arrives there.

share|improve this answer

Desktop development is much better in C++. Java has similar issues to .NET, requiring a Runtime environment download. As many have stated, web developer is open slather. You can even mix and match based upon the solution requirements. If you after a challenge in the .NET environment there is always F#.

share|improve this answer

You've described Windows programming as it has always been. That said, there are very good technologies in the .Net stack, and some of the issues you've described can be taken care of with a good installation package. I.e. make installing the .Net framework as part of the installation for your app.

As far as making a change, just know you'll be trading one problem for another. Are you wanting to do web applications or stick with desktop applications? Just know that with desktop applications there are few cross platform GUI APIs (Qt on C++ is one of them). Other than that and you are looking at .Net for Windows, Objective-C for Mac, and C/C++ for Unix.

If you are jumping ship to the web application frontier, the options are wide open. The browser is your cross platform GUI, with HTML, CSS, and JavaScript the way to make the clients do what you want. On the server side, you can use any number of languages and platforms from Python or Ruby to Java or C#.

share|improve this answer
    
+1 for "Windows programming as it has always been" –  Larry Coleman Jan 12 '11 at 14:06

If you switch to linux and Mono you'll be able to use your current skill set while you transfer over to some very different technologies. Once you're comfortable on linux, you can transition to Java, Perl, C, etc.

share|improve this answer

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