Tuesday, November 30, 2010

Back in the Saddle!

Today was my first day back at work, and after almost 2 months off, it felt great to be earning a paycheck again. Actually, yesterday was the first day at work, they flew me down to Burbank for a company orientation. This is the first time I've ever been at a company mature enough to need a company orientation -- actually the first time that I have ever been at a company where there are other people besides engineers :) Holy Diversity, Batman!

It feels great to pull a paycheck again. I knew I missed it, but didn't realize how important it was to my mental health to work. Anyways, more later -- this week is going to be an adjustment week, I've got to retool my whole schedule a bit as I figure out how and when I'm going into work, and how and when I can get some swimming/running in.

Training Summary 11/22 - 11/28

Call this past week 'the week that got away'. Between Thanksgiving and the first Seattle Snowpocalypse of 2010, not a whole lot got done, training wise. I did get a lot of resistance training in, but offset that noble effort with repeated trips to the feeding trough. Next week = back to work. Start the day off at Disney HQ, getting orientated, then back up here to dive in and start up for reals!

Monday

off.  I was tired from Sunday's run. On a rest day, if I'm that tired, sleep always wins :)

Tuesday

2x15 single leg split squats, last set with 10 lbs dumbell weights
2x10 single leg in front squats
2x10 single leg tuck behind squats
2x30 dumbell squats, 65 lbs
1x10 deadlift, 65lbs

Wednesday

Snowpocalypse hits, hard. Since the track was buried under 4 inches of snow and ice, I went outside and sledded with Kiran and Rohan instead. The only workout benefit of that was walking back up the steep hill. But we had a blast!

Thursday

Upper and Lower body resistance. Also a lot of sledding/ walking up and down steep hills.
  • 2x15 single leg split squats, last set with 10 lbs dumbell weights
  • 2x10 single leg in front squats
  • 2x10 single leg tuck behind squats
  • 2x30 dumbell squats, 65 lbs
  • 1x10 deadlift, 65lbs
  • 2x10 pullups
  • 1x20 shoulder Y extensions
  • 1x30 atomic pushups
  • 1x15 single arm pushups on TRX (1 ea. side)
  • 1x15 single arm triceps extensions (1 ea. side)
  • 1x15 supermans TRX
  • 1x15 chest fly TRX
  • 1x15 single arm row (1 ea. side)


Friday

4 Mi easy run with Shadow. The roads finally cleared up! Running w/Shadow is great, except for the way it throws my arms off. I'm going to play around with hooking his leash up to a belt, and see how that works out.

Saturday

Swimming
Felt rusty after a week off. Shoulders / arms were still sore from Thursdays upper body workout, so  I concentrated on form.

  • 1x300 warmup
  • 4x150 with fistgloves
  • 4x150 free + 4x50 br. w/o
  • 2x100: 50 free fast, 25 br, 25 catch up free
  • 1x150 warmdown

2050 total

Sunday
Running 4 miles + resistance training

  • 2x15 single leg split plyometric squats (where I explode off the standing leg)
  • 2x10 single leg in front squats
  • 2x10 single leg tuck behind squats

Sunday, November 21, 2010

Training Summary 11/15 - 11/21

OK. Job is in the bag, pending security check, which I'm pretty confident about, given that my employment history and education are what they are, as unimpressive as they might be (no one would fabricate my employment history or education to try to look better, that's for sure :) This leaves 2 weeks to contemplate...things. I've got some stuff I want to get done around the house, as well as some stuff (re:my personal pet project) that  I want to code up prior to starting a new job. And, of course, I've got time to train.  I've just got to keep it 'rubber side down' for the rest of my unemployment. Sheesh, I've (a) totaled the car, (b) lost Lopa's license, (c) gotten a parking ticket so far. Unemployment = trouble!


The weather has gone into total November mode, meaning it's cold and raining a lot. Biking doesn't look very likely over this next week. Running in rain, mist, wind, and cold isn't entirely excitement inducing. My body is starting to feel the damp/cold. My left hip aches for the first mile or so, and my right knee is twingy. Also, my lats are really sore for some reason I don't think it's the swimming, but that's about the only thing I think that could have brought it on, b/c I haven't been doing pullups lately. Maybe the last TRX upper body session, but that wasn't terribly hard.

So, with running/swimming being the only options, I'm going to get out and do them, but also not be an idiot about it. If it is raining outside, I might choose to do an indoor TRX resistance session instead.

