Unix: Forward to the History
Ever watch “Back to the Future”? Ever live “Forward to the History?”
Sick of being imprisoned in a C-panel reseller’s account I longed to return to my long familiar Linux / Unix command prompt. I got a VPS from Ubiquity. It was the right thing to do. I know I was falling off the wagon and who knows where indulging an old addiction might lead? But, my daughter was proud of me. In fact, she was the one who recommended it. My addiction was Linux. Solaris. AIX. HP-UX. It ran through my blood like heroin through the veins and brain cells of a drug addict.
It started in my youth when a friend of mine asked me,
“Have you ever tried Unix? Hey, this is really good stuff!”
Curious, I didn’t merely dabble. My first shots of Unix mainlined it into my system until it controlled every aspect of who I was. I read my first Unix book cover to cover in a few hours and went on a quest to find a Unix system in Fresno and considered leaving Fresno if I could not find one.
UCSF Medical School
Hidden away in a small corner of the Fresno Veteran’s hospital was a VAX 11/750 running 4.2BSD Unix. It was used by a very small team of researchers in computer science applied to medical research in neurology for studying the effects of damage to the parietal region of the brain. And they needed a volunteer C programmer.
At that time, the only programmer they had was a Computer PhD student who really sucked at programming. Back then, almost all programmers sucked at programming. And I could see by the way he had tried to write some handwriting analysis code that it was never going to work.
What can I say? I was just a kid finishing his BA in Math! Well, it was my nature. I hated bad programming. I worked my way through school writing programs. Engineering programs. Business programs. Mathematically complex programs. Database programs. User interfaces. Machine interfaces. And I wrote them in forms of Basic, Fortran, COBOL, Pascal, and various Assemblers in commercial settings.
Because of my background in development, I had no tolerance for code that was not well structured, modular, consistent, and maintainable. I knew how to break big problems apart into smaller, easily solved problems, and I knew how to make programs simple without losing completeness, scalability, maintainability, or performance. And this PhD student didn’t.
So, I learned C, Unix, and the PC graphics package fast. Then I developed the programs needed to run test trials against people with brain damage and Alzheimer’s disease.
A neurologist or psychologist seated patients, or “subjects”, before a PC and give them a few buttons to press. Squares and asterisks of various sizes and colors appeared in various places in various timings on the screen. The computer measured the speed and accuracy of patient’s responses to see how quickly and accurately they could detect left-right and right left movements. And a statistics program I wrote processed the information into a report.
The handwriting analysis program on the VAX in Unix was in shambles. So I rewrote it to do exactly what the PhD student intended. But, it was structured, modular, and well documented. And there was one other thing about the new program that was missing from the old one. It worked.
And this was very typical for me. A couple years earlier, as a mainframe programmer/analyst, I often drove my Senior P/A nuts whenever I was asked to modify a program. If it was badly written spaghetti code, I would scrap it, look at the input, output, and logic, and then create a structured, modular program that would do the same thing better.
Leaving Software Development for Unix System Administration
Community Hospital needed a programmer, and I needed money. Working part time for UCSF on a grant wasn’t meeting my financial needs, and I wanted more challenges.
CSU, Fresno also needed a techie for their newly formed Computer Science Department. Community Hospital was a VMS shop programming in VAX Basic. CSU, Fresno, or Fresno State had both VMS and Unix and PCs.
So, I wanted to work for Fresno State. The professors were mostly my old professors from the Math Department. Dr. Harold Haslam was the department head. Dr. Henderson Yeung, Dr. Grace Yeung, and Dr. Walter Read, also joined the new department. This would be an awesome, groundbreaking opportunity to learn while helping a start-up Computer Science Department, and my heart was set on it.
I have to digress. After all, it would be inconsistent not to digress since this whole article is a digression.
Harold was an interesting character. Here I was, a young Christian kid who had run out of engineering courses at the Junior college and was taking third semester Calculus at Fresno State. So, I went into the classroom. Seated around the classroom were the students, and one of them was a ratty looking, long haired hippy. I didn’t really think much about it as that was pretty typical, and most of us had some hippy-like characteristics anyway.
But, the professor was late.
Why? Was he held up in traffic? When would that man to come through the door, set his briefcase on the table, open it up, and begin the lecture?
Then the hippy went to the front of the class, grabbed he chalk. I thought he might write something nasty to chastise the professor for being late, but he didn’t. He began teaching. The hippy was Dr. Harold Haslam, a brilliant PhD graduate. He was more than a little rough around the edges. He swore, cussed, criticized, tripped over garbage cans, threw erasers at the wall, and smiled sheeplishly at the class embarrassed sometimes.
How could you not love a man like that?
Dr. Maurice Cohen, my favorite professor, was at the opposite of the craziness spectrum. He was an orthodox Jew and dressed like a business professional, and he never swore. But, his enthusiasm for Mathematics and Science was every bit as intense and ten times more joyful. Sometimes he would literally run around the table in front of the room with excitement totally unaware he had done that.
And his enthusiasm was catching, viral, infectious. And he kept us students on the cutting edge discovering new ways to solve differential equations, partial differential equations, game theory, linear programming, Z-transforms, special functions, difference equations, and so on. It should have been on surprise his son would teach differential equations to adults at age 8 or that he would enter medical school at age 15 having graduated with a 4.0 GPA.
Dr. Grace and Henderson Yeung were Berkeley graduates. Unfortunately, they had separated and divorced, and through the years, I secretly prayed in my heart that God would find a way to bring them back together again. Henderson excelled in applied math while Grace excelled in number theory. And yet, Henderson seemed to take a great interest in systems while Grace pursued Database Theory. Between them, they had a son who was brilliant in computer programming at around age 8.
A Challenging Personality
Walter Read was a guy I loved to hate half the time and hated to love him the other half. Irresponsible, blame casting, weak character, emotionally immature and unstable, unkempt, abrasive, with all the arrogance that shouts to the universe, “I’m too bloody stupid to get a clue about the importance of anyone else or their opinions.” And yet there was a lovable, friendly side about him, too.
So, what do you do with that? Well, the first I do is ask myself, “How am I like him?” How can I learn from what I see in him? And how much of what is abrasive in him is abrasive not because of a character flaw in him, but in me?
My assistant and I are sitting in my office one day working on some projects and in walks Walter. “Hi Dan, Debbie, how are things going? Did you get the student accounts entered into the system?” Well, things were going well. The professors had given me their lists and we made sure the students were ready for the new semester. And it was nice that he paid us a friendly visit to see how we were doing.
Then a day or two later, he barged into our office furious. “I asked you a direct question, and you looked straight at me and lied. Why don’t my students have accounts, and why did you lie to me?”
Debbie and I were dumbfounded. He shouted, “Don’t look at me that way. You know what I am talking about. I came in here the other day and asked you directly whether you had the student accounts entered into the computer and when my students tried to log in, they had no accounts. Why did you lie to me?”
We felt the blood rush to our faces.
If it had happened today, I probably would have handled it differently. I would hope to pause intentionally rather than dumbfoundedly in shock. I wasn’t supposed to be the dumb one looking like a deer in the headlights. He was.
Then he would come to the place where he would demand a response, an answer, an explanation. And I’d ask a question. Just a question. Or a series of short questions:
- “The other professors gave us a list of students they needed accounts for. Did you do that?”
- “Why not?”
- “How would you suggest we work together better in the future to make sure something like this never happens again?”
- “Why did you call me a liar?”
- “Was it honest and fair to accuse someone of deliberate deception in this situation?”
At the time, I handled it a little differently. I did not lash out. I did not scold him. I mentioned that the other professors gave me their lists of students and asked if he could give me his list and I would be glad to enter them into the system immediately. And when he left the room, Debbie’s eyes were glaring with anger toward him, and she said I handled the situation better than she would have. But, she was also a law school graduate and probably would have nailed him to the wall in a second.
But, this situation made it clear that the IT Profession is more than being technical.
Growing Through Perseverance
Occasionally I have lashed out. There were times I wanted to yell, “Hey, jerk, learn some integrity and responsibility and quit screaming at other people for your own stupid decisions. Do you think everyone can read your mind? If you’d given us your list in the first place as the other professors did, your students would have their accounts and you wouldn’t be stuck in front of your class with everyone wondering where their accounts were. Just do your part and we’ll do ours. And be a professional.”
Is that professional support? He’s the customer. I’m the support provider. And if that means being a doormat, it’s better to say, “Screw it” and get a different job. But, that’s not the best option. The best option is to learn professional support skills so you don’t have to change your job.
In fact, if you flee from problems, you will never grow. People flee from one marriage to another to another continually marrying the same kind of people over and over again. Why? Because in their hearts they know there is failure. And it gnaws and nags and keeps them awake at night wondering, “If I had done something different, would I have succeeded?” Then they get jaded and decide not to marry again. Then the next marriage starts. And people flee from their opportunities to grow and learn how to resolve problems like mature adults. They never learn how to persevere, to endure, to grow, to develop, to develop mastery. They learn to flee.
The same goes for work, but with a slightly different angle. It’s never right to leave a marriage for someone better or more attractive. A family needs stability, integrity, commitment, courage, love that endures. When we go into marriage, we make a commitment for life never to violate the right of the family to live together in love enjoying the shared family assets. We promise to love faithfully in sickness and in health, for richer or poorer, for better or worse until death do us part. But the commit to a company is for the duration of its mutual benevolence to the company and the employee.
Discerning When to Leave or Stay
If you’re in one job and a better one becomes available, it’s good to go for the job that will give you opportunities to make more money, to grow professionally, and to improve your ability to contribute to society and to your family in a greater way.
However, where families and employment are similar is in that it’s best never to make a habit of leaving to avoid a bad situation unless that situation is significantly bad. And not all problems are significantly bad. Make your decisions honestly with integrity. Is this problem at hand an opportunity to grow? To mature? To develop soft skills? Integrity? Courage? Creative thinking? Interpersonal skills? Then stay in the crucible. Stay in the refining fire until you are refined, until you have mastered what you need to learn. Embrace it. Pray for grace to endure it. Pray for wisdom to own it and master it and cherish the skills you will develop in this process.
When problems justify leaving, they should be serious enough that staying would be dangerous or harmful. And you need to be honest with yourself for two reasons: One is that you may be tempted to grab any justification that would allow you to flee to your comfort zone without growing, and the other is that you may become addicted to the refining fire and be tempted to stay even when the situation is truly harmful, when it is wise or even imperative to leave.
Act intentionally. Wisely.
In marriage, if you’re bored, stay. If you’re tired, stay. If you find yourself attracted, tempted to gaze upon another, tempted by the lure of adultery, stay, and to stay, you’ll have to harden yourself against the temptation.
Some way if you’re married, you need to stay on your leash, but you can run out to the end of the leash and bark all you want. Some say, “Look but don’t touch”. Looking at the wine when it is red in the glass won’t get you drunk, but it will make it hard for you to avoid drinking it if you keep looking at it with longing eyes.
But, if your spouse is coming home drunk and beating you and your children senseless or threatening to kill you, then you need to strengthen yourself with absolute determination and get your children and yourself to safety.
But, if that isn’t the situation, don’t lie and say it is. The saying, “To thyself be true” simply means, “Don’t lie to yourself.” It doesn’t mean, “Indulge yourself”, or “Indulge your lusts” or “Indulge your cowardice”, or “Tell yourself and everyone else whatever lie you have to tell in order to get what you want.” It means, again, “Don’t lie to yourself.” “Speak honestly to yourself always.”
If your job is harmful to your family or threatens your life or your health unnecessarily, then it’s OK to leave it. If your boss is a jerk, weigh whether it is better to stay and grow, or leave and grow more.
Some bosses are insecure, and they try to encapsulate their employees taking ownership of them. They can only own a part of you that you are willing to give them. If you have a choice between one job that will allow you to get ahead and your current job that keeps you isolated and hindered in your growth, plan out how best to make your exit. Leave on good terms with your previous employer. Let them have good memories of you and give them a lasting legacy they will always appreciate after you are gone. Make them wish you were still with them. Make them glad they had a chance to work with you. And make sure they never regret having hired you.
But, you can still leave. When you do, have a target. Don’t leave to get away from something. Leave to go somewhere. Have your target in mind. Plan for your exit. And here I am, saying all this while I’m unemployed having lept out of one job into the great nothingness in a time of economic crisis where IT jobs are rare and stacks of resumes are hundreds high.
So, why did I leave US Script? A recruiter called. A job was available in Oakland and another in Napa for me. And I had a daughter in high school in the bay area. That’s a target. That’s a very substantial target. But, the jobs were not as certain as the recruiter led me to believe they were. Yet, I was unsatisfied with my salary and level of employment which was several steps below what I had been accustomed to. I had already tried negotiating for a management position, and I was turned down. And the reason given did not seem to be concrete enough to give hope of identifying a path into management.
In some ways, I should have seen clearly that the job was a dead end job. An architect who had been with the company since its beginning felt the same way. He had been in management and was demoted, and yet he stayed and languished for fear of not finding work elsewhere. People stayed for fear. Fear of the unknown. Fear of change. Fear of leaving. Fear of putting their families through financial harm. And yet their fear was keeping them from growing.
I wanted no part of it. And still, I negotiated for a lead developer role. Any person with in IQ over 30 should have seen immediately that turning down that suggestion would be about as unreasonable as refusing to promote President Obama to senior floor mopper at a greasy spoon diner. I was turned down. Then I asked if I might stay with my current job working remotely from the bay area, and I was turned down. So, I decided to tender my resignation with the expectation of taking one of the bay area positions when it came through. I had no offer in hand, but I knew my skills were strong and that any manager with an IQ over a doorknob would hire me on the spot and find a place for me. I had substantial skills, an excellent work ethic, a strong education at a great university, and experience with some of the most prestigious IT companies in the world.
It would take a blithering idiot not to hire me. But, that’s what happened. Perhaps the fact that I say this is evidence I have a little too high opinion of myself. No. My recommendations from past coworkers and managers prove that I am an excellent employee, that I contribute significantly to my employers’ success, and that turning me down is leaving millions of dollars on the table for someone else to grab.
So it’s a fact. The IT manager who does not hire me is as clueless as a stump.
But, that doesn’t mean I’ll be hired. I’m over 50. Idiots don’t hire people over 50. Incompetent people think people over 50 lack energy, health, vitality, “modern” skills. They test people in stupid ways asking whether you have 10 years of experience with Oracle 11g and whether you know how many pound signs there are in the comment line immediately before the “begin acl” statement in the Exim configuration file.
Why is this stupid? Power developers automate things. They encapsulate commands for opening and closing files, sort parameters, and such, and they create reusable code, so that when they need to know something, they know where to look it up. Then their code that does all the real work becomes almost as readable as simple English.
It’s the neophytes who know all the switches and options and code them repeatedly into their programs. Strong software architects abstract things. They break problems down. They can make a solution simple without losing generality, completeness, correctness, scalability, performance, flexibility, reliability, and maintainability. Their code lasts for decades rarely if ever breaking. But, the neophyte knows every parameter of every function and command, and they can recite them and write code on the whiteboard using those commands fluently. Then the foundation underneath their programs change, and suddenly the program has to go through massive changes throughout because the changes are not kept in one place, in one compatibility library.
But, he was able to answer all the interview questions and demonstrate his skills in some language–Java, Perl, shell scripting, C++, python.
Smart managers are in short supply today. They hire the geezer. They’re too smart to cast him or her off as a monolithic RPG programmer. They’re the kind of person who asks, “How could knowing RPG, COBOL, Fortran, Pascal, APL, Lisp, Prolog, Forth, or assembler erase the brain cells that learned Java and C++?” They’re the kind of person who sees that it’s the patterns, the foundations, the computer science theory, the skelaton, the success in learning and applying one environment after another after another through the years that matters and not whether you know the difference between the last two versions of the JDK or J2EE.
So we starve the best programmers until they decide to start businesses or organizations of their own. We off shore the Oracle jobs to India so that Postgres is strengthened. Commercial CMS packages become today’s WordPress, Drupal, Joomla, Tikiwiki. Commercial email becomes Exim and Postfix. Zend, CakePHP, Codeigniter, Yii, Symfony, and others cannot sell frameworks because developers would use another or roll their own. Medical EMR packages are now in the public domain. And what operating system is there that is significantly better than Linux?
Apple has gone to a Unix core. Windows has some unixy characteristics, and virtualization crosses over allowing Windows and Linux and other operating systems to run on a single system. And you can cluster away without any proprietary software at all.
But, the feeling is that you still have to have local people to support local machines. But, who needs local machines? Well, you need desktops. But as more is moved away from the desktop and into the cloud or whatever, control over our computing universe becomes more centralized.
So, then, who will control it all one day? And who will have the jobs but those who supported that central entity from the beginning? Who will compete? Who will the renegades be? Will they be able to stand their own against the central cloud?
Is freedom at stake? Freedom of press? Speech? Religion? Communication? Will people assemble or text or type on dependent laptops isolated from the person two feet away from them?
Are we there today? When will we know?
Ok. Enough conspiracy theories.
Connect to human beings once in awhile, and you’ll learn to like it. It’s OK to grow technically, but grow interpersonally. And when you see an isolated techno-geek, understand. Be patient. Be there for him or her. Sooner or later that person will become bored and come around into the universe of human relationships, and you’ll be glad you were patient with them.