A New Job – Part 3

Originally written August 27, 2009
48 hours, almost to the minute, the call came in. Could I fly out next Monday for a full day of interviews on Tuesday?
Well, that’s a fine question to ask me on a Wednesday! We have a church camping trip this weekend — leaving Friday morning, returning Sunday night. Giving me exactly one business day to book my travel, fill out the required paperwork, arrange transportation to and from the airport, re-arrange our family’s schedules, call my references, and get the time off work!
Fortunately, MS has an incredible team of professionals who’s job it is to facilitate this kind of thing, so I had lots of help — I filled out some forms online and within a couple hours flights, hotel, and rental car were all taken care of for me. I worked the phones for a few hours Wednesday night and in the morning, and then everything was set.
I’ve had moments of nervousness, and moments when excitement bursts out of me. Mercifully, all of this is happening so fast that I haven’t had too much time to over-analyze. I’ve done a some research online about the job, and found out what I could about my interviewers — the two I know about anyway. But the reality is that there isn’t much prep I can really do. Either my experience and skills are what they’re looking for, or they’re not. It’s not like there’s some chapter in the book of my 10-year professional career that I skipped over. I’ve worked my way here, with the guidance of some great mentors, and either had God’s blessing so far… or a horse-shoe up my butt. So, we’ll find out if what I’ve learned over those years, and what I have to offer now, is what they’re looking for.
And I guess I’m confident. Not confident that I’m definitely going to get the job. But confident that if I can speak about my experience without putting my foot in my mouth too often, then it’ll have been worth the trip — regardless of the outcome. In a few short days, I’ll be driving into a massive 40+ building campus as a potential employee of probably the largest, best known software company in the world — and I’m not even 30 yet. How cool is that?

A New Job – Part 2

Originally written August 24, 2009
From what I’ve understood so far, having had only one phone call with my potential new boss, where I suspect he wanted to get to know me as much as I wanted to get to know the job, the position with MS is one where technical skills are important — but where soft skills are just as much so. The job title is Developer and Platform Evangelist, and it involves a lot of communicating. Programmers aren’t typically stereotyped as good communicators: good thinkers, good problem solvers, good implementers, sure. But us computer engineering types aren’t often thought of as being smooth operators or slick sales people.
Fortunately the job is not exactly sales. I don’t think I’m built for hard driving sales, but I do enjoy communicating. Especially about technology. I love presenting to an audience. I love walking into a room full of smart people, and talking about ideas and strategies. I just don’t want a job where I’m expected to pressure people into buying things they don’t need.
Which is good, because this position is working with existing relationships. There’s no cold calling, or high pressure sales. These are existing partners looking to find the best supporting technologies for the products or solutions they develop. And they’re all solid companies who are already technology leaders in their marketplaces. From what I understand, the DPE position is about aligning the strategies of MS and their partners. Exchanging ideas, positioning solutions and timing, and figuring out what’s best for their users — who are, in turn, MS’ users as well.
The challenge then is, as I said before, to get out from behind the desk and focus less on the code and more on the people making decisions. I’ve had a number of opportunities to try that out, having presented to, and interacted with, customers a lot during my career. I believe that I’m capable of things aside from coding, and I think that God gave me other skills that He intends for me to develop and learn.
I’m aware that if I get this job, I’ll be somewhat starting fresh. This isn’t like previous jobs, which were logical next steps in my growth as a developer, and where my previously developed solutions and ideas were directly applicable to a new team or product. I would need to be more teachable, more humble, and more willing to push myself in new directions than I have since I first started my professional career a decade ago. But its what I want. I don’t want to be too comfortable in a job, I don’t want to reach the Peter Principle point where I can’t grow any more.
So yesterday MS contacted me to ask for 5 dates that I’d be available to fly out to the Seattle area — Head Quarters — for a day full of interviews. Nicole and I talked them out, and I replied back. They promised that within about 48 hours I’d hear back about which of those days will be my date with destiny.
Whether I get the job or not is up to God and the team there. I think I’m being realistic in my confidence that my technical skills are sufficient for the task, and I’m somewhat confident that my soft skills, although probably in need of growth and refining, make me a good candidate for the position. My resume is no slouch, and I have some great references. So I’m going to show up in a sharp new suit, appreciative of the opportunity and excited to be there, and speak honestly about my experience and passions, and hopefully find out if I’ve found a new place to grow…