Since getting laid off, I have dropped about 5 lbs. I think this has to do with the fact that I'm not sitting on my ass or eating free treats as much as I did when I was pulling a paycheck. The extra time to train has got to be kicking in as well.

Monday

Swimming.
Lats were SORE. No idea why. I warmed them up, then swam some 150 free+50 breast. Basically took it easy. Even with sore lats, I'm having these moments of pure feeling. I really felt the water today, my catch and pull were better than they've ever been. I'm noticing that I'm getting faster relative to the same people that used to clean my clock. This is a good sign.
  • 400 warmup
  • 3x150 free
  • 1x200 free
  • 1x150 free
  • 150 warmdown
1250 yds total. 

Tuesday

Running + Resistance
Did 4 miles in the AM, was meant to be easy, but I realized  I was running late at about 3.5 miles, so my warmdown was more of a sprint uphill.

TRX + weights:
  • 2x15 single leg split squats
  • 2x10 single leg forward squats
  • 2x10 single leg tuck behind squats
  • 1x20, 1x30 dumbell squats with 65 lbs.
  • 2x10 deadlifts with 65 lbs.

Wednesday

Running  ~ 5 mi speedwork
  • 1.5 mi warmup
  • 6x400 @ < 6:30/mi pace w/3 minute rest (jogging) intervals
  • .5 mi warmdown
Lack of recent speedwork really showed -- the first 400 felt like crap. Yesterdays resistance exercises as well as the wind/rain (not driving, more slightly sideways) combined to make me feel like 6x400, instead of the original 8x400, was a good idea.

The last 4 or so I came in around 5:45/mi pace. This was my 'go out pretty quick and try to hold it together, but don't kill it' pace. Basically that last 100 felt uncomfortable, i.e. lungs + legs burning, but when I would think "this isn't so bad, I could easily keep this pace up for another 1.5 laps", the discomfort faded, or at least became more bearable.

I find it ironic that when I was capable of running fast, my head was telling me I couldnt. Now that I really cant, my head seems to be telling me that I can. Of course, this may just be because I'm not pushing it as hard as I used to, so the thoughts that I'm having are relatively positive because the pain level I'm experiencing is relatively low. Still, I do feel like I tend to have a more positive point of view on things.

Intervals -- I always love them afterwards. Running fast, as painful is it can be, makes running slower so much easier. Not sure how I'm going to maintain these track workouts once I go back to work. But I think that this is a great time to work on speed, and pretty soon I need to actually start training up for the March Mercer Island 1/2 marathon.

Thursday

Swimming:

  • 250 warmup
  • 4x150 with FistGloves
  • 2x300
  • 200 warmdown

1650 total

Couple of things:

  1. Shoulder soreness gone. Must have been something I did over the weekend. 
  2. I'm noticing that I'm getting a lot out of the 'push' section of the stroke. This became apparent when using the FistGloves on the 150s. Even with my hands all fisted up, there was a lot of water to push. 
  3. Bringing the FistGloves back was A Good Thing. I had gotten kind of fried on them a couple of months ago, but that was before tuning my stroke, esp. the pull, and getting my bilateral breathing down. Now the FGs are really forcing me to stay level, and 150 yards with them is no problem. Considering I could barely get 25 yards in them when I started, this is improvement!
  4. I need to step up. I think that 2000 yards is a good goal per workout. 2000 yards is something a real swimmer would sneer at, but for me, a slow/non swimmer, 2000 yards would push my form and endurance limits right now. That means I need to allocate an hour to swimming. Which is possible if I get my ass out of bed early enough. 
Friday

Running 

  • 2 mi warmup
  • 14x30x30 @ 6:46 - 7:15 pace (depending on hill)
  • 1.5 mi warmdown
5.67 mi total.

I think 30x30s are hard, when I do enough of them. 14 is getting there, I was tired for the last 4. But they were, again, over before I knew it. I think a combo of upping the pace to 1k (i.e. < 6:45) and increasing the reps will take this from 'hard' to 'really fucking hard'. 

Saturday

Running 4 miles easy
Was supposed to be a swim day, but there was a swim meet going on when I showed up. So I bundled up and ran 4 miles, really had to focus on keeping it slow at base pace. I ran into Dave, a friend I had met while walking Shadow, he has 2 bichon frises (spelling?). Normally I don't like little dogs, but between the fact that Dave is a really nice guy and the dogs think they're actually big dogs (i.e. no little dog complex), I've come around to liking those specific dogs. 


TRX Resistance exercises
The usual:

