Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / November 2005

Tip: Looking for answers? Try searching our database.

most software jobs are software maintenance rather than new development?

Thread view: 
apngss@yahoo.com - 20 Oct 2005 08:13 GMT
This topic should apply to software jobs regardless of the programming
languages.

I want to know if most of the software jobs in the market are software
maintenance (fix bugs, new feature enhancements on existing code)
rather than new developments (from scratch). This is my first job as a
Java programmer, but I really don't see I do much Java development, all
I do is to fix bugs, and add some new features for new builds. Well, of
course I need to understand the logic of existing code, but my
standpoint is that even I don't know Java well, I still can do the
work.

Is that normal in my case? Or I am just unlucky...

Please advise. thanks!!
John Harrison - 20 Oct 2005 08:35 GMT
> This topic should apply to software jobs regardless of the programming
> languages.
[quoted text clipped - 11 lines]
>
> Please advise. thanks!!

No its normal, at least in my experience. New development is much more
interesting of course, but you likely to need a little more experience
before you get given jobs like that.

Not relevant to you (I'm sure) but I heard a funny phrase recently, a
newbie programmer was given a couple of Java classes to develop from
scratch. After a while he delivered these new classes and promptly got
taken off the project because his code had 'logic issues', he's bug
fixing now.

john
Robert C. Martin - 20 Oct 2005 18:25 GMT
>> This topic should apply to software jobs regardless of the programming
>> languages.
[quoted text clipped - 11 lines]
>>
>> Please advise. thanks!!

From my point of view there is no difference between maintenance and
new development except, perhaps, for level of intensity.  As soon as
the first line of code is written on a project, the project is in
maintenance; or so it seems to me.

The older a system gets, the more skill is required to maintain it.
Thus, it makes little sense to me to put new people into a maintenance
role unless they are being mentored by very experienced people.

-----
Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716  

"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
   -- Bertolt Brecht, Life of Galileo
Daniel Parker - 22 Oct 2005 16:12 GMT
> From my point of view there is no difference between maintenance and
> new development except, perhaps, for level of intensity.  As soon as
> the first line of code is written on a project, the project is in
> maintenance; or so it seems to me.

Yeah, well let's say you were about to join Chrysler in 1995 or thereabouts,
and were given a choice of two projects:  a maintenance role on the existing
payroll system, or a spot on Kent Becks's C3 project?  Which would you have
gone for?  Decisions, decisions...

Regards,
Daniel Parker
Robert C. Martin - 22 Oct 2005 19:27 GMT
>> From my point of view there is no difference between maintenance and
>> new development except, perhaps, for level of intensity.  As soon as
[quoted text clipped - 5 lines]
>payroll system, or a spot on Kent Becks's C3 project?  Which would you have
>gone for?  Decisions, decisions...

Smalltalk vs. Cobol?  That's a no-brainer.  XP vs. Waterfall?  That's
also a no-brainer.  Working with Kent?  No-brainer.  

-----
Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716  

"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
   -- Bertolt Brecht, Life of Galileo
Phlip - 23 Oct 2005 03:27 GMT
>>Yeah, well let's say you were about to join Chrysler in 1995 or
>>thereabouts,
[quoted text clipped - 6 lines]
> Smalltalk vs. Cobol?  That's a no-brainer.  XP vs. Waterfall?  That's
> also a no-brainer.  Working with Kent?  No-brainer.

Greenfield vs legacy? Imagine if all else was equal...

Now instead imagine the decision between an average legacy project
(test-free), and a legacy project built via clean and expressive unit tests.

No brainer.

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

Daniel Parker - 23 Oct 2005 04:25 GMT
> Greenfield vs legacy? Imagine if all else was equal...
>
[quoted text clipped - 3 lines]
>
> No brainer.

You mean like C3 today?  Just kidding.  But the choice that you'd like to
see isn't usually the choice confronting a new entrant into the programming
world.  Maintenance programmers typically work on a branch off the main line
and their job is to fix production bugs and address the needs of the day.
The main development line is usually happening elsewhere.

I agree with the call to extend automated acceptance test coverage.  Many IT
shops are way behind there, and could benefit from that enormously.

-- Daniel
Robert C. Martin - 24 Oct 2005 00:01 GMT
>>>Yeah, well let's say you were about to join Chrysler in 1995 or
>>>thereabouts,
[quoted text clipped - 8 lines]
>
>Greenfield vs legacy? Imagine if all else was equal...

The trick to any software project is to keep the field green.  Fields
turn brown for lack of care.  A well tended field will remain green
for as long as it remains well tended.  Brown spots in the field
indicate carelessness.  

What would I rather work on?  It happens to be my chosen profession to
help people turn their brown fields green again, and keep them green.

-----
Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716  

"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
   -- Bertolt Brecht, Life of Galileo
Phlip - 24 Oct 2005 05:16 GMT
>>Greenfield vs legacy? Imagine if all else was equal...
>
[quoted text clipped - 5 lines]
> What would I rather work on?  It happens to be my chosen profession to
> help people turn their brown fields green again, and keep them green.

The distinction between you and the original poster is..

http://c2.com/cgi/wiki?TransformationEconomy

The OP currently works at the Service level; cleaning up code. They aspire
to the "Experience" tier on the economic scale. The OP wants to create the
"look and feel" of a program's internal API, hopefully to provide a better
experience for its maintainers.

Your is the "Transformation" level. You provide a series of Experiences that
transform teams. Not just their code.

(At least I suspect you do. I'm just going by these here posts;)

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

David Lightstone - 24 Oct 2005 11:34 GMT
>>>>Yeah, well let's say you were about to join Chrysler in 1995 or
>>>>thereabouts,
[quoted text clipped - 16 lines]
> What would I rather work on?  It happens to be my chosen profession to
> help people turn their brown fields green again, and keep them green.

Nice metaphor/analogy/whatever where does laying down bull sh.t fit it.
Excessive brown nosing  and marketing perhaps?

> -----
> Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
[quoted text clipped - 5 lines]
> but to set a limit to infinite error."
>    -- Bertolt Brecht, Life of Galileo
Patrick May - 24 Oct 2005 12:59 GMT
> > The trick to any software project is to keep the field green.
> > Fields turn brown for lack of care.  A well tended field will
> > remain green for as long as it remains well tended.  Brown spots
> > in the field indicate carelessness.
[ . . . ]
> Nice metaphor/analogy/whatever where does laying down bull sh.t fit
> it.  Excessive brown nosing and marketing perhaps?

    Fertilizer, of course!  The business champion has to prepare the
field and keep the nutrients coming.

    I much prefer gardening as an analogy for software development,
rather than that of an assembly line.

Regards,

Patrick

------------------------------------------------------------------------
S P Engineering, Inc.    | The experts in large scale distributed OO
                        | systems design and implementation.
         pjm@spe.com    | (C++, Java, Common Lisp, Jini, CORBA, UML)
adaworks@sbcglobal.net - 05 Nov 2005 22:32 GMT
>      I much prefer gardening as an analogy for software development,
> rather than that of an assembly line.

... and can you cite the source of that notion?   It has been around for a
while.

Richard Riehle
Roedy Green - 06 Nov 2005 09:15 GMT
>... and can you cite the source of that notion?   It has been around for a
>while.

I suppose Kent Beck in the main proponent of that view, constant
refactoring to keep the weeds at bay.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Patrick May - 06 Nov 2005 14:51 GMT
> >      I much prefer gardening as an analogy for software development,
> > rather than that of an assembly line.
>
> ... and can you cite the source of that notion?  It has been around
> for a while.

    Off the top of my head I was going to say that I first saw it in
something that Robert Martin wrote, but a quick Google shows that
Steve Mellor used a Japanese Garden as an architecture analogy in this
newsgroup back in late 1995.  I don't know if he was the first,
though.

Regards,

Patrick

------------------------------------------------------------------------
S P Engineering, Inc.    | The experts in large scale distributed OO
                        | systems design and implementation.
         pjm@spe.com    | (C++, Java, Common Lisp, Jini, CORBA, UML)
Mark McIntyre - 24 Oct 2005 20:54 GMT
>The trick to any software project is to keep the field green.  

This is trite nonsense. Continuing the metaphor: as soon as you start
to build on the field, you have brown bits. Nothing you can do to stop
that.

>Fields turn brown for lack of care.  

They turn brown because you build something. Keep it green by never
actually developing any code...
Signature

Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>

Phlip - 25 Oct 2005 02:50 GMT
>>The trick to any software project is to keep the field green.
>
> This is trite nonsense. Continuing the metaphor: as soon as you start
> to build on the field, you have brown bits. Nothing you can do to stop
> that.

I only get that problem when I allow any of my code to decay, even just a
little. If it has no tests, if it's crufty, it goes brown rapidly. If I keep
adding clean tests, and keep cleaning the code, the code's quality remains
high, and new features get easier to add than the old ones were.

>>Fields turn brown for lack of care.
>
> They turn brown because you build something. Keep it green by never
> actually developing any code...

If you write the code without maintaining it, as it grows, it will grow
tangled, like wild untrimmed gardens. Alternate growth with sessions of
pruning and trimming, and you will remove the weeds, dead twigs, and
suckers. The result is only long branches supporting healthy leaves turned
to the sun.

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

Richard Bos - 25 Oct 2005 07:30 GMT
> If you write the code without maintaining it, as it grows, it will grow
> tangled, like wild untrimmed gardens. Alternate growth with sessions of
> pruning and trimming, and you will remove the weeds, dead twigs, and
> suckers. The result is only long branches supporting healthy leaves turned
> to the sun.

It is never a good idea to take metaphors more seriously than reality.
That way lies Microsoft Bob.

Richard
adaworks@sbcglobal.net - 05 Nov 2005 22:30 GMT
> What would I rather work on?  It happens to be my chosen profession to
> help people turn their brown fields green again, and keep them green.

A good point.   The real heros in a software organization are not those
who write code for new systems.   Instead, they are those who are able
to keep current systems current, extend current systems with new capability
while not breaking them, and solve problems created by those who originally
coded those systems.

There is a reason why we put new programmers into maintenance jobs.  It is
largely about apprenticeship.   Rare is the recent computer science graduate
who has the skill, the knowledge, and the experience necessary for building
good software from scratch.  Rarer still is the a manager to take that kind of
risk.

Consider someone who has graduated from medical school, served one
or two years as an intern, and thinks himself ready to do open-heart surgery.
Do you want that person as your surgeon?     Software is no different.  In
our modern world, software flies our aircraft, operates our cardiac care
units, and controls the switching systems on our rail transportation facilities.
No development method, no amount of theoretical foundations, no experience
writing toy programs for an academic environment, and no overblown sense
of self-confidence will compensate for the skills acquired over a longer
period of time; skills developed actually writing and maintaining such software.
Too many things can go wrong, and even the most aware novice is probably
not ready to understand what s/he does not understand.

On the other hand, those old-timers are no good unless they keep their
own knowledge up-to-date.   Some of them, instead of having ten
years experience, have "one year of experience, ten times."     It is important
to listen to the newcomers, those with fresh bachelor's and master's degrees
because they do have something to offer.  Further, they will eventually take
over when we are out to pasture.

Richard Riehle
ecky-l@web.de - 08 Nov 2005 07:01 GMT
> The older a system gets, the more skill is required to maintain it.
> Thus, it makes little sense to me to put new people into a maintenance
> role unless they are being mentored by very experienced people.

I think, maintaining an "old" system (old means probably "stable" and
"reliable", doesn't it ;)) is a good opportunity to get accomplished
with the code and learn how experienced people did it. Everyone should
go through this, before (s)he starts to develop new code, IMHO...

Eckhard
David Lightstone - 08 Nov 2005 12:22 GMT
>> The older a system gets, the more skill is required to maintain it.
>> Thus, it makes little sense to me to put new people into a maintenance
[quoted text clipped - 4 lines]
> with the code and learn how experienced people did it. Everyone should
> go through this, before (s)he starts to develop new code, IMHO...

What I state may sound flippant ot silly, but it is correct.

Yes, once you know all the mistakes that can be made you actually can start
writting good code.

> Eckhard
Robert M. Gary - 08 Nov 2005 17:08 GMT
Maintenance is much harder. I spent the first 5 years of my carrer
working in "Current Product Engineering" for a major telco software
provider. That was much harder than creating new code because you had
to figure out what someone else (who had long since left) was trying to
do. You also had to follow the existing coding style since mixing
styles causes a huge mess. Most employeers look for people with real
maintenance experience for a couple reasons...
1) It shows you can understand other's code and can incorporate your
own stuff into it and
2) You have a better appreciation for the importance of good error
messaging and stable code. You never learn to write really solid code
until you've spent several years fixing other people's code.

-Robert
Phlip - 09 Nov 2005 14:25 GMT
> Maintenance is much harder. I spent the first 5 years of my carrer
> working in "Current Product Engineering" for a major telco software
[quoted text clipped - 8 lines]
> messaging and stable code. You never learn to write really solid code
> until you've spent several years fixing other people's code.

These are all rich arguments for aspects of a poor situation: Throwing good
money after bad.

>I would say that it is exceedingly rare to write code from pure
> scratch. I work on a code base that is several million lines long for a
> large technology company.

What's its ratio of unit tests to production code?

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

Robert M. Gary - 09 Nov 2005 20:01 GMT
> These are all rich arguments for aspects of a poor situation: Throwing good
> money after bad.

Huh? Hiring programmers with maintenance experience is throwing good
money after bad? I guess I'm really not following.
phlip2005@gmail.com - 10 Nov 2005 02:12 GMT
> > These are all rich arguments for aspects of a poor situation: Throwing good
> > money after bad.
>
> Huh? Hiring programmers with maintenance experience is throwing good
> money after bad? I guess I'm really not following.

If the code were written with copious unit tests, and if they still
passed no matter how old the original effort, then you don't need such
expertise to maintain it. You start by adding more tests and passing
the existing ones, and that makes the maintenance much easier.

In theory!

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

David Lightstone - 10 Nov 2005 10:44 GMT
>> > These are all rich arguments for aspects of a poor situation: Throwing
>> > good
[quoted text clipped - 6 lines]
> passed no matter how old the original effort, then you don't need such
> expertise to maintain it.

Dubious at best. Obviously you only have read well written/refactored code

>You start by adding more tests and passing
> the existing ones, and that makes the maintenance much easier.
>
> In theory!
scottf3095@aol.com - 11 Nov 2005 14:56 GMT
>> If the code were written with copious unit tests, and if they still
>> passed no matter how old the original effort, then you don't need such
>> expertise to maintain it.

>Dubious at best. Obviously you only have read well written/refactored code

I think someone can only see the world through TDD glasses :)
-Scott Frye
"aut viam inveniam aut faciam"
Robert M. Gary - 10 Nov 2005 19:14 GMT
Ok, I'm going to put on my MBA hat (don't worry, my undergrad is in
Computer Science:) ) I think there is an arguable cost/benefit analysis
that says it may not always be optimal to write such solid code, as you
describe. While many quality theories (TQM, Six Sigma) etc claim that
the cost of lower quality is always higher than the cost of quality, I
think a more reasonable business view would say that is not always the
case. As a development organization you need to look at what your
Sales/Revenue limiters are. If quality is what is limiting you, than
tools such as Six Sigma, unit testing, etc are vehicles to use. Often
though, development organizations decide that they have other, higher
priority inhibitors. Time to market is probably the most common,
minimal resource, is another. If you need to increase your performance
in Time to Market, than you need to take less time with unit testing,
etc. In other words, there are a lot of variance in the extend to which
you invest in high quality, not all result in better business rewards.
In the RND shop I work in we do a far amount of documentation, we do
peer code reviews and peer project reviews, but do unit testing an a
per-project basis. Some projects are so integrated that unit testing is
not a big "bag for buck" and functional testing is more beneficial.
About 20% of what I work on is simply to develop Intellectual Property.
Some of that code needs to work well enough to generate my Patent, I
don't list my unit tests in the Patent.

