Forgot your password?
typodupeerror
Microsoft Programming News

.NET Programmers In Demand, Despite MS Moves To Metro 319

Posted by timothy
from the lagging-indicator dept.
mikejuk writes "Are you a newbie programmer looking for a job? It seems your best bet is to opt for .NET. According to technical jobs website Dice.com, companies in the U.S. have posted more than 10,000 positions requesting .NET experience — a 25 percent increase compared to last year's .NET job count. So Microsoft may want us to move on to Metro but the rest of the world seems to want to stay with .NET."
This discussion has been archived. No new comments can be posted.

.NET Programmers In Demand, Despite MS Moves To Metro

Comments Filter:
  • by Anonymous Coward on Sunday October 09, 2011 @12:11PM (#37654426)

    Metro is merely a new style of app interface that can be written using .NET, not a replacement for it.

  • by giuseppemag (1100721) <giuseppemag@g m a i l .com> on Sunday October 09, 2011 @12:20PM (#37654498)

    Metro is a UI on top of Windows 8.

    WinRT is the new Windows 8 runtime, which will be accessible by C++, C# and any .Net language. The .Net standard libraries will be available for Windows 8 Desktop applications but not for Metro applications, which will be written targeting WinRT.

    So, the summary is wrong because:
    a) Metro is not a development framework
    b) .Net-related skills remain central in Windows 8 even when targeting Metro

  • Re:Confused (Score:5, Informative)

    by SerpentMage (13390) <ChristianHGross@@@yahoo...ca> on Sunday October 09, 2011 @12:49PM (#37654732)

    Here is Miguel on the topic and I think he does a great job of explaining it...

    http://tirania.org/blog/archive/2011/Sep-15.html [tirania.org]

  • by westlake (615356) on Sunday October 09, 2011 @01:07PM (#37654860)

    WinRT is the new Windows 8 runtime, which will be accessible by C++, C# and any .Net language.

    WinRT demystified [tirania.org] [Miguel de Icaza]

    WinRT is a new set of APIs that have the following properties:

    It implements the new Metro look.
    Has a simple UI programming model for Windows developers (You do not need to learn Win32, what an HDC, WndProc or LPARAM is).
    It exposes the WPF/Silverlight XAML UI model to developers.
    The APIs are all designed to be asynchronous.
    It is a sandboxed API, designed for creating self-contained, AppStore-ready applications. You wont get everything you want to create for example Backup Software or Hard Disk Partitioning software.
    WinRT wraps both the new UI system as well as old Win32 APIs and it happens that this implementation is based on top of COM.

    Some developers are confused as to whether .NET is there or not in the first place, as not all of the .NET APIs are present (File I/O, Sockets), many were moved and others were introduced to integrate with WinRT.

    When you use C# and VB, you are using the full .NET framework. But they have chosen to expose a smaller subset of the API to developers to push the new vision for Windows 8.

    And this new vision includes safety/sandboxed systems and asynchronous programming. This is why you do not get direct file system access or socket access and why synchronous APIs that you were used to consuming are not exposed.

    Now, you notice that I said "exposed" and not "gone".

    What they did was that they only exposed to the compiler a set of APIs when you target the Metro profile.

    You might be thinking that you can use some trick (referencing the GAC library instead of the compiler reference or using reflection to get to private APIs, or P/Invoking into Win32). But all of those uses will be caught by AppStore review application and you wont be able to publish your app through Microsoft's store.

    You can still do whatever ugly hack you please on your system. It just wont be possible to publish that through the AppStore.

  • by ljw1004 (764174) on Sunday October 09, 2011 @01:32PM (#37655002)

    That's not quite right.

    The .NET standard libraries exist in several profiles -- "Core", "Client", "Full".

    People today write their libraries under the "Core" profile so that they work equally well on any platform -- Silverlight, desktop, phone. Core contains the common standard libraries -- e.g. things like StringBuilder, LINQ, generic collections, and the other day-to-day programming side. "Client Profile" also contains UI stuff, and "Full Profile" also contains server stuff.

    For Metro, you will use APIs from both .NET Core Profile and from WinRT. WinRT will provide things like local storage APIs and UI. Core Profile will provide all the other stuff.

    NB. I'm on the C#/VB language design team at Microsoft.

  • Re:Confused (Score:3, Informative)

    by derGoldstein (1494129) on Sunday October 09, 2011 @02:39PM (#37655340) Homepage
    See also:
    Here's the one Microsoft Windows 8 slide that everyone wants to redo [zdnet.com]

    Anyway you look at it, C# isn't going anywhere.
  • Re:Confused (Score:5, Informative)

    by Tacvek (948259) on Sunday October 09, 2011 @03:20PM (#37655674) Journal

    I as understand it WinRT replaces COM.

    WinRT consists of several parts.
    The first such part is a replacement for COM, heavilly inspired by managed code. Indeed the restrictions on the exported interface are explicitly designed such that objects remain easy to call from managed code. It also lifts some idiotic restrictions that COM had. The interfaces are now described using CLI metadata in the form of a WinRT file. Despite being heavily inspired b y managed code, this is still all native code, and does not require a garbage collector.

    The second part of WinRT is a set of APIs that replace many Win32 Apis, exported using this new COM replacement. These APIs are also inspired by managed code, especially the naming and namespacing conventions. The APIs are not particularly low level, but are actually rather similar to many of the APIs in the .Net Framework. For example, consider the 'Windows.Data.Json' namespace. That hardly seems low level. Or how about 'Windows.Data.Xml.Dom' which is very roughly a ported version of the .NET 'System.Xml' namespace?

    When writing .NET metro style apps in C#, the Full .Net framework is actually available, although only a portion of it is exposed by default, because the app store will reject Metro-style apps that use APIs not exposed by default, because those APIs can be used to escape the Metro Sandbox. (This is much like how metro-style C++ code could call any win32 API, even those not exposed by default, but that will cause the application to be rejected from the app store).

  • by Alkonaut (604183) on Sunday October 09, 2011 @03:59PM (#37655944)
    1) If you write a windows (only) desktop app, I recommend c# over c++ for most scenarios (some high perf. things such as games excluded). The productivity is much higher.

    2) Windows phone apps. You definitely need .NET here.

    3) Streaming video apps for desktop. Html5 can't do it, and Silverlights video streaming beats flash every day of the week. Neither is excellent, and SL has terrible linux support. But still, SL is the least bad one.

  • by ljw1004 (764174) on Sunday October 09, 2011 @04:44PM (#37656190)

    The .NET standard libraries WILL be accessible from Metro applications. You'll write your C#/VB metro applications targeting both WinRT APIs and standard .NET APIs at the same time. I suspect that very nearly all C#/VB metro apps will be using many .NET APIs.

    (you had said that the .NET standard libraries wouldn't be available for Metro apps).

    For example:

    IAsyncInfo ai = MessageBox.ShowAsync("hello world"); // using a WinRT API
    Task t = ai.StartAsTask(); // here we're bridging from WinRT to .NET
    await Task.WhenAll(t, Task.Delay(100)); // here we're using standard .NET APIs

    (disclaimer: I work for Microsoft on the VB/C# language team)

  • Mod Parent Down (Score:5, Informative)

    by bondsbw (888959) on Sunday October 09, 2011 @05:47PM (#37656626)

    This isn't insightful. It's plain wrong. As someone who attended the Build conference and spoke directly with several Microsoft program managers, I can attest that Metro/WinRT is not a replacement for .NET. I asked several times something like "But can I do Q in the sandbox?" and they would say "No, in that case use regular .NET to do Q and distribute your apps through traditional channels (or link to the installer in the app store)." I never got the impression that Metro was always the preferred approach, just the preferred approach for slate devices.

    I don't know what Microsoft wants to do in the future past Windows 8. Maybe you're right, and Microsoft wants to give up their stronghold on enterprise applications that have certain hardware or interoperability requirements not allowed by Metro, so that they get control over tablet apps. But I'm not betting the bank on that.

  • Re:Confused (Score:5, Informative)

    by BitZtream (692029) on Sunday October 09, 2011 @06:54PM (#37657118)

    Sigh ... please tell me you don't tell people you know the .NET framework.

    What makes WinRT a royal pain is that it is low level C++ API. Thus C# becomes a second rate citizen and C++ a first rate citizen and it uses COM technologies.

    The Windowing and other GUI apis have ALWAYS been low level C (not C++) APIs, and likely always will be. Windows.Forms was built on top of that. I'm not real sure how you can say that C# is a second class citizen or a first class citizen, it is neither and both. .NET Libraries care not what language they are being used by, sure the API may not feel as natural in one language over the other, but thats not anything new and will always be there.

    Its rather retarded to think that any API other than the one at the lowest level is going to be the one that is most natural. Its all implemented in C at the low level, regardless of what lazy language you throw on top of it.

    Never thought that would happen in that COM is brought back to life.

    Then you have absolutely no idea how the .NET framework is built. .NET Assemblies are extensions to ActiveX, which are ... extensions to COM objects ... which are extensions of OLE2 objects. In fact, every .NET framework assembly is a OLE2 object, as is every ActiveX and COM object, each one just a different set of interface requirements on top of the previous.

    It is what it is and personally I think WinRT will fail overall because it means you are completely beholden to the Windows platform!

    You mean like Windows.Forms is beholden to the Windows platform? So I guess you're saying it would be absolutely impossible for someone to write a clean implementation of it or a wrapper around Qt or GTK to do the same? Thats odd, why do you seem to think what can be done for the Windows.Forms namespace can't be done again, why do you think thats the case?

    I'm fairly certain you have absolutely no idea how the .NET framework works. You have heard of Mono haven't you?

  • by GigaplexNZ (1233886) on Sunday October 09, 2011 @07:04PM (#37657214)

    None of Microsoft's own products are written in .NET.

    Visual Studio is.

  • by shutdown -p now (807394) on Sunday October 09, 2011 @07:10PM (#37657274) Journal

    None of Microsoft's own products are written in .NET.

    Most Microsoft development tools are written partially or wholly in .NET (guess what I do for a living...).

    FWIW, Windows itself has bits and pieces written in .NET as well. Nothing major, but it's there.

  • Re:Confused (Score:4, Informative)

    by shutdown -p now (807394) on Sunday October 09, 2011 @07:30PM (#37657438) Journal

    The Windowing and other GUI apis have ALWAYS been low level C (not C++) APIs, and likely always will be.

    The whole point of WinRT is to change that, actually. It's no longer low-level C. It's an object-oriented API from ground up using a framework that's deliberately designed to be consumable from different languages (GC or no GC, static or dynamic typed... there are a lot of considerations there).

    Then you have absolutely no idea how the .NET framework is built. .NET Assemblies are extensions to ActiveX, which are ... extensions to COM objects ... which are extensions of OLE2 objects. In fact, every .NET framework assembly is a OLE2 object, as is every ActiveX and COM object, each one just a different set of interface requirements on top of the previous.

    You are absolutely wrong here. .NET assemblies are not extensions to ActiveX. It doesn't even make sense, because an "ActiveX object" is a COM component with a visual UI. Nor are they COM objects. You can take a .NET class and make it visible to COM as a COM object, but it has to be explicitly done, limits what you can do with such a class, and is implemented via a separate bridge (COM Interop).

    Heck, .NET classes don't implement IUnknown (the most basic requirement for a COM object).

  • by Kaenneth (82978) on Sunday October 09, 2011 @07:30PM (#37657440) Homepage Journal

    Sharepoint, Visual Studio, Expression suite, the Tablet API, the Surface platform, Silverlight, many of the Windows 'Live' applications, and the XNA game framework are all written with .NET

  • Re:Confused (Score:4, Informative)

    by Eskarel (565631) on Sunday October 09, 2011 @09:06PM (#37658064)

    Except that's not what they're doing, they're un-deprecating C++, not deprecating C#.

    Microsoft seems finally to have come to the conclusion that anyone with a lick of sense could have told them a decade ago. Some things work really well in managed code, some things don't. A large part of Microsoft's product suite has been migrated to .NET, but for reasons anyone with half a brain could tell you, not everything should be written that way. At the absolute least, you need to write enough code to run .NET(or any managed code) in an non managed language because unlike C++, managed code cannot run itself. In addition to that sort of stuff there's plenty of things which could be written in .NET, but for which doing so wouldn't make any real sense.

    At present there are certain things in the Windows OS which are a huge pain to do in C++ since Microsoft has essentially replaced MFC with .NET, so you end up mixing in C# code where it really doesn't make any sense. Microsoft are rectifying this and allowing C++ to be an equal player, they're not getting rid of .NET, they are continuing to build their own software in .NET(where it makes sense), they're just allowing C++ programmers to play too.

  • Re:Confused (Score:4, Informative)

    by spongman (182339) on Sunday October 09, 2011 @11:34PM (#37658788)

    AFAIK, it's not a replacement of COM, as such. more like a set of enhancements to COM:

    - it's still based on IUnknown [microsoft.com]
    - instead of CoCreateInstance [microsoft.com], HKCR [microsoft.com] & CLSID [microsoft.com]s, theres RoActivateInstance [microsoft.com] and its string-based registry entries.
    - instead of VB's IDispatch [microsoft.com]/ITypeInfo [microsoft.com], there's IInspectable [microsoft.com]/IMetaDataImport2 [microsoft.com] for getting type information
    - instead of BSTR [microsoft.com], there's the immutable HSTRING [microsoft.com]

    the confusing this is that there's a whole bunch of work done in the language environments (C++ compiler, .NET runtime) to make all this invisible.

You can measure a programmer's perspective by noting his attitude on the continuing viability of FORTRAN. -- Alan Perlis

Working...