After trying a few different languages .NET was definitely the fastest outside of C/C++. I didn't feel like learning C++ and then having to build a homebrew everything on top of it.
My history is primarily ECMAScript, so it was very easy for me to pick up C#. Going between ActionScript 3 and C# constantly is a breeze. I couldn't imagine going between say.. Lisp and ActionScript 20 times a day. It would be such a detriment to my productivity.
Seriously, I agree 100%. I code in AS3/ JS/ and C# without a problem. Anytime I have to write SQL or VB (for my newly acquired day job), I cringe because of the syntax. Gotta love those curly brackets :}
There are plenty of startups using ASP.NET or Java-based tech. In fact most companies started by "business types" are .NET/Java because they are easier to find disposable coders for.
You don't see as many .NET shops here because most posters are (a) young, (b) non-business types, and they had a chance to pick a technology. Most went with something dynamic and Linux-based.
We did too. We're on RoR, despite having tons of .NET expertise. And here is why: (a) speed of developemnt, (b) cost of decent dedicated hosting, (c) more fun
System.Console.WriteLine("Hi, I'm a .NET library function for the CLR being called in C#");
System.out.println("Hi, I'm a Java library function for Java being called in Java");
Java The Language and C# are extremely similar, and if the differences bother you that much you can use J#. Java and .NET both provide managed runtime environments. Java and .NET both provide a large library of functions for that environment.
I'd say if you're going to put Java and .NET into different categories, you should have some solid reasons, so let's hear them.
Java and C#/C++ are very similar languages as far as I know.
ASP.NET seems very similar to PHP.
.NET just sounds a horrible mess. VB.NET? why would anyone touch anything that has a language 'visual' 'beginners'. Don't those two words hint at anything?
Comparing Java (the language) to .NET (the system that lots of m$ languages run on) doesn't make much sense though IMHO.
Nice slogan, but fails when put to the test. C#/C++ = both OOP languages, semi-color delimited, mostly early binding, strong typing, etc. Java and JavaScript are not anywhere near as close. OOP vs prototypes, loose typing vs. strong typing, closure-functional style vs imperative style, etc.
No offense, but you clearly have not used both languages. When you consider the platform in addition to the syntax, C# is absolutely nothing like C++. C# is managed, garbage collected, bytecode-based and JITted. Saying C++ and C# are similar is like saying that technically a unicycle and an airplane are the same because they can both help you get somewhere.
Everybody knows that Java is just C++ with the sharp edges taken off. C# is Microsoft's Java-killer. C# and C++ are directly related to each other. It's the same lineage. Where do you think you get the idea of constructors, interfaces, friends, volatile methods, etc? I understand that C# is managed, but how the runtime handles memory allocation to me just isn't the deal-killer you're making it out to be. There's lot's of ways to have managed C++ code. Third-parties have been making smart memory managers for C++ for as long as I can remember.
Look -- I love C++. It's my favorite language of all, not that I'd code anything in it anymore. I've done Java, I've done Javascript (a lot of it), and I've done a lot of C#. I know the languages. C# is much closer to C++ than Java is to Javascript.
You made a cute comment. I called bs on you. Get over it. Best way to get out of a hole is to stop digging.
I didn't make the first comment. I just showed up to say that you were completely wrong in your retort. I also don't know exactly what you're arguing about, so I'll just let you ramble in peace. :)
The original comment was: "C#/C++" is about as valid as "Java/JavaScript"
It was a really bad analogy. I believe I have made my point that C# is a lot closer to C++ than Java is to Javascript. Thanks for joining in, though. I take it you stand by your comment that I "clearly have not used both languages"
I think that normally, when people compare Java to .NET, they're either comparing the Runtime Environments, the Class Libraries, or they're comparing the whole 'development stack' which usually includes the primary language (eg Java or C#) and the primary OS (eg Solaris/*nix or Windows) and a variety of other tools like Eclipse or Visual Studio. Java is funny in that it uses the same name for like 4 different things, while MS makes a greater effort to distinguish between them.
VB.NET is basically C# with a bit of syntactic sugar to make life easier for Visual Basic 6.0 programmers transitioning to a more Java-like development style. The last time I checked, most of the .NET documentation includes code samples in each of the 4 main languages (C#, VB, J#, and C++).NET Usually, the C#, VB, and J# versions are close to identical. I've heard that the C# optimizer works better than any of the others, but that was 2 years ago and I didn't follow up.
Java can not manage memory marshaling between win32 apps and managed code. In Java, you need to message pass with pipes, and its a pain.
In Linux Piping is really fast, but in Windows, Piping is slow.
I really like being able to code C++ and C# in the same solution, but in different projects, while being able to step through all layers of the code.
Remote Debuging, and RPC calls are way better in .NET
Also if you are doing XML, and Web Service calls (soap, get, post) .NET includes the functional layering and interface segmentation to access each of the protocols independently or together.
In my opinion, if you want to set up some sort of transactional API, .NET has leaps and bounds better performance and professionals level tools.
If you are trying to hack something together, .NET has a large learning curve, and requires disciplined programing to get any practical use out of it.
Java and .NET are both OO functional languages that execute code in JIT compilers, but there are many differences.
.NET has stronger patterns throughout the system, you basically learn one set of patterns and it works on everything. most developers support all of the patterns.
.NET has superior thread and memory management. in most tests i have seen, .NET code runs faster with less memory bulk and with better memory access models for most object calls.
.NET remoting is built in, while with Java you need external 3rd party Apps.
Visual Studio Blows Eclipse out of the water. I have yet to see a feature in Eclipse that was not first deployed in Visual Studio.
Visual Studio Team Edition, better supports 100,000 lines of code or more in revision control than any other platform, while remaining agile.
Microsoft has a long term support option if you plan to actually scale your product, Java on the other hand requires you to base your support options on the user community.
If you want to get access to the hardware layer for graphics, or communication, you can use the same tool set vertical, as you can to develop the rest of your code. With Java, if you want to do hardware, you need to break out of your development tools and use different ones.
.NET/ Visual Studio has framework language packages for C#, Visual Basic, Python, PHP, Ruby, C, C++, J#, JavaScript,
-and if we wanted to, we could write a framework package for ActionScript3 (yes we have considered it)
We love the .NET platform, but what we do not like is the server licensing fee. at $1000 a software license, we would rather amortize that cost based on uptime like a service, so that we could deploy an image on any number of computers, and pay for what we use. I have raised this concern with MS and how they do not fit well with EC2. For now we feel that MS will move along with their Novell relationship and Mono will become an extension platform for MS developers, with a service contract only.
"or each of your million line programs, he's saying that VSTE better supports revision control than whatever you're using."
aahh. I see. Thanks for parsing that for me ;-). It must be the "agile" word that threw me off track.
If someone who's worked with VSTE can summarize why and how it is so much better, that would be educational . (I've never worked with VSTE , so anyone who has, please chime in)
Rapid design is not necessarily sustainable design. The "speed of development" argument for RoR is about maintenance and flexibility rather than getting it done fast. (By day I'm a C# developer, by night a Ruby one. ;)
The startup where I work was started by business types but we're using Python. Although I have to admit that at times it is hard to find experienced Python developers (so we gave up on the Python part and started looking for experienced developers period. Turns out Python is pretty easy to learn).
My biggest problem with ASP.NET (and the reason I would pick Java over it if I had to use one of the two) is that it only runs on Windows (I keep hearing about this Mono thing but to me that still feels like a hack).
Depends on how you look at it. Windows Server 2003 is not a bad server OS and properly written and deployed ASP.NET application will be able to handle TONS of requests. Two reasons: native code execution (.NET caches compiled code in memory) and very efficient threading. This thought may be unpopular but it does not make it less true.
However, as a struggling one-two person startup, you probably will not want to pay crazy prices for dedicated windows hosting (Win2003 server+MSSQL). And shared Windows hosting is always crap: overloaded servers, terrible performance, etc.
Basically, Windows platform is not very startup-friendly: you develop slower (thus will take you longer, i.e. you'll bleed more money) and later it will cost you more to host your app. Besides, a proper set of Visual Studio + MSDN subscription is not exactly cheap.
For well-funded startups .NET makes more economic sense: easier to hire for and performs/scales well (myspace).
Actually the upcoming Windows Server 2008 Web Edition cost around $500 bucks. I know it still can't beat free but heh, it's better than spending thousands of dollars.
SQL Server 2005 Developer Edition cost $50 bucks (SQL Dev Ed is basically Enterprise Ed with license restriction).
I hope in the future MS will lower the prices for most of their stuffs.
... but, aside from the higher tool cost, slower development time, and more expensive hosting, it's great?
I don't think performance is really a reason to pick the MSFT stack; MySpace does use it, proving that it can scale, but there are many more cases of web-scale systems built on open-source tech. So that's, at best, a push.
It is easier to find warm bodies for a MSFT shop than, say, a Python shop. But, as a startup, are you looking for 5 great guys, or 50 mediocre ones? And do you really think it's easier to find 5 great MSFT guys than 5 great Python (or Ruby, or Java, or even LISP/Haskell/Erlang) guys?
The last point seems debatable to me, the others, less so.
yeah, there are a few problems for us with their service,
1. we live in America and because our politicians suck so much, our currency is falling (go home ownership, at the cost of our currency, frickn idiots) and its hard to track what we are really spending on a service that bills in pounds.
2. they are expensive, and in some cases about 2x what ec2 is.
3. they do not have an image deployment system like amazon, nor do they have an s3 solution.
all and all, i think that once we move to linux, with mono we will be better off, as we can run RoR, PHP, C#, and Java all side by side on a scalable server platform.
yeah good point I am in the uk. There storage system is integrated into the package and is actually pretty neat. They do have a way to setup your server and then save that setup and then startup other instances like it.
I have not looked at mono for a while I might go back and have a look.
My impression was that they moved to asp.net when they were having scaling problems and Microsoft promised them free consulting to solve those problems... provided they switched to .NET.
I'm finishing a survey of web development technologies class. We've covered everything from PHP to Perl + CGI, classic ASP and ASP.NET, and JSP. I spent this past summer learning RoR, and I plan on picking up Django next summer.
[non-flame-bait personal opinion]
And, I have to say that I came to a strong dislike for ASP.net. In fact I was carrying a 4.0 until this ASP.NET project. I disliked it so much, I didn't finish the project. Perhaps if I spent more time on it, It might fit a little better, but from what I"ve seen, I hate it mightily.
The benefits:
It works well with IIS and the Microsoft Server stack. If that's what you know, stick with it. You'll spend months learning unix shell commands, and file structure, and how to install things, etc... I'm more of a unix guy and prefer to develop with unix on the server side. If that's not your cup of tea, then stay on the Microsoft side of life.
The cons:
I also didn't like the idea of ASP.NET pages. I found it really combuersone to code all the labels in the body of the <script> tags, and then output them at the bottom in the html. I simply found it really hard to get my mind around the ASP.NET way. I really didn't want to understand the ASP.NET way, I guess. I don't like how it handles SQL queries. I found it burdensome and cumbersome to write 5-6 lines of code on every page that access the database, to set the SQL query to a variable, execute the query. put the SQL query into a reader, then transfer the reader to another variable that's usable. Too long, clanky, too long. And, doing that for every page you're working on: BOORRRIIIINnnnggg! :)
Disclaimer
I was just starting out with ASP.NET, and I'm sure there's tips and tricks that would speed development up, and I'm sure I went about things all wrong. It's just that Rails really spoiled me this past summer. with the MVC model. Set up database connections once, access what you need through active record. Variables are there for you in the controller. Spit them out and format them in your views. It's like Ron Popeil says about his rotisserie: You set it and forget it!
<cringe>We also use Code Generation software that builds all the CRUD methods automatically.</cringe>
I can understand what would bring you to using a code generator, but the examples I have seen in practice are not good. I think code generators show there is something fundamentally wrong with the language/framework.
It shows a lack of nothing. What DAL is a code generator that writes large quantities of code based on your 'models'? It simply provides a better or easier interface.
Here is what I meant:
When a commercial application becomes popular to generate large amounts of code to do a small amount of work, like some CRUD, I personally feel that shows a flaw in the fundamental way the language works. The language should either be able to offer you a better way of doing it yourself, or writing a small framework for yourself. If neither of these are viable options, I would consider that a serious knock against the language.
I'm hoping I'm not getting into a flame war -- not my intent.
Here's the problem with what you said -- the word "code". It's not defined. In any kind of large environment, my application uses all kinds of compiled code. So what if I push a button or flick a switch to use another hunk of code that I don't have to write or test? Is using System.Io somehow "better" than say, having an automated macro that generates IO based on some user preference?
Yes -- I would agree that if I have to write and maintain a large amount of code to do easy stuff we've got a problem somewhere. But if my platform is powerful enough to allow me to use multiple Data Access paradigms without any work on my part? Who cares if when I flip the switch the code is generated and compiled or if it was generated and compiled last week or last year?
Take a look at something like CodeSmith. Here's a tool that uses .NET to write programs for .NET. Now yes, you can generate a lot of code that way -- if you want to look at it like that. You can also go and get open source libraries and templates that will generate tested, proven, full-featured libraries based on your particular situation. Isn't that a much better thing than simply having one paradigm that everybody has to shoe-horn their work into?
No cause for concern - I understand that a lot of what we are disagreeing on here are small points. This is the proper venue for discussion, and I appreciate your points.
I do agree that having some sort of code generation does have a place, and can be useful. But it is also has it's problems, especially related to maintainability. Lastly, the last time I looked at some code generation, there was so much custom junk built on top of the generated code, it was like they were using a round peg for a square hole.
Obviously, I am biased by what I have seen in practice. I also dislike a lot of 'magic', or things I don't understand and have control over being tightly integrated with my code.
I've had a lot of bad experiece with Code Generation as well.
What I think I see happening over the past few years is a lot of authors and researchers developing code generation templates as part of their work. So instead of the guy who's got the book telling you to make 7-tier, multi-phasic, distributed apps, you got the guy, a website, a following, and a set of templates and wizards that make this thing for you.
I'm not crazy about that at all, but I think it is having the effect of evolving the code generation community. I'm seeing a lot more people who want to "program the programming" Most, of course, create monsters. But it only takes one good set of easily-used and rock-solid templates to create real value for everybody. So in the old days, there was 5-10 CASE tools and they all sucked, now there's more like 500 template authors, and 10-15 are pretty good. In my opinion, that's a good trend, but the genre of "code generation" still has a well-deserved negative connotation.
Please. Keep down-modding me on this thread. Show me how you really feel! (laughing) By voting me down you can show your disagreement without actually having to participate in the discussion.
if you use datasets you can do all that boring sql stuff in 1 line of code. Also you can create a DAL and map those objects to the server controls without writing a line of code if you use VS2005 and above.
You should either use NHibernate, SubSonic or wait for EDM/LinQ in the upcoming ASP.NET so you won't deal with 5-6 lines of ADO.NET code.
But I have to agree with you, it's not that straightforward to understand ASP.NET esp if you have previous knowledge of developing web-app because ASP.NET tries to abstract everything out for you (via their Controls, ViewState etc).
On the other side, ASP.NET might not be discipline in terms of MVC but then again it is ridiculously easy to re-create a GridView such that I don't care much about the VC part of the MVC. I write less code thanks to Visual Web Developer tool.
Wow, thanks, Guys. If I were still working on that project I'd probably pick your brains a bit more.
And, I think that you hit the nail on the head about abstracting everything out for me. In the short ammount of time, I just couldn't grokk it, but I knew I didn't like it.
It seemed like ASP.NET was a purposefull movement away from typical web development. And, I'm sure that Microsoft was trying to fix problems that they say with typical web dev.
I just think that there are better solutions out there than ASP.NET. But, if you're a windows guy and used to coding in Visual Studio, and you can already use the languages that you are used to, it might be a really good idea.
I found that ASP.NET was a good stop off point between writing desktop apps and writing web apps.
All the event handling logic and the postback thing meant I could bring most of my desktop thinking across and be productive immediately. The problem I had was once I had been working on the web a while I realised the abstractions were broken but the framework didn't leave me anywhere to go.
The problem isn't ASP.NET: it's probably the way you were taught how to use it. The Microsoft tools do so much crap that it's like being put into a room full of levers and knobs with cryptic labels on them. Hard to know where to start or how to make things work.
Sit down with somebody who is using one of the automated DALs (like NetTiers, NHibernate, CSLA, etc) and knows what the heck they are doing. You'll find it very intuitive and the speed of development can keep pace (or surpass, depending on the domain) any other kind of web development.
Now for the BUT part. BUT you have to be doing straight-forward business development. Stuff in the middle of the road. Writing a check. Checking your email. Posting a message.Viewing your box scores. Etc. If you want something like an animated dancing baby that does different dances depending on your current stock portfolio and can sing out your RSS feeds in different languages, you're back to basics, and all that abstraction is going to get in your way big time. Also, if you want to scale up to 100K users quickly you're going to be learning a lot more about tweaking IIS and ASP.NET than you probably wanted. But for a lot of stuff, it's just fine. Not everybody is writing the next YouTube, and you can't beat the libraries available to you over on the "dark" side.(grin)
"Sit down with somebody who is using one of the automated DALs (like NetTiers, NHibernate, CSLA, etc) and knows what the heck they are doing. You'll find it very intuitive and the speed of development can keep pace (or surpass, depending on the domain) any other kind of web development."
Oh come on, this applies for ANY tool in ANY domain. This is non-information.
Most ASP.NET training sucks. Does that say it any better? It's not a matter of the lanugage or the platform, it's that the instruction and tools are lame. Certainly that isn't true for any platform, is it?
Me neither. I must have booted up Big Endian again. I hate it when I do that.
Take two programmers who are novices. Throw them into any two languages. If we use an automated DAL and a mentor-apprentice training paradigm in both languages, I can have the ASP.NET guy up and running and more productive faster than the other guy. <disclaim>for writing average run-of-the-mill web apps</disclaim>
I'm not sure that getting ASP.NET guy up and running and more productive faster is a laudable goal. Say productivity of ASP.NET guy is f(t) where t is time and productivity of <something-else> guy is g(t). I would submit that there exists some T where g(t) > f(t) for all t > T (t starts at 0, for simplicity.)
That is my stupid way of saying, who gives a crap how long stupid ASP.NET guy takes to get productive? In the long run, inevitably, someone else will be better.
"That is my stupid way of saying, who gives a crap how long stupid ASP.NET guy takes to get productive? In the long run, inevitably, someone else will be better."
I liked it better with the forumlas. (grin) Seriously -- that's a good point. But I don't think it is language-dependent. Might be. I don't know. From what I've seen languages and platforms are just new and interesting ways for programmers to shoot themselves in the foot. Good programming remains the same now as it was decades ago. That is, unless somebody has started using the force and I don't know about it.
"If you want something like an animated dancing baby that does different dances depending on your current stock portfolio and can sing out your RSS feeds in different languages..."
You mean that subset of straightforward business development that Microsoft thinks ASP.NET is for. If you want to put subtotals in a grid of financial numbers, for example, you either have to jump through hoops or move it off to Microsoft Reporting Services or Crystal Reports.
There's a wide gap between where ASP.NET's usefulness ends and where the really fancy stuff begins.
And yes, you totally can beat the libraries available on the "Dark Side." You'd have to try hard not to.
Java libraries, CPAN, and the Unix/C universe of libraries are three examples. But you should only check them out if there's a library that does the specific thing you want.
Yeah, I really have to second this one. It's not just the UNIX/C universe, though -- it's the UNIX scripting universe. As a particular example, how do you tie your graphing software to your analysis software to your screen scraping software? You could try writing them all in Python -- or you could just use pipes and tie together GNU plot and wget with some custom filters in Python. It takes a few years to get confident with this stuff; but once you are, you will never write so little code :)
"There's a wide gap between where ASP.NET's usefulness ends and where the really fancy stuff begins." -- yes. This is the frustration of ASP.NET programming _without_ the underlying HTML/JS/CSS/XML knowledge. It's like you can almost do everything you want, but not quite. The grid control, as you mention, does some totally sweet stuff right out of the box. But want subtotals? Time to learn about the IIS HTTP Pipeline.
It all boils down to what you are doing. Lots of shops can have 3 or 4 coders doing the mainline stuff and 1 guy who can do the tricky stuff. It's an effective use of lower-skilled programming resources.
I'd have to disagree with you on the libraries. While I'm sure there are some good libraries out there, when I'm plugged into VS I've got some kazillion or so things I can do without having to Google, link, recompile, or do squat. And I can easily make libraries to share with others. It depends on your needs. Since MS does a little bit of everything for everybody, the libraries are probably the broadest that are easily available.
I'm not generalizing but I know a lot of people who hate/won't use .Net mainly because it is a Microsoft product.
What I believe is good with .Net is the 3rd-party support (free or commercial). The Visual Studio tool is also very easy to use and ramps up your development.
Use the best tool for the job and don't bogged down with what is trendy.
As someone already stated its easy to find talent. Also most of the fortune 100 websites use it.
mySpace use it so it scales well enough.
MVC is available for those that are willing to look around. However there is an official MVC toolset coming soon which will make some big gains on ROR.
If you are not against Java you might want to check out JSF. Code your pages using Facelets though, its better than using JSP. JSF is nice because (unlike ASP.net) it cleanly separates behavior and presentation (its purely MVC).
And its a component based architecture which is rendering format agnostic (HTML, WML, XHTML-MP, cHTML). So you can code one page which can render the contents in a different format depending on the client device. This is what the JSF MobileFaces library does when you hit the page from a mobile phone. It automatically renders the page in the proper format for the target device without the developer needing to worry about the details.
The problem is JSF is complicated, which can be very frustrating. For this reason I just use it as the underlying framework, which basically just directs to my GWT pages.
What did I say that would justify you staying away? Java? I would take JSF over ASP.net any day. I consider ASP.Net to be on a similar level to old fashioned JSP (mixing and mashing of model and presentation all over the place). JSF on the other hand is a true MVC framework
So my point is: JSF is very powerful if you can master it.
"According to the author of the book Core JSF, JSF offers a means for Java to compete with ASP.NET/Visual Studio in the area of Rapid application development (RAD). The addition of the Sun Java Studio Creator IDE provides a RAD environment similar to Visual Studio 2005, potentially lowering development cost and other barriers to entry."
So basically the world of J2EE pre-JSF is worse than ASP.NET and with JSF, J2EE is catching up with ASP.NET stack.
As mentioned in another comment already, Loopt uses ASP.Net in addition to other Microsoft and open source technologies.
If I could start over, I'd use it again.
ASP.Net the framework is great. By framework I mean the request pipeline and everything else on which the high level items like the TextControl are built atop. There's a lot of crap at the top (built in controls, page viewstate, etc), but you're not forced to use it. Hooks are exposed at almost every level of the stack where you can override the default behavior to do what you want (and I do). The trick is knowing when to NOT use the built in stuff.
Also of note is that while ASP.Net necessitates IIS and Windows, it doesn't lock you down any further if you're willing to take a few risks (no vendor support). From the beginning Loopt's website has used a custom session state provider: At first it stored all user state in encrypted cookies, but now it's moving to a fault tolerant, distributed Erlang based store. Results from PostgreSQL servers running on FreeBSD power many of our GIS based features. *nix based boxes perform all of Loopt's geocoding and map generation tasks.
At Loopt we try to pick the best tool for the job. Sometimes it's sold by Microsoft.
Sidenote: You can pay for Microsoft software on a per box per month basis, and only pay for what you use. I think that Windows Server Web Edition is only about $10/box/month. Not actually that big a deal in the big scheme of things. For example, good developers are WAY more expensive than software =P
I have used ASP.NET, CGI, CherrryPy, some of these in anger.
I am currently looking at Common Lisp. I have been burned by MS too many times and I don't need their blessing to program. I posted these links yesterday as well, but if you are interested, I am updating my blog with my adventures into a web app in Common Lisp:
All in all, I find that Common Lisp + Slime is a great environment to develop in. All the tools you need are there, there is just the matter of a small investment of time.
It is used widely by Apple -- iTunes uses it as well, as does .Mac. It has a few users outside Apple, but as far as I know the number is incredibly small.
I'm curious if anyone even thinks about it anymore, its been off the radar screen for a while I think. It is, however, very powerful.
The biggest issue (and the reason i'm not using it) is vendor lock-in.
If the next version of Windows Server requires something crazy or has a massive price hike, you either accept it or have to port your entire system.
With Java, I don't have that problem. I can pick and choose the best platforms and technologies for the job. With ASP.NET you're pretty much stuck with the Microsoft ecosystem.
I agree with this sentiment, and would add a few (somewhat) related reasons.
a.) 'Planet Microsoft'. By this, I mean the gravitational pull all MSFT products seem to exert on one another, apparently by design and decree of the marketing department. With open-source stuff, it seems like I can mix-n-match components pretty freely. I can use Django on BSD, or Linux. With MySQL, or PostgreSQL. I can use its built-in templating, or not. With MSFT, it seems like I'd better be using Win2K3+SQL2K5+IIS6+ASP.NET or I'm taking my life in my hands. (And, when upgrade time comes, I better upgrade 'em all, or I'll have problems. And I better upgrade every system or they won't talk to each other.) Presumably MSFT could make its products more standalone, but prefers not to.
b.) Inevitable screwage. I believe MSFT's goal is to establish itself as an unavoidable presence in the IT business (ala the bad old days of DOS) and then use that position to demand money. For the moment, thanks to open standards, they can't do that. I'm not interested in helping them change that by using/endorsing their technology stack.
c.) MSFT MVPs. More generally, MSFT people. With all due respect to any Planet Microsoft hackers hereabouts, there is an enormous lack of perspective found in people who've only used MSFT tools; they tend to think 'One Microsoft Way' is a viable approach to building code, and not just an address. If you're reading this, and that offends you, I hereby acknowledge that there are exceptions, and you're probably one. I don't want to flame anyone, I just want to share an honest reason why I'd prefer to avoid the MSFT stack.
What makes upgrade better in other technology world compare to MS? Last time I checked, other technologies are rarely backward compatible, cut support for previous version not too long after new release is out, tons of controversies on newer releases.
One choice is not to upgrade at all. No big deal I assume. It's not like you're going to write a lot more of new code.
What makes you think open standards are better? just because they're open thus they're better? how about the technology value behind it?
'One Microsoft Way' isn't overly bad. At least it doesn't waste your time trying to decide which one is better (Rails vs PHP vs Django vs TurboGears vs Pylons vs Symfony vs JSF).
You know what, these are the example of wasting your time:
Servlet (need template)-> JSP/Servlet (not good enough) -> Struts (some design mistakes) -> Spring (mkay.. well) -> JSF (oh, we finally catch ASP.NET up)
PHP -> PEAR -> Symfony/CakePHP/Ignition
I wouldn't say Python stack is "wasting your time" yet but time will tell how long Django/TurboGears/Pylons will last. They're cool frameworks and I like Python more than C#. But I haven't really heard much from their communities lately other than the Django book had finally been released after deadline slips (I know they have good reasons but whatever).
"Last time I checked, other technologies are rarely backward compatible"
7 years ago I created one of the first Web2.0 websites in PHP. It became very popular and is still up and running and used by hundreds of thousands of people a month. Without any modification. On a managed server that has been updated to new versions of LAMP countless times.
I also wrote ASP (not .net) code at that time. It is long dead and gone.
I am doing a startup in ASP.NET 2.0 because its easy money. The developers make hand over fist when compared to similar open PHP positions.
As to the technical reasoning, I started web development in PHP for 2 years before working with .NET and so far I am supremely impressed with some of the things that just work. The startup to get running is really slow but I think things will pickup as I continue development.
I'm disappointed that no one here has mentioned MonoRail (www.castleproject.org). When people say they hate ASP.NET, what they're really saying is that they hate WebForms. WebForms are an abomination that should be stricken from the earth. MonoRail is a web MVC system for ASP.NET, originally based on ActionPack from RoR.
129 comments
[ 4.4 ms ] story [ 218 ms ] threadMy history is primarily ECMAScript, so it was very easy for me to pick up C#. Going between ActionScript 3 and C# constantly is a breeze. I couldn't imagine going between say.. Lisp and ActionScript 20 times a day. It would be such a detriment to my productivity.
You don't see as many .NET shops here because most posters are (a) young, (b) non-business types, and they had a chance to pick a technology. Most went with something dynamic and Linux-based.
We did too. We're on RoR, despite having tons of .NET expertise. And here is why: (a) speed of developemnt, (b) cost of decent dedicated hosting, (c) more fun
In a world with C++, Phyton, Ruby and Lisp both are very similar.
System.out.println("Hi, I'm a Java library function for Java being called in Java");
Java The Language and C# are extremely similar, and if the differences bother you that much you can use J#. Java and .NET both provide managed runtime environments. Java and .NET both provide a large library of functions for that environment.
I'd say if you're going to put Java and .NET into different categories, you should have some solid reasons, so let's hear them.
Comparing Java (the language) to .NET (the system that lots of m$ languages run on) doesn't make much sense though IMHO.
Look -- I love C++. It's my favorite language of all, not that I'd code anything in it anymore. I've done Java, I've done Javascript (a lot of it), and I've done a lot of C#. I know the languages. C# is much closer to C++ than Java is to Javascript.
You made a cute comment. I called bs on you. Get over it. Best way to get out of a hole is to stop digging.
It was a really bad analogy. I believe I have made my point that C# is a lot closer to C++ than Java is to Javascript. Thanks for joining in, though. I take it you stand by your comment that I "clearly have not used both languages"
As for rambling, one does what one can.
VB.NET is basically C# with a bit of syntactic sugar to make life easier for Visual Basic 6.0 programmers transitioning to a more Java-like development style. The last time I checked, most of the .NET documentation includes code samples in each of the 4 main languages (C#, VB, J#, and C++).NET Usually, the C#, VB, and J# versions are close to identical. I've heard that the C# optimizer works better than any of the others, but that was 2 years ago and I didn't follow up.
In Linux Piping is really fast, but in Windows, Piping is slow.
I really like being able to code C++ and C# in the same solution, but in different projects, while being able to step through all layers of the code.
Remote Debuging, and RPC calls are way better in .NET
Also if you are doing XML, and Web Service calls (soap, get, post) .NET includes the functional layering and interface segmentation to access each of the protocols independently or together.
In my opinion, if you want to set up some sort of transactional API, .NET has leaps and bounds better performance and professionals level tools.
If you are trying to hack something together, .NET has a large learning curve, and requires disciplined programing to get any practical use out of it.
What, no sockets?
.NET has stronger patterns throughout the system, you basically learn one set of patterns and it works on everything. most developers support all of the patterns.
.NET has superior thread and memory management. in most tests i have seen, .NET code runs faster with less memory bulk and with better memory access models for most object calls.
.NET remoting is built in, while with Java you need external 3rd party Apps.
Visual Studio Blows Eclipse out of the water. I have yet to see a feature in Eclipse that was not first deployed in Visual Studio.
Visual Studio Team Edition, better supports 100,000 lines of code or more in revision control than any other platform, while remaining agile.
Microsoft has a long term support option if you plan to actually scale your product, Java on the other hand requires you to base your support options on the user community.
If you want to get access to the hardware layer for graphics, or communication, you can use the same tool set vertical, as you can to develop the rest of your code. With Java, if you want to do hardware, you need to break out of your development tools and use different ones.
.NET/ Visual Studio has framework language packages for C#, Visual Basic, Python, PHP, Ruby, C, C++, J#, JavaScript, -and if we wanted to, we could write a framework package for ActionScript3 (yes we have considered it)
We love the .NET platform, but what we do not like is the server licensing fee. at $1000 a software license, we would rather amortize that cost based on uptime like a service, so that we could deploy an image on any number of computers, and pay for what we use. I have raised this concern with MS and how they do not fit well with EC2. For now we feel that MS will move along with their Novell relationship and Mono will become an extension platform for MS developers, with a service contract only.
You keep saying that word... I do not think it means what you think it means.
Where does that quote come from?
http://www.imdb.com/title/tt0093779/
Go watch it right now.
yes, brilliant movie.
What does this sentence mean exactly? I tried parsing it a few different ways and can't make out what is being said.
For each of your million line programs, he's saying that VSTE better supports revision control than whatever you're using.
aahh. I see. Thanks for parsing that for me ;-). It must be the "agile" word that threw me off track.
If someone who's worked with VSTE can summarize why and how it is so much better, that would be educational . (I've never worked with VSTE , so anyone who has, please chime in)
I have found people trying to develop .net apps like Java ones and this adds needless overhead.
http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mv...
My biggest problem with ASP.NET (and the reason I would pick Java over it if I had to use one of the two) is that it only runs on Windows (I keep hearing about this Mono thing but to me that still feels like a hack).
However, as a struggling one-two person startup, you probably will not want to pay crazy prices for dedicated windows hosting (Win2003 server+MSSQL). And shared Windows hosting is always crap: overloaded servers, terrible performance, etc.
Basically, Windows platform is not very startup-friendly: you develop slower (thus will take you longer, i.e. you'll bleed more money) and later it will cost you more to host your app. Besides, a proper set of Visual Studio + MSDN subscription is not exactly cheap.
For well-funded startups .NET makes more economic sense: easier to hire for and performs/scales well (myspace).
SQL Server 2005 Developer Edition cost $50 bucks (SQL Dev Ed is basically Enterprise Ed with license restriction).
I hope in the future MS will lower the prices for most of their stuffs.
I don't think performance is really a reason to pick the MSFT stack; MySpace does use it, proving that it can scale, but there are many more cases of web-scale systems built on open-source tech. So that's, at best, a push.
It is easier to find warm bodies for a MSFT shop than, say, a Python shop. But, as a startup, are you looking for 5 great guys, or 50 mediocre ones? And do you really think it's easier to find 5 great MSFT guys than 5 great Python (or Ruby, or Java, or even LISP/Haskell/Erlang) guys?
The last point seems debatable to me, the others, less so.
we want to move to mono on ec2 in 2008.
Its like s3 and ec2 combined and they have an sla.
Its fairly easy to get it up and running and they have load balancing out features too.
1. we live in America and because our politicians suck so much, our currency is falling (go home ownership, at the cost of our currency, frickn idiots) and its hard to track what we are really spending on a service that bills in pounds.
2. they are expensive, and in some cases about 2x what ec2 is.
3. they do not have an image deployment system like amazon, nor do they have an s3 solution.
all and all, i think that once we move to linux, with mono we will be better off, as we can run RoR, PHP, C#, and Java all side by side on a scalable server platform.
I have not looked at mono for a while I might go back and have a look.
they moved to .net when coldfusion started to have major scaling problems - inside info.
[non-flame-bait personal opinion]
And, I have to say that I came to a strong dislike for ASP.net. In fact I was carrying a 4.0 until this ASP.NET project. I disliked it so much, I didn't finish the project. Perhaps if I spent more time on it, It might fit a little better, but from what I"ve seen, I hate it mightily.
The benefits:
It works well with IIS and the Microsoft Server stack. If that's what you know, stick with it. You'll spend months learning unix shell commands, and file structure, and how to install things, etc... I'm more of a unix guy and prefer to develop with unix on the server side. If that's not your cup of tea, then stay on the Microsoft side of life.
The cons:
I also didn't like the idea of ASP.NET pages. I found it really combuersone to code all the labels in the body of the <script> tags, and then output them at the bottom in the html. I simply found it really hard to get my mind around the ASP.NET way. I really didn't want to understand the ASP.NET way, I guess. I don't like how it handles SQL queries. I found it burdensome and cumbersome to write 5-6 lines of code on every page that access the database, to set the SQL query to a variable, execute the query. put the SQL query into a reader, then transfer the reader to another variable that's usable. Too long, clanky, too long. And, doing that for every page you're working on: BOORRRIIIINnnnggg! :)
Disclaimer
I was just starting out with ASP.NET, and I'm sure there's tips and tricks that would speed development up, and I'm sure I went about things all wrong. It's just that Rails really spoiled me this past summer. with the MVC model. Set up database connections once, access what you need through active record. Variables are there for you in the controller. Spit them out and format them in your views. It's like Ron Popeil says about his rotisserie: You set it and forget it!
[/non-flame-bait personal opinion]
Have you tried Data Access Application Blocks? We use them and we only need 1 line of code to read the database.
SqlHelper.ExecuteReader(strConnTxt, CommandType.Text, strSql);
Alternatively, you can use SqlHelper.ExecuteDataset.
We also use Code Generation software that builds all the CRUD methods automatically.
I can understand what would bring you to using a code generator, but the examples I have seen in practice are not good. I think code generators show there is something fundamentally wrong with the language/framework.
Here is what I meant: When a commercial application becomes popular to generate large amounts of code to do a small amount of work, like some CRUD, I personally feel that shows a flaw in the fundamental way the language works. The language should either be able to offer you a better way of doing it yourself, or writing a small framework for yourself. If neither of these are viable options, I would consider that a serious knock against the language.
Here's the problem with what you said -- the word "code". It's not defined. In any kind of large environment, my application uses all kinds of compiled code. So what if I push a button or flick a switch to use another hunk of code that I don't have to write or test? Is using System.Io somehow "better" than say, having an automated macro that generates IO based on some user preference?
Yes -- I would agree that if I have to write and maintain a large amount of code to do easy stuff we've got a problem somewhere. But if my platform is powerful enough to allow me to use multiple Data Access paradigms without any work on my part? Who cares if when I flip the switch the code is generated and compiled or if it was generated and compiled last week or last year?
Take a look at something like CodeSmith. Here's a tool that uses .NET to write programs for .NET. Now yes, you can generate a lot of code that way -- if you want to look at it like that. You can also go and get open source libraries and templates that will generate tested, proven, full-featured libraries based on your particular situation. Isn't that a much better thing than simply having one paradigm that everybody has to shoe-horn their work into?
Obviously, I am biased by what I have seen in practice. I also dislike a lot of 'magic', or things I don't understand and have control over being tightly integrated with my code.
What I think I see happening over the past few years is a lot of authors and researchers developing code generation templates as part of their work. So instead of the guy who's got the book telling you to make 7-tier, multi-phasic, distributed apps, you got the guy, a website, a following, and a set of templates and wizards that make this thing for you.
I'm not crazy about that at all, but I think it is having the effect of evolving the code generation community. I'm seeing a lot more people who want to "program the programming" Most, of course, create monsters. But it only takes one good set of easily-used and rock-solid templates to create real value for everybody. So in the old days, there was 5-10 CASE tools and they all sucked, now there's more like 500 template authors, and 10-15 are pretty good. In my opinion, that's a good trend, but the genre of "code generation" still has a well-deserved negative connotation.
MVC for asp.net is on the way btw.
But I have to agree with you, it's not that straightforward to understand ASP.NET esp if you have previous knowledge of developing web-app because ASP.NET tries to abstract everything out for you (via their Controls, ViewState etc).
On the other side, ASP.NET might not be discipline in terms of MVC but then again it is ridiculously easy to re-create a GridView such that I don't care much about the VC part of the MVC. I write less code thanks to Visual Web Developer tool.
And, I think that you hit the nail on the head about abstracting everything out for me. In the short ammount of time, I just couldn't grokk it, but I knew I didn't like it.
It seemed like ASP.NET was a purposefull movement away from typical web development. And, I'm sure that Microsoft was trying to fix problems that they say with typical web dev.
I just think that there are better solutions out there than ASP.NET. But, if you're a windows guy and used to coding in Visual Studio, and you can already use the languages that you are used to, it might be a really good idea.
The problem isn't ASP.NET: it's probably the way you were taught how to use it. The Microsoft tools do so much crap that it's like being put into a room full of levers and knobs with cryptic labels on them. Hard to know where to start or how to make things work.
Sit down with somebody who is using one of the automated DALs (like NetTiers, NHibernate, CSLA, etc) and knows what the heck they are doing. You'll find it very intuitive and the speed of development can keep pace (or surpass, depending on the domain) any other kind of web development.
Now for the BUT part. BUT you have to be doing straight-forward business development. Stuff in the middle of the road. Writing a check. Checking your email. Posting a message.Viewing your box scores. Etc. If you want something like an animated dancing baby that does different dances depending on your current stock portfolio and can sing out your RSS feeds in different languages, you're back to basics, and all that abstraction is going to get in your way big time. Also, if you want to scale up to 100K users quickly you're going to be learning a lot more about tweaking IIS and ASP.NET than you probably wanted. But for a lot of stuff, it's just fine. Not everybody is writing the next YouTube, and you can't beat the libraries available to you over on the "dark" side.(grin)
Oh come on, this applies for ANY tool in ANY domain. This is non-information.
Take two programmers who are novices. Throw them into any two languages. If we use an automated DAL and a mentor-apprentice training paradigm in both languages, I can have the ASP.NET guy up and running and more productive faster than the other guy. <disclaim>for writing average run-of-the-mill web apps</disclaim>
That is my stupid way of saying, who gives a crap how long stupid ASP.NET guy takes to get productive? In the long run, inevitably, someone else will be better.
I liked it better with the forumlas. (grin) Seriously -- that's a good point. But I don't think it is language-dependent. Might be. I don't know. From what I've seen languages and platforms are just new and interesting ways for programmers to shoot themselves in the foot. Good programming remains the same now as it was decades ago. That is, unless somebody has started using the force and I don't know about it.
Hey! How did you find out about my startup idea?
Of course, you're free to use a chicken.
Also things that rhyme with "slink"
There's a wide gap between where ASP.NET's usefulness ends and where the really fancy stuff begins.
And yes, you totally can beat the libraries available on the "Dark Side." You'd have to try hard not to.
It all boils down to what you are doing. Lots of shops can have 3 or 4 coders doing the mainline stuff and 1 guy who can do the tricky stuff. It's an effective use of lower-skilled programming resources.
I'd have to disagree with you on the libraries. While I'm sure there are some good libraries out there, when I'm plugged into VS I've got some kazillion or so things I can do without having to Google, link, recompile, or do squat. And I can easily make libraries to share with others. It depends on your needs. Since MS does a little bit of everything for everybody, the libraries are probably the broadest that are easily available.
predictify.com
loopt.com
pickspal.com/pickspop.com
triphub
You can look at craigslist to get a feel of startups using .Net.
http://sfbay.craigslist.org/search/jjj?query=c%23+startup
What I believe is good with .Net is the 3rd-party support (free or commercial). The Visual Studio tool is also very easy to use and ramps up your development.
I use it and make a decent living programming it.
Use the best tool for the job and don't bogged down with what is trendy.
As someone already stated its easy to find talent. Also most of the fortune 100 websites use it.
mySpace use it so it scales well enough.
MVC is available for those that are willing to look around. However there is an official MVC toolset coming soon which will make some big gains on ROR.
At least its not Java :p
And its a component based architecture which is rendering format agnostic (HTML, WML, XHTML-MP, cHTML). So you can code one page which can render the contents in a different format depending on the client device. This is what the JSF MobileFaces library does when you hit the page from a mobile phone. It automatically renders the page in the proper format for the target device without the developer needing to worry about the details.
The problem is JSF is complicated, which can be very frustrating. For this reason I just use it as the underlying framework, which basically just directs to my GWT pages.
So my point is: JSF is very powerful if you can master it.
"According to the author of the book Core JSF, JSF offers a means for Java to compete with ASP.NET/Visual Studio in the area of Rapid application development (RAD). The addition of the Sun Java Studio Creator IDE provides a RAD environment similar to Visual Studio 2005, potentially lowering development cost and other barriers to entry."
So basically the world of J2EE pre-JSF is worse than ASP.NET and with JSF, J2EE is catching up with ASP.NET stack.
I think that is the fundamental failing of JSF. It shows that the creators of it think that a specific view is just a detail.
As mentioned in another comment already, Loopt uses ASP.Net in addition to other Microsoft and open source technologies.
If I could start over, I'd use it again.
ASP.Net the framework is great. By framework I mean the request pipeline and everything else on which the high level items like the TextControl are built atop. There's a lot of crap at the top (built in controls, page viewstate, etc), but you're not forced to use it. Hooks are exposed at almost every level of the stack where you can override the default behavior to do what you want (and I do). The trick is knowing when to NOT use the built in stuff.
Also of note is that while ASP.Net necessitates IIS and Windows, it doesn't lock you down any further if you're willing to take a few risks (no vendor support). From the beginning Loopt's website has used a custom session state provider: At first it stored all user state in encrypted cookies, but now it's moving to a fault tolerant, distributed Erlang based store. Results from PostgreSQL servers running on FreeBSD power many of our GIS based features. *nix based boxes perform all of Loopt's geocoding and map generation tasks.
At Loopt we try to pick the best tool for the job. Sometimes it's sold by Microsoft.
Sidenote: You can pay for Microsoft software on a per box per month basis, and only pay for what you use. I think that Windows Server Web Edition is only about $10/box/month. Not actually that big a deal in the big scheme of things. For example, good developers are WAY more expensive than software =P
I am currently looking at Common Lisp. I have been burned by MS too many times and I don't need their blessing to program. I posted these links yesterday as well, but if you are interested, I am updating my blog with my adventures into a web app in Common Lisp:
http://uint32t.blogspot.com/2007/11/web-programming-framewor...
http://uint32t.blogspot.com/2007/11/update-web-programming-f...
http://uint32t.blogspot.com/2007/11/lisp-web-framework-desig...
All in all, I find that Common Lisp + Slime is a great environment to develop in. All the tools you need are there, there is just the matter of a small investment of time.
I'm curious if anyone even thinks about it anymore, its been off the radar screen for a while I think. It is, however, very powerful.
If the next version of Windows Server requires something crazy or has a massive price hike, you either accept it or have to port your entire system.
With Java, I don't have that problem. I can pick and choose the best platforms and technologies for the job. With ASP.NET you're pretty much stuck with the Microsoft ecosystem.
a.) 'Planet Microsoft'. By this, I mean the gravitational pull all MSFT products seem to exert on one another, apparently by design and decree of the marketing department. With open-source stuff, it seems like I can mix-n-match components pretty freely. I can use Django on BSD, or Linux. With MySQL, or PostgreSQL. I can use its built-in templating, or not. With MSFT, it seems like I'd better be using Win2K3+SQL2K5+IIS6+ASP.NET or I'm taking my life in my hands. (And, when upgrade time comes, I better upgrade 'em all, or I'll have problems. And I better upgrade every system or they won't talk to each other.) Presumably MSFT could make its products more standalone, but prefers not to.
b.) Inevitable screwage. I believe MSFT's goal is to establish itself as an unavoidable presence in the IT business (ala the bad old days of DOS) and then use that position to demand money. For the moment, thanks to open standards, they can't do that. I'm not interested in helping them change that by using/endorsing their technology stack.
c.) MSFT MVPs. More generally, MSFT people. With all due respect to any Planet Microsoft hackers hereabouts, there is an enormous lack of perspective found in people who've only used MSFT tools; they tend to think 'One Microsoft Way' is a viable approach to building code, and not just an address. If you're reading this, and that offends you, I hereby acknowledge that there are exceptions, and you're probably one. I don't want to flame anyone, I just want to share an honest reason why I'd prefer to avoid the MSFT stack.
One choice is not to upgrade at all. No big deal I assume. It's not like you're going to write a lot more of new code.
What makes you think open standards are better? just because they're open thus they're better? how about the technology value behind it?
'One Microsoft Way' isn't overly bad. At least it doesn't waste your time trying to decide which one is better (Rails vs PHP vs Django vs TurboGears vs Pylons vs Symfony vs JSF).
You know what, these are the example of wasting your time:
Servlet (need template)-> JSP/Servlet (not good enough) -> Struts (some design mistakes) -> Spring (mkay.. well) -> JSF (oh, we finally catch ASP.NET up)
PHP -> PEAR -> Symfony/CakePHP/Ignition
I wouldn't say Python stack is "wasting your time" yet but time will tell how long Django/TurboGears/Pylons will last. They're cool frameworks and I like Python more than C#. But I haven't really heard much from their communities lately other than the Django book had finally been released after deadline slips (I know they have good reasons but whatever).
7 years ago I created one of the first Web2.0 websites in PHP. It became very popular and is still up and running and used by hundreds of thousands of people a month. Without any modification. On a managed server that has been updated to new versions of LAMP countless times.
I also wrote ASP (not .net) code at that time. It is long dead and gone.
As to the technical reasoning, I started web development in PHP for 2 years before working with .NET and so far I am supremely impressed with some of the things that just work. The startup to get running is really slow but I think things will pickup as I continue development.
Anyone interested should email me at dave@splashup.com
http://www.venturecake.com/web-20-is-built-on-open-source/