There's little more frustrating than learning new things
without the chance to use them.
I've been reading all sorts of guide to good programming.
Design Patterns and the like. Unfortunately, I'm
currently in a job where nobody's heard of SDLC, nobody has
time to apply it, all architectural work was done years
ago, and it's a matter of adding a business rule here and a
report there. OO? Not even a consideration. We can't
even come up with a decent set of internal tools, either
because nobody will agree on them, nobody is given time to
implement things people agree on, or they are still-born
because "you can't teach all [five] of the developers to do
that."
Now, while rigorous software design could surely help this
company, it's hard to convince other people of that where
average projects need to be done in a week and there are
vast expanses of code that are so fragile that any
attempt to modify them break... even when the person doing
the modification has been with the company for >10 years.
This has taught me something: you must keep some
distance from customer demands. Part of our problem is
that we try to provide extremely short turnaround on
customer requests, quoting them a price and due date before
getting anything more than a vague request. There are no
requirements drawn up, yielding the expected iteration of
code, test, deliver, repeat. There's no time for
reflection, to think whether the architecture needs to be
changed, or how this should be generalized.
Regression testing was attempted and abandoned before I
arrived at the company, and internal documentation is of
the "Ask Bob" variety.
Combine this with the report
that ebizo mentioned, and it amazes me
that any software works at all. Where are the companies
that follow good practices? (And are any on Long Island hiring?)