2x30 squat 2/65lbs total
1x10 deadlift (skipped 2nd set, back was feeling twingy)
1x15 split squat
2x10 single leg front squat
2x10 single leg tuck behind squat
1x12 split squat with 20lbs total.


Sunday

Running
8.75
8:48 avg.
2 mi warmup @ 9:30
2 mi tempo @ 7:45-8:15
steep uphill section @ really f*cking slow
3 mi tempo @7:45- 8:15

7:45-8:00 feels pretty good right now, but my HR is in the 156-160 range at that effort. The terrain was fairly rolling as well, so that always makes it a little harder.

Sunday, November 14, 2010

Training Summary 11/08 - 11/14

This week I may (or may not) stick to the 5k training plan, depending on whether (or not) I can get out on the bike. Because it would be really nice to get in a longish bike ride while the weather is still holding.

Monday

Swimming

  • 2050 yards total
  • 450 warmup, free and breast, easy.
  • 4x300 free w/50 breast recovery
  • 200 warmdown, free and breast, catchup stroke on free.
300 free is long enough so that around the 4th or 5th 50 I spend at least a length trying to remember what 50 I'm on. Now I know why they used to hang lap counter signs underwater when the 500 free was swum in high school. Sheesh! On a good note, 300 free is getting easier. I might (depending on how I feel on Thurs) step it up to 350. My eventual goal is 3x500, at that point I  know I've got some economy of form, and can then start building in speed via 25s, 50s, 100s. 

I saw a video of Michael Phelps swimming freestyle, and I really dug how he dolphin kicked the first half of the first length of the pool (it's hard to tell, but I'm assuming thats 25 meters of a 50 meter pool). So I tried the same today, and hey! It was really fun! He also pushed off really deep after his flip turn. I couldn't do that in the 3 foot section, and didn't have the lungs for it by the time I got back to the 12 foot section, but that is something to aspire to :) 

Also, I'm not so sure about swimming after 7. The water aerobics ladies are in da house, and this time, I was in the lane right next to them. One of them was wearing this perfume that was making me gag in the shallow end. That, combined with the increased temps (lets face it, doing water aerobics in a lap pool would be cold), was really messing with me. I did manage to switch lanes to avoid the aroma, and that seemed to help.


Tuesday

Running: 4 miles, 8:30/mi pace, in the rain.
TRX lower body exercises (split squats, single leg forward and tuck behind squats, 2 sets each)

It was rainy and cold, and I bagged a serious run, lifting weights instead. Had a rough night of sleep due to job negotiation stress, and all in all I wasn't feeling too groovy. 

Wednesday

Swimming
  • 250 warmup
  • 2x150
  • 2x300
  • 200 warmdown

1350 yds total

Still stressed by job negotiations, I have no idea how consultants do this regularly. It makes me want to hurl. In any case, not feeling super aggro today, just lolled around in the water, concentrating on form over speed, as usual. Still, getting good and comfy in the water. 

Biking: 20 miles around island, 19 mph avg. 

