Archive for July, 2006

Life on the fast lane: decide on your direction now!

Sunday, July 30th, 2006

Brian Kim writes about some advice for fresh college grads that I found useful even for working professionals after college. Number #2 on his list tells us to find what we love to do. And I agree, life is too short to be working on something you are unhappy with. However, sometimes we need a more graphical illustration for the truth to really sink in. Here’s how Brian depicts it:

Graduated from college -> can’t find job -> get’s low paying “temporary” job just to pay the bills -> starts to become complacent and falls into routine -> struggles to get out of routine but can’t because of accumulation of debt to finance lifestyle of escaping reality and impressing people with material possessions -> effectively becomes a slave to the job as it is needed to pay the bills-> gets depressed -> struggles to find meaning in life -> maybe gets a small promotion at temporary job by employer as an incentive not to quit -> hates waking up in the morning everyday but does it anyway to pay the bills -> rinse and repeat for 40 years -> lies on deathbed regretting life, wishing he could go back and change it all, and dies knowing that he can’t.

Wow, that’s funny because I can recall real people like that. Mediocrity is like prolonged death. Better find something you are passionate about and will kick ass at it! Hesitating over that career shift? Oh, just do it!

Software engineer today? More than just l33t hacking skillz!!

Monday, July 24th, 2006

Today, it is not enough just to be technically competent to survive. Yeah, yeah, everyone says that, but I found some numbers today. According to the annual Design News salary survey, these are the skills participants found most important (from most important):

  1. Project management and communication/presentation skills (86%)
  2. Computer skills (85%)
  3. Team-building skills (64%)
  4. Language skills (43%)
  5. Marketing/sales skills (35%)
  6. Finance/accounting (31%)

Who would have guessed that the #1 most important skill is communication? (Shocker, it’s not some l33t rare proprietary system hacking skillz. Us geeks have been trained in college to work in a dark windowless basement without talking to each other that communicating our ideas effectively is just naturally un-natural, to say the least.

Delivering results on time and within budget is also an obvious, although no where in a regular computer science curriculum is this strongly emphasized. However, this shouldn’t be a problem for students that have completed their operating systems class. Remember the fundamental concepts in threading, process and memory management? It’s all about juggling multiple tasks with finite memory space and a single processor. Same thing usually applies in the real world — you will have a finite resource/budget.

I’m sure someone can write up an algorithm for their project management needs. Here’s a pseudo-code algorithm:

  1. Identify the “projects”, tasks that need to be worked on (deliverables)
  2. Prioritize each task — use appropriate metrics (e.g. urgency, due date, cost, risk, etc.)
  3. Execute, and don’t drop the ball! Feel free to apply threading and pipelining concepts e.g. make sure no threads get “starved”.

Other advanced concepts that you can also apply from the OS class are such as solving deadlocks (process contention), reducing overhead cost when task-switching too much, and pipeline “hiccups”.

Also, I would highly recommend applying the infamous GTD concepts. I have learned to apply the GTD toolkit and I have managed to tie up many of the loose ends in my life that were just bogging me down (too much overhead). I like to think of it as reducing the number of background processes, giving me more memory and processing power for other things!

Perhaps CS grads are also lacking in the leadership department, because students are too busy competing to out do each other in grades that they didn’t get the memo telling them that in the real world, people are supposed to work together — performance reviews/appraisals replace “grades” and the need for leadership skills become more relevant and important.

That shouldn’t be a problem either. Any competent CS grad cannot call himself a “computer scientist” if he doesn’t carry his problem-solving algorithm toolkit with him at all times. Many hackers have used these general problem solving principles to solve non-technical problems. The Hacker’s Diet is a very good example a person determined to lose weight by approaching it as an engineering problem. The key resource in this weight problem? Determination.

Rick Johnson, president of Cherry Electrical Products says:

“My experience is that all companies prefer technical people in these [management] positions. The opportunity here for an engineer to continue in engineering is to add to his/her leadership skills. All engineers are taught to solve problems. If an engineer pursues acquiring leadership skills … they will have huge opportunities in store for them in the future. Alas, most engineers just ignore this aspect of their personal development preferring instead to learning more and more about the latest technologies.

Full article at Design News.

Plowing through rejections, the Schwab way

Monday, July 24th, 2006

Everyone gets rejected at some point or another, but so what. That 1 time you get accepted will make that 99 rejections all worth while. Every rejection brings you one step closer to success ;)

I quickly learned that if I kept at it and plowed right through the rejections I would eventually get somebody to buy my wares.
– Charles Schwab

By their fruits, ye shall know them

Friday, July 14th, 2006

I’m adding a new category named after the management guru Peter F. Drucker. His insights are truly priceless and still prove to be true today. I’ll be learning a lot from his writings.

A company/business entity, does not exist for its own sake. A company is more like a organism, where every employee is an organ (performing a specific function). So collectively, all the employees make up the entire company — and the goal of the company, like any living creature, is to survive and flourish. This is especially true for software companies, where you don’t have “physical” factories; each engineer is an “organ” and in California, your organs leave at 5 pm, and return to you at 9 am the next day — or may even decide to not return at all (usually if mistreated).

All organizations (formal or informal) have goals, said or unsaid. To reach that goal, it is essential to know what the performance measures are — without them, it is difficult to tell if you are headed in the right direction (or if you are moving at all).

Each institution will be stronger the more clearly it defines its objectives. It will be more effective the more yardsticks and measurements there are against which its performance can be appraised. It will be more legitimate the more strictly it bases authority on justification by performance.

Goal Setting

  1. What are the goals of your company? (and how can you better align yourself with this goal?)
  2. What are the goals of your department? (and how can you better align yourself with this goal?)
  3. What are the goals of your team? (and how can you better align yourself with this goal?)

By their fruits, ye shall know them. You are what you do. Do you know what you do?

Mole problems?

Thursday, July 13th, 2006

Got Mole problems? Call Avogadro at 6.02 x 10^23.