# Friday, December 05, 2008

Wow!  Was I surprised to see the number of page loads reported in StatCounter for my little blog article from the night before.  My PII 600Mhz 384 meg RAM web server circa 2001 was barely able to keep its CPU from melting down.

Double wow on some of the comments.  It seems a split between those who got the article and others, well, maybe giving the benefit of the doubt that I was not as clear as I could have been with what I was trying to communicate.

However, having looked at some of the Hacker News comments and Programming Reddit comments, it is clear that some people did not seem to get the point I was trying to make.

Let me try again using a concrete example this time.  Let’s use my open source web application I wrote as the example because you are free to download the source code and examine it to your heart’s content to make up your own minds as to what my beef is, if you so desire.

My web app is really simple, in fact, the application consists of exactly one page!  Mind you there is a lot going on as your will see, but still, it is one page.  For now, who cares what it does, let’s look at the list of technologies, frameworks, languages, components, etc., used (and reused) in this “one page” web application:

  1. ASP.NET 2.0 framework classes
  2. ASP.NET AJAX (.NET 3.5 FCL)
  3. ASP.NET AJAX Control Toolkit (Tab and Hover controls)
  4. .NET 3.5 Windows Communication Foundation (WCF) framework classes
  5. Visual Studio 2008 IDE
  6. C#
  7. JavaScript
  8. VBScript
  9. CSS
  10. HTML
  11. XML
  12. MDbg CLR Managed Debugger (mdbg) Sample application and API framework
  13. .NET 2.0 Winforms framework classes
  14. Microsoft Agent SDK (API framework)
  15. Microsoft Remote Desktop Web Connection Active X component
  16. Google Earth application
  17. Google Earth Airlines ActiveX web plug-in for Google Earth with JavaScript API
  18. Prototype.js open source AJAX framework
  19. IronPython 2.0B2 and Dynamic Language Runtime (DLR) with IronRuby support
  20. IronPythonTextbox – open source IronPython rich client text box and interpreter
  21. Edit Area – open source JavaScript source code editor with syntax highlighting
  22. Color List Box – open source WinForms modified List Control
  23. Joshua – open source interactive JavaScript HTML console window
  24. RealWorldGrid – open source ASP.NET modified GridView control

For those that did read the first post in this series, do you now see what I mean?  No? Let me further illuminate with the following ten points:

  1. Did I say I hated frameworks?  No
  2. Did I say I wanted to reinvent the wheel?  No.
  3. Did I say I wanted to do pure programming?  No.  
  4. Did I say I wanted to code from scratch and roll my own framework?  No.
  5. Did I say I did not want to use frameworks or reuse code?  No.
  6. Did I say that I wanted to return to my beloved VB 6 as my “ideal development model?” No, in fact, I have not used VB6 since 2000 when I converted to C# .NET (I was an early adopter).
  7. Did I say I was sick of programming?  No, first sentence in previous post – I love to write code!
  8. Yes, I have tried several programming languages, O/S’s, IDE’s,  etc., over the last 17 years that I have been programming professionally – this is not about programming languages, other than that they are a part of a much larger issue.
  9. Am I a hobbyist programmer?  No, and not to sound defensive, I am a professionally trained software engineer, with a 2 year post grad in Software Engineering Management and 17 years professional experience.  I have worked for Motorola (CMM Level 5), Kodak (CMM Level 3) and several other shops of various sizes and industries, plus ran my own successful custom software development company for four years with a staff of 25 people.  Currently I work for one of the best custom software development companies that produce enterprise ecommerce solutions to some of the largest retailers and supply chains in the world – the odds are that you have already used our ecommerce software and don’t even know it.
  10. You want to interview me? (for those that asked) First, pass my test by downloading my open source code and explain to my why my software design is good or bad and the reasons why for either.  Then we will talk.

Enough Tom Foolery.  What I said was that web application frameworks, components and tools are like 10 years behind the tools we are used to using to develop desktop applications.  In fact, I stated that it is getting worse, not better.  I used VB6 in a simple two tier application scenario as the example.  Now lets compare to my web app.

Look at how much “stuff” has to be used to make my “one page” web application work.  Imagine developing this as a desktop application.  You could easily cut out 50% of the stuff used in the web application and still have the same functionality in a desktop application, the least of which would be a working WYSIWYG design editor.

This is what my one page web app looks like rendered in IE 7.

 

This is what my one page web app looks like rendered in Visual Studio 2008 design time mode.

 

And no, this is not just a Visual Studio problem, I have run into this with a variety of other web development tools.

