I started my programming career at Digital Equipment Corporation (DEC) in June 1985. My first project was sustaining engineering in PL/I, on VMS, for a product that was the result the largest (DEC) software services contract (at the time). It was a factory automation (supervisory level) product called Baseway.
Digital had a Unix-like offering. It was called Ultrix, but no one discussed it, at least not outside of the Ultrix group. I had two years to go in my software engineering training at Harvard Extension School. I took a course in C, taught on Berkeley Unix. On one of my assignments, I had to think outside the box and use sed. Who knew something like that could happen?
Learning C in the Unix environment all made sense, and I’ve never been the same since, despite having jobs detour me around Unix for years. When I got to my municipal programming job, my whole world was SCO, which soon became Linux.
One of the principles I was taught was not re-inventing the wheel and avoiding “it can do all” programming styles, like making an OS copy command perform sorting. *nix OSes have a sort command for that.
Programming in C on Unix was about writing one or more programs that each of which performed a function well. Then, you would tie one or more of those programs together with a shell script. In other words, the script took the first step, followed by the next step, until it executed the last step.
And that is where I am today, processing things one step after another. Oh, I would love to set up something with multiple threads, but I am not quite sure how the processing of 29,000 motor vehicle excise bills would benefit from parallel processing. Even if we split the database update piece (creating the charges for each account), we’d still have to process each updated account one by one to be written into the file that eventually loads into Planet Press and from which the bills are printed. We have to do it that way, so the bills are in zip/zip4 ascended sorted order. And that is only one of several problems.
My mind has on back burner processing doing something more interesting with Clojure, but nothing has popped out at me. Oh for a legitimate reason to use refs, atoms, and agents; maybe it will come next year.