Sucking Less Every Year

Steve Yegge's whirlwind language tour is, as he points out, neither good nor complete, which makes it one of the best blog posts I've read this year. I'll spoil the ending for you: according to Steve, Ruby combines the best features of Perl, Smalltalk, Python, and Lisp into one bag of unparalleled goodness, while avoiding the pitfalls these languages fell into.


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2006/03/sucking-less-every-year.html

I was thinking about this the other day. Being an independent consultant (when I was one) requires you to trumpet your own skills and experiences a bit to justify the high rates.

But every time I’d revisit code I wrote a while ago, I would think I pulled a fast one on the client for charging them for such terrible code. It makes me feel like a fraud, because the code I am writing for them now is so much better.

Until I visit THAT code a few months later. So compared to the past, I’m always a bargain.

So because I know that I write shitty software I am a good developer ? :slight_smile:

That happens to me with lots of things at life. With code that I did, with music I did (i’m also a music), with some homework …

The bad (or good) thing about that is that:

When you improve on hobbies and learn a new way to do things, things are ended and then you don’t need the new learnings. At least, when you learn things at work you can use it each day.

Sorry again, I still have a bad english … :slight_smile:

Some code I wrote in Borland Pascal in the mid-1980s is still some of the best stuff I ever did, but that doesn’t depress me too much, since it was done very slowly and carefully and with the sort of attention to detail that’s forced upon you by a UI framework that becomes quickly impossible to maintain unless you put in the same sort of serious effort that sees entire clipper ships taking shape inside glass bottles.

Nowadays, I’m writing good stuff again, because I’ve got experience AND a fair bit of LISPishness as two of my best resources.

http://www.artima.com/weblogs/viewpost.jsp?thread=141312

Ruby is to Perl what C++ was to C. Ruby improves and simplifies the Perl language (the name “Ruby” is even a tribute to Perl), and adds workable OO features

Oh man, I JUST figured this out. Ruby. Perl.

Boy, do I feel stupid.

Jeff, if you want to check out Ruby without straying too far from .NET, you should check out my RubyCLR bridge when you get a chance: http://www.iunknown.com/articles/2006/02/20/second-drop-of-rubyclr.

That drop is pretty usable; I’m getting ready to ship the third drop this week.

Ruby is to Perl what C++ was to C. Ruby improves and simplifies the Perl language (the name “Ruby” is even a tribute to Perl), and adds workable OO features

Huh? So then, C++ “improves and simplifies” C?! C++ took a clean, efficient, albeit somewhat low-level language and turned it into a monster.

I would say that C# is to C++ what Ruby/Python/Boo/[insert trendy dynamic OO language here] all are to Perl. They’ve kept what was good about the language and improved what was bad, all the while making it more modern and useful.

C++'s intent may have been to be an incremental improvement over C (hence its name) but in reality it added complexity and obfuscation to what was (and still is) a darn good language.

Anyway, I’m off track. I couldn’t agree more with the premise of the article - the secret to being a good craftsman is continually improving your craft. You are never done learning - especially in Programming.

Steve Yegge’s “Tour de Babel” article seems to have moved to a href="http://steve.yegge.googlepages.com/tour-de-babel"http://steve.yegge.googlepages.com/tour-de-babel/a .

Ah, the joys of linkrot…

I don’t think being a good programmer requires admitting that you’re a shitty programmer, or that you write shitty code. I think a better way to express the fundamental truth you’re trying to get at is:

A novice programmer thinks he can get it right the first time, and feels comfortable and secure when writing software.

An experienced programmer knows he can’t get it right the first time, but if he throws it on the debugger for a few hours, it’ll be good enough for government work. He chews pens. Ten a day.

A GOOD programmer knows, deep in his heart, that all computers enjoy laughing at (with?) him. They will patiently wait until he’s not paying attention and hurl Schrodenbugs into his code. Thus he tests early and often, and audits his code whenever he has a few free minutes. Still, he knows he won’t catch EVERYTHING, and the Sense of Raw Fear™ this knowledge produces becomes one of his primary sources of job satisfaction. He doesn’t chew pens anymore; he drinks gallons of coffee and sweats blood.

A GREAT programmer is similar to a GOOD programmer, except he knows the computers secretly have a crush on him, and throw their schrodenbugs to force him to spend time with them. Consequently, he audits his code all the time, so his programs don’t get lonely and start throwing Drama around. He no longer worries about anything. To quote the famous Zsa-Zsa Gabor, before a man is married, he is incomplete; after he is married, he’s finished.

I think that’s more fun than saying we all suck – don’t you?

Steve Yegge’s whirlwind language tour is a 404. See historic copy:

http://web.archive.org/web/20060814175010/http://www.cabochon.com/~stevey/blog-rants/tour-de-babel.html

If you think that C++ sucks, you need to take a look at the code for TAO, the Real-time CORBA ACE ORB. Then you can learn the wisdom of beautiful, maintainable and performant C++ code, and of Design Patterns.

Then you will realize that 99.9%+ of programmers suck. ;- So if you’re actually running projects, you’ll want your programmers to work in another environment, like the Java JVM or .NET CLR, where it’s not so easy to shoot yourself in the foot. …unless your lucky and skill enough to be able to attract and keep /REALLY GOOD/ talent!

My opinion: Ruby is a nice language. But it’s not the solution to all the world’s problems. It annoys me, for instance, that code blocks aren’t first class citizens in Ruby – they can only be passed as the last (and of course magic) argument to functions. If they were first class, then I could pass an arbitrary number of code blocks as parameters to functions/methods. And believe me, I have! (…and sometimes not even I want to look at some of the Java code I wrote! :wink:

In my opinion, Ruby’s popular because of Rails. Rails can teach us some things. Java programmers, in particular, have been learning some hard lessons from Rails – which has been a good thing: It’s curbing some of the habitual over-design habits that have been endemic in the Java community.

Ruby’s good. But it’s not the ultimate answer.

Jeff Grigg, you can pass more than one code block.

much_blocks(Proc.new { yay code block }, Proc.new { yay code block }, Proc.new { yay code block })

You can also create an array of code blocks in one line as seen in this paste http://pastie.org/392886

I came to this blog by way of some less-than-shitty code that you posted on code project (it was that CAPTCHA server control). I think the one thing that makes my code less shitty is the example of others.

I copy. I’m a copycat. But I try to copy less shitty code every year.

I’d say that the single biggest thing that has improved me as a programmer is the DotNetNuke project. Just pretending that I’m a compiler, reading that code, has been an exercise in humility.

An interviewer once told me that he sought to hire people based not on their abilities but their capabilities. In other words, not what you’re able to do, but what you’re able to read and learn in order to be able to do. He must have known that we suck.

Peter Palludan: So because I know that I write shitty software I am a good developer ?