Thursday, December 6, 2007

More Code Submission Tips for Job-Seekers

If you apply to an automation testing position, please make sure your code submission is at least syntactically correct.  I do not really expect perfect code but try to keep the overall bug count to a minimum.  You have plenty of time to polish your code submission before you apply, please use it wisely.

Buggy code will not in itself result in disqualification.  But it will provide some interesting fodder for the phone screen.  I will ask how you tested this code.  I will also ask you to walk me through some of it to see whether you can find a few of the problems on your own.  This is not much different from the whiteboard coding exercises you'll get during an on-site interview.

I'm not a mean guy; I want you to succeed.  So you really need to put your best foot forward.

Tuesday, December 4, 2007

Onwards! Upwards!

I'm doing some thinking about my future.  So this post is about me, my desires, my fears, my conceit.

Thinking Out Loud

Knowledge is power.  Now that my employer is being acquired some quantities have been fitted to previous unknowns: I have more knowledge.  This gives me more power.

Where to go from here?

Running the Numbers

Now I know exactly the (cash) value of retaining my current position and can compare it against that of pursuing other opportunities at any given point in time.  Clearly this analysis neglects the intangibles: professional growth, loyalty, potential.

About those intangibles.  I value and respect my coworkers.  I value my role as a lead.  I value the resources I have to work with.  I value my freedom in choosing compelling projects.  I value the cooperation.  I value the teaching opportunities.

But unfortunately I have little faith that my current trajectory will lead me to achieve my long-term goals.

Who am I?

I'm a software developer, a teacher, a friend.  An entrepreneur?  A leader?

I marketed and sold my first serious application program when I was 13, Term 80.  Sure, it's a bit laughable now (only 20,000 lines of assembly with lots of rough spots) but it's hard to ignore all of the supportive letters that I received from people who sent me $15 for each copy.  It's also hard to ignore all of the enthusiasts who still apparently use it!  It's 15 years old for pete's sake!

That means a lot to me!  I built something people wanted.

It's also hard to ignore the fact that I seem to be able to motivate others to achieve their best.  Passion is infectious.  I don't hog center stage: I showcase the excellent work of my peers.  I teach and I learn.  I learn and I teach.  Mentoring is one of my favorite activities.  (And I married a teacher.)

But I've been off doing these things on the side.  I haven't participated much in the wider community.  Why didn't I go to DevTeach?  I certainly wanted to.  I did go to ALT.Net in Texas and had a thoroughly mind-blowing experience.

Meanwhile I'm working with some really smart people on Gallio and MbUnit trying to build a diverse and inclusive community of toolsmiths, testers, and the people who love and work with them.

Returning the Favors

When it comes down to it, I'm a very social guy.  I think I can do a lot of good with others and for others.  I believe I do this everyday on a small scale.  But I want a bigger force multiplier to work with.  I want to positively impact the lives of as many people as I can.

I owe a great debt of gratitude to those who have supported me, challenged me, disciplined me, and led me on to greater heights.  I feel the best way to repay it is to pass it along.  How do you create leaders?  I don't know, but I keep trying.

Entrepreneurship

I'm drawn to entrepreneurship.

My father runs his own business.  One of my uncles runs his own business.  Several of my friends and peers run their own business.  And I've always wanted to run my own business too.  I certainly have no shortage of ideas.  I've given plenty of them away and I've even marketed a few...

When it comes down to it, starting a business does not seem all that difficult.  Choose your partners, set an initial heading, start moving in that direction, get funding, build a product, see what sticks.  Work hard, be persistent, and see what happens.  Worst case?  You fail and try again.

That's really no different from how I developed my current competence in software development.  I spent my whole childhood on it.  My intuition as an architect came from building systems end-to-end out of diverse parts.  My persistence came from repeated failure and eventual success.

It's not about getting rich.  It's about acquiring the resources to invest in my dreams.  It's about attracting talent.  It's about bringing out the best in myself and in others around me.  And it's about doing damn cool things!