Got out this afternoon after locking down the final offer, needed to vent some energy. About 4 miles in my new boss called, and we talked about the position (very cool job, I'm a lucky guy!) for a while, which ate into the remaining sunlight. So I rolled it home after 10 out. But the conversation was worth it, and I'm frankly totally fucking thrashed from stress, so 20 miles felt completely OK.


Thursday

Swimming
  • 450 warmup
  • 4x300 free
  • 350 warmdown
2000 yards total

Felt great, considering this is the 2nd day in a row for swimming. 300s feel natural, may be time to push to 350 next week. Concentrating on high elbows through the pull, and really pushing hard on the last part of the stroke.


Friday

TRX
Not super excited to run after a late night out with Dave, Tom, Jim. So I lifted instead:

  • atomic pushups
  • 2x single leg split squats
  • 2x single leg forward
  • 2x single leg tuck behind
  • 1x20, 1x30 squats with 65 lbs total  dumbells
  • 2x10 good mornings
  • 1x20 TRX shoulder Ys.
  • 1x20 TRX single arm presses


Saturday

Ran 3 miles easy. Sore throat + Kiran's last (early) game + waking up late = short, easy run. 

Sunday

Running: 6 mi, 12x30x30@ 7:00-7:30 pace. It was raining slightly but warm outside, dense fog. Perfect running weather! I ran out and back on W Mercer, the first 2 miles were warmup, 10:15/mi on the long grade heading south. Then I hit the 30x30s, seemed to lock in on a 7:00 pace, which is the lower range of what I was aiming for. They were over before I knew it, which means I need to either (a) go faster or (b) do more. Then I ran back in, ended up averaging about 9:30 on my warmdown. That includes the downhill that was the uphill on the warmup, so it actually was pretty slow. Picked it back up for the final hill -- there is no point in running that thing slow. 

Training Summary 10/25 - 10/31

Whoops! I forgot to publish this one. But better late than never.

The weather outside is frightful. I mean, it's fucking-a cold out there, like BAM all of a sudden someone pulled the switch, and it's mid 30s, raining, downright miserable. Since I felt like a dog on Sunday, I skipped working out on Monday, just did some light TRX training.


Tuesday

Swim: 1800 total: 200 warmup, 4x250 free w/50 breast inbetween. 4x100 mixed free/breast warmdown.
whoa nellie the 4x250s in a row felt really, really good. I'm just enjoying being able to swim that far in one shot, its really a pretty big miracle, I definitely couldn't do that in high school when I was the least bouyant member of the swim team. See, love handles aren't totally evil!

Wednesday

one of the joys of being unemployed is that when it's not pissing down rain, I get to make the most of it.

Run 4 mi, base pace. Skipped intervals b/c was still feeling a little out of it.

Bike 26 mi, 1:26, 2 laps around the island. Legs were twingy at first (i.e cramping), but it all worked out in the end.

Thursday:

skipped out. Had a 9AM interview in DRedmond. Needed to leave by 8:15!

Friday:

weights. No swimming (no time!) Another interview @ 9AM, downtown.

Saturday:

nothing. The whole week of interviewing was draining. I got very little sleep weighing the options last night, and I was just beat. Plus, it was raining and cold.

Sunday:

8.75 mi, the usual loop. The goal was to hit 8:15/mi after a 2-3 mi warmup, but my body wasn't there. Must be the whole stress/fatigue cycle.

Monday, November 8, 2010

Stumbling Towards Better

Interviewing for a job is hard. Hard because it shows, in a very harsh light, your real strengths and weaknesses. While I have yet to actually sign on the dotted line and become gainfully re-employed,  I have gone through the interview process a number of times in the past month, and have learned some good and some, well, sobering things about myself.

At this point  I want to analyze what went right, and what could be improved, as shown by the interview process.

The Good
I know that being able to have job offers within a month or so of being laid off is a good metric, and that reflects on some areas that I've been paying attention to:
  1. My external profile. I've been maintaining my LinkedIn profile as well as my blog. The blog, in particular, requires a lot of effort, but I tend to focus on technology and problem spaces that I find interesting, and so it's not really effort I really feel.
  2. Contacts. While I'm not a 'networker' per-se, I was able to reach out to people I have worked with/met in the past.
  3. In Person interviews. I had several 'out of body' experiences where I would literally be hearing very intelligent things coming out of my mouth and thinking "wow, that's really good!". People that know me find it hard to believe that I can sound polished/intelligent. I actually find this hard to believe as well, but I witnessed it firsthand. Maybe this is the result of processing a lot of information over the past couple of years and finally being able to have coherent sounding summaries. But it makes a difference when you don't sound like an aging metalhead down to his last 5 brain cells. Note to self: omitting 'Dude!' and 'Fuck yeah!' from interview vocabulary was a good thing. 
The profile maintenance resulted in me being contacted throughout the year by various companies, all of which I told "not right now, but lets keep in touch" to appease my inner doomsayer who seemed to think that layoffs were just around the corner. When he turned out to be right and I was laid off, I returned to these contacts to set up numerous interviews almost immediately. Once onsite, I could tell that I was doing well. I interview the way I would like an interviewee to behave: (1) not acting like they're the bomb -- in my case, I am definitely not the bomb, and so there is no need to go there. (2) being friendly. I like nice people. I think other people like nice people. Generally speaking, unless I'm having a bad day, I'm a nice person. (3) Listening and responding. I like to be listened to, and have seen other people respond favorably when my  responses indicate that I heard what they just said and am taking them seriously. Fairly obvious stuff, but I'm just becoming aware of how important this is, and I'm 41.

The Bad/The Ugly

Enough about "me me me..blah blah great blah blah awesome". Lets talk about what didn't work. Because what didn't work boils down to a fundamental weakness that I've got to address in order to be able to progress in my career.  This fundamental problem revealed itself during phone interviews.  As much as I hate to admit this, every phone interview failure I had was completely my fault, and completely preventable. If someone was looking at the cost benefit analysis of the phone interview for the companies that dropped me based on how I did, they would only logically conclude that there was huge benefit for relatively low cost. Phone interviews are the way of the future. I'd better start improving!

The problems I ran into during phone interviews showed me in excruciating detail that my problem solving approach is flawed. This is embarrassing because as a software engineer, I get paid a good salary to solve problems. While I've been able to get this far by being somewhat intelligent, it became very obvious during the phone screen process at several well known companies that I was missing problems that had fundamentally easy solutions because I did little to no formal analysis of the problems. I just dove in and started coding.

That may work just fine on a 'reverse a string in place' or 'show me an in order traverse of a binary search tree' problem. But the problems being discussed were not implementation specific questions. They were problems that did not have an obvious solution, but whose solution was based in computer science fundamentals, and completely accessible from the information given in the problem itself. These are problems that, while initially hard, have solutions that are possible over the phone, in 45 minutes or less.

To summarize my flawed approach, I was doing what my 9 year old son does on word problems. Rushing ahead, diving in, and ultimately making a wrong turn. While that's perfectly acceptable for Kiran because he's in third grade and just starting to think about solving problems, I simply cannot come up with a good reason why I did not formalize a solid problem solving approach earlier in my career.

Let me put the whip and the hair shirt away because they aren't moving me closer to solving the problem. In college, I was very fortunate to be around some really smart people. I majored in Physics, not because I had an aptitude for it, more because I found it fascinating. The people that did have an aptitude for it were amazing. While the rest of us were just killing ourselves to get Bs and keep our heads above water, these guys were cruising in the relative stratosphere above us, making it hard to score high on the curve, but always taking the time to help anyone who asked. One of them was my friend Eric. After a while, I started to notice his different approach to studying. Eric always stopped working by 10PM, got to sleep at the relatively sane hour of midnight, and would usually take a couple of hours the next morning before class to finish his work. The rest of us would go until 2AM, make little to no progress, and drag into class the next day barely functional. When I asked him about his approach, he told me that "hard problems got much easier after a good nights sleep". When I started following his example (and literally following him out of the physics lab at 10PM and back in at 8AM), my grades got better while my thrashing was reduced. I also really started to understand the concepts we were learning, and my enjoyment of physics grew significantly.

So, even though I'm not close to brilliant, I have been close enough to brilliant people to notice what works for them. In this case, what seems to work for the best problem solvers out there is a much more logical/well reasoned/formal approach to solving problems.

The Solution, Take 1
I don't expect this to be the final solution to my problem solving deficiencies, but it's a start, and that is better than doing nothing. Summary:
  • Clarify The Problem Statement
  • Evolve Initial Solutions
  • Implement
  • Verify
Clarify The Problem Statement (Ask Questions If Necessary!)
Here is an example of a problem: "I have an array of unsorted integers. Find me all  integers A,B, and C that sum to 0"

Here are the facts:
  1. the data structure is an array.
  2. the contents are integers. 
  3. there are 0..N triples of integers that sum to zero.
Here is a set of questions that should be asked to clarify the facts above
  1. What data structures can I use to solve the problem (answer: any)
That's a short question list, but on other problems, the question list could be about the underlying assumptions, the signature of the method you are being asked to write, the kind of inputs into that method, etc. Make sure you get to the point where you could jump in and start coding. But dont!

Evolve Initial Solutions (and Pick One!)
The problem posed above is a hard problem. Can we actually simplify it and then evolve that solution so that it solves the more complex case? 

In this case, we can simplify to "Find Me all integers A and B that sum to 0". This is a valid simplification because it can be extended to any arbitrary sum of integers. Other simplifications may not be valid. You have to prove to yourself (and the interviewer) that your simplification is indeed a valid one. 

Note that these solutions are initial, and most should be thrown out. But we need to know why we are throwing them out and use that as rationale for selecting a possible solution and proceeding forward. Because proceeding with a solution is expensive, and we want to be right before moving forward. 

Proposed Solutions for simple case (A + B = 0)
  1. compare every item with every other item. This O(n^2). non optimal. OK, that's probably not the one we want. 
  2. If A+B = 0, then A = -B. Since we can use another structure to instantly compare items, load the absolute values of all list items into a set (that has constant time lookup) and then traverse the list, looking abs(list[x]) in the set. The time expense of this is 2n, one for loading into a map, one for traversing. The space expense is roughly O(2n), counting the initial array as well as the minimal size of the allocated Set. Note that the actual size of the Set is larger than n, but not exponentially larger, so we can make a decent argument that Set size is closer to n than n^2
A couple of notes: this is where knowledge of data structures, algorithms, and time/space complexity comes into play. It is one thing to crank out a breadth first traversal of a tree. It is another to realize that a solution to a problem requires a breadth first tree traversal. When coming up with solutions, whether simplified or not, I've found that the following really helps:
  1. simple = better. Don't use a hash when an array will do. What are the initial conditions that may permit an array based solution over a hash based solution? Trees may be overkill, can the same problem be solved with a linked list? 
  2. shoot for O(n) or O(n(log(n))) solutions. Only consider n^2 solutions when the naive solution is n^3 or above. 
  3. When stumped, always revisit the initial conditions. The solution is there. Especially on a (contrived) phone interview question. 
When no simplification is needed, the solution you choose to proceed with is the one you continue with. Of course, you must know at this point what the time/space complexity of your chosen solution is, or at least what you think it should be. To not know this prior to implementation is unacceptable. 

Otherwise, working through an initial solution is the next step, and evolving the initial solution into a final solution is the step (or steps) after that.

So if we take the initial solution above, and evolve it to handle A+B+C = 0, what has changed and what needs to change. 
  1. First: instead of an n^2 solution, the non optimal solution has changed to at least n^3. Because you need to take every A+B (an n^2 solution) and compare with every element in the list, i.e. every 'C'. That leads to n^3 non optimal solution. The question is how can we do better?
  2. Instead of A = -B, the equation has changed to A+B = -C. 
  3. Taking the initial solutions from the simplified assumption, we know that to get every A+B is an n^2 operation. Can we do the final compare in O(1) time to beat the non optimal n^3 solution? 
  4. Again, looking at the simplified solution, we could load all elements into a Set to do the compare in O(1) time. 
  5. So the solution to all A+B+C = 0 is to do an n^2 generation of all possible A and B combinations and then compare the absolute value of those sums against the absolute value of all C elements in the list. It has O(n^2) time complexity, and O(n) space complexity, because you're using the array and a map just like in the first solution.
(3) Implement -- and Work Around Roadblocks
The implementation for the problem above is pretty straightforward because the hard part was figuring out what to do. But what if the implementation for one of your solutions runs into issues? For example, what if you are restricted in what you can use as input parameters and don't know how to work with  the requested input parameters even after arriving at a viable, known cost solution? 

The best solution at implementation time is to 'box' the problem by assuming you have a solution that renders the output in a way that it can be used by your proposed solution. This is just another way to simplify the problem domain. When solving problems like this, make sure you let the interviewer know that you are drawing a box around the problem and will revisit the solution after getting the rest of the implementation going. 

The reason this solution is good is that it compartmentalizes the problem into something smaller that you can tackle. When you revisit the sub-problem, you will most likely have a more clear idea of any transformations or other solutions you will need to do in order to solve the sub-problem because you've already specified what the outputs of that sub-problem need to be and used them in the larger solution.  Even if you don't get the mini problem, you've shown that you can solve the bigger problem in a known and deliberate way. This is way better than rushing blindly in and getting stumped. 
(4) Verify That You Did What You Said You Would Do
If you've implemented a solution whose space and time complexity is known, you have two things to do here. 
  1. verify that your solution meets the expected time/space complexity. 
  2. verify that your code doesn't contain any (obvious!) bugs. 
(1) should be pretty easy, but (2) is sneaky. The best way to do verification is to talk about good testing inputs to the solution, why they are good, and what they will test.  So the real key to (2) is to pick the right test conditions. In the real world, you'd be pushing those test conditions into unit tests. Just because you're coding on the phone doesn't mean you are freed from unit testing. The point here is to be able to walk through the code and  catch problems before the reviewer does, or at least before you say "it's all good, Dude! Fuck Yeah!". Sorry. Still working on my vocabulary.

The Game Plan
The game plan to get me from where I'm at right now -- aware of a solution to the deficiency I've identified above, but still prone to rushing in --  to where I want to be -- solving problems in a conscious, thoughtful, intelligent manner -- involves practice. Practice, practice, and more practice. With hard, non obvious problems that stress my knowledge of CS fundamentals while forcing me to formalize my approach to a solution. My game plan is far from complete right now because I'm trying to narrow down what exactly to focus on. When I get that list, I'll write it down, as well as a schedule for attacking it. Hopefully, I'll have to balance that schedule with the demands of a (paying) job by the time I come up with that list! 




Sunday, November 7, 2010

Training Summary 11/1 - 11/7

Unlike last week, this week was simply amazing, weather wise. I took full advantage of my 'between jobs' (note optimistic tone) status and got out on some nice fall bike rides.

Monday

Swam, felt pretty damn tired. I think it's the job hunting stress, the lack of sleep, and the early winter cold coming on.
  • 200 warmup
  • 4x200 free
Tuesday

Fuck, what a day. The previous day I had a full on brain fart in the tech screen with a highly respected bay area startup. Their recruiter had scheduled another call for today, but based on the results of the first call (which, admittedly, I fucked up), decided to terminate. Without telling me. I was pissed, stressed, and ready to implode when Jary called about going on a ride. He's just had knee surgery, so it wouldnt be a hammerfest, but it was beautiful outside and I needed to get out. So we rolled a lap (14 miles) around the island on a beautiful fall day. That was the highlight of the day. It doesn't take away the anxiety, but it definitely puts it on hold.

Wednesday

Today I woke up determined to see what it would be like to bike commute to one of the companies I'm in the final round with. It's out in deep, deep Redmond, and I had a vague idea that it would be somewhat of a hike. 43 hilly miles later, I have to say that this would not be a daily commute :) That said, it was a beautiful fall day, and I could think of no better way to spend it than in a tuck position on the aero bars (when I wasn't grinding up hills, of course!).

Thursday

Morning swim:
  • 200 warmup
  • 2x200 easy
  • 1x250 easy
  • 1x300 easy
  • 1x150 warmdown
Its all about 'getting comfortable for long stretches' right now. My shoulders were tight at first, but loosened up. I actually feel more comfortable at 250 than I do at 150. I always go through a period of fatigue around 150 that I just have to work through. Then it starts to flow. I (heart) swimming right now. I come out of that pool feeling completely stoned, yet strangely coherent.

18 miles bike ride in the afternoon. Turned out my interview at company 'D' went well and resulted in a verbal (to be followed by an actual) offer. This combined with an offer from company 'W' has resulted in a much lower level of stress over the last couple of days. After the interview, the weather was so beautiful I rolled out on the bike. The last couple of days of biking had taken it's toll, and I was kind of tired. Plus, before starting the 2nd mercer island loop, I realized that I was running a little late, and wanted to hang out with the kids. So I took the Gallager Hill route home (fuck, that's steep). Rolled about 18 miles in roughly an hour. First lap went out hard, 19.3 mph avg, 2nd part of the ride I was mostly rolling/climbing, 15.6 mph avg.

