James M. Clark, retired after 43 years at ITT.
I began designing parts of computers, then communications hardware, and eventually entire computers and systems such as the MDU (Message Data Unit) of the GPS satellites. From hardware design, I learned programming first as an engineering tool, then as an engineering component. I first learned Fortran -- the hard way -- like learning to swim by jumping into the pool. I also did some assembler code when needed, which wasn't hard since I designed computers. Then I learned C -- now there was structure, and dynamic memory allocation.
Then I learned Pascal (Borland, that is) -- now I could write programs that ran correctly the first time. Now there were other levels between local and global. I could show programs to non-programming engineers, and they could understand them (I told them it was 'design language'). I found the Interface and Implementation sections of Units easier to handle than Header files. And no more makefiles -- just click the Make button (it even saves your source files). Programming and programs were faster. Now I use Virtual Pascal (http://www.vpascal.com/news.php).
In spite of all the programming I have done, I never, in all my 43 years of engineering, worked officially as a programmer. I've been a system engineer and inventor. I primarily used programming as an engineering tool. I learned it on my own, from books and experience. I mainly wrote programs for myself, to test design ideas, whether designing hardware or software algorithms. My bosses were generally more interested in the results than my methods, so I was free to develop my own style. And I could use Pascal when the programming department used only C and assembler. After converting my Pascal to C for them several times, I started writing a Pascal-to-C converter.
The Borland Pascal compiler was so fast that I got in the habit of compiling every few minutes so that I could catch errors one at a time before they compounded, knowing that compound errors would make debugging harder. This led to the habit of starting with a skeletal program (sometimes while the design concept was still fuzzy) and adding features. Years later, I explained my programming style to an expert at an Object-Oriented Design seminar, and he said "Oh, you do ExtremeProgramming." It was the first time that I heard the term. I also learned that I had developed habits called TestDrivenDevelopment and RefactorMercilessly.
After finding that I was re-using my own code, sometimes years later, I started commenting the code more, and looking for code with re-use potential. I developed a personal library of re-usable units which often enabled me to complete projects faster than anyone expected.
I have written:
My e-mail: mailto:JamesMClark5@comcast.net