Coding Horror: Code: It's Trivial
codinghorror.com
codinghorror.com
And yet we've all encountered so many developers who continually get it wrong.
It's this weird recurring phenomena I've had throughout my career (and I'd wager I'm not alone in this) where I know I'm not an excellent programmer compared to even, say, a random sampling of linux kernel developers _but_ I'm flat out horrified by the incompetence of my peers who seem to find the most asinine solutions to these trivial and well-known problems.
I put it down to the fact that a lot of programmers take exception at being given advice on how to do things and hence they learn the hard way.
I've been in situations where a programmer has asked me for help, I've given it, only to then be told I was wrong and their approach was much better.
Agreed, but on the other hand, I've noticed that from time to time the initial reaction is being annoyed, and then, after a while, they start to adopt what you told them. The initial reaction probably is an ego-thing, but after some private contemplation, they see things more rationally.
I'm no exception to this, BTW. I too have found things that I've done for years that in hindsight seemed stupid after somebody pointed them out. And yes, I got defensive and annoyed about it. Human nature, I suppose.
But, hypothetically supposing that it had been cloned in a weekend, then you'd be staring at the 90% of a software business which does not happen in an IDE. My app can be cloned in a weekend. It has been before, by someone who was PO'ed at me and wanted to drive me out of business. He did a pretty good job in his weekend, too -- I think the user experience of the app was probably better than I managed for 1.0, which took me a week and change.
But the other 90%, yeah, that has taken me about 3 years and a week now. It has had a lot of mental effort, sweat equity, and failing-my-way-forward invested in it. And the business, as distinct from the app, is fairly resistant to cloning.
Somewhere out there, in the forgotten corners of the Internet where not even Googlebot dares to tread, the earstwhile weekend app is probably still wondering what went wrong.
That said, I think people are making too big a deal out of this. Even the best of us occasionally end up shooting comments from the hip without thinking about them first.
The code is trivial. It's really understanding what you're up against and the architecture that will get you there that's hard.
This was posted 5 days ago:
http://news.ycombinator.com/item?id=684343
That being said, yes, I did learn my lessons.
Thanks for keeping me honest!
Did you mean to write "I am the awesome"? Because I swear I heard that same phrase from notable CS kids at CMU.
In that context, CMU == Carnegie Mellon University (my guess anyway, since Carnegie Mellon is well known for their CS/CE/EE programs).
Uhhh, isn't the post his response? Just saying.
The rest of his post is more of what we've had in every thread on the subject: Doing It vs Doing It Well
(edit: sp)
His point is that writing code is a relatively small part of even a software business. An important part, but no more important than many other things that must be done for a business to succeed.
Only if you're a total idiot.
He rolled up his sleves, took a deep breath, and screwed cases on something like 16 machines in the span of a minute (normal production is about 4). Only afterwards did the ramifications of what he'd just done start to sink in.
Glad I wasn't on that line. Extra glad I wasn't that guy. Lesson learned.
Once the pieces were collected, the machines would be re-assembled from scratch as they moved down the line. Some jobs, like screwing on the razor-sharp "tins" were terrible. Routing wires and screwing on lids was OK. My second summer there, I got the prime job on the line: Testing.
My job for the entire summer was to essentially play the first level of Super Mario all day, every day, on every machine that came past. That, plus some simple control tests, plus 8 hours of sitting on a rack running the intro demo of Zelda was enough to verify that a machine was good. Every once in a while the line would stop for whatever reason and I'd keep on "testing" away. I got REALLY good at Super Mario that summer.
Could it be done? How would it go down? Would working processes change? Is there stuff to learn about the development process that speed highlights?
It could make a great discussion!
I think those are good examples of "do it in a weekend" type projects. Prove something can be done, before worrying about making a real product out of it.
(Of course, having all of Google's infrastructure at your disposal is nice for implementing some ideas in a weekend or less. We do have AppEngine, though.)
I do believe there's some way to stuff all that in without creating a central business-object model (i.e. turning the framework into a CMS.)
The two opinions are not necessarily mutually exclusive.
It's always "awesome" edition - you get every part of it.
(Although, I'm not sure I agree - there is price and licensing segregation with commercial Open Source software).
That said, there can be some competitive advantage due to code, and businesses and products vary in how important the code is. eg Google's pagerank was important (perhaps all important algorithms are only valuable if they are patented... because otherwise they just aren't that hard to copy). For a web2.0 site like SO, I think the code itself is fairly minor, and even the user experience (UI layout, interactions and features), though much more work, is also not that hard to copy. But to copy the business is hard.
The most important competitive advantages for SO are network effects (and potential for further growth); and that people are continuously working on it to improve it.
EDIT this makes me realize why an academic at uni doubted how much of google's success was due to the algorithm - I now think he was reacting to people in that environment who tend to give too much emphasis to code and to algorithms. In my view, it's clear that a better way of doing things (such as a new algorithm) can be the basis of a product or business. Of course it can. But it's not enough on its own.
Even if you do everything else well, your chances of success decrease geometrically with the crappiness of your code. Or...
Success = (A+B+C+...+Z) * SQ^2
where SQ is Software Quality and A thru Z are everything else.
Can't you just add feature XYZ to our website?
Can't you just make the buttons cornflower blue?
We (myself included) have become our own worst nightmare :( I am guilty of it too. I wrote a comment a while ago arguing that SO COULD probably be written in a few days.
(btw: I don't like it. That was sarcasm.)
He didn't back out because he thought it would be too hard. According to him, he backed out because it would be disrespectful.
IMO, if he still thinks he can do it, he should do it and make everyone who is putting him down shut up. And if he fails, so what? At least he will learn a lot.
Excuse my language, but this comment deserves it: I've seen horse-shit with less horse-shit in it.