Wednesday, October 18, 2006

Apple's dirty little secrets...

Ok, maybe that's a bit sensationalistic.

Ok, it's a LOT sensationalistic. But the fact remains: not everyone's work style hits the Mac OS sweetspot...

One windows power user, in particular, was understandably frustrated by the slower "computer for the rest of us" design tradeoffs in OS X. Oh, and his sales experience with the apple store wasn't exactly a model of apple user-friendlieness.

HCI User Advocate: Switchback: Horrors of a Windows Power-user Trying to Switch to Apple OS X

Saturday, October 14, 2006

Diddly little stuff

Progress:

This is almost embarassing. So I had an interview with a tech company a few weeks ago for a QA dev lead position. And I was asked to solve some coding problems.

I can't say I was suprised.

But I choked. Boofed. Froze.

On a really silly little problem.

Thinking back on it, I first thought (let's extend the martial arts analogy here...) "Geez...I'm not even a white belt! I'm a fraud! A phony! I'm a lousy pretender!"

Then I gave myself a few firm slaps across the face, told myself to pull it together, and most of all stop talking to myself in the bathroom mirror.

I'm not a white belt. I _did_ solve the problems, but it was certianly not wizardly. It was rusty and painful. Reminded me of how awkward and (somewhat) embarrasing it was after a 4 month haitus from the dojo. The knowledge was still there but the moves came...slowly.

Cut to friday.

What did I finally start doing to break the freeze? Coding a real solution to the problem given me in the interview. Exercising those algorithmic parts of my brain that were either atrophied, or never developed. And it felt surprisingly good.

So I'm wondering if maybe it wouldn't hurt to pull out those old college texts and, instead of working to get design patterns down, reimpliment those old bubblesort/quicksort routines. B-trees. Linked lists. Basic data structures & manipulation. Get familar with the language doing something that's small, quick, and I can see success in a relatively short amount of time.

It's a thought.

Friday, October 06, 2006

White belt memories

Prologue:

I typed this up a while back...and after the karate references in the last post, I thought some of y'all out there might get a kick out if it.

I began journaling these within a couple of weeks of starting my martial arts journey. That was two years ago and I’m still very much enjoying Shoshin Ryu.

(yes sensei, even when the dojo is 50 degrees and the heater doesn’t work…)

Day one.

Arrive. No idea what to expect. Why is everyone bowing all the time? All right...everyone line up. What's that he's saying? Must be Japanese. Hope I'm not promising my firstborn.

All right...the kicking and punching, at least I can do this. Maybe. Wait a minute - this doesn’t look hard, why aren't my arms going where theirs are? Oh...over then under, around...switch sides...wait a minute, I was just getting the hang of that.

Ok, all done. More bowing. Everyone's very polite. We'll see how things go next time.

Week two.

I recognize a few folks. Good thing the website had an explanation of bowing in. Guess I'm not promising to take a vow of chastity upon reaching blackbelt after all. Whew.

Self defense. How on EARTH will I remember all these pieces?!? I'm sure Jackie Chan never looked like this.

Week three

Hey, I'm getting this tie-key-ow-ka one thing down. Wonder when we get more kata? Practiced choke holds. Got home and my wife asked who'd been giving me hickeys. Greeeat.

Week four.

Hey, group kata. I can do this - sensei says if you don't know it, do the highest you know. This should be easy, all I've got is taikyoku one. Hanka one. Haven't done that one. Guess I do mine again. Pinot one. Mine again. Hey...fourth time through taikyoku. Fifth. Seventh. Twelfth. Wow, how did these folks ever learn all these different kata?!! Boy, am I EVER ready for a new kata. Maybe I should ask sensei.

Week Five.

While we ended today, sensei said "do not ask for kata".

Decide to take a "zen" attitude towards kata.

Month two

"Deep zenkutsu!" Ok. Deeeep. Deeeper. Why is it sensei nods approval only after he knows it hurts?!!

Practicing kata at home in the living room. First draw the curtains, then turn out the lights. Wouldn't want the neighbors to know how dangerous I'm getting. Yeah...that's it. Riiiight.

Working wrist-locks. Hmm...looks easy enough. Ok...does that hurt? Does this? Does THIS..?! Sensei demonstrates. Yeow! Ok, at least I can help tori know when he's doing it right.

Month three

Hey, new kata! Woo hoo! Back to looking silly in front of the mirror. I'm getting used to that by now.

Hmm..but some of this is actually feeling more...natural? (how could sanchin ever feel "natural"?!) New blocking mnemonic: “Grab the ear, scratch the armpit, throw the baseball, check the watch.”

Hey, I actually almost look like I know what I'm doing. Ok, at least I feel like I almost know what I'm doing...

Month four

Sensei says we're almost ready to test. Wrist locks and bear hugs and kata oh my! How am I EVER going to keep all these straight! Drill at home. Hmm, people at work are looking at me funny when I visualize breaking choke holds. Just practicing my Nolan Ryan, ma'am.

Eplilogue

The student did pass his test successfully. He continues to look silly upon learning new techniques. Currently, he’s looking less silly but is still struggling to get his belt tied right.

Thursday, October 05, 2006

Wanted: Developer Sensei

Young padawan apprentice seeks experienced jedi code master for training.

Ok, here's the scoop. I'm stalled. Spinning my wheels. Torn between going forward to do something - ANYthing - and frustration that the things I'm picking are way out of my league and/or learning in an order that's not necessarily optimal. (and in some cases, detrimental)

This is an extended diatribe...but I'm sure that I'm not the only one in this position. If you've been in this position (or near enough), what did _you_ do? As usual, there's a far greater need than supply of Mr. Miyagis in this world...

I've been doing QA long enough (and read enough of The Daily WTF) to have a good idea of what I don't want to learn/do/be. I use source control. I've designed and implimented auto-build/versioning systems long before they were popular, (let's hear it for perl and batch scripts!) I love the idea of continuous integration, unit testing, and design patterns.