Friday

Today, between phone interviews/fielding offers, I was basically a slothbar. After getting 2 job offers, my stress level went down to where I can sleep again, and boy did I. Then, the scheduling/calling on the offers as well as handling a third offer pretty much killed the day. Wait. This sounds like I'm whining about getting job offers. No, that's not what I'm doing. I'm STOKED to have multiple job offers 1 month after getting laid off, in an economy where the unofficial unemployment rate is 20% and lots of very capable people are really hurting. I'm just saying that between all of the 'getting work' work going on, and my re-discovery of that elusive thing called sleep, I didn't have a lot of spare time.

Saturday

Swim

  • 250 warmup
  • 4x300 free
  • 250 warmdown
So I stepped it up to 300, just to see what it felt like. It felt so good I did it 3 more times. I'm really happy with how my comfort level and economy are progressing. I didnt feel tired at the end of the 300, I did feel it in the middle of the 300, and on the last 300 I was happy to stop. But compare that to 2 months ago, when I felt that way about 100s. The bilateral breathing thing is now officially second nature. Occasionally I lapse into single side breathing, like when I get a mouthful of water, or when I'm coming into or going out of a turn. But the rest of the time, pull-pull-breathe feels completely normal, and I'm not running out of air.

Sunday

goal: 7 mi tempo run: 2 mi warmup, 5 mi @ 8:15 pace, 1317 feet climbing
actual: 7 mi, avg 8:33/mi, around 1 hr.

