D
DotNetIsHorrible
I write CRUD database applications for a living for an audience of
about 100 users per application using classic ASP. I maintain and
frequently change on user's request 22 different applications by
myself.
Recently we have had .NET 1.1 then 2.0 installed and have been told to
use it.
After reading the books about it, and trying it for a couple of
months, I got so mad I decided to write down all of my issues and
rants and post them here.
I have been in this industry for too long to mindlessly drink the
kool-aid and eat up whatever impractical junk they are hyping at the
moment.
Some of these issues have been resolved by pressure on Microsoft in
version 2.0.
Why dot net is horrible for smaller scale Create Read Update Delete
(CRUD) web development:
Overly complicated, more things can and do go wrong, wasting large
amounts of time.
Slow to load the editor, slow to run.
Unhelpful and bizarre error messages, wasting large amounts of time.
I seem to frequently see Error in application "/".
Applications built using this are very inflexible and will cause us
huge problems in the future, forcing us to rewrite them instead,
wasting large amounts of time.
There is no advantage to using OOP for our scale of applications,
having less than 100 users, no more than 5 at a time.
Way more overhead to do simple things, wasting large amounts of time
Hard to refine user interface, everything is locked into controls,
making our clients unhappy and frustrated they can't have things the
way they want.
Dot net is more suitable for large projects with 20 people on each
one, not ~20 projects per person like we have.
Too many methods and objects to choose from, is faster just to write
one than to find the one that matches.
Poorly implemented security model requiring hacks just to function if
the database is on a different server. (v1.1)
The OOP model clashes badly with the relational data model used in all
our databases, requiring kludges and lots of code to work around and
translate, wasting large amounts of time.
See why here: http://en.wikipedia.org/wiki/Object-relational_mapping
One of the main justifications for OOP is a way of dealing with very
large, monolithic systems, separating functional pieces so they don't
affect each other unintentionally, and it does this reasonably well.
But web applications are self limiting in complexity as they are
divided up into pages, so the complexity never gets to the point where
OOP is worth the overhead.
Seems to be pathologically afraid of HTML, the simplicity and
directness of which revolutionized application development making it
fast, flexible and cheap, now they want to go back to the horrible,
slow, expensive, inflexible old model of windows development instead?
What the hell are they smoking? It seems Windows is the center of
their world, what a surprise.
They keep saying we can use rich user interface controls, when 99.9%
of applications don't need them.
They are often buggy and hard to configure. With a little poking
through the reference, and a small amount of thinking, plain old ASP
can construct whatever you need, exactly to your specifications.
You can do the same thing in dot net but it takes a lot more work to
get around the framework's obtrusiveness and attempts to 'help' you.
Regular ASP and PHP are much more powerful than dot net, as you have
explicit control over the HTML. You don't have to go learn a whole
new API just to manipulate HTML.
Everything in the toolbox can be done with plain old ASP or PHP,
except for maybe XML and the phone stuff which is worthless.
Databases should be handling data transfer between applications
anyway, except for web services.
Drag and drop development is a fundamentally misguided method for
building applications. It will allow you to quickly throw something
crude together, but the overhead it introduces when having to
customize it (that is why we are here as programmers and not in India)
and make it functional quickly outweighs the time savings. Most of
this overhead comes from OOP and the .NET framework.
The kind of projects we do don't fit in a wizard or a prebuilt
control, they require innovative, well thought out interfaces that
exactly fit the process, which is subject to large changes and
additions. Trying to do this in dot net causes large amounts of
rework and patch code, wasting large amounts of time.
Datagrids are the worst thing EVER. In VB 6.0 they were horrible.
They are a hole in which you burn large quantities of time and money
for NOTHING. NOTHING. How hard is it to create an HTML table and add
some data variables to it? You will save about two minutes when you
create the datagrid, then waste two weeks trying to get it to work and
look right and get any information out of it. You can see this by the
massive number of postings on usenet and blogs about datagrids. If
they actually worked no one would have to ask.
The designers of dot net haven't caught on to the concept that the
more they add to the development environment, the less productive it
is. They need to fix what was broken with the old ASP, not pile on
new complex and incompatible ways of doing simple stuff.
The complexity and shakiness of the environment means you can't depend
on anything or be sure that it is going to work due to the huge number
of dependencies. This is bad for clients and for you when things
break for no apparent reason.
Trying to get your head around what is going on and trying to fix it
when it frequently breaks takes your mind away from the problem you
are being paid to solve. If you are in business doing this you need
to charge a hefty premium and make yourself less cost competitive
which is death in today's IT market.
The edit, compile, run cycle is slower than ASP by a large margin.
It consumes a large amount of memory and disk space, and is very slow
to compile and run the first time, or when it gets flushed out of the
cache due to non use. Our users get upset if they have to wait all
the time.
The only useful things are the XML bits, webservices, and maybe the
site map template.
If there is an error anywhere in the website, it crashes the whole
thing, all pages. In old ASP only the affected file stops working.
This makes a test server mandatory, wasting time and money. No quick,
cheap fixing on the fly for us.
If you want to add a file to a project, such as a graphic, you have to
put it in the directory before you open Visual Web Developer 2005
otherwise it can't find the file because it presumably already thinks
it 'knows' what is in the project directory. I have to close then
reopen Visual Web Developer to see the file, wasting more time. This
is idiocy.
It is in Beta though, but this sort of thing should never happen.
When you click on the errors list, it thinks you want to jump down
through the errors, when I just want to look at the one I selected.
More idiocy.
You can't put a dynamic menus such as a header in the Master Page
because it is static and you can't send a parameter to it. How is this
an improvement? How hard is it to copy and paste a header or use an
include? I guess that is too straightforward and efficient.
The dot net website (http://beta.asp.net/GuidedTour/default.aspx),
which proudly says 'Powered By ASP.NET v2.0', crashed and was
unavailable for a while when I was looking at it.
The help system is so poorly designed it has a large 'Help on help'
section in it, and by looking at it, you know why it is absolutely
necessary.
Microsoft never gets it right until version 3.0, so stay away until
they finish it.
Component reuse is hugely overrated, and heavily pushed in dot net,
and I can count on one hand the number of times it would have been
useful in the last nine years. If you need lots of component reuse in
your application, the analysis is probably deeply flawed. However,
this may not apply to very large software projects and certain
applications where access is restricted and actions that are complex
must occur together, such as accounting.
Since every object, like a datagrid or a textbox has its own function
to populate it, it becomes a lot more work to get the results from one
query to be part of the criteria for another query on the same page,
wasting large amounts of time.
When everything is abstracted away and layered and put into multiple
places, it makes changes and maintenance a nightmare, wasting large
amounts of time.
There is way too much back and forth server traffic through postbacks,
so if your connection is slow or the server is overloaded, it will be
immediately apparent in the application. Programmers still don't get
it that most people don't have broadband, though within the workplace
they do.
Server validation is an order of magnitude slower than client
validation. In the book, Real World ASP.NET Best Practices by Farhan
Muhammad and Matt Milner, and I quote, "For example, suppose you are
asked to provide a drop-down list of credit card numbers, and, when
the user selects a number, to display the cardholder name and
expiration date by using text boxes.
One way to accomplish this task is to capture the SelectedIndexChange
event of the ASP.NET drop-down list control. When this event occurs,
the page makes a post-back trip to the server and triggers your event
handler. In the event handler, you can obtain the selected credit card
number and retrieve remaining information by querying the database.
This mechanism, even though it is an ASP.NET way of accomplishing
tasks, is very slow and causes unnecessary traffic on the Web server."
By the time you are finished typing in all the OOP overhead code even
for a small application, your fingers will be bloody stumps, or it
will feel like that. There is a high irrelevancy ratio with dot net,
where you are often
having to code things that have very little to do with the actual work
you are trying to accomplish, mostly OOP overhead.
PHP and Perl are far more powerful than dot net, and much more
satisfying and less frustrating to use.
The database wizards in Visual Web Developer 2005 don't always work.
The visual editor is finicky and imprecise, especially when it
interface is getting complex.
The built in controls have horrible ugly unrefined user interfaces.
To fix them requires more work than fixing plain html.
The coding complexity in dot net explodes when doing anything remotely
complicated. You can't easily follow the logic of what is
going on without jumping all over the place.
They are trying to make things more efficient by adding more code to
break operations up into smaller pieces, when having too much code is
the problem.
ASP.NET is like communism, it should work in theory, but in practice
it is a nightmare.
Instead of writing a breadcrumb control where the pages are defined
ahead of time, which in any real life application is a pain to update,
and will likely not get done, why isn't there one that just gets the
referring page title and put it into the breadcrumb trail?
Conclusion: Microsoft .NET represents huge step backward in
programming Web applications, by imposing an inappropriate
object-based programming model imposing large overhead costs and
bloat.
I am sure most of you will feel the opposite, but if you want to know
why dot net has not taken off like a rocket, read the reasons above.
I rest my case.
-c-
P.S. Java is horrible too and I think it is worse.
about 100 users per application using classic ASP. I maintain and
frequently change on user's request 22 different applications by
myself.
Recently we have had .NET 1.1 then 2.0 installed and have been told to
use it.
After reading the books about it, and trying it for a couple of
months, I got so mad I decided to write down all of my issues and
rants and post them here.
I have been in this industry for too long to mindlessly drink the
kool-aid and eat up whatever impractical junk they are hyping at the
moment.
Some of these issues have been resolved by pressure on Microsoft in
version 2.0.
Why dot net is horrible for smaller scale Create Read Update Delete
(CRUD) web development:
Overly complicated, more things can and do go wrong, wasting large
amounts of time.
Slow to load the editor, slow to run.
Unhelpful and bizarre error messages, wasting large amounts of time.
I seem to frequently see Error in application "/".
Applications built using this are very inflexible and will cause us
huge problems in the future, forcing us to rewrite them instead,
wasting large amounts of time.
There is no advantage to using OOP for our scale of applications,
having less than 100 users, no more than 5 at a time.
Way more overhead to do simple things, wasting large amounts of time
Hard to refine user interface, everything is locked into controls,
making our clients unhappy and frustrated they can't have things the
way they want.
Dot net is more suitable for large projects with 20 people on each
one, not ~20 projects per person like we have.
Too many methods and objects to choose from, is faster just to write
one than to find the one that matches.
Poorly implemented security model requiring hacks just to function if
the database is on a different server. (v1.1)
The OOP model clashes badly with the relational data model used in all
our databases, requiring kludges and lots of code to work around and
translate, wasting large amounts of time.
See why here: http://en.wikipedia.org/wiki/Object-relational_mapping
One of the main justifications for OOP is a way of dealing with very
large, monolithic systems, separating functional pieces so they don't
affect each other unintentionally, and it does this reasonably well.
But web applications are self limiting in complexity as they are
divided up into pages, so the complexity never gets to the point where
OOP is worth the overhead.
Seems to be pathologically afraid of HTML, the simplicity and
directness of which revolutionized application development making it
fast, flexible and cheap, now they want to go back to the horrible,
slow, expensive, inflexible old model of windows development instead?
What the hell are they smoking? It seems Windows is the center of
their world, what a surprise.
They keep saying we can use rich user interface controls, when 99.9%
of applications don't need them.
They are often buggy and hard to configure. With a little poking
through the reference, and a small amount of thinking, plain old ASP
can construct whatever you need, exactly to your specifications.
You can do the same thing in dot net but it takes a lot more work to
get around the framework's obtrusiveness and attempts to 'help' you.
Regular ASP and PHP are much more powerful than dot net, as you have
explicit control over the HTML. You don't have to go learn a whole
new API just to manipulate HTML.
Everything in the toolbox can be done with plain old ASP or PHP,
except for maybe XML and the phone stuff which is worthless.
Databases should be handling data transfer between applications
anyway, except for web services.
Drag and drop development is a fundamentally misguided method for
building applications. It will allow you to quickly throw something
crude together, but the overhead it introduces when having to
customize it (that is why we are here as programmers and not in India)
and make it functional quickly outweighs the time savings. Most of
this overhead comes from OOP and the .NET framework.
The kind of projects we do don't fit in a wizard or a prebuilt
control, they require innovative, well thought out interfaces that
exactly fit the process, which is subject to large changes and
additions. Trying to do this in dot net causes large amounts of
rework and patch code, wasting large amounts of time.
Datagrids are the worst thing EVER. In VB 6.0 they were horrible.
They are a hole in which you burn large quantities of time and money
for NOTHING. NOTHING. How hard is it to create an HTML table and add
some data variables to it? You will save about two minutes when you
create the datagrid, then waste two weeks trying to get it to work and
look right and get any information out of it. You can see this by the
massive number of postings on usenet and blogs about datagrids. If
they actually worked no one would have to ask.
The designers of dot net haven't caught on to the concept that the
more they add to the development environment, the less productive it
is. They need to fix what was broken with the old ASP, not pile on
new complex and incompatible ways of doing simple stuff.
The complexity and shakiness of the environment means you can't depend
on anything or be sure that it is going to work due to the huge number
of dependencies. This is bad for clients and for you when things
break for no apparent reason.
Trying to get your head around what is going on and trying to fix it
when it frequently breaks takes your mind away from the problem you
are being paid to solve. If you are in business doing this you need
to charge a hefty premium and make yourself less cost competitive
which is death in today's IT market.
The edit, compile, run cycle is slower than ASP by a large margin.
It consumes a large amount of memory and disk space, and is very slow
to compile and run the first time, or when it gets flushed out of the
cache due to non use. Our users get upset if they have to wait all
the time.
The only useful things are the XML bits, webservices, and maybe the
site map template.
If there is an error anywhere in the website, it crashes the whole
thing, all pages. In old ASP only the affected file stops working.
This makes a test server mandatory, wasting time and money. No quick,
cheap fixing on the fly for us.
If you want to add a file to a project, such as a graphic, you have to
put it in the directory before you open Visual Web Developer 2005
otherwise it can't find the file because it presumably already thinks
it 'knows' what is in the project directory. I have to close then
reopen Visual Web Developer to see the file, wasting more time. This
is idiocy.
It is in Beta though, but this sort of thing should never happen.
When you click on the errors list, it thinks you want to jump down
through the errors, when I just want to look at the one I selected.
More idiocy.
You can't put a dynamic menus such as a header in the Master Page
because it is static and you can't send a parameter to it. How is this
an improvement? How hard is it to copy and paste a header or use an
include? I guess that is too straightforward and efficient.
The dot net website (http://beta.asp.net/GuidedTour/default.aspx),
which proudly says 'Powered By ASP.NET v2.0', crashed and was
unavailable for a while when I was looking at it.
The help system is so poorly designed it has a large 'Help on help'
section in it, and by looking at it, you know why it is absolutely
necessary.
Microsoft never gets it right until version 3.0, so stay away until
they finish it.
Component reuse is hugely overrated, and heavily pushed in dot net,
and I can count on one hand the number of times it would have been
useful in the last nine years. If you need lots of component reuse in
your application, the analysis is probably deeply flawed. However,
this may not apply to very large software projects and certain
applications where access is restricted and actions that are complex
must occur together, such as accounting.
Since every object, like a datagrid or a textbox has its own function
to populate it, it becomes a lot more work to get the results from one
query to be part of the criteria for another query on the same page,
wasting large amounts of time.
When everything is abstracted away and layered and put into multiple
places, it makes changes and maintenance a nightmare, wasting large
amounts of time.
There is way too much back and forth server traffic through postbacks,
so if your connection is slow or the server is overloaded, it will be
immediately apparent in the application. Programmers still don't get
it that most people don't have broadband, though within the workplace
they do.
Server validation is an order of magnitude slower than client
validation. In the book, Real World ASP.NET Best Practices by Farhan
Muhammad and Matt Milner, and I quote, "For example, suppose you are
asked to provide a drop-down list of credit card numbers, and, when
the user selects a number, to display the cardholder name and
expiration date by using text boxes.
One way to accomplish this task is to capture the SelectedIndexChange
event of the ASP.NET drop-down list control. When this event occurs,
the page makes a post-back trip to the server and triggers your event
handler. In the event handler, you can obtain the selected credit card
number and retrieve remaining information by querying the database.
This mechanism, even though it is an ASP.NET way of accomplishing
tasks, is very slow and causes unnecessary traffic on the Web server."
By the time you are finished typing in all the OOP overhead code even
for a small application, your fingers will be bloody stumps, or it
will feel like that. There is a high irrelevancy ratio with dot net,
where you are often
having to code things that have very little to do with the actual work
you are trying to accomplish, mostly OOP overhead.
PHP and Perl are far more powerful than dot net, and much more
satisfying and less frustrating to use.
The database wizards in Visual Web Developer 2005 don't always work.
The visual editor is finicky and imprecise, especially when it
interface is getting complex.
The built in controls have horrible ugly unrefined user interfaces.
To fix them requires more work than fixing plain html.
The coding complexity in dot net explodes when doing anything remotely
complicated. You can't easily follow the logic of what is
going on without jumping all over the place.
They are trying to make things more efficient by adding more code to
break operations up into smaller pieces, when having too much code is
the problem.
ASP.NET is like communism, it should work in theory, but in practice
it is a nightmare.
Instead of writing a breadcrumb control where the pages are defined
ahead of time, which in any real life application is a pain to update,
and will likely not get done, why isn't there one that just gets the
referring page title and put it into the breadcrumb trail?
Conclusion: Microsoft .NET represents huge step backward in
programming Web applications, by imposing an inappropriate
object-based programming model imposing large overhead costs and
bloat.
I am sure most of you will feel the opposite, but if you want to know
why dot net has not taken off like a rocket, read the reasons above.
I rest my case.
-c-
P.S. Java is horrible too and I think it is worse.