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.
Yes, they were running coldfusion until about 2 years ago, at which point they switched to a hybrid solution of Blue Dragon (ColdFusion running on .NET) and ASP.NET.
Seriously, the site had more downtime, more errors, and was slower than any site I have ever seen. I'm betting that you missed that though.
The founders pored so much money into just barely keeping their non-scalable site running that they completely watered down their share of the company. Is that what you call succeeding?
According to this (http://news.yahoo.com/s/nm/20070820/media_nm/myspace_dc_2) MySpace is at about 61 million active, unique users while Facebook is at about 19 million. Also MySpace users spend more time on the site than Facebook uses, which I'm sure translates to more traffic per user.
As a very unscientific test, I just logged on to my Facebook account and my Myspace account and noted the following about my home pages:
Myspace
html size: 16.38kb
count of external .js files: 10
count of external .css files: 4
render mode: quirks
load time (time to reload, thus assuming most requests cached, average of 3): 3191ms
Facebook
html size: 5.35kb
count of external .js files: 27
count of external .css files: 25
render mode: standards
load time (time to reload, thus assuming most requests cached, average of 3): 3207ms
I was surprised the load times were so close. MySpace feels slower but that may be because pages frequently include external images and sound files.
I don't mean these comparisions to either trash or promote MySpace or Facebook; instead I think it's instructive to consider which benchmarks translate to the best user experience and what techniques contribute to the better set of numbers.
You're about two years too late to do benchmarks on myspace as a startup. They've re-written the thing at least twice over and put a whole lot more money into fixing it up by now.
Myspace's server software and html was bad. So so bad.
I'm guessing your estimates are correct enough. I doubt the user count for all YC projects exceeds 500,000, and according to http://forevergeek.com/articles/debunking_the_myspace_myth_o..., MySpace has at least 43 million, which by your math would mean that Facebook has around 14 million users. Having been a frequent MySpace user myself in the not-too-distant past (I'm 22, and I used it from age 18-20), I concur that there have been times in which MySpace "limped along". It was not uncommon to get multiple "application error" (for lack of a better term -- I don't know/remember what it's called under .NET) during a surfing session, or to encounter a page or profile that just would not load. I've since switched to Facebook, and in comparison, I've never had Facebook barf on me. This, to me, evidences either the dim-wittedness of MySpace's developers, or superiority of Facebook's web solution (http://article.gmane.org/gmane.comp.web.cache.memcached/3224) over what MySpace has chosen.
Note that I am not saying that PHP > .NET -- obviously on sites of this large scale, as has already been noted in the post's comments, using any technology "out of the box" is looking for trouble. What I mean to imply, however, is that perhaps for sites this big, .NET is the wrong thing. And, as the parent comment points, out, IIS certainly isn't helping things, though I don't think Apache would necessarily be a magic bullet. Craigslist, which does many megabytes of data transfer per minute, is considering switching to Lighttpd because Apache too heavyweight.
P.S. Sorry about the links -- I couldn't figure out how to link a text string to a URL. Can someone enlighten me?
Note that .net is essentially just a VM and set of APIs. There is nothing stopping someone from building site to service massive loads. The bottlenecks occur when .net is paired up with IIS, and various asp.net controls and ViewState.
For example, we use apache with mod_mono and write our own custom controls.
Couldn't the same argument ("just a VM and a set of APIs") be made for many programming languages, Web or otherwise? I'm not criticizing what you wrote, just trying to make sure I understand what you're saying.
Gotcha. I'm just arguing (mildly, 'cause the most .NET experience I have is a two-week project a couple years ago) that possibly .NET and friends is not the best choice for a massive site such as MySpace, at least if you are not prepared/qualified to completely reinvent the wheel (as you seem to have done). Then again, Facebook's solution seems pretty ad-hoc as well. Perhaps such wheel invention is inevitable.
Yeah I see your points. I just wanted to point out that ".net" is different than asp.net and IIS. Those are part of the complete default stack and are typical bottlenecks. In a way they're designed to achive easy development/deployment over performance.
asp.net out-of-the-box will not work for a massively concurrent public facing app. However, neither will php, rails, django, any of the java frameworks. "re-invent the wheel" might be an overstatement for what you need to do, but no matter what...you're going to do some serious tweaking since every app has different needs
We're using .net, which has worked out good for us. Yes, the default settings are designed to lower the bar for IT shops to build apps easily. If you know what you're doing, you can avoid the muck and get right to the extensive and powerful features.
Our configuration....
- Lots of JS, homegrown ajax framework that extends YUI
- asp.net but with custom controls that we wrote
- custom http handlers take care of the call backs
Why did your group even decide to use .Net at all? You seem to have avoided a lot of the traps of .Net by avoiding a lot of what actually comprises .Net. Are you running on Windows servers?
All spoken here do not understand .Net enough. I worked for tagworld.com and this web project is "quite" big. Viewstate and drag'n'drops and the like are nowhere used.
.Net is NOT for web sites, it is for web projects, really big and heterogeneous, with lots of services behind.
For other please use php and the like, with "quick submit to db" approach.
Could you elaborate on what makes the tagworld.com project so "big"?
Edit: Also, I find it interesting that on a site so big (I mean MySpace, and thusly, on a site that should have a fair number of smart developers working on it), they have not changed the default IIS error message for something a little more site-specific and user friendly. To see what I mean, click the story's URL. :) Or is doing something like that deep voodoo on a robust web platform like .NET+IIS?
they didn't change it for the same reason that they didn't do nice design, IMO.
tagworld.com is really complex thing despite its simplicity from the outside. It has unique user base and handles around 1000 requests per minute. It uses around 20 web servers and 20 other servers for db, file storage, video/photo converting.
All code is written from scratch and .Net is great in maintaining the developement process. C# compiles and most errors get caught before deployment. In addition there is a buit in mechanism for validating dynamic pages, which also helps a lot. For some time we used to deploy the whole thing daily, with active users on the site.
.Net is more for the corporate world with lots of legacy code and outside apps. It just can't be done almost with any language except java.
they are relatively simple in terms of business logic. As long as you can 'shard' a problem parallel servers can solve your problem easily. As soon as that is no longer possible because of business logic constraints the real fun begins.
its not exactly quick and dirty...its rapid development, which means they eventually can get something very complex (which I'm sure facebook has in place), but if they need to start over, they can do so quickly.
It's not like Microsoft's web stack sucks. Obviously C#'s not en vogue, but it's a fine way to put together a website. There's actually some really good stuff in there, and they've had the presentation/code-behind separation in since before people though it was a good idea.
I can't speak on C# vs Python or C# vs. Lisp, since I haven't coded in either of those languages. I can speak on C# vs. php - I just finished a job with php and started C#. Originally,I thought I loved it because of the library (ie dataset, dataview,gridview), and garbage collection. Then the object orientedness of it all got really, really hard to implement rapidly. I may still use it to write sockets and hwnd stuff for windows (I'm a game dev), but for web stuff, I'll stick with php and maybe learn py.
well at the "planned" level, nothing. At the throwaway level, everything. Things that would take ten seconds in php (like a simple post form to a db) could end up taking 2-3 hours in C#/.NET
+1 for that. Even though I am trying to stay away from Microsoft platforms these days, I still will say that cirics of .NET/C# who posted above do not even deserve a serious answer. One "word" - RTFM.
And nobody so far has mentioned one of the best features of ASP.NET apps: crazy speed. After everything gets precompiled it is amazing how much load a cheapo $1K server can handle.
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.