Old Man Manager's Weblog

« Defining Moments | Main | Points on RIF »

http://blogs.sun.com/oldmanmanager/date/20060411 Tuesday April 11, 2006

Professionals train themselves

Professionals train themselves April 8th, 2006

Kevin, an engineering manager, was frustrated. Good projects do not come to his engineers. If there are no projects, there will be no accomplishments, and no advancements. China will feel like the high-tech colony of the 21st century and get only menial works and be stuck in the "low wage" end of the industry.

I felt for Kevin's despair. At the same time, I was astronished on how his young engineers have missed the basics and focused on the wrong things.

Like atheletes, good software engineers move up the career ladder will skills. It is quite simple, choose the arena, suit up and compete. The winners move on. The question is, "Are you training yourself everyday?"

The general categories for a software engineer evaluation are:

  • Credential:

    The pieces of paper that prove you qualified for certain tasks. The most basic ones are the diplomas. Then we have those issued by various institutes. These paper give the boss various degree of confidence that you can accomplish the tasks she needs you for. If the task has a commensurate higher job level, you may get the promotion tegether with the assignment.

    Credentials, particularly diplomas, also show your tenacity and conformity. You may not have learned much, but you stuck it out for years and met all requirements. If you can go through that, you must have what it will take to finish this project.

  • Experience:

    Young engineers hate to compete on experience. You are not qualified because you have never done this before. But how can you get the 1st project then?

  • Skills:

    Skills are easy. Although hard to describe precisely, an engineer know how skilled she is. Software, after all, is a craft. Within few minutes, an engineer would have sized up others and a pecking order is formed.

These basic three are part of all promotion considerations. The weights of them differ as career progresses. In general, Sun values credential the least, skills most, and experience a very close second. Ask. "Am I the most skilled and experienced among my peers?" Like atheletic competitions, software career is meritocratic. Do not waste efforts on anything before mastering the basics.

Next time, when you have finished the project, try do a bit extra:

  1. Testability:

    How is the code testable? Is there test programs that automate the process? When problems surface in the system, how easy it is to isolate the bug?

    Along the same line is demo. How would you show someone your proud achievement? Did you write another piece of program to show it off?

  2. Usability:

    Is there a web-based interface? Is there a tool to make it easier? How is the user experience? Do not hide behind areas of technology. A kernel module or a device driver can have user interfaces just like a Java application. As long as a human being can use it, you need to consider usability.

  3. Elegance:

    Is the code efficient and pretty? Nicely modulized, neatly formated, appropriately named, cleanly inferfaced? How did you treat the global state variables? How much you rely on side-effect to accomplish works? Are you proud of this piece of work like a poet?

  4. Documentation:

    Did you comment the code well? Did you write the design document? Did you let the next person who is unfortunately stuck with your code know where to pay attention?

These are where you gain experience without the assigned project. There is always something extra you can do to make your project better. When you are doing that extra amount of work, you gain experience on areas you do not normally practice in. Choose what you need to practice and do the extra work there.

And you would have done something wonderful to yourself. When you are doing those, your manager will notice that you walked the extra mile and did the extra-currriculum work. That shows your diligence, willingness to learn, and potential.

Most importantly, you gain control of your own career by doing these. Those extra works make you a better software engineer. An accomplished software engineer write his/her own ticket. You will name the next project you want to work on. Opportunities will come knocking on your door.

Lastly, wherever you look, there are bugs to be fixed and source code to be read. Pick an area of interest, read the source code, try to fix few bugs that seems trivial, talk to the owner of the code and ask him/her to review or integrate what you have done. They will appreciate it and you get the experience. This is the power of Sun's openness. Don't squander. Train yourself.

Comments:

More on this topic, the following is an email I sent to the team last week I don't understand the argument that there is no "good projects" for our team, therefore, we have no chance to learn, to improve our technical skills, so, Sun is not trying to grow this team. As a matter of the fact , you should start like this: 1. There are 5000 bugs in Solaris. Start to fix 1 or 2 of them today. How to do that? Read the books and code, ask senior engineers questions, then try your fix, etc. After you are familiar with one or two areas of Solaris through fixing bugs, 2. Go to http://www.opensolaris.org/os/projects/, join the project you're interested in (I'll be happy to help you to talk to other senior engineers on the project if you want me to do that) 3. Start a new project by yourself. Oh, I understand now, you're waiting for someone, a senior engineer, an instructor to come in to teach you how to do this, how to do that as you did in old days in your school. That's not going to happen. Nobody ever becomes a good software engineer in that way. Not in US, not in China, not in this world. You want it, you do it, in the best way you can, and most important, you enjoy it.

Posted by Kevin Zhou on April 11, 2006 at 09:49 PM PDT #

Perceptive commentary! Both the parent and the response from Kevin Chou discusses what Sun essentially terms as "sustaining engineering". All fine, so now let us presume that Sun has hired software engineers with the requisite skillsets balancing credentials and experience, while "on the job training" allows one to develop the four aforementioned deliverable project skills ... So now we have competence demonstrated across multiple geographies, whereby there exist good-if-not-great developers and/or bugixers (these are not necessarily distinct categories) within the company environs. Now, riddle me this, wearing the generally metrics-driven (Sun Sigma, remember?) manager's hat -- how does this process, designed to encourage self-motivated productivity, normalize across disparate geo wage rates? That is, if the "output" is sustaining engineering competence (plus creativity!) which is shared worldwide, yet one portion of the statistical set of goodness works at, say, a 3X salary disadvantage in a Wall Steet-driven-$$-resource-limited world, what would motivate a Sun engineer in the disadvantaged geo? How does the company reconcile the treadmill of having engineers strive to develop a 3X competitive advantage over their equivalence class in the advantage geography? Just wondering...

Posted by retiarius on June 09, 2006 at 09:53 PM PDT #

Post a Comment:
Comments are closed for this entry.

Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.