My point is illustrated by the number of items listed to make a one page web application and the design time view of the web application.  Way too much stuff and I can’t even see what I am doing!  How is this helping me being more productive?  It isn’t and that is my point.  Our frameworks and tools for developing web applications are getting worse, not better.  Vendors keep adding more and more stuff, yet we can’t even get an editor that shows a proper design time view of what we are trying to build. 

How would an engineer design an automobile (or house or electronics or cell phone or game console or name your item) in AutoCAD with a design time view the same as the one for my web application above?  It would not only be totally unacceptable, it would be ludicrous!  So why do we, the software development industry, accept it?  And worse yet, have people defend it in some of the comments I have read?  That is what makes no sense to me at all.  Am I the only one with the sunglasses from They Live?  I hope not, cause if I remember the movie correctly, it ends badly ;-)

Updated:  A Programmers Dillema - Productivity Lost - Answers

Friday, December 05, 2008 11:45:15 PM (Pacific Standard Time, UTC-08:00)  #    Comments [11]
Saturday, December 06, 2008 12:01:21 AM (Pacific Standard Time, UTC-08:00)
I did not comment on your last post because I was still contemplating it - but yes I heard your point loud and clear. I also over time have felt a great discomfort with the growing 'complexity' of the libraries surrounding Visual Studio.

I say "Visual Studio" as opposed to programming because despite my entrance into iPhone programming and general geek love for all things coding - I am by far a professional .NET programmer first - and everything else programmer second.

This makes it difficult to compare and contrast different ideologies because I do not have the years experience that you have - so to summarize, I found your post very insightful as it confirmed my growing suspicions.

It's unfortunate that while programming gets more "complicated" that surfing the Internet and writing over-sensationalized not-well-thought-out blog comments is so easy. It pays little respect to the author who "put themselves out there."

I just subscribed, thanks for the insight.
Saturday, December 06, 2008 1:34:45 AM (Pacific Standard Time, UTC-08:00)
It makes you feel less a craftsman. More like a father at Christmas with the bicycle instructions, trying to put the damn thing together. I've started learning Lisp for this simple reason. Less imperative and more declarative programming. Stay with it.

An increase in velocity is what you're looking for. Take a look at altdotnet news groups on yahoogroups.

VB6 with OCX and ActiveX damn good things, but it seems to have dropped out of the mainstream.
Saturday, December 06, 2008 10:54:40 AM (Pacific Standard Time, UTC-08:00)
I am not an expert, but I think you could halve the list by refusing to use MS technology, and XML.

Are you sure you couldn't do everything in javascript, with may be a few simple scripts on the server serving the asynchronous calls?

And I agree with you that most of today's frameworks make easy things complicated. Probably to make a poor programmer write acceptable code.
Ald
Saturday, December 06, 2008 3:44:45 PM (Pacific Standard Time, UTC-08:00)
You've obviously put a lot of work into this, and yet your posts still feel almost like a troll. (CMM Level 5? Oi.) You emphasize that it's not about a specific language or framework or tool, and then turn around and point out how some of the industry's worst tools aren't that great. ("Cars really suck, and I'm not just talking about one model -- I had an AMC Gremlin, a Ford Pinto, *and* a Yugo!")

Half (?) of the code in your download has comments indicating that it was auto-generated, so it's a little hard to tell exactly what you wrote, or needed to (higher-level languages tend to not require explicitly "generated code"). But even the files that weren't autogenerated look far more complex than I've seen in any other framework. Some of these files have more "using" lines than actual lines of code! Unless I misunderstand C#, you don't need to say "using" for 13 different namespaces in a file that only uses 3 classes.

My suggestion would be to reconsider your tools. There's a lot of accidental complexity here, and while it's a bit hard to figure out the organization of your code, I think that the IDE is likely the culprit for a lot of it. You don't have to abandon any frameworks or change libraries. It's simply that today, you have to make a conscious effort to keep things simple, in order for things to end up being simple. Accidental simplicity in computers was possible 20 years ago because our computers simply couldn't do much, but today we're well on the path to being a mature industry. Anyone who assumes that they can get simplicity in a program for free is suffering from the same problem as a car company who assumes they can get styling for free in a car by using a new design tool.
Roe
Saturday, December 06, 2008 5:04:27 PM (Pacific Standard Time, UTC-08:00)
Hey Roe, thanks for actually downloading my source code.

Motorola CMM Level 5 Yeah man, it’s for real. Click on the Software link on the bottom right and then read at the top of the page under the header Software.

There is one source file that is an auto generated client proxy for the WCF service and one source file that is generated for the Visual Studio WinForms designer, otherwise, the rest are hand coded.

