I was 10 years old when the wheels were set in motion leading me to a life in software. My Dad was taking an Introduction to Data Processing course at our community college. He talked with me about it, telling me about COBOL, the programming language he was learning. I learned about variables, binary, octal, and hexadecimal numbers, and bits of computer history. He let me peek at his book. I read about ENIAC, the first general purpose electronic computer, and UNIVAC, the first commercially available electronic computer. Dad also gave me a punch card he said had my name encoded on it.
As it happened, I was in a class at school that took a field trip to the computer lab at the community college. I got to see where my Dad was attending. They showed us around. I remember being fascinated by the huge dot-matrix printers. They printed out something like an ASCII Snoopy cartoon for us. I was blown away by how fast it worked. Those printers must have cost thousands of dollars then. Now your $79 home printer outperforms them.
A seed was planted. My Dad told me my Uncle was a professional computer programmer. I got to thinking that sounded pretty cool. I thought maybe I’d do that one-day.
September 1981, I turned 13. At this point in my life, the greatest thing on the planet was my Atari 2600! And my favorite game was called Adventure. Somewhere near the end of seventh grade, a friend of mine introduced my group to Dungeons & Dragons. Now that may conjure up some images of overly serious nerds fantasizing themselves as epic heroes, but we weren’t quite that over the top. We were just having fun puzzle solving. Now, in the eighth grade, an opportunity arose to tie the fun I was having with the seed of technology planted in my thoughts three years earlier.
I was in an advanced students math class at school. There were two Apple II+ computers in the classroom, each with 48K of memory and a 5¼ inch floppy drive. My teacher told us about an after hours class, at a high school across town, where we could learn to write programs in BASIC. I signed up. The class was simply working through a series of tutorials at your own pace. I remember my very first step. I typed in PRINT “Hello” and it did. Like some sort of big bang, my mind took in the possibilities of what I could do next. I was hooked.
I don’t recall how many tutorials there were, but I worked through them like a madman. Then I got a hold of the manuals that came with the Apple II+. I studied those. I started buying Creative Computing magazine and typing in the code they printed. (Thanks, David Lubar, wherever you are!) I was on a mission. I wanted to make my own adventure game. I spent pretty much every waking moment for the next year working on it. Someone at school nicknamed me “Computer Joe.” I was the whiz kid of the moment. I finally had the means to fully explore my OCD. (-;
Zeal often comes before knowledge. It takes zeal to get there. I had a lot of problems to solve trying to write my game. The first real kicker was running out of memory. The next was realizing that BASIC was too slow to accomplish my goals. I wasn’t quite ready for assembly language programming. I had to adjust my zeal according to what was possible for me at the time.
At school, the teacher had a game that caught my eye. It was called The Prisoner. It was a kind of graphical role-playing game, but different that you’d expect. The author used text tricks to generate graphics, or at least that’s what it looked like to me. A light bulb went on in my head. This would require less memory and draw faster than what I was doing. It was a good lesson. “If you can’t get there from here, try another approach.”
I put a lot of work into that game. I learned a lot, but I never finished it. In high school my coding took off a whole new direction.
A man who was very interested in leveraging technology led the AV department at my high school. He had a TRS-80 Model III. I met him after asking around to see if there were computers at the school I could use. I didn’t have one of my own. In fact, I wouldn’t have one of my own until my adult years. My parents had no money to buy one. But as it stands, that was a good thing. It forced me to seek and find what I really needed: Education.
An AV department provides many types of equipment to teachers. Equipment has to be maintained, delivered, and picked up. Mr. Whitis explained to me that he needed a program that could schedule deliveries and pickups and track equipment usage. There were a hundred teachers in my school and equipment was moving around daily. He wanted to evenly distribute usage, so for example, no one projector was always being used. He had a number of projectors to distribute the load across. He also wanted usage statistics for individual teachers. I spent my freshman year writing this program.
Mr. Whitis did something else for me that made a world of difference. He introduced me to a retired software engineer from the U.S. Air Force. Mr. Shugart taught me to think and understand the nature of the beast. Most interestingly, the majority of what he taught me didn’t sync in until years later. It was over my head, but I still remembered what he said. It paid off later when I grew enough to plug it in.
Mr. Shugart also gave me some interesting object lessons. One time, he gave me a sheet of paper with gibberish printed on it. He showed me the code that printed it and asked me to explain. I stared at it for a long time. I couldn’t figure it out. That’s when he explained that one of the pins on the printer cable wasn’t firing, thus the particular bit associated with it was always set to 0. Looking at the text, each character that would normally require that bit value to be 1 was offset. Up until that day, it had never occurred to me to consider a hardware problem while coding.
Throughout high school, I wrote odds and ends. I wrote a program to track baseball statistics for my freshman baseball team. I wrote code to reproduce the UI from Atari Adventure. But as time progressed, I began to get bored with it. My enthusiasm began through gaming, but gaming was becoming less interesting to me. The work I was doing at school just seemed like nuts and bolts work. I became more interested in performing arts. I drifted away from programming and eventually came to the conclusion that I wanted to be a film director! I had plans to attend Columbia College in Chicago and major in film directing.
That all went kaput. A month prior to starting college a guy in a truck ran a stop sign. I slammed into him and totaled my car. I now had no transportation to commute to Chicago from about an hour away where I lived. I missed the semester. Further complicating things, I got serious with a girl and foolishly decided to get married. This is the part where I learned life lessons about consequences. (-:
You’re An Adult Now, Get Used To It
Getting married at 18 is like tossing a parachute out of a plane then diving after it. We had to support ourselves now. I was never afraid of responsibility, but it’s a heavy weight nonetheless. Illinois was economically depressed. We couldn’t find work. I spent most of my life wanting to move away to some big city, like Chicago or New York. We had no way to make that happen. I had no inclination of ever moving to California, but as it happened, my wife had family there and it seemed like a golden opportunity. We moved to a place near Santa Cruz, CA, then shortly after made our way to Sacramento, where we spent the next ten years.
Sacramento is a great place to live. We ended up forming a house cleaning business to support ourselves. I attended Sacramento City College, trying to work towards a degree in Computer Science. (Yes, I was back on that track again.) Unfortunately, hard physical labor and night school took its toll. I was just worn out all the time. I wanted to go full-time, but there was no way to work it out. Progress was slow as molasses. While our friends were graduating college and moving ahead, we were caught in what seemed like an endless future of house cleaning. Not that it was all bad. Our business was successful. We had our own health insurance and bought a house. But it wasn’t satisfying. It was all labor.
In the midst of this time, we became very active in our church. My interest in programming had waned thin. I had my own TRS-80 Model IV, bought second hand. I did some work on that, plus I had classes at college. It just seemed so dry to me. What really tugged my heart was serving God. I began to greatly desire becoming a Pastor. So, I jumped towards it with both feet. The goal was to attend Trinity Western University in Langley, British Columbia. I was attending a church in the Evangelical Free denomination the school is associated with.
For the next several years, we strove for that goal. We got nowhere. It was depressing to say the least. I felt very angry with God. It seemed like rejection. My faith went into a tailspin and slammed into the ground. Amidst the burning wreckage, I had to stop and reassess my faith, life, and the future. It just so happened that at that time someone we knew had a used Mac SE to sell for $400. We bought it.
It became clear to me that God was never going to let me be a Pastor. It’s not what he made me to be. I wasn’t sure any more what I was for. I needed to sort out for real what comes next and stop with the pipe dreams. I took a Psych course in Career Development. That was a great course. It taught me a lot about myself, much more than I expected. We took lots of tests to help answer the questions: Who am I and what am I wired for? The word came back loud and clear. “You’re made to design systems, i.e. data processing, dude!”
Wow. There it was in black and white. Granted, these were just tools, not magic, but they are intended to help filter things down so you can put into words what you are really good at and what your natural preferences lead you towards. It seemed very objective to me how the answers were derived. Funny, because I had come to feel programming wasn’t for me. I soon discovered, it wasn’t programming I was turned off by after all, it was a mindset about programming I needed t0 change. I figured that out because of the Mac.
When I first saw a Mac, back in high school, I saw its tiny black and white screen with what looked to me like a child’s interface. I played with it for a few minutes at a computer store. It seemed more like a toy to me than a real computer; an appliance for people who know nothing about computers. Now the IBM PC, that was the real deal! Mr. Shugart had one with a 10 MB hard drive! He assured me that IBM would soon wipe the floor with Apple. That impression stuck with me.
Years later, I acquire a used Mac SE. It looked like the Mac I saw in the store nearly a decade before, and still had no color. We bought it because we wanted a more modern computer than our TRS-80 and it was cheap. Oh, and one more thing… my wife’s Mom had a Mac. I got to spend time with it and it turned my world upside down. My petty assumptions about it got knocked flat on their bums. Between the Career Development class and hands on experience with the Mac, I finally saw the light. I got a bead on a soul-satisfying way to use my skill set. I was reborn as a programmer. I drank the Kool-Aid. (-;
That was 18 years ago. I spent a few years after that writing shareware, most prominently an application called XTimer. People used it to track expenses on services like Compu-Serve, AOL, and eWorld when they charged by the minute. Shareware was good to me. It provided extra cash, which was nice, and helped me create a portfolio demonstrating my programming ability. Shareware helped me land a job at the company I’ve now been with for close to 15 years.
I don’t say whom I work for because this is my personal blog, having nothing to do with my employer. I like to keep that separation. With 30 seconds of googling you could figure it out, if you are so inclined. (-: I will talk about what I do though.
The absolute nicest thing about working in the software industry is being exposed to other engineers. Education and growth require exposure to thoughts and ideas that are not your own. It’s like genetic diversity. Mixing mutations leads to a healthier pool.
I’m kind of different as an engineer. I tend to think abstractly, whereas most engineers have a fairly linear logic. Abstract logic works well for problem solving, but is less concrete. I form code, whereas most others erect code. My strength is in simplifying ideas and bridging contexts. Other engineers are often better at remembering terminology and syntax. I have to look that stuff up constantly. I benefit them by exploring thoughts. They benefit me by exploring function.
For most of the last decade I have worked on, of all things, products that help you clean up your Mac. They help you find stuff, get rid of what you don’t need or want, organize, and generally manipulate files and data on your hard drive. I’ve also done a lot of work related to security, like controlling which applications are allowed to send data to the Internet, or what storage devices are allowed to connect to your computer. Lots of challenging stuff.
Lately, I’ve been working on graphics products. I have done some work on apps for the iPhone and iPad. Now I’m working at getting a major graphics product on the Mac App Store. It has features using Flash that I have to make not use Flash. I’m enjoying that immensely, because the problem is so unusual. There is UI built with Flex that requires Flash to display. I’m creating a Cocoa based UI that needs to keep the same look and feel and snap into place without requiring major adjustments to the application. The original implementation was selected to allow for a single, powerful cross-platform solution. My work will mean having two implementations of this particular UI. That sucks to maintain, but it will result in a much more efficient and somewhat nicer UI experience for Mac users.
From PRINT “Hello” on the Apple II+, I’ve come a long way. Today, I get to have Senior in my job title. I get to work with the coolest technologies on the coolest hardware. Though sometimes it’s torture (I shiver when I think about dealing with kernel extensions again), I’ve found where I belong. I don’t think it would be the same for me on any other platform. I’m not saying it couldn’t be, but at this point I’ve become so attached to what I like about Apple that it virtually defines me as a software engineer.
I’m not a zealot. I’m well aware of the Reality Distortion Field. What I love about Apple is philosophical. In practice, yeah, I may differ on things. They’re not perfect. Heck, you can be sure that within Apple there are people fighting over design decisions. Steve doesn’t decide them all. All I can say is that I am happy overall as a user and I really like coding for their products. It fits me. I have nothing against Windows, Linux, or anything else. I know great engineers working on those platforms. I’m just happy to do what I do.