Nothing interesting about my first story: I got a boring cubicle job in a large enterprise that needed 12 programmers to do anything, blah, blah, blah. But I did do some good work for a vice president who remembered me when he moved to another company, which leads to my second story, my real story:
He brought me in to his new company to do a consulting job to answer 2 questions, "What do we have to do to get Order Entry, Shop Floor Control, and Standard Costing written and running?" and "How many programmers do I need to hire?"
They had 400 employees, were missing all of these mission critical apps, and had only one programmer. But he was all they ever needed. I worked with him for 3 months and he wrote all of the software needed using tools and techniques none of us had ever seen before.
The longer I am a programmer, the more I realize that I love my job because of the actual work I do. Period.
I love the idea that people are trying to get things done, but need a little help from me to get them the tools they need. I love discovering with them what they need and how to get it to them. I love all that data sitting on disks somewhere begging to be used. I love all that data outside of any computer begging to be put on disk. I love the idea that I am master of a little universe that I can see in a 19" square right in front of me. I love manipulating important things, both complex and simple, with just little flicks of my fingers. And most of all, I love seeing something that came from nothing work for the first time. I did that! (Happy dance) Oddly, not much else matters:
I have worked in the most deplorable conditions at the most difficult times and hardly noticed when the work was good.
""He is dead, too much hard living!". Too much hard coding would be more like it."
Wow, those ones and zeros must have really been heavy!
Every time I see landscapers, construction workers, farmers, nurses' aides, or anyone in one of my customers' factories or warehouses, I thank my lucky stars that I was born when I was, I had an aptitude and interest in programming, and I found the perfect career for me.
There were many times when something I did seemed too easy. So many times I'd listen to the user, understand their problem, and help them solve it with software. No big deal. Many of us have been doing that for years. Then the user would say, "Thank you, thank you, thank you!" "You're so much better than anyone else we've tried," or "This software is incredible! You should take it to market."
Or when I got compliments I didn't think I deserved. People called me "the smartest programmer I ever met," "brilliant," or "head and shoulders above the rest", and I knew it wasn't true, but accepted their praise anyway. And believe me, I'm not bragging, I'm just sharing experiences that many others probably had too. Others thought we were geniuses and we thought that we were just doing our jobs.
So why don't I feel like a fraud? Because I paid my dues. I may not the smartest or most gifted guy, and I'm certainly no genius, but I know I did the hard work.
I think that your first step in becoming "addicted to programming" is understanding what building stuff really is: intense sprints of orgasmic discovery separated by long periods of building the prerequisites. Once you understand which phase you're in, you can better understand why you feel the way you do.
A perfect example was my project last week. I had to make 14 changes (including 3 major structural reworks) to an existing application to produce one additional output. This output was key for a fundamental shift in thinking about the use of the app.
In the years in between I discovered BASIC and have found it to be the Swiss army knife of apps. Not the old Dartmouth Basic, and certainly not anything Microsoft bastardized, but there are many other versions that seamlessly integrate with relational data bases that I think are a dream.
When I first started out I quickly rose through the enterprise ranks and was never taken seriously because of my age. As a wimpy looking nerd, I had always been underestimated by others and I found a way to use that to my advantage. When the time was right, I would just shoot them between the eyes with the right solution. My young age didn't matter.
Fast forward 30 years. I never notice age discrimination. It may be there, but I simply don't notice it. I think being in IT and in my 50's is a tremendous advantage.
Is it "what I thought it would be"? I don't know. Because I had no idea what to expect. (I did my first programming on the job; I started before there was much opportunity to do it on your own.)
I have done projects at over 80 companies. I have gotten involved in almost every aspect of the business. I have travelled all over the country, met many interesting people (and friends for life), and have constantly been learning and doing. Oh, and I have earned far more than most of the people I have ever worked with. It wasn't unusual for me to be earning more than my supervisor and much more than my users.
There's one huge factor at work, for many programmers. I'm tempted to call it the "wimp factor", but that's too negative, so I'll just call it the "introvert factor". I'm a perfect example:
I was always small for my age and looked nerdy with my glasses and attraction to books, etc. I was always picked last for sports teams, drew little attention from girls, and was usually the first one to be bullied. It even happened in my own family. It was always easier to pick on the little guy to get what you want.
Fast forward to adulthood, and not much has changed, especially with bosses. It seems like my boss was always a sales/business guy, extroverted, and bigger than me. His/her natural reaction was to bully, probably because they knew they could get away with it. This was for almost everything: project management, discussions about work, and of course, money.
Reminds me of an argument between 2 great billiards players, Willie Mosconi and Minnesota Fats. Willie was the best player in the world at the time, winner of many championships. Fats was a hustler who never won anything except money. Each vowed to kick the other's butt in a match. Of course, Willie kicked Fats's butt, to which Fats responded, "So what. If there was money on the table, I would have won."
This article made me realize I am more like Fats than Willie. I have interviewed and worked with many great programmers, but hardly consider myself in their class. They may know 27 ways to sort data, but being like Fats, I only need to know one to get the job done (and take the money).
I've been programming commercially for almost 40 years and in all that time, I have found little correlation between age and ability to deliver quality software.
I have worked with younger, inexperienced, and uneducated programmers who were willing to learn, with minds like sponges and who were a pleasure to work with. They often found or thought of things the rest of us overlooked.
I have worked with younger, inexperienced, and well educated programmers who thought they knew better and were obstacles to progress.
"Why is it so hard to find programmers? Are people afraid of joining a startup?"
Let's not overlook the big differences between working at most startups and working at most companies:
1. Every programmer, no matter how good, is at least a little insecure. Every one of us doesn't know something. Is the something you don't know going to make or break the next project? In a startup, there's rarely a safety net to catch you, but in a larger company, there's probably a better chance that someone else can help you along.
There's a chasm you have to cross to become "senior", whatever that means. One of the biggest skills you need to learn is not technical. That skill is understanding exactly how to apply our limited resources.
Should we worry about how well a certain module was written? Maybe, maybe not. Sometimes the answer really is, "It runs well and isn't hurting anything, so let's leave it alone. Opening up that can of worms dumps 47 new issues into our queue and now is not a good time to do that." Or the answer may be, "This has to be made right before we can add these 27 other things to the system or we'll all be in deep sh*t." How do you know which? Experience. Understanding the big picture. Understanding your customers and users. Understanding your dev team. You get the idea.
Taking on a lead role is not selling out if it's used to expand your horizons and make you an all-around better dev person. When you return to full time development, you'll be light years ahead of those who never had to manage the whole project. A little perspective goes a long way.
Pair their work ethic, real world experience, and life lessons with the passion and technical skills of a 20 something programmer.
I started my first business when I was 27. My cofounder was 41 and had done things I hadn't even imagined. He was so smart, so seasoned, and knew the ropes about so many things that he saved us both countless hours and dead ends. And I was able to do things he never had a chance to learn. We made a great team.
Now I'm on the other side of that relationship. And would love to do it again with someone in their 20's. I have a million ideas that come from years of real world experience and not enough time to act upon them.
I've been programming continuously for 30 years and I've never been burnt out. In fact, I'm having more fun than ever. I can't imagine doing anything else.
I have worked in 80 companies, either as a contractor or an employee. I have seen other scenarios play out many times. I have worked on the worst garbage code and dealt with incredibly nasty and incompetent people almost everywhere I've been. But I never let them beat me.
Only I get to decide how I feel about anything, especially work. When things have gone sour, which they almost always do, I have done everything I could to fix them, and when that wasn't enough, I've moved on. I've always felt that one of my biggest strengths was the breadth of my experience. I use almost all of it every time I do something.
My customers are small business people (retailers, wholesalers, doctors, lawyers, etc.) who own computers that have replaced their file cabinets and some of their clerical employees. Those computers came with lots of stuff in them but need more as their business changes or they discover stuff they forgot. I upgrade their computers with the stuff they need. We call that stuff "software". They pay me. Well enough for me to buy you dinner Sunday night and take you to the Steeler's game. What do you say?
Garbage Perpetuation Development (GPD) - You can't believe how bad the existing code base is, but you're afraid to open a can of worms, so everything you add to it is written in the same style. For the rest of your life, you can say, "It was like that when I got here."
Mansion in the Quicksand Development (MQD) - The opposite of Garbage Perpetuation Development, you are so shocked by the poor quality of the existing code that you vow that you'd rather swallow razor blades that code the same way. So you write a tight beautiful refactored masterpiece that will crash as soon as the underlying database loses its integrity (later tonight).
Defer to the Framework Development (DFD) - You're not sure how to tackle quite a few critical design/architecture issues, so you convince your boss to adopt the framework du jour and decide to "let it handle it". As soon as someone needs something that the framework doesn't handle, you blame management for making such a myopic technology decision and say that it can't be done. You keep your job and get a new boss every two years.