TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Brian Converse
from: Craig Swanson
date: 1994-11-21 22:24:04
subject: Code quality

CS> do so.  Do you have any experience hiring programmers?  If CS>
so, I'd appreciate any advice you may have.

 BC> 1. Hire people you've worked with before. Even if they have warts,
 BC> you  know EXACTLY what to expect. My experience with RECOMMENDING to
 BC> hire/not hire people: they turn out to be amazingly different than you
 BC> thought  during the interviews. In crisis times, it's almost better to
 BC> dispense  with any surprises & hire known quantities, although I've
 BC> seen  management hire people I thought were dogs only to find out they
 BC> were better programmers (and people) than me.

I often wonder if I've got some kind of objectivity problem whenever I
think about the quality of work I've seen other programmers do.  It just
seems like so many of them significantly underperform what I'd expect.  And
so few of them seem to be familier with OS/2.

Maybe I'm perfectionist, which can be good and bad.  It's good in the sense
that software with very few bugs is a nice thing to be producing, but bad
in the sense that it can take a lot longer than somebody who hacks together
a working piece of code quickly.  Then again, my experience has been that
hacked code is going to be a liability later when it comes time to make
changes and/or
strange bugs appear in the software that have to be fixed.

 BC> 2. Glowing recommendations don't mean diddly. The former employer may
 BC>  want to avoid a lawsuit, or the person may react strongly to their new
 BC>  environment and not perform as well as they did...this happens with
 BC> most of us when thrown into a sweatshop environment.

My thinking has been that getting a sample of source code that they've
written could yield a good idea of what kind of programmer they are. But I
suppose the problem is that I may not be able to be sure they wrote the
code. 
 And I also have to be sure they aren't showing me code to which they have
no legal rights.

 BC> 3. Older "experienced" programmers are hard to change,
have distinct
 BC> ideas about "how it should be done" and can be
insufferable about it

That sounds a bit like me.  I'm only 25, however.

 BC> rather than sticking to the old adage: "Never try and teach a pig to
 BC> sing- it wastes your time, and it annoys the pig" (which applies to
 BC> THEM as WELL as management). They also produce more good code/hr while
 BC> appearing to be extremely slothful compared to new programmers who
 BC> churn out stuff that needs to be redone 6 times.

I'd rather it be done right the first or second time than have to go round
and round on rewriting the same code.  Sometimes it is hard to know if an
idea is going to work until it is coded up and tried, so allowing the
benefit of the doubt on one rewrite of the initial version seems to me to
be OK.

Some things about OS/2 change so quickly or there are so many ways to
accomplish the same task with OS/2 that it makes me wonder what features
should be used for implementing certain functionality.  For example, I've
structured the project I'm developing as a set of clients and servers
communicating across named pipes.  Yet with DCE,SOM, DSOM, TCP/IP RPC, and
other options now available, I wonder if using named pipes was the best
choice.  So far I haven't wondered about it enough to rewrite anything,
though.

 BC> 4. New "young" programmers take direction better, code like a bat,
 BC> and  are quicker to pick up new constructs- helpful if the project
 BC> involves  all sorts of non-traditional stuff. OTOH, they have a low
 BC> experience  level, so you have to spell everything out. They won't
 BC> admit sometimes  that they don't know about some concept you or an
 BC> experienced coder  would take for granted. I 'bout fell off my chair

I think I'm more inclined to hire a newer, younger programmer.  Maybe part
of it is that I'm not sure about how an older experienced programmer would
take to some youngster age 25 being a supervisor. But I'm certain part of
that feeling is that I may be able to more easily train a newer programmer
to program the way I want him or her to program.

 BC> when my supervisor  laboriously explained integer fractional binary
 BC> arithmetic- NOTHING in  the CS texts I'd used (and I'm engineer, not
 BC> pgmr- predate "CS") EVER mentioned this, but out in
embedded control in
 BC> the late '70s, it was a standard tool. I felt like an idiot- but glad I
 BC> asked!!

