Everything is permitted
(Posted by Sunny Kalsi )
Jeff Atwood talks about Michael Braude who talks about the web which watches the girls go by.
Jeff quotes a poignant part of Michael’s essay:
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 puts it:
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:
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.
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.
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.
3D
Quake Live. Battlefield.
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.
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.
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.
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.
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?
Sunny,
I agree with the first part of your argument. I don’t think Jeff Atwood got the point.
Michael Braude went on to refute some of Jeff Atwood’s points.
I think he addresses your point that some smart people are doing web-development. However, he doesn’t seem to want to have to deal with the dross that goes with them.
However, I do have some quibble with some of your quibbles.
“programming”.
Web-development may well be hard, but once of the time-consuming issues which always seems to bog us down is the difficulty of making the application run on all the different platforms out there. It is a man-made maze. It isn’t as fun to explore as the challenges that are raised by the real problems the customers are having.