Assorted, Scattered Objective-C Notes as compared to C#

A outlet is like a pre-known property that can be bound
(ie: drag destination object to origin object and assign to the outlet (property) nextKeyView)
myObject.methodToCall(parameters)
is like
[myObject methodToCall:parameters];
int i = myObject.assignValue;
is like
int i = [myObject assignValue];
form.Window(makeKeyAndOrderFront(target));
is like
[[form window].makeKeyAndOrderFront:target];
object myObject();
is like
id myObject;
string myString;
is like
NSString *mystring;
Defining an instance method:
private string myMethod();
is like
– (NSString *)myMethod;
Defining a class method:
public DateTime myMethod();
is like
+ (NSDate *)myMethod;
private float convertAmountbyRate(float amt, float rate)
is like
– (float)convertAmount:(float)amt byRate:(float)rate;
convert.convertAmountbyRate(1.0, 2.3);
is like
[convert convertAmount:1.0 byRate 2.3];
public interface myInterface : myClass {…}
is like
@interface myInterface : NSObject {…} @end

Assorted, Scattered JavaScript Notes

Boolean(value) method returns false for falsey values, true for truthy values
falsy: false, null, undefined, “”, 0, NaN
truthy: everything else: “0”, “false”

+ as a leading operator converts a string to a number: +”42″ = 42. Same as Number(“42”) = 42), parseInt(“42”, 10) = 42
+”3″ + (+”4″) = 7

=== !== do not do type coercion, slightly faster

if (a) {
return a.member;
} else {
return a;
}
can be written as
return a && a.member;
if the first operand is truthy, return the second operand, else, return the first

but for || if the first operand is truthy, return the first operand, else, return the second:
var last = input || somethingElse;
so if input is truthy, then last is input, otherwise set last to somethingElse

you can label loops and break them by label:
myloop: for (whatever)
{
break myloop;
}

//other loop
for (var name in object) {
if (object.hasOwnProperty(name))        //avoids looking at objects we might have inherited from
{
name //is the current member
object[name] //is the current member value
}
}

//multiple conditions in switch statements
switch(something) {
case “;”;
case “,”;
case “.”;
isPunctuation();
break;
default:
somethingElse();
}

//exceptions and object literals
throw new Error(myReason);

throw {         //create an “object literal” creates an exception object on the fly
name: myexceptionName,
message: reason
};

//object literals
an object literal is wrapped in { }
a name can be a names or a value
values are any type
: seperates names and values
, seperates pairs
object literals can be used anywhere a value can appear
var myObject = {name: “Jack”, ‘goto’: ‘Jail’, grade: ‘A’, level: 3};
var myName = myObject.name;     //extracts “Jack”
var destination = myObject[‘goto’];     //extracts “Jail”
var destination = myObject[“name”];     //extracts “Jack”
var destination = myObject[goto];       //returns an error because goto is a reserved word, hence the other notation

//maker function
function maker (name, grade)
{
var it = {}; //makes a new empty object, good shorthand
it.name = name;
it.grade = grade;
return it;
}
var myObject = maker(“Jack”, “A”);

//an object with an object as a member, shorthanded
var myObject = {
name: “jack”,
grade: “a”,
clothes: {
pants: ‘blue’,
shirt: ‘red’
}
};

//if you have more than a couple parameters in a function, why not make them an object?
function myfunc(pa, pb, pc, pd, pe, pf)
myfunc(pa, pb, pc, pd, pe, pf)
vs.
function myfunc(specs)
myfunc({ pa: ‘1’, pc: ‘3’, pb:’2′, … })

** note: variables that are not var’ed become implicitly global

