Saturday, January 9, 2016

On working at a new job

On working at a new job, how things can end up like a turd pile.
(They often do! How do we protect ourselves from stepping in it?)

They are delivering a coherent software product.  But it's extremely brittle!
Try to make any little change and it blows up.  (or they blow up).
When I start working at a place, it needs to be constant examination.  Constant.  You are working on a complex system so how do you become effective?
Think of a child walking through an elaborate construction carefully setup by another child before-hand.
You can barge around smashing pieces as you go.  Not good!
You can tiptoe around examining things as you go.  Look around, then try,  make a little change, here or there, maybe, -experiment- with some little alteration.
That's the rub!
How does the system respond to your little experiment? Does it BLOW UP? or does it show some possible little aberration?  Something obviously off-kilter?
The trick is simple isolation of dependencies; old fashioned structured programming, object oriented design, modularity, minimize dependencies.

If you cannot add functionality without affecting a ton of external files, macros, tables, global variables, etc.... Then, you've got some problem, no?
The question is to design in a modular fashion so that pieces can be plugged in and removed.  Perhaps this sounds idealistic but it's not. It's simple reality.

It seemed to me the lead engineers were protecting their turf.  They delivered a product that worked enough to demonstrate but that broke frequently.  They could blame changes on the breakage; on lack of 'performance' of other, new, programmers, like me.

There is some greater philosophy here.  Can you bend, change, modify, add, work on, tinker?  Can you make software that is 'robust' or not?  You decide.

First of all, every question, concern, complaint, is a gift, not a curse.  Why not keep studying something?  Why not be open to discussion?  What is there to 'hide'?  Hiding is for private members of classes, not for examination of concepts, abstractions, thought, design.

I simply believe that design can evolve.  It need not be a brittle construction.

In Software, we have this added power, this ability, to change without breaking, to add code anywhere at any time, which does not have to alter the functionality.  And need not break anything. The increased flexibility is what makes software a little better than say architecture with bricks and metal, which will certainly not allow tinkering with, if a completed structure.  In software even if it's deployed.
One can change a module to make it simpler, more efficient, whatever, and not break any of the other system, that might even be running in the field.  That's one thing that makes software special.


Young workers are interesting.  In one sense they're open to changes, differences, alternate ways.  In another way, they distrust the need to analyze, take time, think carefully.  It's some kind of trade-off.  Interesting trade-offs between new and old.

No comments:

Post a Comment