Why is .NET so popular? (Serious Question)
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
I don't know man, I just work here.
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
Why not assembly while you're at it? :laugh:
Wout
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
Because ASP.NET is so much better than any alternative. Due to having .NET developers and the mistaken belief that .NET is good for anything, it gets used for everything. For internal one off tools, .NET can be very useful, though I have enough experience with C++ and MFC that that usefulness is marginal (and I have a few tools which I was able to write much faster in C++; I know because to entertain myself, I wrote them in both.) Almost all my production code that ships to customers is in C++. It comes down to experience. I'm continually surprised at the number of veteran developers who really don't know the Windows API all that well. I've also run across too many developers who aren't very good programmers and jump to any new technology claiming it's better in an attempt, I believe, to mask their overall incompetence. With .NET, for example, the could give a good presentation and sound like they knew what they were talking about, but actually wrote worse C# code than C++ mostly because they got so damn lazy.
-
Why not assembly while you're at it? :laugh:
Wout
Assembly! Assembly? You youngsters today are spoiled. Machine Code is the way to go. :-D
Henry Minute Do not read medical books! You could die of a misprint. - Mark Twain Girl: (staring) "Why do you need an icy cucumber?" “I want to report a fraud. The government is lying to us all.”
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
.Net is much more friendly to new programmers than something like MFC. .Net is a far more comprehensive library than MFC (or any other framework i've ever seen). also, .Net provides a far better way to do web programming than C++. (and i say this as a die-hard C++ programmer) and this "meta environment" you speak of is a bit exaggerated. .Net languages are compiled to native code, at run time. there isn't really any huge "runtime" between the code and the OS. there's an environment and a standard librar, just as there is with any other language. but it's not like .Net is interpreted or anything.
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
.NET is only popular in the Business Software World. Other application domains feature other favorite languages.
Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost
-
Why not assembly while you're at it? :laugh:
Wout
I love writing assembly, just can't find an excuse too. I really do believe assembly should be learned by all CS students very early on. It sheds a whole lot of light on what's really going on with the computer and makes you very jaded about claims of new technology (since you know that it's all just assembly in the end.)
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
b_dunphy wrote:
Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I
Shows a bit of ignorance on your part. Unlike java or UCSD Pascal, .Net JITs to native code, optimized for the particular OS and hardware it is running on, so it can in many cases actually be faster than pre-compiled Win32/64 code, since it can take advantage of OS specific and processor specific optimizations. Java and UCSD Pascal compile to p-code which must be then executed by an interpreter.
b_dunphy wrote:
realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
That most people would rather not have to implement all that functionality themselves? that a large, robust framework really speeds application development be not forcing developers to re-invent the wheel every time?
-
I love writing assembly, just can't find an excuse too. I really do believe assembly should be learned by all CS students very early on. It sheds a whole lot of light on what's really going on with the computer and makes you very jaded about claims of new technology (since you know that it's all just assembly in the end.)
I only did any assembly at Uni, but really enjoyed doing it. No-one else in the class (it was a crap course at a crap university) could get to grips with it at all, to the extent that the lecturer gave everyone his solution. He marked mine wrong simply because it was different to his, then I pointed out that not only did my solution work, it was more efficient than his was.
Every man can tell how many goats or sheep he possesses, but not how many friends.
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
b_dunphy wrote:
meta environment running on top of a GUI on top of the operating system
I can only speak for myself. Because no one is hiring for DEC-C on OpenVMS anymore. :sigh: Because it lets me write Windows (WinForms) apps -- I completely failed to understand OWL and VB2. Because of ADO.net. (Does SQL Server 2008 support esql?) Because C# is a great language. It's only major fault is its dependency on .net X| . Oh, and because of garbage collection and Reflection. I should probably try writing a Windows-Service-hosted WCF service in C. :cool:
-
b_dunphy wrote:
Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I
Shows a bit of ignorance on your part. Unlike java or UCSD Pascal, .Net JITs to native code, optimized for the particular OS and hardware it is running on, so it can in many cases actually be faster than pre-compiled Win32/64 code, since it can take advantage of OS specific and processor specific optimizations. Java and UCSD Pascal compile to p-code which must be then executed by an interpreter.
b_dunphy wrote:
realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
That most people would rather not have to implement all that functionality themselves? that a large, robust framework really speeds application development be not forcing developers to re-invent the wheel every time?
Rob Graham wrote:
.Net JITs to native code, optimized for the particular OS and hardware it is running on, so it can in many cases actually be faster than pre-compiled Win32/64 code, since it can take advantage of OS specific and processor specific optimizations.
Baloney. The JIT compiler is still saddled with the constructs of .NET. I've done extensive benchmarking and have found that purely algorithmic code is 4x slower on average with .NET than native C++. When using the framework, there are portions of .NET that are faster, though once you figure out what they're doing, you can get almost always get better performance with C/C++. (A common trap is file i/o. .NET can make this look so fast until you realize that they are often caching the entire file!)
Rob Graham wrote:
not forcing developers to re-invent the wheel every time?
Laziness. There are plenty of libraries out there that offer fantastic functionality for C++. They are just as easy to learn as .NET and sometimes easier. The difference is that .NET puts all this massive amount of code (35MB of mostly native C++) in one place with one runtime. If you gave yourself a budget of even half that, you can easily build a list of fantastic C++ libraries that aren't very expensive. I will openly and totally conceded that dealing with COM is much easier in .NET. One reason is that the objects are actually documented (using undocumented objects in .NET is as big a pain as in C++ and Microsoft still has way too many undocumented "must use" COM objects.)
-
b_dunphy wrote:
Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I
Shows a bit of ignorance on your part. Unlike java or UCSD Pascal, .Net JITs to native code, optimized for the particular OS and hardware it is running on, so it can in many cases actually be faster than pre-compiled Win32/64 code, since it can take advantage of OS specific and processor specific optimizations. Java and UCSD Pascal compile to p-code which must be then executed by an interpreter.
b_dunphy wrote:
realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
That most people would rather not have to implement all that functionality themselves? that a large, robust framework really speeds application development be not forcing developers to re-invent the wheel every time?
Rob Graham wrote:
Unlike java
Java had JIT compilation for a long time.
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
This is the only bus has destination and moving to correct direction, also the bus driver is Microsoft. so do you wanna get in or left behind? because you cannot rely on other buses they might broke down in the middle of no where, or taken over by someone as hostage... :rolleyes: This is as serious as I can get right now ;P
-
Why not assembly while you're at it? :laugh:
Wout
That's not really a helpful response. It is valid to ask "at what level of abstraction should I be working?" The answer to this question is not, as many people seem to assume, that we ought to work at the highest level of abstraction possible. Abstraction is not necessarily an absolute good. At the lowest level of abstraction, we have machine language (NOT assembly language, as anyone who's ever hand-assembled code can tell you), followed by assembly language, and then by languages like C and Pascal, and then by newfangled technologies like .NET and Java, and finally by "code free" quasi-development technologies. As one moves among these levels of abstraction, there are tradeoffs. Moving up in abstraction reduces the speed of the object application and (more subtly, but importantly) the speed of the development tools. It also reduces the depth with which the developer can claim to understand his or her code; again, this is a subtle and oft-overlooked drawback to abstraction, but it's real. At each level, the returns to greater abstraction diminish. Assembly is much easier than machine language, which doesn't correspond to even the most basic human expectations of what a "language" should be. C is significantly easier than assembly, although the difference is less dramatic. C++ and C# offer benefits compared to C, but, again, these are not as dramatic as the previous steps up the abstraction ladder. I would submit that C#, Java, etc. may reside at a level of abstraction that is too high for many projects. Garbage collection is, for me, an example of why this is so. Look at what good C++ programmers do with automatic smart pointer variables, and then ask yourself whether an non-deterministic, out-of-thread system is really necessary to reclaim heap objects. Such "magic" definitely abstracts away some troublesome details... but are we sure (given the neat alternatives) that this is a good thing...? I can imagine plausible arguments both ways. Finally, let me assure you that for someone with a good basic understanding of digital computers, working with assembly language is easy. Personally, I do not find it to be any harder than much of the .NET work I do. Sure, assembly requires me to know about things like how numbers are represented, how looping and decision structures are implemented, etc., but it will also never present me with one of those head-scratching, out-of-the-blue errors that make it so difficult to work with high-level frameworks, e.g. "Failed set trust point in ssl context" or "P
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
b_dunphy wrote:
What am I not seeing here?
Well, it's classic VB's replacement. It makes things easier for your typical biz app and takes it a one step further too. And MS has a pretty good stronghold on this market segment so if they push it for Windows dev, then it's gonna get popular in the business world. And, I say this as a die-hard C/C++ fan with a day job in .NET.
Jeremy Falcon
-
Rob Graham wrote:
Unlike java
Java had JIT compilation for a long time.
It does not however, compile to native code, which was my point.
-
Because ASP.NET is so much better than any alternative. Due to having .NET developers and the mistaken belief that .NET is good for anything, it gets used for everything. For internal one off tools, .NET can be very useful, though I have enough experience with C++ and MFC that that usefulness is marginal (and I have a few tools which I was able to write much faster in C++; I know because to entertain myself, I wrote them in both.) Almost all my production code that ships to customers is in C++. It comes down to experience. I'm continually surprised at the number of veteran developers who really don't know the Windows API all that well. I've also run across too many developers who aren't very good programmers and jump to any new technology claiming it's better in an attempt, I believe, to mask their overall incompetence. With .NET, for example, the could give a good presentation and sound like they knew what they were talking about, but actually wrote worse C# code than C++ mostly because they got so damn lazy.
Joe Woodbury wrote:
I've also run across too many developers who aren't very good programmers and jump to any new technology claiming it's better in an attempt, I believe, to mask their overall incompetence.
5!
Jeremy Falcon
-
I have some limited experience with C# and VS 2008 and I don't understand why the .Net framework is so popular. It is a meta environment running on top of the operating system just like Java and the non-Windows implementations do not have all of the capabilities of the Windows version so it's not truly cross platform. I don't see why -- other than Microsoft's semi-forcing the issue -- someone would choose to use this. Shouldn't Win32/64 code run just as well, if not better, since there is no runtime between the code and the system? I can't help thinking of Java or even UCSD P-System Pascal when I look at this. I realize .Net has a large amount of built-in functionality but the same thing could be implemented in native code as well. What am I not seeing here?
b_dunphy wrote:
why the .Net framework is so popular.
Depends on whom you ask? How many*desktop* applications which you use on a day to day basis are written in .NET? Let' see:- 1. Internet Browsers - Chrome, IE, FF, Opera -> None of them are in .NET 2. Microsoft Office - Not .NET (though some add-ons can be .NET) 3. Windows Live Messenger, Yahoo messenger, Google Talk etc - Not .NET 4. Notepad, Paint, Calculator - Not .NET 5. Visual Studio - Mainly .NET 6. SQL Server - Not.NET but portions of Management studio/BI Studio are .NET 7. Task Manager - Not .NET I am just talking about Windows here. Mac and Linux users may survive even without knowing about .NET. The place where .NET is popular is in Websites developed for IIS (lot of intranet sites). ASP.NET is almost the de-facto choice. Now again, IIS is a very small percent of total websites out there. The only other place where .NET is popular is enterprise applications or custom developed enterprise apps.
-
That's not really a helpful response. It is valid to ask "at what level of abstraction should I be working?" The answer to this question is not, as many people seem to assume, that we ought to work at the highest level of abstraction possible. Abstraction is not necessarily an absolute good. At the lowest level of abstraction, we have machine language (NOT assembly language, as anyone who's ever hand-assembled code can tell you), followed by assembly language, and then by languages like C and Pascal, and then by newfangled technologies like .NET and Java, and finally by "code free" quasi-development technologies. As one moves among these levels of abstraction, there are tradeoffs. Moving up in abstraction reduces the speed of the object application and (more subtly, but importantly) the speed of the development tools. It also reduces the depth with which the developer can claim to understand his or her code; again, this is a subtle and oft-overlooked drawback to abstraction, but it's real. At each level, the returns to greater abstraction diminish. Assembly is much easier than machine language, which doesn't correspond to even the most basic human expectations of what a "language" should be. C is significantly easier than assembly, although the difference is less dramatic. C++ and C# offer benefits compared to C, but, again, these are not as dramatic as the previous steps up the abstraction ladder. I would submit that C#, Java, etc. may reside at a level of abstraction that is too high for many projects. Garbage collection is, for me, an example of why this is so. Look at what good C++ programmers do with automatic smart pointer variables, and then ask yourself whether an non-deterministic, out-of-thread system is really necessary to reclaim heap objects. Such "magic" definitely abstracts away some troublesome details... but are we sure (given the neat alternatives) that this is a good thing...? I can imagine plausible arguments both ways. Finally, let me assure you that for someone with a good basic understanding of digital computers, working with assembly language is easy. Personally, I do not find it to be any harder than much of the .NET work I do. Sure, assembly requires me to know about things like how numbers are represented, how looping and decision structures are implemented, etc., but it will also never present me with one of those head-scratching, out-of-the-blue errors that make it so difficult to work with high-level frameworks, e.g. "Failed set trust point in ssl context" or "P
In languages like C, C++, C#, Java etc you still "have to" know how numbers are represented - ok you might get away with ignoring issues like that, but then your code is likely to suck. Such as this, I never want to see this, if I see this I will tell you in your face that you suck and I will tell your boss to fire you:
bool IsPowerOf2(int x)
{
for (int i = 0; i < 32; i++)
if ((int)Math.Pow(2, i) == x)
return true;
return false;
}And yes, I saw that one in the wild. Suggested replacement:
return (x & (x - 1)) == 0;
edit: the replacement treats 0 as power of 2, of course, usually not a problem in my experience and easy enough to change.