//specify object’s prototype on creation? linkage — doesn’t really exist
var newObject = object(otherObject);
//gives it a secret pointer to otherObject, but the secret pointer is used for retrieving only NOT storing
//object (lowercase) is a method that Yahoo made up
//different than

var newObject = Object() which equals: var newObject = object(Object.prototype)

delete myObject[memberName];    //deletes (sets to undefined) a member of an object

myArray[myArray.length] = 3     //appends to end of array (same as pop)

var myArray[]   //creates a new array?

A New Job – Part 1

Originally written: August 22, 2009
So I’m not sure if these posts will ever see the light of day. But we’re in the middle of a process now — one I, frustratingly, can’t really talk about — so I figured I’d blog as catharsis, and if everything works out, I’ll push the posts live for posterity, etc…
4 years ago, just as I was accepting my current job, a representative from a large software company, lets call them MS, contacted me, saying they’d reviewed the resume I’d submitted to them months ago, and were interested in interviewing me for a position on their Office development team. Aside from being flattered and honored that I’d been deemed worth their attention, I was also chagrined — knowing that there was no way I could pursue the opportunity. The deal with my current employer, lets call them The General, was verbally agreed to, the paper copy en-route, and MS’ interview process for engineering is fabled for its length and meticulousness. I could maybe delay the decision with The General by a week, max — but definitely not by the months it would take to find out if I was going to make it onto the Office team.
So I declined the interview, with some regret. Don’t get me wrong, the opportunity with The General was an incredible and exciting one. One that would significantly strengthen my resume, push my skills, and provide Nicole and I with an amazing adventure in moving to the States. But it would have been pretty stinkin’ awesome to have MS on my resume too!
But, the decision was made, there was really no looking back. A few short weeks later and the whirlwind of activity associated with the job and the big move began, and for the next months it was all about learning the company, dealing with immigration, and building a new home.
Since January of 2006 I’ve worked for probably the smallest division of the largest company in the world. On the software side of things, where I’ve been working, we produce applications that help manufacturers improve the efficiency of their plant floor operations, by controlling machines, gathering data, and analyzing product quality. There are days where the work is fascinating, and there are days where it can be dull — like most jobs, I imagine. But I have no complaints: I’m treated well, its a good company, with good leaders and good customers, and we’re developing some great products.
My favorite part of my job, though, has always been working with customers: understanding their needs, looking at their workflow and brainstorming ways to improve, then sharing with them technologies that can help with their pain points — being involved in developing those technologies is fun, but not so fun as hearing or seeing the satisfaction of delivering a working solution. That “ah ha!” moment when they realise their life is going to be better now, because someone actually listened and understood what they were asking for.
Engineering (“developing”, if you’re in Canada) should be about the customer — the user. About delivering solutions to their problems, not just making cool toys. Sometimes, as a geek behind a desk, you lose track of that. For the last little while, I’ve felt more and more like I need to get out from behind the desk — that maybe I’ve gone as far from there as I can.
I am a competent developer — far from the best there is, but not an imbecile either. I’ve had moments of brilliance, moments of averageness, and moments when, upon reviewing my code, I realise I could have done a lot better. And the pursuit of being and doing better has been a thrilling one. Finding a better, simpler, more elegant solution to a problem definitely excites me. But I’ve been doing that for 10 years, and I really am ready for a different angle. So when an old friend, boss and mentor called me up to tell me about an opportunity he’d just learned of at MS — one that he felt would be a good fit for me — I was intrigued enough to explore it.
We were not eager to move again, though!
4 years ago, moving to New York for a job was a no-brainer. Now, with 2 kids — both really still babies — and our first house that we’d only recently moved into, the thought of moving back to the States, and across the continent, was terrifying. We desire to be obedient to God’s direction in our lives, so if He said “Go” we would have gone. But we were awful intimidated by that possibility. Fortunately, we found out up front that relocation was not an option for this position. And with that hurdle passed, we felt convinced that this was something I/we had to pursue to whatever end came of it…