averages:
mile 1 @ 9:26 -- down from house and up first steep climb
mile 2 @ 9:44 -- steep hills
mile 3 @ 8:18 -- rolling flats
mile 4 @ 8:05 -- rolling flats
mile 5 @ 8:08 -- flats
mile 6 @ 7:56 -- steep downhill
mile 7 @ 8:14 -- steep hill up to finish

It was hard to keep @ 8:15. The first two miles were climbing, the next 4 were rolling up and down, and the last one was a steep climb. Mentally keeping this pace on rollers was hard, but something that has been working for me lately is the following internal 'conversation':
"this doesn't feel that bad. I've felt worse."
"wheezing is totally natural at this point. It's perfectly normal to not be able to get enough air in"
"I'm tired, but not all _that_ tired. I've been way more tired."

Not sure why, but these thoughts seem to mentally freshen me up. I haven't been running too much lately, so it was good to get out and go hard for a relatively short distance.

After the run, TRX killed me off good.
TRX
  • Standard leg routine here, abbreviated b/c of hard run.
  • 2xsingle leg split squats, 15 reps 1st set, 12 reps 2nd set w/20 lbs extra.
  • 2xsingle leg front squats 10 reps/set
  • 2xsingle leg tuck behind squats 10 reps/set
Summary: a good week of cycling and swimming, with runs bookending the week. Wish  I could have gotten in more resistance training, but all in all I'm glad to get out this much in November. 

