Re: Programming for a living
- From: "Michael" <mchlgibs@xxxxxxx>
- Date: 30 Oct 2006 16:36:48 -0800
I was wondering what is expected of a professional programmer?
I don't really know exactly what I'm asking here but I would like
your input i.e. what is expected of you at work. Do you get asked each
day to write a simple class or do you get given a project to do and be
told to come back in a month when its done.
I agree with both of the previous posters. Let me add some to that
mix. I've had two positions as a manager of programmers. One in an
engineering company, i.e., a company that wrote programs and sold them,
and the other in an in-house IT department, i.e., we wrote software for
internal use only.
Here's what I've looked for in people, and what I've expected of them:
1) Passion & commitment. I'd rather have someone who really wants to
be there and is still learning things than someone with more experience
who doesn't really care and is just a warm body waiting for a paycheck.
2) Computer skills
2a) Generic programming and analytical skills. By this I mean not
language-specific (how do you create a pure virtual function in C++?)
but rather the underlying stuff - e.g., how would you write a binary
search? I try to ask a question where I say "I'm interested in the
algorithm and the thinking, not the syntax" and where something more
than basics is required - either recursion or complex iteration
(something that isn't just for i=0; i <n; i++), etc. And sometimes
this is more of a logic question than a programming question (e.g.,
missionaries and cannibals). I have 3 goals with these questions: 1)
see whether the person gets it, 2) see how he/she attacks a problem
that he/she doesn't know the answer to, and 3) see how he/she handles
getting stuck. I'll typically give hints if that happens, but I've
definitely seen candidates who say "I don't know. I don't care.
What's the answer?" and I've seen candidates who say "I seem to be
stuck trying it this way, let me try it another way." I've never hired
the former. (These are my favorite questions. I've been to interviews
where I come back and say "wow, what a great place, they asked me this
question, isn't that cool?")
2b) Track record. Obviously this depends on age and experience. But
definitely someone who has written several successful projects wins
brownie points over someone who has only ever taken classes. Extra
points for projects that are in use somewhere, have shipped, etc. This
is where I'm looking for more than "looks good in a suit and can answer
some questions" - basically I'd get some of this from you and some from
checking your references.
2c) Specific language skills/experience. I tend to underrate this one,
since I figure you can learn a language, but I like to see someone who
does know something. Depending on the type of position, I'd weight
this differently. (For example, a DBA should have a lot of SQL
experience, whereas an entry level programmer, other things are more
important.) But if your only language is HTML and you're interviewing
for a C++ position, then I'd worry.
3) Ability to work with others
3a) Work with other programmers - for someone more experienced, this
would start with "tell me the experience you have doing this." For
someone more junior, it's more of a gut feel whether people in the
group could work with him/her.
3b) Work with users - particularly in the internal development group,
our 'customer' was down the hall. People who couldn't walk down the
hall and ask a simple question were really inefficient at getting the
job done. Particularly ones who would say 'the customer wants X,' but
if you spent the two minutes to ask the customer, they'd say 'we want
Y.' Note that this is partially generic interpersonal skills and
partially domain-specific (e.g., if you work for a bank, can you talk
to someone about checking accounts).
What I expect from programmers (somewhat idealized):
1) Write code that works correctly.
2) Test their own code, and produce high-quality code.
3) Work for a day or two on their own at a time, coming to me (or
someone else) if they get stuck, if they get finished, to bounce ideas
around, and to show off progress. (The more senior he/she is, the more
that will just be the last two. But I'd definitely rather have someone
come to me after 2 hours and say "hey, I don't understand this" than to
bravely soldier on for a day or two on the wrong problem.)
4) Keep me in the loop in terms of progress. I've never done what you
asked about in your question where I give someone a 3 month task and
then don't see them again. I want to know what the plan is for that
long a task, and how it's progressing. If it's really a 6 month task,
I want to know that 3 weeks into it, not 3 months into it.
5) Learn from others, and mentor others.
6) Maintain code, and write code that's maintainable.
7) Interact with users, especially to iron out low-level details of a
particular feature.
8) Come up with lots of good ideas to improve a product. (Implementing
some of these might wait until a future release.)
In terms of assignments, I try to carve out 'feature-sized' tasks that
are customer oriented, e.g., "add undo/redo functionality to our code"
rather than "write class X." And for a given programmer's tasks, I try
not to assign random ones, but rather to have some rhyme or reason, so
that over time he/she becomes owner of part of the program. It doesn't
always work cleanly, but that's the goal. So your large goal for the
next release might be "write drawing GUI" and the tasks for this week
might be "add the ability to delete selected items," "add undo/redo
functionality," and "add coloring for shapes, lines, text." (I'd give
more specifics in an actual assignment - what the user interface would
look like, based on talking to users, or which users to talk to, that
kind of thing.)
HTH,
Michael
.
- References:
- Programming for a living
- From: James
- Programming for a living
- Prev by Date: Re: Resource question...
- Next by Date: Re: Need to downgrade to C++6?
- Previous by thread: Re: Programming for a living
- Next by thread: Re: Programming for a living
- Index(es):
Relevant Pages
|