But I'm bewildered at where to begin. Do I continue and finish my Design Patterns book? Work Code Kata (though I don't understand some of the problems) Go again through the "learning c#" lessons graciously provided free by Microsoft/LearnVisualStudio.net? Find an interesting problem that motivates me and start hammering away? Spend a week or two bringing up a continuous integration environment? Figure out how to write unit tests for something other than simple set/get methods? "Just Write Code"? Look at past Topcoder projects and give 'em a shot?

All of these things are possible. All have good qualities. And I've been trying most of them. And getting stuck in all of them. And feeling frustrated that I'm not making progress. (of course, I haven't a clue what progress looks like here) I want to be able to focus my energies...but I don't have a clear idea of where I should do it.

I realize I want a sensei.

In the last two years of practicing martial arts, I've come to appreciate my sensei. A lot. Partially because he'll be the first to admit he hasn't quite mastered the reverse-flying-dragon-pull-a-rabbit-out-of-your-butt-and-beat-the-guy-to-death-with-it kick.

(He's very humble that way)

He's been teaching for 8-10 years. Been practicing martial arts for 20. And he knows people. Understands how folks learn. Approaches each student differently. And with that experience has a good feel for what to introduce to students, when. Basics build on basics, learn one thing and apply it in more advanced ways. Wrist techniques and basic rolls before boot to the head. That sort of thing.

When I'm stumbling at something, he knows when to keep me drilling. Has a good sense for when my frustration level hits the "time to switch gears." Is very patient and complimentary. Gives good positive reinforcement. Understands that this is a lifelong process, and pushes me towards my goals - not his.

This is what I want in teaching me to become a developer. Yeah, yeah..I know. Idealistic.

What kind of student will the teacher get?

A motivated student. (well, I think so anyway) I made a goal 4-5 months ago that I want to be doing development, full time, in 2 years. I've pushed myself this far with online tutorials, videos, books, and finding every excuse I can at work to apply what I'm learning.

A builder at heart. Legos, you are my love.** (my wife didn't hear that...)

I will dedicate 8-10 hours/week (probably 1-2hrs/day) to the task of learning.

I have a goal. I'm looking for expertise in ten years, but I want to at least achive journyman status in the next 18 months.

I'm not just interested in "learning to code" (though that's a big piece) I want to learn how to _develop_ software. That includes good design, infrastructure, and practices.

I humbly admit I'm not a math wonk. I have to work at understanding algorithms. (sometimes) 3d vector math makes my brain hurt. I don't naturally gravitate towards manual memory management or pointers. (though I do understand them) No, Joel probably wouldn't hire me as a superstar. That's ok - I'm content to be a slow genius.

I'm not starting from zero...as I mentioned, I have six years of software quality engineering work behind me. Developing test cases. Writing (very small scale) automation. Implementing source control and automatic build systems. Architecting stress/load test scenerios.


What else will the teacher have to work with?

I'm up to the command pattern in in HeadFirst Design Patterns and worked most of the code. (translating from Java to C# myself, typing...in...everything.)

I've digested Gunderloy's Coder to Developer. Much of it was already learned from years of doing QA, but I still learned a lot. Facts and Fallacies of Software Engineering (Glass) was pretty much a rehash of Peopleware (DeMarco/Lister) with some additional amusing anecdotes.

I've worked through all of the "Beginner's guide to C#" videos @ LearnVisualStudio.net.

I've made some silly little apps myself, as well as one in production use where I work. (though given the general quality of in-house developed apps at large corporations, I probably shouldn't be too proud...)

I'm a reasonable hack with perl's exploded whale guts.

Anyway, I'd say beyond neophyte/beginner, not quite a journyman at regex gut-slinging.

I tried learning c++ years ago and wrote a ditzy little 3d app that used perlin noise to generate 3d terrain. (use arrow keys + mouse to move...and thanks to NeHe for his excellent tutorials on openGL..!) Admittedly I'm so rusty now I'd probably have to relearn everything.

I've written test harnesses in python for macromedia's shockwave 3d.

More ms dos batch scripting than I care to think about.

Enough about me. Let's talk about me..

I want to learn. Grow. Be sharpened. I love being around folks who are furthur along than I. I want to be the "dumbest person in the room", because (yes, this is selfish) I learn so dang much!

I'm not content to sit on my @$$ and do the same thing the same way.

I understand that I need to put in the time for skill, and don't expect to be an expert in 21 days.

I want to put in the time, because I can just start to taste what a high resolution experience must be for a good developer. Where the code flows like wine and apps appear as if by magic..

Suggestions? Thoughts? I'm sure I'm not unique in my situation...how have others approached the same problem and what where your results?

Are you happy with them?

Discuss.



**I'm saving my allowance (Don't laugh. Kids are expensive and I have 3!) to buy the new Lego Mindstorms NXT, with the intent of a lego-ish mashup of JP Brown's Aegis , Daniel Rojas's lego rocket launcher, and Sebastian Dick's "Ultimate Lego Chaingun" .

Success will be determined by the ability of the device to shoot down one of these cool indoor mini-helicopters when it invades airspace.

Well, that and making anyone who comes into the cubicle run right back out...

("Please Exit the office. You have 20 seconds to comply...")