The USS Quad Damage

Everything is permitted

It's true. If you try and calculate the entropy of the universe you get "WTF" back as the answer. The universe is so stupid.

The point is: Michael is dead wrong! "Jeff Atwood":http://www.codinghorror.com/blog/archives/001296.html talks about "Michael Braude":http://www.michaelbraude.com/2009/05/why-ill-never-be-web-guy.html who talks about the web which watches the girls go by. Jeff quotes a poignant part of Michael's essay: bq. 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. Jeff then goes on to talk about how all development is web development, which kind of sort of _totally misses the point_, as usual. First: no, not all development is web development. As "Alastair":http://girtby.net/archives/2008/09/30/why-you-should-learn-c/ puts it: bq. Interesting projects are characterised by being algorithmically complex, and performance sensitive. They possibly involve large amounts of data, or an intrinsically distributed problem domain, and almost always strongly linked to mathematics. In my time I have worked on some I-projects. Most recently: native-MPEG video splicing, network performance benchmarking, and real-time automated trading. I believe the sentiment is the same, and frankly, a lot of algorithmically complex, performance sensitive stuff is not web programming. I would argue that web programming forms the "useless, boring half" of software engineering (even though I believe interacting with users is very important, I don't believe that's SE, per se). I think Jeff Atwood really misses the point when he says "All programming is web programming anyway". The point is: Michael is _dead wrong_! Let me rebut Michael's points: bq. The reason most people want to program for the web is that they're not smart enough to do anything else. OK that part is half-half. Some people do web stuff and they're really quite stupid. Sometimes they make a lot of money, but then they hit the brick wall that is "hey you really need to think about what you're building now". Then there's Google. They are not stupid. In fact, a lot of the newer "Web 2.0" companies are characterised by bright people. Smart. Friggin' smart. bq. They don't understand compilers. I think Mike's just not specific enough here. They don't understand how to write one or use one? A lot of web development is still done in Java or other compiled languages (we're doing Java EE dev, for instance). I use compilers, and I know my way around. If you mean _writing a compiler_, consider the GWT, which effectively _compiles_ java code to javascript code. bq. concurrency OK, Mike's smoking something, and it's _good_! I don't know if anyone's told Mike this, but he's talking about _the internet_, which... you know, has many users as a primary thing that happens. Hell, users are likely to be concurrently using this stuff from multiple devices. Concurrency is going to bite you hard if you don't know it and try your hand at even trivial web apps. bq. 3D Quake Live. Battlefield. bq. class inheritance. They haven't got a clue why I'd use an interface or an abstract class. The thing with web development is that it makes language choice fall back a bit. When you can choose functional languages, you don't really need to care. Needless to say, if you write a C# or Java web app (or even PHP) you need to know these things. bq. They don't understand: virtual methods, pointers, references, garbage collection, finalizers, pass-by-reference vs. pass-by-value, virtual C++ destructors, Which means "they don't understand C++". That's like saying "Man those Germans are so stupid, they can't even speak English". Except that a lot can anyway. bq. the differences between C# structs and classes. Have you not heard of .net? They have it right there in the name: _net_. As in _internet_. bq. They also know nothing about process. Waterfall? Spiral? Agile? Forget it. I don't know if you know, but any non-trivial project needs a process, and they're important even if you're shovelling turds. Agile, incidentally, is probably better for a project which is _actually user visible_ like a web project. bq. 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. OK I'm not even paying attention anymore. Basically, Mike's saying "Web development is easy". I'm going to tell you all something that will blow your minds: Web development is hard. That's right. It's actually _too_ hard. A lot of people don't try and design for it because _no one can figure one out that actually works properly_. Solving these problems is important. Pooh-poohing them is only going to get you back to solving problems which have already been solved. If you're so smart, why not come into web development, arms open, and make it the bomb?