Why I’ll Never Be A ‘Web Guy’
michaelbraude.blogspot.com
michaelbraude.blogspot.com
Sighhhhh. The entire tone of this article suggests somebody who has never done a lot of web programming, and is making a classic "I-haven't-done-it-so-it-must-be-easy" kind of judgement, with a very idealised view of the glamour of his own sub-discipline of software development.
Sure, there is a huge amount of very mundane web programming in the world. But there is a proportionally larger of amount of very mundane non-web programming in the world, too. 95% of the programming that goes on the world is not "challenging" to a good developer.
Taking a very reductionist viewpoint, web programming is just the same as non-web programming, but with a demand that the output from your program is structured in particular ways. I'm sure anyone can think of hundreds of examples of technically challenging and innovate programming that is best suited to delivery in a web environment?
I get as annoyed with really bad web programmers as the next guy, but that's only because the web permits users to inflict their work on others much earlier in the development process than most mediums. Back in the days when I was first learning BASIC, the commercial internet was not so well-developed that I could easily inflict my software on a large group of people. Even if I did, my "death valley" clone would probably have had limited appeal.
With the web, pretty much anybody learning a language like PHP or ASP or whatever can basically do some copy-and-paste programming and have something up on the web ready for public consumption before they have even finished figuring out how programming works.
That was the route I took, and thankfully I was sufficiently chastised by better programmers for unleashing stupid, insecure PHP software that I became more cautious.
1. The 'web platform' is difficult to write for because there are many different browsers and operating systems.
2. The programming language environment for the web is immature and has sharp tools.
3. The people who write web apps are poor quality.
#1 is true enough. It is painful. That why we write tests, use automated systems and are driving for standards. Of course, he could help by persuading Microsoft to play nice with others on web standards.
Also, he's forgotten the days of programming in assembly language where you had to pick the processor and BIOS you were targetting. That was really ugly, but that's where companies like Microsoft got started.
#2 is also true enough. It is an immature environment. But that will change.
#3 is totally true. There are poor engineers working on the web, but that doesn't mean that there will always be poor engineers on it. It's a virtuous circle. The better things get the more the good people will move to it.
It strikes me that he's in real danger of missing an 'innovator's dilemma' situation. Yes, programming for the web is 'crappy' compared to picking a single operating system with very mature advanced tools. That could be the equivalent of the non-hydraulic backhoes and massive hard disks detailed in the Innovator's Dilemma. Perhaps he just hasn't seen the change that's coming, coming.
It's the same situation with desktop applications, although the situation is a little better because of Windows. But, if you don't want your client to download dozens of MB for the latest .NET, then you use .NET 2.0, if want more market share then you start working on a Mac port. If you want to target mobiles, then you start working on IPhone and Symbian ports, while keeping an eye on Android. If it's a game you're developing, then you start working on a port for PS3 / XBox / Wii.
The whole allure of web applications is that you can reach a larger audience faster, with no middle-man between you and your customers (no installation required, no manual upgrading to the latest version, no piracy).
Your work can be a lot easier when you're using cross-platform tools, but then again, it's the same for browser incompatibilities. Javascript hurts? Then use JQuery or something more heavy like GWT, or maybe OpenLaszlo. CSS hurts? Then use Javascript to simulate missing properties (and the situation is a whole lot better than providing an OS-consistent GUI for both Windows and Mac).
I think points #2 and #3 are in conflict, because #3 happens because the barrier to entry is lower. How can that be if the tools we use for the web are immature?
His main point is that the web relies on dynamic languages which don't have IDEs like Visual Studio with intellisense / automatic refactoring or compilers that highlight syntax errors at compile-time (well, he actually mentioned HTML as the language, but I'll close my eyes to that).
While I can see from where his point comes from, it is also missing the forest from the trees. From my p.o.v. this is a virtue more than a drawback because it makes you think more about your API (your average .NET / Java API design really makes me cry), and it makes you think more about what's hard about the process of development (unit-testing, functional testing, standards, and all that).
He also implies the lack of "object-oriented languages" and that of debuggers ... which is a complete fallacy. Modern OOP concepts are not available in C# (mixins, traits, multi-methods), and the debugging in Python (just an example) is a lot more comfortable than what's available in VS.NET. Does VS.NET give you a way to inspect / redefine active objects / methods / entire classes on a breakpoint and then resume execution? And how much do you have to pay to get functionality available for free in Valgrind/KCacheGrind? Also, in platforms with continuations support the debugging takes a whole new perspective.
Overall, the article is just a poor and content-free rant.
I think this is a valid role for Microsoft to play; to be a place to drag the deadwood into the future.
Most of my opinion has already been written here: http://news.ycombinator.com/item?id=763137
But basically, web apps and non-web apps are the same. The user sees a computer program designed to make his life easier in some way. Inside, our code handles requests and produces results. We use the same programming techniques to process the request and update the UI in some way. The only difference are details; for a command-line app, you can freely block on IO and you produce results with "print". For a web app, you get an "Http Request" object, and you prodce an "Http Response" object. Inside the response is code to draw the UI, send more requests to your application, etc. And finally, for a "GUI" app, we receive events instantly and any of those events can affect the program state (and any handler can update the GUI immediately; no need to wait for a "request cycle").
Honestly, I think the web model is the most difficult of the three. But I certainly don't look down on anyone that writes the other types of applications, because they are really about the same.
Fortunately, eventually all the people that grew up on C will die. Then the field can perhaps move on.
The entire thing contradicts itself. One paragraph, web development is way too complicated. The next, he doesn't want to be a web developer because it's not complicated enough for his giant intellect! He talks about "civilized" things like compilers and debuggers and static typing, then writes, "It's a challenging place to be." -- Hey, smart guy, the next sentence should reinforce the previous one, not completely contradict it!
If the piss-poor writing weren't enough, this d-bag has arrogance in spades. Guess what? I programmed C and Assembly, too! I moved to the Web because it is more challenging, not less. To be a good web developer (as opposed to the stereotype he uses in his randomly-contradictory argument) you have to know all sorts of stuff -- languages, frameworks, libraries, browser quirks, UI design... the list goes on. And there's some new evolution every year you've got to learn to keep ahead. Let's go over all the skills I possess to do my job:
HTML
CSS (including quirks for 4 browsers)
Javascript (and frameworks)
Python (along with Django and dozens of libraries)
Sysadmin
Design (not super common for dev-focused folks, but I do this too)
And that doesn't even include all the APIs and other nonsense I have to interface with. Or emerging tech like Comet. Or asynchronous network programming, which I also do daily.Oh, and since when is "process" better than? "Waterfall? Spiral? Agile? Forget it," indeed! These have nothing to do with Web vs. Desktop, by the way: they're processes used to manage teams. It's too bad you need a team to create your product, Mr. Compiler Guy; I've been a one-man show for a decade. Don't fault me for my ability to have a large, diverse knowledge base.
Web development has a lower barrier to entry, that's a fact. Unfortunately, he not only failed to make the argument that it also has a lower ceiling, he made himself look like a complete tool in the (flailing) process. Here's a pro-tip:
Stick to your IDE, Michael; you can't write for shit.
90% of web apps are easy, just like 90% of desktop apps are easy. The remaining 10% counts.
Why would I want to program for the web? It's too hard! Also, web programmers program for the web because they aren't smart enough to program for the desktop.
All the issues he talks about that happen on the desktop scale. I have to deal with at the server scale.
He also compares some lone webdev working out of their home to a programmer working out of an office. When your a one man band you rarely need to document those type of requirements. This doesn't change if you are writing for windows or you are writing for the web.
BTW, I do both Windows, Web, and recently Cocoa. I find it frustrating sometimes that getting events right in Winforms can be more tasking than doing the same on the web. I do enjoy having my windows layouts behaving. If you've had to write for IE6-8,Safari,Firefox, and Opera I'm sure you'd agree.
said the guy who just finished saying it's too hard to program without an IDE that has a good debugger.
This guy also thinks HTML==web programming...
The fact that anyone can program for the web is a bonus not a disantavantage. It forces the software monoliths to move! My kids all learned programming at high-school but that did not make them programmers. The field had always the CS Scientists, mixed up with the Cobol Programmers at Financial institutions the ADA Defense Contractors etc., now we have a different landscape but we can do without this type of bragging which is akin to ...mine is ..bigger than yours... and you are not a man because...
One thing he doesn't understand about the web is the dangerous power of blogging. With one sentence you can permanently brand yourself as an idiot to tens of thousands of people.
Shorter comment thread: I have decided that all of the hard CS problems in web programming, including, but not limited to, scaling, machine learning and recommendations, high availability and fault tolerant systems, and everything google does, are called "server programming," because I would otherwise have to admit that many web developers are smarter than me. Also, javascript was not designed from the ground up by Microsoft to draw graphics on a canvas, so everyone who uses it for that purpose is also stupid.
I generally don't take delusional people's opinions very seriously... and this is no exception. This is one of those rare instances that Jeff Atwood is right (http://www.codinghorror.com/blog/archives/001296.html).