It's not completely impossible to do good work on the .Net platform.
But it is very, very unlikely.
.Net teaches programmers to write code to .Net, to Microsoft rules. It teaches its victims to use the excreable "viewstate" and POST when they mean to GET and pass volumes of unnecessary and poorly-encoded data back and forth between the server and client. .Net programmers learn to drag and drop things onto forms which Visual Studio then clogs up with layers of absolute-positioning tags, ensuring that the resulting pages will only display correctly on certain browsers with certain window-sizes and absolutely will not print properly, even when the planets are properly aligned. But that's okay, with .Net you can use Reporting Services to design hundreds of divergent "reports." .Net teaches programmers to code to Microsoft's api, not to web standards, fundamental principles of math and computer science or, frequently, to common sense.
It isn't to Microsoft's advantage for developers to consider other options and thus they try with great success to prevent .Net developers from realizing those options even exist. Microsoft documentation almost never refers to RFCs, even when doing so would be helpful. They hide the browser object model as much as they can and instead present the .Net wrapper for the browser object model as the only truth, with a Microsoft registered-trademark character after every thought.
It is possible to do good work on the .Net platform; it's just very, very unlikely.
Perhaps I've gone too far with this rant. As you may guess, it results from great frustration with well-funded idiocy in the wasteland of corporate American IT. Also I just tried to pay my property taxes online and the lovely .aspx page blew up with a CLIENT-SIDE VBSCRIPT error.
Good grief.
But here is a final and positive thought: quite a lot of business in the world is run on very poorly-designed systems, whether .Net or otherwise. Perhaps there much opportunity and advantage to be gained in creating better systems to replace them.
Perhaps you are being a bit too strong here. I might hold an uncommon contrarian view for news.yc but, here goes nothing:
"It teaches its victims to use the excreable "viewstate" and POST when they mean to GET and pass volumes of unnecessary and poorly-encoded data back and forth between the server and client."
You are right here to the extent that "viewstate" is the default way of managing state, scalably, in ASP.NET. And this adds to the amount of data being streamed between the server and the client, and back. But, when performance is the "key" consideration, you can turn off viewstate for controls that dont rely on it, or for the page as a whole. If you are really hard-core about performance, you can write HTTP handlers that override parts or whole of the default handlers. Thus, you can maintain state on the server side completely if you wish to (dealing also with the concomitant issues to scale the site).
".Net programmers learn to drag and drop things onto forms which Visual Studio then clogs up with layers of absolute-positioning tags, ensuring that the resulting pages will only display correctly on certain browsers with certain window-sizes and absolutely will not print properly, even when the planets are properly aligned."
If you look into the "flow" layout mode, you will see that "absolute-positioning" is only one of the options that the Visual Studio Designer presents to you. There are no browser compatibility issues per se with the "flow" layout mode for printing or otherwise.
Also, Drag and Drop is a _Good Thing_. I have been dabbling with RoR lately and am yet to find good tooling around it. But, Visual Studio .NET is definitely one of the most powerful IDEs I have worked in. Drag and Drop = Increase in productivity.
"But that's okay, with .Net you can use Reporting Services to design hundreds of divergent 'reports.'"
From what you say in your comment, you seem to have quite a bit of experience with developing web applications for businesses. Given that, I am quite surprised you havent encountered similar attitudes that I have, as far as "Reports" go. Business Users _LOVE_ reports. "Reports" have been given a substantial amount of attention in most projects I have been associated with. So they are not "divergent" by any means. Drag Drop Capability for Designing of Reports, with Design Time handles for all the entities that compose it, is again very powerful for a host of business scenarios.
".Net teaches programmers to code to Microsoft's api, not to web standards, fundamental principles of math and computer science or, frequently, to common sense."
"It isn't to Microsoft's advantage for developers to consider other options and thus they try with great success to prevent .Net developers from realizing those options even exist. Microsoft documentation almost never refers to RFCs, even when doing so would be helpful. They hide the browser object model as much as they can and instead present the .Net wrapper for the browser object model as the only truth, with a Microsoft registered-trademark character after every thought."
Tnese are very strong statements. :) I actually think that the Server Side abstraction that ASP.NET provides to developers is amazing. Why? Because being exposed to the "browser object model" for a number of browsers and their varying capabilities is not really meaningful when what I want to do is develop relativly straight-forward applications _fast_. You can also look into what ASP.NET calls "Adaptive Rendering". This also serves to abstract away the nitty-gritties of the browser making the HTTP requests.
"As you may guess, it results from great frustration with well-funded idiocy in the wasteland of corporate American IT. Also I just tried to pay my property taxes online and the lovely .aspx page blew up with a CLIENT-SIDE VBSCRIPT error."
Sure there are idiots in IT. And sure there are idiotic ways to develop software. Microsoft's marketing department does a good job capturing market share in the corporate world. Once they do that enough, it moves into the realm of supply and demand. When we have enough money to pay, enough unqualified people move into all points in the software development cycle, and what we get is this.
"If you are really hard-core about performance, you can write HTTP handlers that override parts or whole of the default handlers. Thus, you can maintain state on the server side completely if you wish to (dealing also with the concomitant issues to scale the site)"
Why should a programmer have to write special handlers just to save session state on the server side? Other platforms (Java, PHP, etc.) does that stuff for you in the background.
Thanks - that was a very nice and thorough response. And I quite agree with much of what you said. You don't have to use "viewstate" and flow layout is the sensible thing to do. But in actual practice .Net projects often do use viewstate and POST even when GET is appropriate and .Net projects frequently use absolute positioning even when flow is clearly approprate. As I said, it IS possible to do good web projects with .Net but in practice it doesn't usually work out that way.
Orkut is a great example of this. In its earliest incarnations it used postbacks and viewstates rather wildly but I notice every so often they seem to have rewritten it to use less and less of that stuff.
One thing I will disagree with you on - dividing your system up into input .aspx pages and reporting pages using reporting services - isn't good design. You shouldn't force a user to go to some other page to print the same data he sees on the screen. The data IS the report - if you can see it on the screen you should be able to print it on the paper without having to navigate to some other page. Think of the URL as the Dewey Decimal number for a piece of information. If you want to see the sales data for June, for instance, you might find it at http://mycompany.com/sales?fromdate=2007-06-01&todate=20...
Why should you have to navigate to a different URL to print that? Tim Berners-Lee's original ideas of the URL as the starting point for the semantic web seem rather good to me but I don't think there are many implementations which come close to recognizing the potential of this idea. Breaking a system into separate sections for reporting and viewing just seems a bit daft. But again, that's the sort of behavior .Net encourages - not requires, but encourages.
I think I misunderstood you there. You are right, from a "User Experience" perspective dividing up the web application's pages into sections for viewing and other sections for printing is probably not very good.
For some reason I thought you were talking about "Reports" and "Reporting" in general, as offered by the Report Viewer Controls in ASP.NET (using rdlc / rdl).
I have used CSS in the past to allow users to print pages (as they see it on the page) and it has worked well for me. Although Report Viewer Controls in ASP.NET have their own magical hold on the business users (Probably because they are made to look and feel similar to other Reporting Packages, which Business Users are comfortable with). So, I still think thats a good way to go, if that is your audience. :)
But, I do understand what you are saying and agree that there is the possibility of people using this technology where it shouldnt be used.
But it is very, very unlikely.
.Net teaches programmers to write code to .Net, to Microsoft rules. It teaches its victims to use the excreable "viewstate" and POST when they mean to GET and pass volumes of unnecessary and poorly-encoded data back and forth between the server and client. .Net programmers learn to drag and drop things onto forms which Visual Studio then clogs up with layers of absolute-positioning tags, ensuring that the resulting pages will only display correctly on certain browsers with certain window-sizes and absolutely will not print properly, even when the planets are properly aligned. But that's okay, with .Net you can use Reporting Services to design hundreds of divergent "reports." .Net teaches programmers to code to Microsoft's api, not to web standards, fundamental principles of math and computer science or, frequently, to common sense.
It isn't to Microsoft's advantage for developers to consider other options and thus they try with great success to prevent .Net developers from realizing those options even exist. Microsoft documentation almost never refers to RFCs, even when doing so would be helpful. They hide the browser object model as much as they can and instead present the .Net wrapper for the browser object model as the only truth, with a Microsoft registered-trademark character after every thought.
It is possible to do good work on the .Net platform; it's just very, very unlikely.
Perhaps I've gone too far with this rant. As you may guess, it results from great frustration with well-funded idiocy in the wasteland of corporate American IT. Also I just tried to pay my property taxes online and the lovely .aspx page blew up with a CLIENT-SIDE VBSCRIPT error.
Good grief.
But here is a final and positive thought: quite a lot of business in the world is run on very poorly-designed systems, whether .Net or otherwise. Perhaps there much opportunity and advantage to be gained in creating better systems to replace them.