August 14, 2009
Michael Braude decries the popularity of web programming:
The reason most people want to program for the web is that they're not smart enough to do anything else. They don't understand compilers, concurrency, 3D or class inheritance. They haven't got a clue why I'd use an interface or an abstract class. They don't understand: virtual methods, pointers, references, garbage collection, finalizers, pass-by-reference vs. pass-by-value, virtual C++ destructors, or the differences between C# structs and classes. They also know nothing about process. Waterfall? Spiral? Agile? Forget it. They've never seen a requirements document, they've never written a design document, they've never drawn a UML diagram, and they haven't even heard of a sequence diagram.
But they do know a few things: they know how to throw an ASP.NET webpage together, send some (poorly done) SQL down into a database, fill a dataset, and render a grid control. This much they've figured out. And the chances are good it didn't take them long to figure it out.
So forgive me for being smarmy and offensive, but I have no interest in being a 'web guy'. And there are two reasons for this. First, it's not a challenging medium for me. And second, because the vast majority of Internet companies are filled with bad engineers - precisely because you don't need to know complicated things to be a web developer. As far as I'm concerned, the Internet is responsible for a collective dumbing down of our intelligence. You just don't have to be that smart to throw up a webpage.
I really hope everybody's wrong and everything doesn't "move to the web." Because if it does, one day I will either have to reluctantly join this boring movement, or I'll have to find another profession.
Let's put aside, for the moment, the absurd argument that web development is not challenging, and that it attracts sub-par software developers. Even if that was true, it's irrelevant.
I hate to have to be the one to break the bad news to Michael, but for an increasingly large percentage of users, the desktop application is already dead. Most desktop applications typical users need have been replaced by web applications for years now. And more are replaced every day, as web browsers evolve to become more robust, more capable, more powerful.
You hope everything doesn't "move to the web"? Wake the hell up! It's already happened!
Any student of computing history will tell you that the dominance of web applications is exactly what the principle of least power predicts:
Computer Science spent the last forty years making languages which were as powerful as possible. Nowadays we have to appreciate the reasons for picking not the most powerful solution but the least powerful. The less powerful the language, the more you can do with the data stored in that language. If you write it in a simple declarative from, anyone can write a program to analyze it. If, for example, a web page with weather data has RDF describing that data, a user can retrieve it as a table, perhaps average it, plot it, deduce things from it in combination with other information. At the other end of the scale is the weather information portrayed by the cunning Java applet. While this might allow a very cool user interface, it cannot be analyzed at all. The search engine finding the page will have no idea of what the data is or what it is about. The only way to find out what a Java applet means is to set it running in front of a person.
The web is the very embodiment of doing the
stupidestsimplest thing that could possibly work. If that scares you -- if that's disturbing to you -- then I humbly submit that you have no business being a programmer.
Should all applications be web applications? Of course not. There will continue to be important exceptions and classes of software that have nothing to do with the web. But these are minority and specialty applications. Important niches, to be sure, but niches nonetheless.
If you want your software to be experienced by as many users as possible, there is absolutely no better route than a web app. The web is the most efficient, most pervasive, most immediate distribution network for software ever created. Any user with an internet connection and a browser, anywhere in the world, is two clicks away from interacting with the software you wrote. The audience and reach of even the crappiest web application is astonishing, and getting larger every day. That's why I coined Atwood's Law.
As a software developer, I am happiest writing software that gets used. What's the point of all this craftsmanship if your software ends up locked away in a binary executable, which has to be purchased and licensed and shipped and downloaded and installed and maintained and upgraded? With all those old, traditional barriers between programmers and users, it's a wonder the software industry managed to exist at all. But in the brave new world of web applications, those limitations fall away. There are no boundaries. Software can be everywhere.
Web programming is far from perfect. It's downright kludgy. It's true that any J. Random Coder can plop out a terrible web application, and 99% of web applications are absolute crap. But this also means the truly brilliant programmers are now getting their code in front of hundreds, thousands, maybe even millions of users that they would have had absolutely no hope of reaching pre-web. There's nothing sadder, for my money, than code that dies unknown and unloved. Recasting software into web applications empowers programmers to get their software in front of someone, somewhere. Even if it sucks.
If the audience and craftsmanship argument isn't enough to convince you, consider the business angle.
You're doing a web app, right? This isn't the 1980s. Your crummy, half-assed web app will still be more successful than your competitor's most polished software application.
Pretty soon, all programming will be web programming. If you don't think that's a cause for celebration for the average working programmer, then maybe you should find another profession.
Posted by Jeff Atwood
To say that you are a bad programmer if you program in language X or constructs applications of type Y is just as absurd as claiming that a woodworker constructing chairs with a handsaw is less of a woodworker than one constructing tables with a circular saw.
nothing written in java has ever been cool get over it.
One thing that I would like to add to the discussion is the fact that not everywhere in the world users are as well connected as here in the US and Europe. Most places out of the capitals in South America, Africa, Southeast Asia and such do not have a good connection available, therefore rendering the whole cloud movement unusable. Most computer users in those places rely very heavily on Desktop applications. I do see a trend here with the whole moving to the internet movement but for most places, this is something for a distant future.
"You hope everything doesn't "move to the web"? Wake the hell up! It's already happened! "
Yo this guy must have been drunk or something...
I'm so sad seeing these old primitive fights... Non-web apps vs. web apps, Windows vs. MacOS, white vs. black...(sorry about last one).
These fights, when taken out of an academic environment, turn us into a bunch of angry monkeys fighting one each other, shoutin "I am the best one!", "NO, you are not!!", "Shut up, I am better than all of you!!!"...
This question, as many others, is a technical one, or a marketing one if you prefer. It's not flesh to throw to angry beasts (us), who discuss it by jumping and insulting. These questions must be discussed with facts and data on the table, and you must be open-minded enough to quietly and unemotionally analyze what is good and bad in both sides of the discussion, and always ready to accept that both sides could be useful in different environments, which is usually the conclusion of complex problems.
Many of us (a lot, I'm afraid) is not qualified to do the effort required by this previous last point. Sadly, we usually start by choosing a side (an enemy), then by loading our gun, and wait and look for an angle to shoot him/her.
This monkey fighting is not the way to make progress. What's next? A fight between top-down designers against bottom-up ones?
Whatever happens, Jeff will get some bandwith and page rank with the fight.
Oh, wait a minute...
I think I understand...
The post actually makes some valid points but is so filled with unfair characterizations about other developers and self-aggrandizing statements from the author it's hard to figure out if it's a troll or not.
On a separate note - what's up with writing an inflammatory blog post then refusing to engage with the readers? Defend your position, concede to mistakes, flame away, do whatever... total silence doesn't lend much credibility to the original article.
I also like to do Web Programming although I am quite Good in anything I do...
Just a few Days Back I have found a Reason for this....
[Quote Source="My Profile at http://bijayrungta.com/about"]
In some aspect or the Other, my interests in Software largely relates to the Internet and it’s ability to communicate with and be heard by virtually everyone in the World.
I was Good in C(Till the Point that I did for my Academics), Maths...
But I had not Done Real World Projects...
That was a Drawback..
AT that time I didn't know that I could Download the Source Code of MySQL and study it to understand How a Real World Project is done using C.
Then I somehow managed a Job and was asked if I could do a Website for them....
I did nothing about the Website Building back then, but had heard from Suman Halder(suman.haldar at Facebook) that even a Class V Student knows HTML and I had read an Article in a Newspaper that a class V Son of a Software Developer in Bangalore had developed a Website for his Class' Community...
Besides that I had heard that through Something called Google I can Search the Whole Internet that People were talking so much that every Company wanted a Website.
I said Yes...
And Thats How I am here Today...
@rungss on Twitter
Sorry Jeff, but your post from today is simply stupid.
Think only about the embedded programming... do you really think that you can create a web app to control your washer?
Or do you want a web interface to drive your car?!?
Get out of your cubicle and look around... you'll see that there is something else running outside your server and browser.
By the way, are you planning to create a web app for the BIOS of your computer?
I don't think an app has to be a 'webapp' to be useable in the new world. It just have to be web deployed. ... and i agree, most web apps are written by idiots.
Well, i think you maybe DON'T know too much about what's up on the web. You can actually, and also, YOU DO, ALL OF THESE THINGS.
You can use classes and of course inheritance, you can use pointers, references, you can and some times "NEED" to pass by reference or by value, there are tons of UML tools for php that we use, and of course we do sequence diagrams!!
Of course, there are lots of "MICROSOFT WEB DEVELOPERS", who just learn how to use the VISUAL WEB, or something like that, and create a simple page, then using the assistants, they create 1 database, then takes 1 ASP.NET Control as you say, with 2 datasource, associate the db, and the datasources with the asp control, and then the control does everything for them... But, thats not the way you describe it after all; you want to compile something for the web? You can! Just get some book and read how POST, GET, PUT work, and things like that, and use CGI binaries that you can work in C++ or even Assembly; you create your own garbage collector etc; also, you can make your own Apache MOD, or IIS ISAPI Binary wich will be better than a CGI... You can use everything the way you want, you only need to learn how to do it... Also then, you can switch and be a real web developer :)
Since my last post was a bit offensive with no substance, here's some food for thought:
Moving software online has and is continuing to be an expensive task that taxes our environment. "The Internet's Energy Drain"
The servers and large data computing centers that run the Internet and other computer networks doubled their energy use between 2000 and 2006, the Environmental Protection Agency estimates. Add in the power used by computers and peripheral equipment in homes and commerce, along with a projected 75 percent further growth in data centers by 2011, and the system’s electricity needs will exceed the total current consumption of 18 million average American households.
The industry produces tinier chips and bigger, hotter arrays of chips every year. A large share of the wattage going into a data center ends up as waste heat, so 40 percent or more of a center's energy use typically is for air conditioning. Running and cooling a single 6-foot-high rack of servers occupying 7 square feet of floor space can consume as much power as 30 typical California homes. Thousands of these racks in rooms or buildings ranging into the hundreds of thousands of square feet can have city-sized power demands.
Internet exponents claim that this vast expenditure of energy is more than canceled out by the many resource-efficiency gains that computers make possible. But such gains, where they have occurred, appear to be getting blotted out by our general resource use. (more in the article.)
Searching for "embedded" in the previous comments shows that many have already mentioned this giant chunk of the computing world that has nothing to do with web programming, and never will.
I'll just add that, according to some source I saw not too long ago, only 2% of the processors in the world are in desktops. The rest are embedded. In that sense, most programming is embedded.
Most embedded software is not mission-critical, but when you're working with controllers for aircraft, spacecraft, weapons, automobile safety systems, industrial robots, and the like, screwing up is just not an option. Web standards of programming don't apply, never will.
I've seen very bad code in c# and very good code in php. I've also seen a lot of bad and good code in c or c++.
There are also many crappy desktop applications and web applications.
I don't think that someone who writes desktop applications in c++ is smarter than person writing web applications in php.
If you want to write web applications in c++, use cgi or even write your own web server, then be my guest.
But why most smart people don't that?
I think it's about using right tools to get the job done. Language and tools should let developer create good business apps. The easier they are to use - the better.
My two cents here: it's obvious that web apps are good for netbooks. Most people will still use desktops and laptops for CAD/Photoshop/coding. Same for other things, like real-time audio processing. I'm afraid i won't see a web version of Cubase in the next 5 years, though I might be wrong.
...sorry but this post just show how little you know about web programming...how sad for you...I wonder why you say if you like desktop app cause of abstract classes, interfaces, what ever...have you ever seen web app on java? I don't think so...
Being a web developer and application developer (and both reaches to masses) i can see the both ends. As much as i appriciate both guys and follower of Atwood.
I think both being more arrogant and ignoring the facts in the heat of argument. Both have their own challenges and both have their own future which cant diminish at all.
Just simple example i would add from a recent success of AppStore, As IPhone user i like the idea of webapps but never get attracted towards it but as soon as native apps appeared who scenario has changed.
Actually i beleive the future is the merger of both.
So i think as much as web would evolve the emebedded programming too and definitly there is still more learning curve writing desktop or embedded softwares as compared to web programming.
P.S. Remember we still use desktop softwares for the web itself and the to write for the web even. I like twitter but i still prefer tweetdeck. I like facebook but i prefer to use facebook integerated within my mobile or tweetdeck.
Jeff, this blog entry is a huge disappointment to me. You've gone to some lengths in the past to avoid getting into the petty arguments and "religious" warfare between languages, but now it turns out that it was just because your "religion" isn't a language, it's a platform.
Rather than maturely analyse what this dude was trying to convey in his post and then provide a meaningful response, you've gone completely bonkers! What happened to you?! You know all the advantages and disadvantages of both desktop and web app programming, and where they fit - you've had discussions along these lines in StackOverflow podcasts - but now "all programming will be web programming".... Have you been stuck in StackOverflow mode for so long you think that's all that exists?
As an actual comment on the topic, it seems to me that the difference here is really the that between programmers and scripters (particularly those scripters who believe they are programmers - and those employers who don't know the difference), not the difference between web and desktop. Unfortunately, for every great webapp written by a decent programmer, there are 1000 pieces of crap written by incapable scripters.
"hey don't understand compilers, concurrency, 3D or class inheritance" - LOL.
Whatever platform/technology your app is targeting, you still have to build a Turing machine that produces the outputs you need. Everything else is accidental complexity. If you manage to come up with a good Turing machine (and by good I mean "maintainable in the long run") then you are a good programmer regardless of the underlying platform/technology.
You might want to change that to "all application programming will be web programming." There is still a great deal of embedded and systems programming being done that has nothing to do with the web, and couldn't if it wanted to.
yubnub.org is something all the "desktop" guys must see to understand what Jeff stresses on - simple, command line, "social" (yeah, I drank the kool-aid), WEB.
But look at the power it has conceptually as a shell. And yubnub operates on free time and just hosting plan fee.
The utility, power of the command line (just the pipe), and ability to "interop" for an unlimited number of programmers, all one URL away.
Programs are meant to solve real world problems. Web programs made by Google, LinkedIn, eBay and Paypal are solving problems previously unthought of, simply because there was no en-masse angle.
Obviously out on the street you get all types of people. But there is a street that you can use too. Imagine having to obtain expensive permits to walk along the National Highway system. Imagine having to pay space tourism fees to go from New York to Calif. Imagine having to spend 30 years getting the expertise and knowledge, and most importantly, the contacts and references to be able to talk to Nicholas Negroponte or Stephen Hawking. The web solves a whole new class of problems, not even envisaged by the "only desktop" crowd.
You have to do something that would look quite disgusting in public to become a parent. But you do it, don't you?
Or do you use syringes, test tubes, surgery and sterile environments and such other technology (of real quality and challenging complexity like what the web crowd calls "complex theoretical constructs") to become a parent?
It sucks (pun NOT intended), but it works, right?
You get the baby, nice and whole, crying and pumping fists!!
Sure the web interface looks attractive, is coded near shit (literally) but the back-end server is very cool (GoogleFS, Hadoop, MapReduce, virtualisation, RDBMS, etc)
Both parts have a job to do.
If people thought elitist, the web would not exist and you would not be able to read this.
Democracy is about letting Joe Plumber walk on the same street as Dr. Joseph Whizkid.
All said and done, someone needs to take training web developers seriously and make it easy to visualize the concepts which experts are able to do easily because of superior visualization skills. And of course, security. I don't know if Joel or Jeff have done something like this before, but methinks if they both graow a new pair of hands we can ask for a large set of in-browser visualizations of data flow and reversible frame-by-frame machine state visualization.
Reversible debugging movies, generated from source code and Testing Code, maybe?
Oh, and opensource under dual GPL2/3 or even Affero GPL.
"So forgive me for being smarmy and offensive, but I have no interest in being a ‘web guy’. And there are two reasons for this. First, it’s not a challenging medium for me. And second, because the vast majority of Internet companies are filled with bad engineers – precisely because you don’t need to know complicated things to be a web developer."
I don't see anything wrong with Michael's post. He is making a _personal_ statement. He also said that there are of course very intelligent web programmers and sophisticated web applications - but that doesn't reflect the majority of stuff you encounter on the web. Again, I simply don't see anything wrong with that either.
He doesn't dare to make generalized statements like:
"You hope everything doesn't move to the web? Wake the hell up! It's already happened!" or "Atwood's Law". Nevertheless I think you have taken his thoughts out of context to make a somewhat sensational post for your own blog out of it.
Obviously not _all_ programming will move to the web, as already stated by many people. (embedded systems, sensitive systems like ATC, federal systems, aviation, military, systems for factories, ...).
So there will still be a place for programmers like Michael, who are simply not interested in web applications. Is that a crime? Do we have to chew on his blog post, just because we aren't clever enough to creativly think up something on our own? I think not. You are better than that Jeff. Please try harder on your next post.
icanhazwebdev!!!! Really? Or ploy N+1?
If opensource not allowed, how icanhazwebdev?
icanhazforum? icanhazREST? icanhazCMS?
You have it all wrong!
Pretty soon all programming will be iPhone App programming.
The web is sooo last year!
And another thing, if web programming is so awful, why are Google and Marc Andreessen both building new web browsers?
Skizz said it first, but a gaffe this big needs reiterating.
Well. Web, not web, whatever. Adobe Air! :)
"You hope everything doesn't "move to the web"? Wake the hell up! It's already happened!"
Well Jeff, of course there are a lot of desktop-like apps running today in browsers, but in the end, ¿who is using them? Only a tiny fraction of users.
Computer geeks apart, most users still use desktop office suites, desktop videogames, desktop video players, desktop windows mobile/symbian/iphone apps, desktop photoshop, desktop autocad, etc... the list has no end.
Of course, everybody uses web apps, at work and home, but the mass market is far far away from using only web, and i really think it will never be the case.
You also forget all people in the second and third world (unfortunately more than who lives in our "first world"), where internet access is far from common, ¿do you still think that web has doomed desktop already?
You are wrong. I know and have done significant work in all of the technologies (and grok all concepts) enumerated by the OP, and I still make a better living in Assembler and COBOL. And mainframe applications, interfacing with GUI front end, middleware, or nothing outside of Big Iron at all, teach you how to write profoundly good SQL.
You'd be better off view the WWCB (World Wide Codebase) as a growing organism. The newest outer-layer, the "interface" with the non-programming world, is on the web. But the internal organs still function, develop, and can not be dispensed with.
once again, you're WRONG WRONG WRONG.
Ever write anything embedded?
Plus, most of them will be in PHP.
"Should all applications be web applications? Of course not. There will continue to be important exceptions and classes of software that have nothing to do with the web."
"Pretty soon, all programming will be web programming."
... Contradiction, anyone? ... anyone? ... anyone?
This has got to be a joke. His qoute, "That’s because most people think that “everything is moving to the web,” and if that’s the case, then I can’t imagine being happy as a software engineer for the rest of my life. So for my sake, I really hope everybody’s wrong.
" sums up the hysteria. Where did he write this 'Blog' post? On one of the bathroom walls in bldg 42? No! It's on the freakin web! :P
I don't agree with what Michael says, but I do have a similar feeling towards web programming, but for different reasons.
Web programming languages are designed* for quickly hacking together web apps, and as such, have very little internal structure or appreciable mathematical properties. Put simply, they are a mess.
This is fine if you just want to hack something together quickly, but in the larger picture, it has done nothing to help the struggle towards finding a language that can represent abstract ideas, and thus decrease the amount of time it takes to program something. If better work was done in language design, we should have languages by now in which you could program very complex system in just a few thousand lines of code. As it stands, such programs are utterly filled with repetition and redundancy. It shouldn't be that way.
* I say they are designed that way to give the designers the benefit of the doubt. I was going to say that they simply didn't know what they were doing, but that (might) be a bit harsh.
Well the fact that Michael works for Microsoft is a bit disturbing. Perhaps it is linked in with how Microsoft first missed the boat on the importance of the internet.
So when will I be able to write an interactive 3D application that runs inside all of the popular browsers without any special plug-ins?
The reason why people don't program for the web is because they think they're smarter than everybody else. :P
TV did not kill radio. Web applications will not kill desktop applications.
"The reason most people want to program for the web is that they're not smart enough to do anything else."
Pretty sure the guys who wrote GMail and Google Maps are smart.
The web is like anything else. You can write a bunch of crap for it, or you can write something truly groundbreaking.
Addition to my previous post:
Imagine if the languages of mathematics had as much rigour and inner consistency as these web programming languages. We would never have as much understanding of maths now if we couldn't perform even simple algebra, and the only reason we can perform algebra is because the language is rigid, objective, and unambiguous.
Apply the same reasoning to these languages and you'll see that we have no chance in hell of producing a practical algebra of computing languages.
The UI shown in web pages is just a tiny portion of what is needed to code a web application. The back-end can still be a huge part of the software and people who hate doing Web won't even touch anything related to the Web if they just want to work on the back-end.
The UI can be a small portion, but it can still require strong coding and/or engineering skills. Some apps are easier to do, some can be complex.
Mr. Braude probably just hates doing Web UI stuff and hates that people with little experience can do things that are more popular than whatever he works on (disclaimer: I have no idea who he is or what he does).
Plus, you can still be a good programer in web apps. The difference isn't between desk or web apps its between juste a good and clean programer and a lazy code sucker!
Sometimes you say the silliest (aka, dumbest) things, Jeff. Normally I can appreciate your viewpoints even when you tend to spout out your ideas as if they were facts (as always, I get a chuckle when you reference yourself to backup your arguments) . But the drivel on this post, and the ludicrous "Atwood's Law" is *way* over the top, even for you.
I can't even give you the advice to "step back a second and take a look around you". Its clear from your comments that you only surround yourself with like-minded people because only then can statements like "Pretty soon, all programming will be web programming" have even a mustard seed of plausibility.
While the person you were blasting said some obviously dumb things I thought it was clear he was venting. Some of the things you quoted from him are true (it does take less know-how to create a web page than it does to write a device driver, for example). But in your tirade to discredit him you've done little more than show how petty you can be and, quite frankly, how ignorant you are of the programming community in the whole.
Try relaxing, take a chill pill, and try not to lash out at everything you don't understand.
Basic web programming (putting some divs and forms together) isn't challenging at all. But look at all the big websites: they don't consist only of that. There are many mathematical problems such stream processing to compute upcoming trends, recommendation engines, etc. involved (read "Programming Collective Intelligence"). Making the architecture of a big webapp is anything else than easy. Making a framework for webapps is anything else than easy. There are just so many things that are not easy in web programming. Creating the frontend is just the tip of the iceberg. And in the course of many new web technologies evolving, things aren't getting easier.
I agree that developing simple web sites doesn't look challenging, but there's still a place to grow - developing content management systems, I'm doing it for the last 3 years, and I cannot say that that's not challenging.
I worked on an IT company with a lot of low level guys working on web application because they didn't know how to do other things.
I think that some part of the Michael Braude quote are saying the right thing, but if lot of people write bad web code this doesn't mean that programming on the web is bad.
The reason most people want to program in C, C++ or Java is that they’re not smart enough to do anything else. They don’t understand assemblers, registers or hexadecimal. They haven’t got a clue why you would use loop unrolling or bitshifting.
Michael Braude is correct. Web programming is retarded shit and web apps suck.
Huzzah! I work on both Application and Web materials and, while I enjoy App development, there's simply no feeling in the world like having someone look at and appreciate your work, so I'm very much enjoying the web programming, too.
When quoting someone else's article, is it possible to indicate where cuts have made?
I appreciate people can click through to read the original article, but it would be helpful if the presentation here made any editing clear. I found the omission of the paragraph starting "OK, so that’s not an entirely fair accusation to make..." made Michael's article sound more one-sided than it is.
My apologies if this has been mentioned before.
@Jeff thanks for this, man. I don't see why web-dev's are seen as being less 'serious' than 'traditional' programmers. I do, and have done, most of the things Mr. Braude describes. Hell, you can even do many of them with PHP!
@Beth S It's coming. http://en.wikipedia.org/wiki/O3d is an example of a - admittedly still a plugin - project of Google's. People want 3d in the browser and it will eventually be browser-native. See: Attwood's Law.
OK. So realising how often your headlines are just link bait and are not to be taken literally, I had to read this entire post to find at the end
"Pretty soon, all programming will be web programming. If you don't think that's a cause for celebration for the average working programmer, then maybe you should find another profession."
You really are saying that _all_ programming will be web programming? All programming? Software in planes, cars, watches, fire alarms, fridges, phones, etc, all running on the web? Or do you mean that embedded programming is not real programming?
By the way, if this is true, when will all browsers be running on the web?
Niche? Web programming for the masses is the niche. MOST software projects are not written to be used by millions of people. They are written for those "niches" you speak of. It's the software that reads a sensor and lifts a railroad drawbridge. It's the daemon that processes millions of payments in the middle of the night in a server room hidden away and is only accessible by command-line. It's an HMI interface 400 feet up in an industrial crane lifting 40-foot containers off a container ship. It's the daemon that tracks products walking out of a store that haven't been paid for. It's the java component that activates that little buzzer telling you your table is ready at your favorite fancy restaurant. Where is the web in all of that? Huh? Where? The web is the niche.
Isn't simple and boring the knobs and wheel and cranks of a car? This is an INVERSION OF CONTROL taking place in computing. The web is simple because people wants it to be simple, as they like the car controls to be simple. The ball is now in our roof.
Is this a problem or a challenge? I think that in BMW or Mercedes it's a challenge to create the best driving experiences with the minimal "user interface". Aren't they engineers? Aren't engineers the people who create/designed/implemented your computer because it's simple? What about the Ipod?
Except when it is embedded programming - like say, the MAC/PHY layer of a wifi device.
Jeez, I wonder why one of the largest tech companies of our era (Google) continues purchasing large quantities of fiber. I wonder if that has anything to do with Cloud OS, I mean *Chrome OS...
Yeah.. desktop applications are here to stay...
If you aren't aware of your surroundings and can't see what's coming, why read and participate in industry blogs?
"Pretty soon, all programming will be web programming."
Not too sure about that... I think pretty soon all programming will be NETWORK programing, but I don't think it'll be all WEB programming. The web allows some pretty cool things, but it has it's faults and some of them exclude certain aspects of coding.
I am pretty sure that sometime soon, every app will be "network ready" (as it were), and may well interface with the web - but that doesn't make it web programming.
Being both a web developer and a reasonably experienced desktop developer I can say this - getting a business model to work is MUCH MUCH MUCH easier for desktop applications. If you have a sufficiently large audience for the problem you're solving and a polished desktop solution, people will with joy pay $70 for your app. Try that with the same web app.
This might change in the future, but as far as I can see from my own businesses, this is how it is right now.
I think what he meant is that 95% of web developers are people who never understood what the hell a pointer in C is, and this is the reason why those programmers (if you can name them programmers) live under the shadow of web frameworks that tell them exactly how to get things done, which makes you feel that programming for the web is not challenging, however if you are programming for the web you have to provide a service that can't break, a desktop application can crash with not a lot of damage, but if a web applications crashes for half an hour you got a lot of angry customers, and lose money, which makes web development a real challenge.
You have to provide a robust web application, that its impossible to crash, unless you cut electricity from the server, you have to provide a great logging layer to know what went wrong, you have to make your application accessible for the web on large screen up to small mobile screens, you have to understand your customers and what they want, you have to convert these code to something you can buy ... etc
Ugh... You know, every time I use one of our "corporate web applications", I discover new problems, be it our timesheet management system, our document repository, ClearCase's joke of a web interface, and so on.
Give me a client/server application any day: UI consistent with the rest of the desktop, no problems hitting the "back" button and ending up either on an error page or the same one, etc.
I'd argue there is *too much* development being done for the browser, a lot of times for bad reasons.
"The web is the very embodiment of doing the simplest thing that could possibly work. If that scares you -- if that's disturbing to you -- then I humbly submit that you have no business being a programmer."
I'd say that's a rather arrogant statement. The world is not the world wide web. There are plenty of other things out there that needs programming.
"As a software developer, I am happiest writing software that gets used. What's the point of all this craftsmanship if your software ends up locked away in a binary executable, which has to be purchased and licensed and shipped and downloaded and installed and maintained and upgraded?"
I guess one's view on this may depend on wheter we are talking about direct or indirect/affected users. In terms of affected users, I think the software controlling elevators, bank/card transctions, respirators, gps naviation systems for public transport, traffic lights, payroll systems, etc. are just as useful, if not more, than most web sites.
Someone's gotta write the code for your browser to host the web apps...
Someone's gotta make the firmware for your fancy mobile, your mp3, your car...
I totally second Dan A.
The Web is bound to grow onto you in every aspect of life. From your social network to your news feeds. Every application is aiming to capitalize on the wave of Web2.0. Face it Web application development is the best thing to happen. You can match any level graphics and code complexity using JS and Flash.
Though the backends code running on Java, Php or .Net will continue to exist, but its role will be limited to that of a middleman to DB.
The OS is coming online http://www.youtube.com/watch?v=vvHIQBvC_AY
The user is also always online. The level of penetration of the web is far more than that 5 years ago. Stuff like google gears is revolutionary, you have replicated the web onto your desktop. Desktop Applications are also mutating into web applications.
Tools don't make the craftsman.
Not all apps will be web apps. Many web app coders are first class. C++ and other codes should wise up. Language snobbery is daft.
I find it fascinating that what I do for a living is outdated, outmoded and replaced by a web app. I'm sorry but I do a lot of systems engineering where I need to know the guts of the OS (whether that be Linux, UNIX, Windows, Mac(UNIX), BREW, etc.) As far as being 2 clicks away from the web, you need to realize there are a lot of folks who are "amazingly", not connected to the web or connected on slow links, especially in developing nations as well as in the US. Now the move towards AIR apps (web on a desktop) has promise for the disconnected world. As I've migrated from Assembly through the polyglot of current languages I have t agree with Michael on a few things. there are a lot of folks who do not know the gory details of how to get this kind of work done. that's why they hire me and others like me (by the way, I do web work too).
Please get with the program. There is plenty of work for everyone. Should apps like MS Office go to the Web? Yes, and they have already with things like google docs and Zimbra.
By the way, web development is quite difficult if done correctly. If you are a script kiddy generating a prepackaged web template with Joomla, yes that is easy. If you are developing an SOA stack or a large corporate website or your own CMS, yes that's hard.
My 2 cents worth from a polyglot, greybearded(not yet, but feels like it) SW Monkey.
I guess I'll just stick to writing back-end code (in C++ and perl most likely) so that Jeff can keep writing his web apps on top of that.
Sorry, but the whole argument is ridiculous. Web apps are definitely useful and are growing in popularity, but there are apps I rather run in my locally (sorry mint.com, I only give my bank passwords to quicken.) Plus the low level code, the stuff that makes things actually work, will provide a safe heaven for guys that still prefer to get their hands dirty with memory alignment, sockets, threads, etc.
Great article and rebuttal. As someone who started in software development by making crappy websites with horrible code and is now getting into the deeper aspects of software development, it is encouraging to see the web come into it's own. I have seen the disdain from desktop developers toward web developers and it is discouraging at times. But at those times, I like to think that if the greats like Alan Turing or Grace Hopper were alive to experience the web, they would embrace every aspect of the web and all the oportunities it gives each software developer.
I'm pleased Mr. Braude has got a good team - he's the exception. The best engineered solutions, the best processes and documentation I have ever worked on and the best team I ever worked with was on a family of web solutions - but so was the worst. Web coding brings performance into alarmingly sharp focus because users tolerate 20 second load times far less. Web coding for the general public rather than a corporate solution stresses usability far more, because the user knows they can switch to another application quickly and easily.
Will all programs go to the web? No, but most will. Image processing for example has far too much data moving around to be ideally suited to a network application, but word processing definitely doesn't and there are some perfectly usable online office suites, getting better by the revision. And your average corporate forms app is ideally suited to an Intranet implementation - no more build and distribution headaches, just sling it on the server and the whole company go live. Much simpler, and no earthly reason that it shouldn't be just as well (or as poorly) engineered as the previous PC-based solution.
I am curious to know why Jeff dismisses the notion that the majority of "web developers" got into the field because they were scared and ignorant of actual computer science. Jeff skips it as though it were ridiculous, but I think you'll find that many web developers will admit as much.
This was the central thrust of the opening quote and Jeff completely dropped it. Strange. Why even use the quote?
By the way anyone who says "In the future, All X will be Y!" is pretty much always wrong.
Isn't a web browser is an example of a non-niche desktop application?
Oh I forgot, Google calls that an OS these days.
If you are interested in compilers, concurrency, and class inheritance, go ahead and create smarter compilers, servers, server applications, services, .... which all can be used for back-end. For front-end user interface web programming gonna rule!
@Rob: If he included the context that mitigated the extremism of the quote, it would have sabotaged his efforts to be controversial, as is his acknowledged strategy for posts in this blog. Jeff is no longer content to stake out outlandish positions under his own power; he now uses modern "journalistic" techniques to create snappy soundbites to support his assertions. I've appreciated a lot of the positions Jeff takes in opposition to the conventional wisdom, but recently he's been over the top, jumping the shark on a regular basis.
As a software developer, I am happiest writing software that gets PAID FOR. Good luck with your web ads and what-not. I like licensing and desktop apps.
"... Contradiction, anyone? ... anyone? ... anyone?"
Well, no, the contradiction's resolved when Jeff says;
Read all the way to the end of the article before applying the comment button.
More importantly, when trying to advertise and sell your product.
The last place to give up on Desktop Programming will be in-house software, but even then, if there's a better Web product that does the same thing, employees will probably use that instead. The only reason not to is security.
That said, I do think Jeff skips too lightly over Embedded software such as Assembler, which obviously will remain mostly non-web. No-one's going for the Internet-capable microwave. And if you are, DON'T.
The "find another profession" part is VERY harsh. Unacceptable.
"I still make a better living in Assembler and COBOL"
You can't use the amount of money a programmer makes as a measure of popularity, because they're inter-related. The average age of a COBOL programmer is around retirement age, which means that scarcity drives the prices up. If COBOL became a popular language, you'd make a lot less.
All COBOL jobs I've seen have been for existing products that need maintenance. And most Assembler jobs aren't for mass user products, but generally for supporting hardware engineering.
For pure software products, who in God's name is programming in Assembler? And shouldn't we stop them?
One other thing bothers me about all this...
Its true that Michael Braude made some outlandish statements in his post, but at least he has the fortitude to respond to his critics's comments (with both clarifications and capitulations) whereas Jeff just makes outlandish statements then hides.
This post has really caused me to lose a lot of respect for Jeff.
I third Dan A too, but both arguments are wrong, good web programmers are not stupid and neither are good desktop app programmers.
Good engineers will produce a good system regardless of the platform.
It's posts like these that remind me that the developer community is full of self-righteous blowhards. I hate the mentality that complex code is better code. Just because youre churning out backend code on a mainframe that nobody else understands doesnt mean what youre doing is any more important.
Its easy to cast web developers as script kiddies who hack together code. And admittedly, there are plenty of them out there. However, I'd love to see Michael Braude (as well as some of the other commenters) design a user interface that is functional, aesthetically pleasing, and intuitive to users, all while being cross-browser compliant. Easier said than done.
So far, I've made a great living writing applications. Not all of us can make a living by selling advertising on a blog, Jeff. Honestly, without that, would you have the audience for StackOverflow? After 23 years of coding, however, I'd rather not read crappy code in any language.
On the plus side, you can write for many environments. I've never been interested in database programming, myself, but some folks love it. My latest project is building a specialized IDE for microC Linux. Sorry, not a web-able application. I understand where Michael Braude is coming from. Like me, he's just not interested in becoming a web-programming guy. I'm thankful that other people love creating web applications. I only hope that they, and you, appreciate the software written for other platforms.
Atwood's Law... one phrase... Office 2010 for the Web!
It's a poor craftsman who blames the tools. Sure there are crappy web apps, there are also a TON of crappy desktop apps. As a percentage of the total number available, I'd argue that there are more crappy desktop apps than there are crappy web apps.
I run into this attitude a fair amount amongst older developers, most of whom not only don't get web development, but don't get the web at all. The overlap with developers who don't regularly use a computer at home is high.
Atwood's Law... one phrase... Office 2010 for the Web!
Micheal seems a little blinkered, people don't always have the same motivations. I'm sure Google did not start as a web company because it was "easy". I view a certain amount of what he says as the kind of insecurity that pervades much of the C++ community. Many C++ programmers spent a great deal of time and effort keeping up with the language and all of it's idiosyncrasies. Some of the syntactic idioms he mentioned should never have been: time and time again easier and more consistent languages have proved this. The fact despite constant development that C++ has been caught with no adequate standard library support for concurrency. C++ might disappear not because of web programming: but it may well get supplanted by programming languages that support concurrency well, or run on platforms that manage that stuff for the user.
He does though have a point, Web Programming although can be used as a platform for many business functions cannot possibly be used to program everything. As times goes on ever more applications for software seem to be invented. It is easy to fall into the fallacy that the way you are developing software today is the only modern technique--- sure programs have similarities but they aren't the same. The world of software is more diverse than ever. Pick a consumer device and there's probably software in there. That's before you get to industry. Some software if it isn't right then it causes fatalities: I can think of a couple of projects like that that friends have worked on. In this sort of system a web-page is the easy bit.
Developing for the web is, though, still programming. Although at times has more in common with Design. Phrased like "the simplest thing that works" seem to be easier to understand when you have a visual design. If you have a safety-critical system does this advocate negligence by avoiding implementation of boundary-cases, or not ensuring the correct response time? The simplest thing in certain systems may be to implement the system completely.
Wow...so it's death knell week on codinghorror, eh? First COBOL and now the Desktop? I've been hearing about the demise of the Desktop for 15+ years now. When, exactly, is it dead?
I have to say, Jeff, the way you quoted Michael, and omitted an entire paragraph that basically acknowledges that there are smart people working on the web, greatly hurts your credibility in my eyes.
There are things that will never be brought to web. Just think about all the embedded things that you use - your tv remote most probably was designed using Verilog or VHDL, that was later baked into silicon. Assembler is still alive, even though there are a log of high level languages, and it will be like that for long times to come.
On a technical point of view,
though you generally have indeed to be much more rigorous and conceptual with client software programming, the technical complications of (serious) web programming are totally different but not that much simpler.
You can design a simple web app as well as a client app - it's just easier to find a nice tutorial for the web app and learn directly from it nowadays.
High class applications are also very challenging in both "platforms" - you just have different types of problems, anyone who's worked seriously enough in both will tell you.
Coding and structuring the application itself is much harder in client software, but the amount of interactions (different languages, apis, servers, browsers) in a big web app also carries considerable complexity.
I personally like both.
PS: No serious developer (web or not) uses .NET . If you can't understand why, you're not developing serious software/applications.
Even our desktop applications we develop in our business for CTI are including web browser controls to display user interfaces and interact with arbitrary web servers. I believe that applications that must be developed for the desktop should be, and everything else developed for the web.
I think it is also more satisfying to create products on the web (from a dev point of view). I recently wrote about it on my blog:
The fact that the web provides a better standardized platform means that there is a whole lot more stability here. Things that are working today are likely to keep working the next year. You are free from having to support multiple operating systems in various states of patch work. Okay, you need to support a few browser quirks, but the numbers are still an order of magnitude less. It is also easier to program for the web because there is really a very limited set of core APIs that you need to learn and master. Of course, you need to learn a few languages and web frameworks, but hey, they are much easier to learn than building dialogs in MFC!
"As a software developer, I am happiest writing software that gets used. What's the point of all this craftsmanship if your software ends up "
Many engineers works on stuff for the joy of it, not because it gets used by millions. Do a poll with the engineers around you - you can either work on cool stuff like compilers, graphics that you will get paid for and not many will use (i.e the engineer doesn't need to worry about how the revenue gets generated) as opposed to writing a part of web app which enables extra smileys for paid users but will be used by millions.
So, Michael will choose the former since he is an engineer. You will choose the latter since I think you are more of a entrepreneur (and the reason you started stackoverflow).
As for Desktop vs web, I will believe in the web when all these sites which serve millions start making money. In the end, you will see that these web apps are niche markets too (read: nobody will pay. they are just hanging out there since it's free and they have lots of time.)
Jeff and Michael think about this:
If you're going to create an application that will advertise a product, will you go for Desktop?
If you're going to create a simple customized text editor, will you go for Web?
We should be flexible.
"They don't understand compilers, concurrency, 3D or class inheritance. They haven't got a clue why I'd use an interface or an abstract class. They don't understand: virtual methods, pointers, references, garbage collection, finalizers, pass-by-reference vs. pass-by-value, virtual C++ destructors, or the differences between C# structs and classes. They also know nothing about process. Waterfall? Spiral? Agile? Forget it. They've never seen a requirements document, they've never written a design document, they've never drawn a UML diagram, and they haven't even heard of a sequence diagram."
Where did you learn these things? Using e-book? Without going into forums or searching the web?
"The reason most people want to program for the web is that they're not smart enough to do anything else. They don't understand compilers, concurrency, 3D or class inheritance".
No kidding? The real Jeff Atwood's nightmare ("coding horror") is that he does not know that what's making a good web is not web coding itself. It's web contents what internet visitors are looking for, and it depends on its author, a webmaster or a web editor who could leave programing to programmers (hands) who are not smart enough to do anything else on internet, just paraphrasing "smart enough" Jeff. :)
Jeff is pretty much right about this. Having done both, I agree that web programming is much easier than C++. But that is precisely WHY it is better. All the over-complicated crap involved in desktop apps is inefficient. Every desktop app basically has to write the browser in addition to the html. Sure, an easier job does attract less talented people but that's just the way the world works. Hard things get easier and become the stepping stone for even greater things.
It's this very concept that Bill Gates mastered, and by keeping things intentionally complicated, filled his coffers and set the computer world back 20 years.
For a "classic" desktop user, I find 3 main drawbacks to web applications and that's why I'm not so enthusiast about them (most of them) :
- you can't choose the version : if the web app editor want to add a new feature and if you don't want it, what can you do ? It happened to me with GMail. They changed the way they manage labels, I prefer the previous version but I can't do nothing besides complaining. If it was a desktop app, I could choose not to update. You don't like Office 2007 interface, you can stay with 2003. You'll lose some feature but you have the choice.
- if you have an internet connection problem, you can do nothing. Ok now there are some web app that work offline... But it is really a web app ? It looks a lot like a desktop app, no ?
- What happen if the editor disappear or if he decides to end its support ? I have a lot of desktop apps which I'm sure the editor is dead, so if it were web apps they'd be unusable. Microsoft dropped Windows 98 support but it doesn't prevent you from installing it.
That's true that there are some good things with web apps but I really hope that not every single "user" application (specific professional apps is another subject) will be "web apps".
Developer point of view : I'm not convinced that it's easier to program a web app than a desktop app. The difficulties are not the same (web app have to solve much more security problems than desktop apps...). You can develop a crappy web app with horrible code but nothing prevent you from doing the same with a desktop app.
Doing the same things in JS is propably a lot harder than in your old server language.
I think it's misconception that all webapps are crap nowadays. I think pre-web the apps were as crappy as now. The diffrence is that anybody can put out a simple page on the internet - hence the crappiness!! So there are a lot more 'apps' now than before.
You can write bad code in any language on any platform. You saw it on web apps more then desktops simply because desktop apps have been around longer and peoples expectations are higher. They used to put up with crappy web apps because there were not many alternatives. Notice I am using the past tense. Today if I come across a bad web app / page / site, I jut move on to one of dozen better alternatives. Will we ever eliminate bad code on the web, probably not. New bad code is constantly being created by poor coders all the time. However they have a short life. They either learn the trade or leave as poor code simply is not tolerated today.
Will all apps move to the web, no they will not. Many will, but not all. Besides the obviously category of embedded applications which is growing daily, there are still many applications that simply don't fit the paradigm. One example is high end CAD software. This is still one category that will consume every CPU cycle and Graphics byte on the most modern PCs and still want more.