Mentorship

The opportunities to be a mentor or, as Jack Donaghy would say, a mentee, are few and far between in the world of web development. On one hand, few potential mentors want to sacrifice the precious, precious time on junior developers who will likely be gone in less than a year. And then there are the developers who scowl at any attempt to share knowledge believing that to be a mark of showing off.

Besides spending your own time and being a showoff, there’s another mentorship prevention layer: the direct management of junior developers and tight deadlines. A developer once asked me to show him how to do something, but as I was explaining, I could see my other co-worker in a neighboring pod getting more an more frustrated. After 5 minutes, as I was getting into a little more detail, he piped up – well, let’s not confuse […] there — just tell him what he needs right now, Michael.

Some mentorship styles are harsher than others. Here’s an excerpt from most excellent “Coders at Work” about the schooling that young JWZ received from some dude named Skef:

“Like the guy who was sort of our manager—the one keeping an eye on us—Skef Wholey, was this giant blond-haired, barbarian- looking guy. Very intimidating-looking. And he didn’t talk much. I remember a lot of times I’d be sitting there—it was kind of an open- plan cubicle kind of thing—working, doing something, writing some Lisp program. And he’d come shuffling in with his ceramic mug of beer, bare feet, and he’d just stand behind me. I’d say hi. And he’d grunt or say nothing. He’d just stand there watching me type. At some point I’d do something and he’d go, “Ptthh, wrong!” and he’d walk away. So that was kind of getting thrown in the deep end. It was like the Zen approach—the master hit me with a stick, now I must meditate.”

Or here’s a passage about the concept of “nusumi-geiko” that is still alive in Japanese culture:

“The cabinetmaker’s training usually began in his early teens. In the ensuing ten years of apprenticeship, he endured a great deal of sweeping and menial tasks, but was also exposed to the work of the master craftsmen around him. The term nusumi-geiko refers to what actually took place in cabinetmaker’s training and many other trades. It means “stolen lessons,” alluding to the fact that the apprentices were not instructed so much as they learned the requisite skills by sheer determination through observation.”

I am very thankful to the people who took their time to show me the ropes: Lothar Krause, Bill Cunningham, Dan Tepper. They spent a lot of their time explaining things to me.

Side Effects Of Programming

“Nelson: Ah, he’s the greatest showman since that kid who eats worms!
Kid Who Eats Worms: My 15 minutes of fame are over!”
The Simpsons, Episode 3G02

The post about Durian seems to have been the most popular one in the recent history of deadprogrammer.com . This once again proves that eating gross things is entertaining to the masses. To prevent the surging popularity of my blog I absolutely must write a little bit about something that I almost never write about. Programming.

My co-worker who could not understand why he could not increment a variable in XSLT found an amazing piece of technical writing in an O’Reilly book about XSLT. Here it is:

“Although these XSLT variables are called variables, they’re not variables in the traditional sense of procedural programming languages like C++ or Java. Remember that earlier we said one goal behind the design of the stylesheet language is to avoid side effects in execution? Well, one of the most common side effects used in most procedural languages is changing the value of a variable. If we write our stylesheet so that the results depend on the varying values of different variables, the stylesheet engine would be forced to evaluate the templates in a certain order.

XSLT variables are more like variables in the traditional mathematical sense. In mathematics, we can define a function called square(x) that returns the value of a number (represented by x) multiplied by itself. In other words, square(2.5) returns 6.25. In this context, we understand that x can be any number; we also understand that the square function can’t change the value of x.

It takes a while to get used to this concept, but you’ll get there. Trust me on this.”

(full text here)

The quote that I highlighted in bold absolutely gets me. Yeah, that’s one good side effect. I get the feeling that XSLT was committee designed with the specific purpose to make life miserable for programmers. Also that committee must have had some really good stuff to smoke.

Update
Uh, see, now this is what happens when you try to write programs without actually understanding computer science fundamentals. I did not realize that XSLT was functional, not procedural. Like most mediocre programmers out there I was not exposed to much functional programming (I did try to teach myself Lisp, but quickly gave up). Having to do a lot of SQL(which is near-procedural) over the years improved my understanding of functional programming, but not enough to realize what the XSLT book was talking about (reading it from beginning would have been helpful too). Now hardware XSLT accelerators, which made me laugh when I first heard about them, make sense too.