Long-Term Goals

Here they are:

  • 6 months: Get out into the world.  Teach.  Lead.
  • 1 year: Become a father.
  • 2 years: Start a company or join in at ground level with someone else.
  • 5 years: Be the founder, chief technical officer, or architect of a successful startup company.
  • 10 years: Help someone else get off the ground.
  • 20 years: Retire.  Keep learning.  Keep investing in the new leaders of the world.

Realizations

I am but an egg.

While I continue to refine my skill as a software developer, my current position is mostly teaching me about leadership, management, and business.  It affords me access to the insight and expertise of others in domains I have not yet mastered.  The workings of the business are being laid bare.  I'm reading books about management.  I'm learning to effectively delegate tasks to others.  I'm studying politics.  I'm learning to be a little selfish.  I'm learning to release the outcome.

However, I realize this position will never enable me to achieve my goals.  I will need to move on.  Others who mean well have tried to convince me otherwise but I recognize how they are protecting their immediate interests.  Just the same, I know they will support me if I left just as they do now while I stay.

The longer I stay, the more I can learn (and the more my options vest.)  But the longer I stay, the more I defer investing in new possibilities.  There is value in persistence and repetition.  There is value in change and novelty.  So hard to choose.

I could easily go elsewhere with a higher salary and with new challenges.  I'm sure I could learn a lot there too.  It would be fun.  I might have more influence.  I might have more guidance.  I might grok more of what I need to know.  Or I might not.  It's a gamble.

Cutting Loose

It feels like I'm just waiting for my next guide to shove me out of the nest.

Eventually I have to cut loose, find a partner, and try to fly...

When?  Now?  6 months from now?  A year from now?  Surely not much longer than that...

Help?

Code Submissions.

When you send code submissions to me along with your resume, don't just submit your most recent school project and send it to me.  Please spend the extra time to clean it up!

I want to see the quality of work that you are capable of producing.  I want to see your best work.  I want to see that you care enough to make a good impression on me.

Tips:

  • Don't express frustration in comments.
  • Remove debug output.
  • Add documentation.
  • Include test cases.
  • Include build / deployment scripts and other infrastructure if you are sending me a whole project.
  • Refactor it.
  • Write your code for a human reader, not for a compiler.
  • Use a consistent uniform style throughout.  I can tell a lot about your experience based on where and how you use whitespace.  I want to see that you are aware of the overall effect and can adopt good coding habits.
  • If you can, don't send me a school project.  Send me something else you built for fun on your own time and have worked on for a couple of months / years.  Even if it's incomplete.  Heck, maybe you can spend a day and write some really cool little demo application to show off what you know.
  • Send me something that you think is cool.  Don't try to guess what I will think is cool.  I think lots of stuff is cool...
  • Don't overdo it.  Ultimately I will spend about 10-15 minutes analyzing you code.  I'm skimming through it taking a random sample of what seems interesting.  To increase the likelihood of me stumble upon the juicy parts, try to keep the overall size of your submission pretty small (< 10,000 lines).  Or maybe you can offer hints as to your favorite modules.
  • Don't rush!  I'm quite happy to wait an extra day for you to put together a compelling portfolio.  It's worth your time and mine.

In the end, I want you to choose what you feel is your best work -- even just a little part of it -- and send it to me.  This is your portfolio.  I know you're still learning and growing as a developer.  Show me an achievement that you are proud of.

Because in the end, you can bet I will try to push the current limits of your ability.  I will work with you to create an environment in which you can excel as a full member of my team.

So give me a real taste of what you can do.

Monday, December 3, 2007

Wanted.

Smart, passionate, hard working software engineer seeking similarly inclined ne'erdowells to go out for beers, brainstorm, and found a successful start-up company.

Poster lives in the San Francisco Bay Area.

Yes, I'm serious about finding partners for a start-up!  Know anyone?