11.6.09

the sorceror's apprentice

working this job is... difficult. the material i study and use here is arcane and obscure; i'm working with Linux distributions i've never heard of before, modifying their kernels and filesystems to do clustering and grid tasks whose theory i've been studying for a week, if that. i'm eyeball-deep in complex projects, sub-developer teams, many-branched source trees and technology i only barely understand. i'm also surrounded by people with an average of about twenty years' education and experience in the top of this field, several degrees up on yours truly; i should probably be depressed at how little of this i get.

i'm pretty damn happy, though. i discovered a method way back in my first year of University that helps you deal when you're on the brink of being overwhelmed by your own crappiness. it's an experience metaphor, a way of seeing your life in analogy; you're the sorceror's apprentice. it's particularly apt when you're working with advanced tech, since 90-node clusters doing complex genomics computations sure as hell seem like magic if you're seeing them for the first time.

the apprentice is a learner in their world. maybe they're one of many, maybe they're the only one, but they're a newbie in the midst of masters, someone whose task it is to gain knowledge from those around them. it's an image in direct contrast to the 'fighter', a metaphor i know a lot of guys use - the fighter's approach is to see others around her as rivals to be competed with in terms of skill level, whereas the apprentice sees them as sources of wisdom.

considering yourself to be an 'apprentice' seems to improve your motivation to learn and to perform better at your tasks. it stops the whole "Everybody's better than me, therefore I'm worse than anyone else, therefore I feel like shit" thinking that plagues you sometimes in situations like these, and it makes you consider your peers as a beneficial force rather than an army of rivals. after you've stopped thinking of them as people who've 'beaten' you, you're in a better position to pool your knowledge with theirs, and you can approach them for help - that way, you help each other. it's also a pretty good way to minimise your own hubris - you can't walk around thinking you're the schiznit and nobody's greater than you if you've been considering yourself a humble apprentice for a week, so you don't get overconfident and neglect stuff.

most people probably don't need this kind of cognitive metaphor, and i know a large percentage of y'all won't have a goddamn clue what i'm even trying to say. but it sure helps me, and i hope someone'll get something out of using it.

L

6 comments:

spoon said...

I felt like this when I was working out some type programming with this dude and he mentioned one aspect of it was a little like the code for the spineless tagless g machine.

"UM?" Thought I.

- spoon

Lepht said...

i'd probably just laugh there, since my reflex response to that would be "Yer ma's a spineless tagless g machine." out of interest, what did he turn out to be talking about, and was it as fun as it sounds?

L

spoon said...

It's pretty cool. I'll try not to be too prolix:

The g-machine is a method of evaluating a functional language

-- where instead of an interpreter reading say, a function application, and updating the graph with the body of the function by taking the graph of the function and swapping the formal parameters for the actual parameters etc

with the g-machine, function definitions are compiled into g-code, which can be executed by fairly simple state-transitions. Makes life easy

see The G-Machine Johnnson and Augustson 1987,
( also this is the Lennart Augustson who has won the IOCCC three times! )

but since I'm a n00b, I've been reading Simon Peyton Jones' and David Lester's implementing functional programming languages - a tutorial

The spineless tagless g-machine ( implementing functional languages on stock hardware - Simon Peyton Jones 1992 ) is GHC's current backend, its most obvious difference from the g-machine being that stg-code is itself a small functional language.

Is it fun? Maybe -- I have an awesomely fun idea, but it would mean first writing a stack and a heap in brainfuck...

Lepht said...

nice. i gotta confess, when i first read the phrase "spineless tagless g-machine" i thought you were just making shit up and had a little more creative shazam than most people trying to come up with random sentences.

probably not surprising seeing as you're talking to the guy who can't use an analogue clock or the Shift key. i'm not the sharpest nail in the box.

cool stuff on stock hardware, though, i'm down with; got an 8-node Kerrighed/Ubuntu Beowulf going at work. spineless tagless g machine need a cluster?

L

Lepht said...

ps. hell, i'll help with the Brainfuck stack. let's implement us some Brainfucked TCP-IP.

spoon said...

That cluster is the shizz. Rory mentioned his team are going to be using a cluster for their I-gem project. I wondered if it would be the same?

Also re esoteric language networking, see http://search.cpan.org/~jquelin/Language-Befunge-4.12/lib/Language/Befunge/doc/library.pod

It would be fun to implement an extensible brainfuck. But brainfuck was designed to be a turing tarpit -- perhaps it would be better to define an extensible esoteric language.

Hmmm.