Because I've had to find ways to do tasks such as accurately plotting
300,000 data points across a window about 600 pixels wide, I've been using
ideas such as this one.  I'm using 32 bits on each side of the binary point
so as to try to maximize accuracy.  But I don't remember hearing about this
in any computer science classes.  As I recall, the first I heard about it
was in 1989 when learning OS/2 1.1 PM programming.  OS/2 uses some fixed
point numbers for certain PM operations.

 BC> 5. Good luck. For help, call (401).... Hope you don't have to make
 BC>  the cut on who to hire. Things in CT-RI axis are quite bleak, and I'm
 BC> too soft and sympathetic to make hard decisions about people. I'd want
 BC>  to hire them ALL!

I'd be happy to be able to hire just ONE additional programmer.  I'm a bit
tired of being the only programmer on this project most of the time.

 BC> 6. For one customer, I took over for a programmer who'd left 4500
 BC> lines  of uncommented C source behind. He used to sneer at how slow and

When I got involved with the project I'm developing, all the source code
had been written by programmers who appeared to have the idea that comments
were for identifying who wrote the code and to put arbitrary version
numbers on each file.  Obviously knowing that a file had been at version
0.2, and then 0.21, and then 0.25 is really useful information.  But
comments shouldn't be used for anything else. Certainly noting what each
function does should not be done, and identifying the purpose of parameters
and variables is obviously heresy.  It left me wondering why they stooped
to occasionally use intelligible variable names -- why not just put
everything in some cipher code.  Hey, to make it easy they could have
written a utility to take boring old commented C code with readable
variable and function names and strip the comments and all extra whitespace
and change everying but keywords (i.e., variable, parameter, and function
names) into random strings.

 BC> pokey  my coding was; took me 8 months, part time, to clean up that
 BC> code while  doing all the other stuff required, and the experience led
 BC> me to  consider using commercial off-the-shelf POPULAR libraries in
 BC> lieu of  even my beautiful, heavily commented code (the other
 BC> programmer now  uses lots more comments, I've noticed). Especially
 BC> those w/o royalties.  I've been reading some of the Ghostscript source

I'm really skeptical of using other people's tools.  Several times I've
wasted hours or days reading documentation and learning a new tool only to
discover that I can't use the tool on a project because it made some
assumptions about how a project should be done that would require a lot of
changes to code that was already completed and working well.

Recently I bought VisPro/C++ 1.0.  After realizing it wasn't generating
some required source code files due to what appears to be a conflict with
HPFS386 (or perhaps a bug in HPFS386) and changing back to HPFS to get rid
of that problem, I think it may be a useful tool. But I'm not used to it
yet and it doesn't write source code the way I'd like it to write source
code.  For instance, it uses /* */ style comments rather than // style
comments.  And it doesn't indent and name variables and classes the way I'd
like it to do.  Also it relies on the resource compiler more than I'd like.
 None of these things are individually significant problems, but together
they leave me with the feeling like it leaves the programmer with too
little control over stylistic choices.

 BC> It gets worse. It was a competitive bid with several heats. Software
 BC> had to be in a DOD-approved HLL. In 1982, those were FORTRAN IV, COBOL,
 BC> some AN/UYK-xx lingo, and Ada. Ironman or whatever had just finished,
 BC> and we  said: "They claim a 1st cut Ada compiler for our mini will be
 BC> ready by  the time 1st h/w is due- do you want us to code for that w/o
 BC> testing, or use FORTRAN?". They chose FORTRAN. We had a
"FORTRAN V"

I've heard from various people in the defense sector that many projects
will intentionally pick hardware/OS platforms for which there is no Ada
compiler available so they don't have to use Ada.  I've only done about 10
months of Ada programming, but the language didn't seem so bad.  The main
"problem" was that it was rather verbose and extremely strict
about type checking.  I think this means more typing and many more rounds
of fixing little things the compiler doesn't like before it will finally
compile a code module, but a better chance of the software actually
functioning correctly.

 BC> about 11 man-months for  naught. This was forgotten until GUIDELINES
 BC> chastized me the other  day about some long module label I'd used. Gad,
 BC> how far we've come in 12 years (and most of the *&^% radars are STILL
 BC> not installed)!  Comments about ICLUI .EXE size have me worried, but
 BC> GUIDELINES' imperfect .GUI translation on one module had me digging in
 BC> the .RC file (MIS_BREAK_SPARATOR??!) and I realized, "I don't like
 BC> this- it has no  intellectual satisfaction whatsoever".  Even if the
 BC> .EXE is 100K min.,  I'll take ICLUI or Guidelines over handwritten
 BC> APIs.