Anyway, my 2cents.

-Robert
xpyttl - 12 Nov 2005 13:12 GMT
> While many quality theories (TQM, Six Sigma) etc claim
> that the cost of lower quality is always higher than the
> cost of quality

In Six Sigma, we figure out the cost of quality, and the cost of poor
quality, and make economic decisions.  This is one of the major
differences between SS and earlier quality initiatives.  Although there
is plenty of statistics, Six Sigma is about "show me the money".

Based on many years of experience (I'm a really old fart), I agree that
"optimal" code is rarely optimal.  You should make an appropriate
investment in the code.  In today's world, that often means just barely
working.  But there are situations where you want good, solid
maintainable code.  It can be tough knowing the diffeence.

..
adaworks@sbcglobal.net - 10 Nov 2005 22:49 GMT
> If the code were written with copious unit tests, and if they still
> passed no matter how old the original effort, then you don't need such
> expertise to maintain it. You start by adding more tests and passing
> the existing ones, and that makes the maintenance much easier.
>
> In theory!

In theory.   Testing is not _the_ answer.    Testing is one tool in
the creation of dependable software.   As software grows, it
becomes impossible to run enough tests to ensure that there are
no errors.

Reliance solely on testing is OK for smallish systems.   However, this
does not scale-up as the software becomes larger and more complex.
Further, one can test for the errors one expects.   In software there are
likely to be a lot of errors no one could have anticipated.  Those errors
are often overlooked by the tests.

There are many other things one must do as part of
the software process to arrive at a point where there is some
confidence in the final software product.

This is not to say we should not test.   It simply means that we
should not be so naive as to put more faith in testing than is
realistically warranted.

It is also important to understand that more tests will not necessarily
make the code more maintainable.   It might help a little, but more
important is the way we structure the code, organize the modules,
and design the architecture, among other things.

Richard Riehle
pete - 10 Nov 2005 22:57 GMT
> <phlip2005@gmail.com> wrote in message

> > In theory!
> >
> In theory.  

In theory, theory and practice are the same.
In practice, they're different.

Signature

pete

adaworks@sbcglobal.net - 11 Nov 2005 10:52 GMT
> > <phlip2005@gmail.com> wrote in message
>
[quoted text clipped - 4 lines]
> In theory, theory and practice are the same.
> In practice, they're different.

That was pretty much my point.

Richard Riehle
Robert C. Martin - 12 Nov 2005 19:23 GMT
>> If the code were written with copious unit tests, and if they still
>> passed no matter how old the original effort, then you don't need such
[quoted text clipped - 7 lines]
>becomes impossible to run enough tests to ensure that there are
>no errors.

This is true.  More generally, it becomes impossible _by any practical
means_ to ensure that there are no errors.  Unfortunately the
threshold size for this limit of practicality is very small.

>Reliance solely on testing is OK for smallish systems.   However, this
>does not scale-up as the software becomes larger and more complex.

And I would say that "smallish" means "comp-sci 101 exercise".  E.g.
Write a program to calculate the quadratic formula.

>Further, one can test for the errors one expects.   In software there are
>likely to be a lot of errors no one could have anticipated.  Those errors
>are often overlooked by the tests.

Again, this is very true, and the incidence grows with the square of
the number of features.  (if not faster).

>There are many other things one must do as part of
>the software process to arrive at a point where there is some
>confidence in the final software product.

Agreed.  You have to get your fingers and eyeballs on it.  You have to
torture test it.  You have to let a million monkeys into the room to
bang on it.  You have to work hard to anticipate systematic weaknesses
and failures, and probe them all.  

Each one of these things helps; and yet none are completely
sufficient.  Spacecraft will still think they are on the ground when
they are 100Y up.  They will still overshoot orbits because of unit
conversions.  Billing systems will still send bills for negative
amounts.  Telephone systems will still randomly drop you.  And (though
it hasn't happened to my knowledge) airplanes will suddenly flip
upsidedown when they cross the horizon.

>This is not to say we should not test.   It simply means that we
>should not be so naive as to put more faith in testing than is
>realistically warranted.

Agreed.  Nothing gets rid of all the risk.  All we can do is mitigate
the risk.  Testing is a *big* part of that, but is not the whole
enchilada.  

>It is also important to understand that more tests will not necessarily
>make the code more maintainable.   It might help a little, but more
>important is the way we structure the code, organize the modules,
>and design the architecture, among other things.

It is remarkable just how much the test-first discipline helps in this
regard.  The act of designing your system around tests that you write
first goes a very long way towards helping to organize and structure
the code in a maintainable way.  

Again, this is not a panacea.  One should not depend on test-first as
the sole source of good design and structure.  But it *does* help a
lot!
-----
Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716  

"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
   -- Bertolt Brecht, Life of Galileo
Andrew Thompson - 20 Oct 2005 08:47 GMT
> Is that normal in my case? Or I am just unlucky...

To have work?  No.

Perhaps you are undeserving, ungrateful and extremely
self-centered*, but unlucky?  No.

* To think your problem is so important that it justifies
cross-posting to such a wide range of groups.

Now GET BACK TO WORK.
Mark McIntyre - 20 Oct 2005 10:57 GMT
>I want to know if most of the software jobs in the market are software
>maintenance (fix bugs, new feature enhancements on existing code)
>rather than new developments (from scratch).

Theres a large body of existing code out there. Ergo there must be
lots of jobs maintaining it. Its impossible, given the length of time
that computing has been around, for new work to be larger than old
work.

>This is my first job as a
>Java programmer, but I really don't see I do much Java development,

You're the new boy. Its commonplace for newbies to spend a lot of time
fixing bugs, it lets them cut their teeth, explore their abilities and
so forth.

Signature

Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>

Andrew McDonagh - 20 Oct 2005 23:17 GMT
snipped.

>>This is my first job as a
>>Java programmer, but I really don't see I do much Java development,
>
> You're the new boy. Its commonplace for newbies to spend a lot of time
> fixing bugs, it lets them cut their teeth, explore their abilities and
> so forth.

Hi Mark,

( Please note this reply isn't so much to yourself, its to all of the
posts that talk about 'cutting their teeth' - I'm not singling you out.)

You are (sadly) right it is common.  Its also the worst way of
integrating and using new people - especially newly qualified developers.

We are asking the to fix bugs on existing systems, where they typically
won't understand the original designs or design trade offs that were used.

Its actually more difficult to enhance or fix bugs in existing code
bases in a safe manner which doesn't introduce defects, than it is to
create new 'green field' code, for most people.

However, the main problem is the mentality of it -
" you are the new guy so your have to prove your worth scum-bag.."

Crazy.

Its not something I tolerate on my teams.

I employed a person who hadn't done any development for a year and half.
They also hadn't done any Java - they are a smalltalk-er - but they know
a little OO.

He started on the team and by the end of the first week was developing
and being productive.

Now some of this is down to the teams principles and practices:

Collective Code Ownership - the new guy wasn't assigned an area or role,
he is part of a team where everyone works on all areas, maintenance and
greenfield.

Pair Programming - all development work being done in pairs meant that
he didn't need any ramp-up time to become useful - he paired with one of
the other team members and they worked together upon a single task, side
by side, swapping the keyboard as and when they wanted.  The knowledge
transfer to the new guy is very quick this way and the other team person
learned some new skills from the new guy.

TestDriven Development - as we use TDD to design our system, any changes
the new guy and his pair make, are automatically regression tested by
the suite of unit tests. Their own design artifacts (their unit tests)
for the new code changes are simply added to the big pot of existing
designs.

there's more I can add if you want...

Andrew
Roedy Green - 21 Oct 2005 03:47 GMT
>Pair Programming - all development work being done in pairs meant that
>he didn't need any ramp-up time to become useful - he paired with one of
>the other team members and they worked together upon a single task, side
>by side, swapping the keyboard as and when they wanted.  The knowledge
>transfer to the new guy is very quick this way and the other team person
>learned some new skills from the new guy.

It is quite amazing how even a rank novice can become quickly useful
so long as he or she can type.

I would let them work first pretty well just as a typist as I went
about my usual business of writing and maintaining code. Most of this
was totally mysterious. But almost imperceptibly I could use a shorter
and shorter set of verbal commands to get the text I wanted written.
They learned much as a child learns a new language.  You get to the
point where you could say something like. Write me a class with fields
x, y, z of the obvious types and do the usual constructors and
get/set.

Validate with configurable bounds.

Now adays you would do this with an IDE template, but people don't
need to be taught the template in excruciating detail, and they can do
theme and variations with little trouble.  They can also convert old
code to a new pattern.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Andrew McDonagh - 21 Oct 2005 19:05 GMT
>>Pair Programming - all development work being done in pairs meant that
>>he didn't need any ramp-up time to become useful - he paired with one of
[quoted text clipped - 21 lines]
> theme and variations with little trouble.  They can also convert old
> code to a new pattern.

I confused by your reply - are you attempting to describe
PairProgramming - if so you are way off.
Andrew McDonagh - 21 Oct 2005 19:14 GMT
> I confused ...

should have been 'I'm confused....'
Roedy Green - 21 Oct 2005 23:22 GMT
>I confused by your reply - are you attempting to describe
>PairProgramming - if so you are way off.

What is it in your definition?
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Andrew McDonagh - 21 Oct 2005 23:29 GMT
>>I confused by your reply - are you attempting to describe
>>PairProgramming - if so you are way off.
>
>  
> What is it in your definition?

what is what, in my definition?
David Alex Lamb - 21 Oct 2005 23:39 GMT
>>>I confused by your reply - are you attempting to describe
>>>PairProgramming - if so you are way off.
>> What is it in your definition?
>what is what, in my definition?

I believe he means:
What is PairProgramming in your definition?
Signature

"Yo' ideas need to be thinked befo' they are say'd" - Ian Lamb, age 3.5
http://www.cs.queensu.ca/~dalamb/   qucis->cs to reply (it's a long story...)

Andrew McDonagh - 22 Oct 2005 11:00 GMT
>>>>I confused by your reply - are you attempting to describe
>>>>PairProgramming - if so you are way off.
[quoted text clipped - 5 lines]
> I believe he means:
> What is PairProgramming in your definition?

Well, the small paragraph I posted describing how *my Team* actually do
Pair Programming is pretty much how I'd define PP.  Though there is more
to it than that.

As for a more accepted definition...

"Two programmers working side-by-side, collaborating on the same design,
algorithm, code or test. One programmer, the driver, has control of the
keyboard/mouse and actively implements the program. The other
programmer, the observer, continuously observes the work of the driver
to identify tactical (syntactic, spelling, etc.) defects and also thinks
strategically about the direction of the work. On demand, the two
programmers can brainstorm any challenging problem.

Because the two programmers *periodically switch roles*, they work
together as equals to develop software."

-- Laurie Williams
North Carolina State University Computer Science
Chris Uppal - 22 Oct 2005 11:39 GMT
> As for a more accepted definition [of Pair Programming]...
> [snipped]

Which does not, in fact, resemble what Roedy described at all.  I'm puzzled by
why you thought there was a connection ?

   -- chris
Andrew McDonagh - 22 Oct 2005 12:30 GMT
>>As for a more accepted definition [of Pair Programming]...
>>[snipped]
[quoted text clipped - 3 lines]
>
>     -- chris

I was puzzled by Roedy's description because I 'Thought' he was trying
to describe what Pair Programming (as in the snipped definition) means
to him.

Thats all - we are talking across each other..about different things
that 'Just Happen To use two people working together in some form'

Andrew
Roedy Green - 22 Oct 2005 20:40 GMT
>I was puzzled by Roedy's description because I 'Thought' he was trying
>to describe what Pair Programming (as in the snipped definition) means
>to him.
>
>Thats all - we are talking across each other..about different things
>that 'Just Happen To use two people working together in some form'

There are many cues missing you get with verbal communication that
lead to foul-ups in newsgroup communication.

You don't have the voice print/accent/dialect cue on every word to
remind you who is saying what.

You don't get the body language or cues of emotion, joking, anger...

With voice, you can tell immediately if someone is disagreeing or
seconding or augmenting.  In newsgroups that is not obvious and leads
to all kinds of puzzlement when the wrong assumption is applied.

Everybody talks at once about everything.

The speaker does not get immediate feedback by quizzical looks when he
is not being understood.

It is easy to mistake the age, sex, or intelligence of a newsgroup
poster.  This is particularly true when you add in people whose first
language is not English.

In face to face communication WHO said something is very important. It
is easy to lose track in newsgroups.

On the other paw, you can always get a word in edgewise no matter how
long winded someone else is, and nobody can shout you down.

Then there is the matter of stage fright.  People who would never say
boo in public will fearlessly tackle anyone in a newsgroup even in
front of hundreds of readers.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Roedy Green - 22 Oct 2005 02:39 GMT
>>>I confused by your reply - are you attempting to describe
>>>PairProgramming - if so you are way off.
[quoted text clipped - 3 lines]
>
>what is what, in my definition?

Who's on first?  It sounded to me you were trashing the only
definition given of pair programming a while back. On digging through
the threads I discover that it was your definition, so it is unlikely
you were baldly berating yourself for being wrong without offering an
alternate definition.

In my own post I was talking about an alternative way to teach
programming, nothing to do with pair programming other than it
involves two people sitting at the same computer.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Andrew McDonagh - 22 Oct 2005 10:57 GMT
>>>>I confused by your reply - are you attempting to describe
>>>>PairProgramming - if so you are way off.
[quoted text clipped - 12 lines]
> programming, nothing to do with pair programming other than it
> involves two people sitting at the same computer.

right now I understand your comment....

its certainly one way for a new person to learn - *I* doubt its very
effective.
Roedy Green - 22 Oct 2005 11:01 GMT
>its certainly one way for a new person to learn - *I* doubt its very
>effective.

Since you have never experimented with the technique, you should know.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Roedy Green - 21 Oct 2005 03:39 GMT
>Theres a large body of existing code out there. Ergo there must be
>lots of jobs maintaining it. Its impossible, given the length of time
>that computing has been around, for new work to be larger than old
>work.

I heard one estimate that a program gets ten times as many hours spent
maintaining over its life that it does getting originally written. So
obviously maintenance predominates over initial coding. :There must be
many more maintenance jobs.

You may have noticed that programmers tend to be unusually
egotistical. This is part of the reason they generally don't like
modifying other people's code. They have to leave most of it "ugly" by
their personal scheme of aesthetics. It is a cause of stomach
wrenching unhappiness.  They want to write virgin code so they can do
it "properly" or "their way" depending on your point of view.

I bugs me that languages don't seem to take maintenance into
consideration in design.  The needs of maintenance programmers are
very low on the totem pole.  The needs of the compiler writer trump
those of the package writer trump those of the application code trump
those of the maintenance programmer.

However, nationally advertised jobs tend to be the higher paying ones.
Here they are looking for experienced team leaders, architects etc.
not mundane maintenance programmers.

I think a bumbling incompetent could get by in a maintenance job
simply because the deadlines are not as tight and nobody really knows
how long it SHOULD take to find a bug or make some change. In theory
it should be easier, but managers don't put nearly as much weight on
efficient maintenance as getting the project up and going while the
spotlight is on it.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Martin Eisenberg - 21 Oct 2005 12:11 GMT
> I bugs me that languages don't seem to take maintenance into
> consideration in design.  The needs of maintenance programmers
> are very low on the totem pole.  The needs of the compiler
> writer trump those of the package writer trump those of the
> application code trump those of the maintenance programmer.

Can you please expand on that for someone without extensive exposure
to old code?

Signature

Quidquid latine dictum sit, altum viditur.

timjowers@gmail.com - 21 Oct 2005 15:11 GMT
JavaDoc. Design documents. Lots of self-promoters decry specifications
and documentation because they never had to maintian a few 100k lines
of code where they walked in cold with no knowledge of the code.  Bug
fixing in an OS is tough but at least OS theory is well studied and
documented. Maintaing a huge corporate app where the requirements are
often only verbally understood by a few people who may no longer be
there is really tough.

Good logging of ALL errors. Ability to turn on DEBUG logging and
preferrable at various levels of verbosity.

A large source base with an integrated unit test to test all of the
code is very nice.

Elegant design. Repeated design when functionality is repeated.

  BTW, newbies should be willing to perform maintenance for a time but
if you have an MS CSci. then don't insult yourself or your University
by maintaining some scrap code written by a hacker. Look for a company
where legitimate software design and development is occurring. The
market is far too overloaded with keyword programmers and architects
who think every design looks like some pattern from a vendor's promo
conference rather than consider design as part of the trade and apply
an appropriate design to the appropriate problem. You're probably
maintaining bloatware written atop some consultingware appserver or
other infrastructure. The engineering mindset of solving the problem
with the lowest cost effort is rare in this industry. That's why the
term "Software Engineer" is no longer used. The managers prefer
"Programmer" and "Consultant" because it hides the fact that good
software development requires real engineering. Does your code
represent the Unix mantra of Keep It Simple Stupid?

Best wishes,
TimJowers
Roedy Green - 21 Oct 2005 23:30 GMT
>The needs of the compiler
>> writer trump those of the package writer trump those of the
>> application code trump those of the maintenance programmer.
>
>Can you please expand on that for someone without extensive exposure
>to old code?

Let's say that an application programmer were in charge.  He sets up
listeners all the time. He would insist on doing that in at most a
line of code, no matter how much work it meant for the compiler and
library writers.

In your IDE you would right click on the component and insert the code
right there.

If an application programmer were in charge there would be smart
components for all the usual business objects, names, address, emails,
website, zips, provinces, countries, .dates, phone numbers that worked
for all countries.  They would automatically format and validate all
input.  That would not be his problem any more than the strange rule
of date calculation are. Low and high bounds checking and all manner
of other common validation would be built into the declaration without
any procedural code.

If an application programmer were in charge , components would know
their labels, and there would be layout that would automatically
insert such labels when there was sufficient room, and would at
minimum divulge them with a hover.

If an application programmer were in charge, the integration of SQL
and Java would be much more seamless, much like the new features for
than in C#.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

BigBrian - 21 Oct 2005 14:20 GMT
> You may have noticed that programmers tend to be unusually
> egotistical.

Isn't that the truth.

> This is part of the reason they generally don't like
> modifying other people's code.

Sad, but true.

> They want to write virgin code so they can do
> it "properly" or "their way" depending on your point of view.

.. and then leave the project ( They're off design another project ) to
a group of other people how have to deal with the big pile of poop that
they implemented, and do the real work of getting everything working
correctly.  ( No, I'm not bitter, LOL )   No, acutally, I like doing
maintenance ( and new development ).
Roedy Green - 21 Oct 2005 23:43 GMT
>> They want to write virgin code so they can do
>> it "properly" or "their way" depending on your point of view.

Young hot shots are a major problem in a team environment. They are so
keen on doing something cool, they forget some lesser light will have
to later figure it out to maintain it.  These types often refuse to
write any documentation at all, claiming their code reads like poetry
and does not need it, at least if everyone scrutinizing every line
lovingly.

These hotshots can still  be useful.  For example, I was team leader
on the first MacIntosh commercial app written in Canada, the CSL Stock
Charter, developed on the Lisa and wired over to the Mac for
execution. Apple's docs and code were unbelievably bad. Lots of "to
comes" and simply wrong information.

Our app was embarrassingly slow. The problem was obviously Apple's
first cut at a software floating point library. I figured out that the
scaling routines for the graphing were the major culprits.  I handed
the Pascal version of the code to a hotshot friend of mine, and said,
"go to it.  Do this same thing using integer fixed point scaling,
assembler, any dirty tricks you can think of."

He came back a few days later with some Motorola 68K assembler that
was about 2 orders of magnitude faster.  Never would that code be
maintained.  If the code were ported, it would be re-optimised from
the Pascal version, perhaps with hints from the 68K version.


Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

adaworks@sbcglobal.net - 05 Nov 2005 22:40 GMT
> I bugs me that languages don't seem to take maintenance into
> consideration in design.  The needs of maintenance programmers are
> very low on the totem pole.  The needs of the compiler writer trump
> those of the package writer trump those of the application code trump
> those of the maintenance programmer.

One of the key design goals of Ada was to enhance maintainability.

If 80% of the life of a program in maintenance, 80% of maintainance
is often devoted to trying to understand what to maintain.  Popular
languages such as C++ are horrible for creating maintainable code.
Java, while a little better, is not that much better.

A language that stresses readability and understandability over writeability
is not likely to be popular with "greenfield" programmers.  They often just
want to get the code laid down so they can get on to the next project.

So, if you want improved maintainability, one of your first steps is to choose
tools that support that goal.  Ultimately, your maintenance programmers will
love you for that choice while those writing new code will grumble.  Those
new code programmers represent a smaller part of your problem and they
are the easiest to replace.

Richard Riehle
Ross Bamford - 20 Oct 2005 13:27 GMT
> This topic should apply to software jobs regardless of the programming
> languages.
[quoted text clipped - 11 lines]
>
> Please advise. thanks!!

It's normal. It's something of a privilege to work on a new project, and  
especially when you're new you'll tend to get stuck on the fixing jobs,  
simply because there are usually more fixes to be done.

Signature

Ross Bamford - rosco@roscopeco.remove.co.uk

xpyttl - 20 Oct 2005 13:31 GMT
There probably is a lot more maintenance going on than new construction.

But I would hope that most shops would expect new programmers to do a fair
bit of maintenance before they do new development.  Its pretty easy to
design cool new stuff without any consideration for what it costs to own
that code.  If you spend some time getting beat up by other people's
mistakes, you are less likely to make those mistakes on your own.

..

> This topic should apply to software jobs regardless of the programming
> languages.
[quoted text clipped - 11 lines]
>
> Please advise. thanks!!
Phlip - 20 Oct 2005 14:39 GMT
apngss wrote:

> I want to know if most of the software jobs in the market are software
> maintenance (fix bugs, new feature enhancements on existing code)
[quoted text clipped - 6 lines]
>
> Is that normal in my case? Or I am just unlucky...

Ideally, all software projects should deploy to real users as soon as
possible. Then all further development is "maintenance", because you must
preserve existing (good) features while adding better ones. That depends on
clean code.

In your case, you are probably unlucky. Much software was written in a big
rush, under the belief that the software can't deploy until it has enough
features that customers will buy it and then use it through long maintenance
cycles. So the code has lots of bugs and a poor design.

The next AntiPattern in our industry: Managers then put the new guys into
maintenance, because it's slow burn. The hot-shots who wrote the bugs and
the poor design get rewarded with new and more lucrative projects.

Install JUnit, and start these policy:

- capture bugs with tests. Write new test cases
   to capture every bug before killing it

- as you learn about the code, refactor - just a
   little - to clean it up

That effort allows the code to get better over time. When you fix a bug, do
not throw away the knowledge that is fresh in your head write now. Invest
that knowledge back into the code by improving its test resistance.

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

Walter Roberson - 20 Oct 2005 15:06 GMT
>This topic should apply to software jobs regardless of the programming
>languages.

>I want to know if most of the software jobs in the market are software
>maintenance (fix bugs, new feature enhancements on existing code)
>rather than new developments (from scratch).

As others have noted, it is quite common to put new people onto
maintenance.

One of the posters suggested that this was training so that people
would learn the value of writing good maintainable code. Posters
might also have suggested [but haven't yet in my timeframe] that it
was an opportunity to give the new programmer a good understanding of
the project as a whole.

These two factors certainly apply, but there is another factor which
is often more important: maintenance is given to the new programmer
because in most power relationships, you give the unwanted tasks to
those who don't have the power to effectively refuse them.

In -every- programming environment i have worked in, the young
new programmers have chomped at the bit, eager to *write programs*,
and frustrated when they aren't given a program to write within a matter
of days. I have often seen new programmers upset that they aren't
creating new programs yet; often they would at least -say- that they
were thinking seriously of quiting because "this isn't what I
hired on for!" And most of them held that resentment of doing
maintenance (or even real formalized design specs), and pushed their
managers to rush into -new- -code-. Quite a few of them thereafter
refused to do maintenance as soon as they had accumulated enough
internal political capital to make it stick.

I've heard much the same thing from other people I know who are
in the software industry: most programmers really dislike code
maintenance -- even if it is their own code that is being maintained!
Most do not even like to do feature or design changes to their
existing code, not unless the change is clearly to add something "new".

Even to get someone to rewrite their code to make it faster
can be hard to convince them to do, unless you can make the situation
into a challenge to make their code run as quickly as possible...
a situation which often results in unmaintainable code that would
probably run slower on the next compiler over.

New programmers get stuck with maintenance because the more
senior people don't like to do maintenance. I've heard intermediate
people seriously tell their manager they would quit if they
were not given a "real" programming project.

The flip side of this is that it turns out that relatively few people
are actually -good- at maintenance. To be able to take existing code
(often poorly documented) and not only figure out what it -does- do,
but to figure out what it was -meant- to do, and to do massive
revisions to get clean code that does what it -should- do -- this is a
skill that I have rarely encountered. For a disorganized program of any
real size, it requires someone who is patient and an excellent mental
modeller, able to simultaneously hold in mind -many- program aspects
and relate them all to each other, seeing the overview of what is
logically consistant and yet able to pinpoint the minute details of
what does not fit. My experience suggests that the portion of
such people is less than 1 in 100 programmers; I'm not even confident
that as many as 3 in 1000 are good at this kind of work.
Signature

  "No one has the right to destroy another person's belief by
  demanding empirical evidence."              -- Ann Landers

Roedy Green - 20 Oct 2005 15:25 GMT
>The flip side of this is that it turns out that relatively few people
>are actually -good- at maintenance.

Chairman Mao used to insist bureaucrats spent a few weeks each year
out on the farms.  If he were in charge of the world's programming I
think he would do two things:

1. make all programmers spend a few weeks a year maintaining code so
they would learn what you need to do to write maintainable code and
what makes code unmaintainable. See
http://mindprod.com/jgloss/unmain.html

2. make all system programmers and language designers also spend a few
months a year doing applications coding so they would stop designing
to make their jobs easier and consider the application coder too.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Andrew Thompson - 20 Oct 2005 16:00 GMT
> Chairman Mao used to insist bureaucrats spent a few weeks each year
> out on the farms.

I guess that was after the incident where Mao had the
bureaucrats direct (force) the rice farmers to plant
the rice seedlings so close together that they all
suphocated, resulting in widespread famine?

Maybe Mao should have been the one put out to pasture,
..errr, 'sent to the farm'.

"Ooh, Mao, M'Mao, Mao"
Russel Morris - 'The Real Thing'
Greg Comeau - 20 Oct 2005 16:09 GMT
>>The flip side of this is that it turns out that relatively few people
>>are actually -good- at maintenance.
[quoted text clipped - 11 lines]
>months a year doing applications coding so they would stop designing
>to make their jobs easier and consider the application coder too.

When I was a manager years ago, I used to take Friday's off.
That meant, in addition to meetings, design etc through the week,
actually sitting with the programmers and doing the work with them.
That meant I was approachable, not above them, and actually provided
a mechanisn to ricochet stuff back and forth, learn some of the
nitty gritties to make decision from, toss it back, etc.
I always felt it made us all more efficient, in sync, etc.
This also got newbies on board properly.
Signature

Greg Comeau /     Celebrating 20 years of Comeauity!
Comeau C/C++ ONLINE ==>     http://www.comeaucomputing.com/tryitout
World Class Compilers:  Breathtaking C++, Amazing C99, Fabulous C90.
Comeau C/C++ with Dinkumware's Libraries... Have you tried it?

Robert C. Martin - 20 Oct 2005 18:28 GMT
>When I was a manager years ago, I used to take Friday's off.
>That meant, in addition to meetings, design etc through the week,
[quoted text clipped - 4 lines]
>I always felt it made us all more efficient, in sync, etc.
>This also got newbies on board properly.

The craft of software development it taught by masters to journeymen
and apprentices.  It is not learned in school; and it is difficult to
learn it without a mentor.  So, Greg, I applaud the approach you took.
Managers who have risen from the ranks should not leave the old job
behind.  They need to mentor and guide the newer people coming behind
them.  

One of *my* advisors (Dave Thomas of OTI fame) calls this the practice
of being a "playing coach".

-----
Robert C. Martin (Uncle Bob)  | email: unclebob@objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716  

"The aim of science is not to open the door to infinite wisdom,
but to set a limit to infinite error."
   -- Bertolt Brecht, Life of Galileo
Mark P - 20 Oct 2005 18:30 GMT
> When I was a manager years ago, I used to take Friday's off.
> That meant, in addition to meetings, design etc through the week,
> actually sitting with the programmers and doing the work with them.

Your idea of taking the day off involves a lot more work than my idea of
the same. :)
apngss@yahoo.com - 21 Oct 2005 07:20 GMT
Most posters say that companies usually put new programmers, or less
experience programmers to do the maintenance work.

One fundamental question that bothers me: How do we define "experienced
programmer"? 5 years experience, 10 years? I mean, how many years of
experience are considered as an experienced programmer?
Dag Sunde - 21 Oct 2005 08:08 GMT
> Most posters say that companies usually put new programmers, or less
> experience programmers to do the maintenance work.
>
> One fundamental question that bothers me: How do we define "experienced
> programmer"? 5 years experience, 10 years? I mean, how many years of
> experience are considered as an experienced programmer?

How many years would you consider if I asked you about an experienced
mason, carpenter, mechanic or electrician? or a woodenboat builder for
that sake?

Its a craft, and is about the same thing.

Signature

Dag.

Walter Roberson - 21 Oct 2005 08:32 GMT
:Most posters say that companies usually put new programmers, or less
:experience programmers to do the maintenance work.

:One fundamental question that bothers me: How do we define "experienced
:programmer"? 5 years experience, 10 years? I mean, how many years of
:experience are considered as an experienced programmer?

Depends on the company. I've been programming for more than 25 years,
and the programming task that is waiting in the wings for me is
essentially maintenance work. On the other hand, if they thought
someone else could do this particular task well, they would have handed
it on by now instead of waiting for me --- there are some things that
effectively require very experienced maintenance programmers!

I no longer recall whether I was put on new code during my first
work term; I believe I was by my second, and I was doing some pretty
hairy work by my fourth.

But a lot depends on circumstances and skills and personality.
If the organization is "pushing" the progress of a fair sized project,
then the organization very likely is short of people who can readily
visualize diverse parts of the system and piece those parts together,
so anyone who displays an obvious talent in that field might find
themselves doing integration code development that most people with 5-10
years experience would hesitate to begin. But the skills and temperment
that make one a "natural" at that kind of integration code development
are pretty much the same as those that would be displayed by
a "natural" maintenance programmer/analyst.

So... in at least some organizations, you get to the top faster by
being good at maintenance than you do by being indifferent at
maintenance but good at creating new work by yourself.
Signature

Programming is what happens while you're busy making other plans.

Roedy Green - 21 Oct 2005 23:54 GMT
>But a lot depends on circumstances and skills and personality.
>If the organization is "pushing" the progress of a fair sized project,
>then the organization very likely is short of people who can readily
>visualize diverse parts of the system and piece those parts together,

That is an important observation.  When you write new code, you can
focus 99% of your attention on the one class you are composing.

When you do maintenance, any change you make could potentially disrupt
ANYTHING in the whole app system.  The better it was originally
designed, the less paranoid you have to be. You have to understand the
app as a whole and mostly what it is safe to IGNORE for any sort of
change.

In contrast, when you write new code, there are no interactions yet to
worry about.

I am big on Christmas present comments of the form, "If you have to
change X, or add a new Y all you need do is modify the tables/code at
a, b, c."

So you need a very focused mind for writing new code, and a mind that
can keep a million interactions in mind to do maintenance well.

I used to have a ritual for getting into heavy maintenance mode.
It involved consuming pizza and coffee, being undisturbed for long
periods of time, unusually late at night, re-rereading documentation
and refreshing my mind going over crucial code till a model of the app
as a whole was again fresh in my mind. Then I could make a great
series of changes very quickly and accurately.

Maintaining your own code is much easier. I can trust myself not to
pull a great many stupid stunts, and to thoroughly document iffy
tricks,  and any crucially important gotchas.  I can't do that
maintaining other people's code until I get to know them though their
code.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

adaworks@sbcglobal.net - 06 Nov 2005 15:21 GMT
> So... in at least some organizations, you get to the top faster by
> being good at maintenance than you do by being indifferent at
> maintenance but good at creating new work by yourself.

I always placed high value on  programmers who could solve
difficult problems.   In software those problems are often
created by other programmers.    When you can read and
understand someone else's program, fix it, extend it, improve
it, or solve the otherwise intractable problems left behind by
the person who wrote it, you will be a valuable member of
the team -- maybe more valuable than someone who knows
only how to write "perfect" code.

Richard Riehle
Roedy Green - 06 Nov 2005 23:17 GMT
>I always placed high value on  programmers who could solve
>difficult problems.   In software those problems are often
[quoted text clipped - 4 lines]
>the team -- maybe more valuable than someone who knows
>only how to write "perfect" code

An analogy. Whose skill is more impressive.  A top flight mechanic, or
a top flight mechanic who can do his repairs while the car is racing
at 140 MPH
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Benji - 06 Nov 2005 23:29 GMT
In comp.lang.java.programmer Roedy Green <my_email_is_posted_on_my_website@munged.invalid> wrote:
> An analogy. Whose skill is more impressive.  A top flight mechanic, or
> a top flight mechanic who can do his repairs while the car is racing
> at 140 MPH

What kind of cars are we talking about, exactly?  Is this the jetsons?  If
not, I don't think this is a very good analogy.

Signature

Of making better designs there is no end,
 and much refactoring wearies the body.

David Lightstone - 07 Nov 2005 00:11 GMT
>>I always placed high value on  programmers who could solve
>>difficult problems.   In software those problems are often
[quoted text clipped - 8 lines]
> a top flight mechanic who can do his repairs while the car is racing
> at 140 MPH

There is a difference between skill and fantasy.

> Canadian Mind Products, Roedy Green.
> http://mindprod.com Java custom programming, consulting and coaching.
Phlip - 21 Oct 2005 14:40 GMT
apngss wrote:

> Most posters say that companies usually put new programmers, or less
> experience programmers to do the maintenance work.
>
> One fundamental question that bothers me: How do we define "experienced
> programmer"? 5 years experience, 10 years? I mean, how many years of
> experience are considered as an experienced programmer?

What will you do with the definition? "Allow" the programmer to write new
code?

I think experience comes from eating your own dogfood - from maintaining the
code you yourself wrote.

Signature

 Phlip
 http://www.greencheese.org/ZeekLand  <-- NOT a blog!!!

Roedy Green - 21 Oct 2005 23:55 GMT
>I think experience comes from eating your own dogfood - from maintaining the
>code you yourself wrote.

Perhaps this is partly why there is so much outsourcing.  People who
maintain their own code write better code.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

"." - 21 Oct 2005 20:34 GMT
> Most posters say that companies usually put new programmers, or less
> experience programmers to do the maintenance work.
>
> One fundamental question that bothers me: How do we define "experienced
> programmer"? 5 years experience, 10 years? I mean, how many years of
> experience are considered as an experienced programmer?

Experience comes with exposure to code and coding. You cannot define it
merely by years.

I have seen people who approach their job as just a paycheque. They do
just enough not to get fired. Advancement comes from knowing history and
not being a good programmer.

On the other, some programmers love programming. When they go home they
log onto the WWW and participate in some online community (e.g. open
source project or reading newsgroups).

I would not be surprised to find a junior programmer with 5 years
experience and a senior programmer with 3 years experience. Depends on the
person not just the years in.

Signature

Send e-mail to: darrell dot grainger at utoronto dot ca

Keith Thompson - 21 Oct 2005 21:51 GMT
[...]
> I would not be surprised to find a junior programmer with 5 years
> experience and a senior programmer with 3 years experience. Depends on the
> person not just the years in.

Indeed.  Some programmers have 5 years of experience.  Others have one
year of experience 5 times.

Signature

Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
San Diego Supercomputer Center             <*>  <http://users.sdsc.edu/~kst>
We must do something.  This is something.  Therefore, we must do this.

Cristiano Sadun - 21 Oct 2005 14:36 GMT
>I've heard much the same thing from other people I know who are
>in the software industry: most programmers really dislike code
>maintenance -- even if it is their own code that is being maintained!

This is odd. I dont know what "most programmers" do - and I'm not
particularly questoning your assertion - but I think one of the best
indications about how good a programmer is (or how well designed
his/her programs are) is exactly how easy it is to maintain them -
adding features, enhancing existing ones etc.

It would really be a sad world if most programmers wouldn't like/accept
to do that..