Saturday, November 6, 2010

The Job Search Update

Without being really specific, because nothing is signed, I've got three offers that I need to evaluate this weekend.

Company A is a large multinational conglomerate that has a technical arm here in Seattle. They need to rapidly build a standardized BI platform on top of an HDFS file store that is going to need to handle up to a Petabyte of data. The role at Company A is more senior than I've held before, and would be a good thing to have on my resume. Plus, my immediate supervisor and the people on the team are friendly and down to earth while still being quite intelligent. This is in contrast to the intellectual arrogance that I've seen at some of the places I've worked in the past. In Company A, I'd be in a position to learn a lot, both technically and about pushing ideas through a large company.

Company B is a games distribution platform that has very solid  and relatively long standing relations with multiple well established Brands, and they're extending a very promising ad platform, which of course means they need BI. Again, all on HDFS with various HDFS stack technologies. Company B is further away than Company A, but the people are really, really great, i.e. even more friendly while being just as intelligent as the people at Company A, and I'd get my hands dirty very quickly doing things that I've had to do at home up to this point.

Company C has a site that is revolutionizing its industry. They have a CEO who is on the ball, a great Director of Engineering, and the need to do a version 2.0 of the software stack that got them this far. They need technical leaders, and have made it clear to me that I would be working in that role for them.  The Dir. Engineering in particular would be a great guy to work for. He and I are on the same page wrt software development -- so strife and struggle with leadership would be minimized.