Sorry about your choice of vehicles ;-)
Saturday, December 06, 2008 5:18:57 PM (Pacific Standard Time, UTC-08:00)
I agree with you, here is my rant from last year to prove it: http://bufordtwain.blogspot.com/2007/12/crazy-world-of-web-development-needs.html. The next big breakthrough in software development will come when someone makes things radically simpler for us poor programmers.

-BT
Sunday, December 07, 2008 1:28:17 AM (Pacific Standard Time, UTC-08:00)
I largely agree with you (I am referring to the previous post as well).I think it is a good piece.

Indeed I think there is an inherent problem with frameworks that force you to structure your program in a certain way. They are good (and save some coding time) as long as you need a single framework. When you need two or more frameworks in the same application you have a problem: each one is imposing its own structure, and the two structures are usually in a conflict with each other.

Also, there is this belief that languages should be fairly small (some even say that a language should be minimal, but that's off the point) where libraries can grow wild. This is a misconception. A library which you intensively use becomes as foundational WRT your application as the programming language. If it is easier to program with a small language (the main reason being that you have only one way to implement whatever it is that you want to do) the same should go for libraries.

There's this talk by Guy Steele called Growing a language (see link below). During the talk he tried to use only one syllable words. If he needed a multiple syllable word he first defined it using previously defined words. He claimed that this is similar to the way either languages are designed or programs are developed. At the end of the talk he says that he had to think a lot about each new word he wanted to introduce. A new word would will make it easier for him to talk about things, but at the same time it makes the semantics more complicated. The listeners will need to devote more mental energy to understand his sentences.

Growing a language: http://video.google.com/videoplay?docid=-8860158196198824415&hl=en



Sunday, December 07, 2008 12:52:06 PM (Pacific Standard Time, UTC-08:00)
Very interesting. As a hobbyist assembly-language programmer whom has taken courses in the latest Java, C, and VB disciplines, I could not agree with you more Mitch.

Now almost everyone who just read "assembly-language programmer" is probably thinking that either I'm some kind of freak, or on a "path leading nowhere." Unfortunately, it is impossible to argue the value of assembler to anyone not open to the complete loss of abstraction assembler provides; that is to say that one can't understand the value of assembler unless they experience it. Simpler can be better!

The typical (uninformed or under-appreciated) viewpoint on assembly language is that it is "too low-level" to be practical, or "too hard and unwieldly" to use as a viable programming language. And this may have been true in the past, however, Steve Hutchisson (Hutch of MASM32 fame) and others long ago began work on a set of libraries for the Microsoft Assembler ML.EXE, which transformed this otherwise seldom-used compiler tool into a completely viable, stand-alone programming language. Now my point in sharing this is not to argue its merits or convince anyone that they must switch to writing assembler code, nor that such a switch is applicable or even possible in all cases. However, if one is tired of writing "support-code for support-code" and/or "syntax-code", then they could look at Steve's package and the Masm32 Forum. Not only IS it possible to write entire applications in assembly language, many are doing it, and doing it efficiently, and with a much greater understanding of the system and OS architecture. The result is very little "syntax" code, almost matching source code to object code on a 1:1 basis -- and without the abstraction. WYSITWYG!

Others may like PowerBasic, a cross between Basic and assembler, which allows some really helpful HLL-like features while supplying the power, simplicity, and control of assembler. The Masm32 forum also houses other projects of interest. In any case, if abstraction has got you down, then consider a fresh perspective.
Tuesday, December 09, 2008 10:44:49 AM (Pacific Standard Time, UTC-08:00)
Hi,

We've faced similar problems in past, and the only solution we've found is to rewrite everything from scratch. Here is the result:

http://labs.core.gen.tr/

Hope it simplifies your life.

Regards,
Evrim.
Tuesday, December 09, 2008 4:45:22 PM (Pacific Standard Time, UTC-08:00)
<i>Global System Builder (GSB) is a light-weight Integrated Development Environment (IDE) designed to provide software developers with the capability to dynamically program software in real-time from anywhere to anywhere in the world over the internet using a web browser.</i>

A few obvious questions:

1. Why does GSB exist?

2. What is wrong with the normal way of using hosting services (e.g. FTP pre-tested application from localhost development to QA to production)?

3. How does this compare to the new Amazon EC2 or Windows Azura?

4. Does GSB actually have the minimum number of components to (a) minimize maintenance and issues?

5. Hows does Silverlight 2.0 with IronPython running in the browser change GSB?

Keep on truckin'
mycall
Tuesday, December 09, 2008 4:47:30 PM (Pacific Standard Time, UTC-08:00)
Forgot to mention, here is an idea for you..
mycall
Comments are closed.