I haven't tried Guidelines.  For the last few months I've been coding using
ICLUI code written by hand.  Because the application has to take up the
whole screen yet I want it to be fairly independent of screen resolution,
I've been happy with classes such as ISetCanvas,ISplitCanvas, IViewPort,
and IMultiCellCanvas that can help
automatically adjust the size of position of controls to fit on a dialog or
window.  Dialog box painters that use the resource compiler get on my
nerves a bit as dialog boxes aren't flexible enough about resizing, but
with ICLUI handling size issues seems a lot more elegant.

As for EXE code size, turning off debugging output makes a huge difference.
 It seems like EXE and DLL files with debug hooks in them are at least 3-4
times larger.  Looking through the files it almost looks like half of the
headers for ICLUI get embedded inside each executable.

CS> The project I've been working on for the last couple of CS> years
has been unfortunate enough to have had severe
CS> personnel turnover problems,understaffing, and lots of
CS> requirements changes (some of them major).

 BC> Yikes! I hate it when that happens! Have you considered working for a
 BC>  quiet, relaxed, laid-back place -like NEXGEN ??

Well, I'm not looking for a new job at this point.  I'm hoping the current
one will turn out to be a good long term job.  Once we start delivering
some beta systems by year's end, the investors are pretty much stuck having
to follow through with release level systems and product improvements for
the next couple of years.  Thus I feel like there could be some good job
security here.

CS> However, in some
CS> ways this has been good for me personally as I'm the only CS> one
who has been around for nearly the entire project and CS> at this point
the investors and management seem to think CS> I'm worth trusting
because I haven't ripped them off and CS> haven't quit on them like the
other consultants have.

 BC> I sincerely hope you are getting $$$ for this! An OS/2-based project
 BC> (or even Windows these days) is in serious manpower trouble to begin
 BC> with;  tell management I said they need $$$$$ life insurance on you! If
 BC> it's  anything near as complex as it appears to be from ur various
 BC> messages on comm. programming, the time to come up to speed for new
 BC> folk should be  enourmous- an investment NOT to be lost by P-Oing the
 BC> help!!!

A few months ago I demanded a pay raise as I had been getting underpaid for
some time.  In December 1993 I graduated from UCSD but still hadn't gotten
a pay raise six months later.  They jumped on that issue right away and I
got a raise within about two to three days. After going through one
contractor (and about four or five programmers there) as well as two other
programmers they have hired, I think they realize how hard it is to get
somebody who is even moderately reliable and fair.

This project makes heavy use of multithreading, named pipes,semaphores
(mutex and event), DLL's, PM, multiple serial ports running at 38400 bps,
64-bit integer arithmetic (mainly addition and subtraction), and C++
features such as templates, exceptions, and multiple inheritance.  There's
even a bit of assembler code involved as it was the only way to efficiently
implement a few things that would have otherwise needed to use mutex
semaphores that would have a lot more overhead.  Overall I feel like I've
got a good handle on it,but there are enough different parts to the project
that after I've worked on one part for several weeks it takes me a few days
to get adjusted to working on another part I may not have touched for a
couple months.  Thus I'd be really happy to have some help as it might mean
I'd be able to concentrate more on core issues and leave some of the
simpler user interface work and testing and debugging to somebody else.


--- Maximus/2 2.01wb

* Origin: OS/2 Connection {at} Mira Mesa, CA (1:202/354)
SEEN-BY: 12/2442 54/54 620/243 624/50 632/348 640/820 690/660 711/409 410 413
SEEN-BY: 711/430 807 808 809 934 942 949 712/353 623 713/888 800/1
@PATH: 202/354 301 1 3615/50 229/2 12/2442 711/409 54/54 711/808 809 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.