Note that there is no clear winner or loser between A,B,and C. There are advantages and disadvantages to each, but I consider myself to be extremely lucky to have to choose between these three companies. Right now, when the unofficial unemployment rate is hovering around 20%, and lots of really great people simply cannot work, I feel privileged to be in this position. Yes, I worked my ass off  to get to this point, but I'm sure lots of them did as well in their respective industries.

One thing that I've realized in this job search is that there are things that I'm better at than first thought, and things that I definitely need improvement on. In the 'better than expected' camp is my ability to coherently summarize my abilities or a problem. Sometimes I feel like an observer sitting on the sidelines while fairly profound and intelligent things are coming out of my mouth. Usually, as Lopa will confirm, I sound like a well intentioned stoner. But it's job hunting time, and I've been able to sell myself quite well by sounding intelligent.

On the 'needs improvement' side of things is my ability to solve hard, non obvious problems. I've been fairly hit and miss, mostly miss on the phone. The phone screen is my single point of failure. When it has gone badly, it is usually because I get stuck in a rut of thinking about a solution, and only later do I go back through and realize where I went off the rails.

I have a long, long way towards getting very good at solving problems. Fortunately there is a lot of literature and approaches out there that I think I can leverage. Being more formal about solving problems would probably help me actually solve them instead of blindly rushing into them. Going back and working on my algebra, in order to calculate operational complexity as well as solve hard problems would give me the additional edge/ problem solving approach that I've lost since graduating 20 years ago. Continuing to code solutions to hard problems in the data structures/algorithms space, i.e. via Facebook puzzles, TopCoder, etc, on a weekly basis, will go a long ways towards helping me at work and the next time I'm in the position to be looking for a job (hopefully that will be a voluntary position, unlike this time).

My biggest regret about this time through is that I learned a lot of tough lessons by failing interviews with sexy companies. Not that I would have gone to those companies, but it's always better to be the rejector instead of the rejectee. And there is a certain amount of street cred that you get by being able to get through the dreaded Company X phone screen.

So, in addition to tracking my physical training, I'm going to start to track my mental training as well. I think that I'm fairly intelligent, and that I can go quite far on the modest amount of intelligence that I have by coming up with a systematic approach to solving hard problems.